Skip to content

Commit 7f9422c

Browse files
author
Clement Champetier
committed
AudioDecoder: refactore decodeNextFrame
1 parent 9a6c425 commit 7f9422c

File tree

1 file changed

+25
-28
lines changed

1 file changed

+25
-28
lines changed

src/AvTranscoder/decoder/AudioDecoder.cpp

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -65,21 +65,18 @@ bool AudioDecoder::decodeNextFrame( Frame& frameBuffer )
6565
AVCodecContext& avCodecContext = _inputStream->getAudioCodec().getAVCodecContext();
6666

6767
size_t decodedSize = av_samples_get_buffer_size( NULL, avCodecContext.channels, _frame->nb_samples, avCodecContext.sample_fmt, 1 );
68-
69-
AudioFrame& audioBuffer = static_cast<AudioFrame&>( frameBuffer );
68+
if( decodedSize == 0 )
69+
return false;
7070

71+
AudioFrame& audioBuffer = static_cast<AudioFrame&>( frameBuffer );
7172
audioBuffer.setNbSamples( _frame->nb_samples );
72-
73-
if( decodedSize )
74-
{
75-
audioBuffer.resize( decodedSize );
73+
audioBuffer.resize( decodedSize );
7674

77-
// @todo manage cases with data of frame not only on data[0] (use _frame.linesize)
78-
unsigned char* const src = _frame->data[0];
79-
unsigned char* dst = audioBuffer.getData();
75+
// @todo manage cases with data of frame not only on data[0] (use _frame.linesize)
76+
unsigned char* const src = _frame->data[0];
77+
unsigned char* dst = audioBuffer.getData();
8078

81-
av_samples_copy( &dst, &src, 0, 0, _frame->nb_samples, avCodecContext.channels, avCodecContext.sample_fmt );
82-
}
79+
av_samples_copy( &dst, &src, 0, 0, _frame->nb_samples, avCodecContext.channels, avCodecContext.sample_fmt );
8380

8481
return true;
8582
}
@@ -102,28 +99,28 @@ bool AudioDecoder::decodeNextFrame( Frame& frameBuffer, const size_t subStreamIn
10299
{
103100
throw std::runtime_error( "The subStream doesn't exist");
104101
}
105-
102+
103+
if( decodedSize == 0 )
104+
return false;
105+
106106
AudioFrame& audioBuffer = static_cast<AudioFrame&>( frameBuffer );
107107
audioBuffer.setNbSamples( _frame->nb_samples );
108-
109-
if( decodedSize )
110-
{
111-
audioBuffer.resize( decodedSize );
108+
audioBuffer.resize( decodedSize );
112109

113-
// @todo manage cases with data of frame not only on data[0] (use _frame.linesize)
114-
unsigned char* src = _frame->data[0];
115-
unsigned char* dst = audioBuffer.getData();
110+
// @todo manage cases with data of frame not only on data[0] (use _frame.linesize)
111+
unsigned char* src = _frame->data[0];
112+
unsigned char* dst = audioBuffer.getData();
116113

117-
// offset
118-
src += subStreamIndex * bytePerSample;
119-
120-
for( int sample = 0; sample < _frame->nb_samples; ++sample )
121-
{
122-
memcpy( dst, src, bytePerSample );
123-
dst += bytePerSample;
124-
src += bytePerSample * nbSubStreams;
125-
}
114+
// offset
115+
src += subStreamIndex * bytePerSample;
116+
117+
for( int sample = 0; sample < _frame->nb_samples; ++sample )
118+
{
119+
memcpy( dst, src, bytePerSample );
120+
dst += bytePerSample;
121+
src += bytePerSample * nbSubStreams;
126122
}
123+
127124
return true;
128125
}
129126

0 commit comments

Comments
 (0)