@@ -65,21 +65,18 @@ bool AudioDecoder::decodeNextFrame( Frame& frameBuffer )
65
65
AVCodecContext& avCodecContext = _inputStream->getAudioCodec ().getAVCodecContext ();
66
66
67
67
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 ;
70
70
71
+ AudioFrame& audioBuffer = static_cast <AudioFrame&>( frameBuffer );
71
72
audioBuffer.setNbSamples ( _frame->nb_samples );
72
-
73
- if ( decodedSize )
74
- {
75
- audioBuffer.resize ( decodedSize );
73
+ audioBuffer.resize ( decodedSize );
76
74
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 ();
80
78
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 );
83
80
84
81
return true ;
85
82
}
@@ -102,28 +99,28 @@ bool AudioDecoder::decodeNextFrame( Frame& frameBuffer, const size_t subStreamIn
102
99
{
103
100
throw std::runtime_error ( " The subStream doesn't exist" );
104
101
}
105
-
102
+
103
+ if ( decodedSize == 0 )
104
+ return false ;
105
+
106
106
AudioFrame& audioBuffer = static_cast <AudioFrame&>( frameBuffer );
107
107
audioBuffer.setNbSamples ( _frame->nb_samples );
108
-
109
- if ( decodedSize )
110
- {
111
- audioBuffer.resize ( decodedSize );
108
+ audioBuffer.resize ( decodedSize );
112
109
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 ();
116
113
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;
126
122
}
123
+
127
124
return true ;
128
125
}
129
126
0 commit comments