@@ -32,6 +32,7 @@ namespace avtranscoder
32
32
33
33
AudioTransform::AudioTransform ()
34
34
: _audioConvertContext( NULL )
35
+ , _previousProcessedAudioFrameSize( 0 )
35
36
, _isInit ( false )
36
37
{
37
38
}
@@ -64,11 +65,24 @@ bool AudioTransform::init( const Frame& srcFrame, const Frame& dstFrame )
64
65
return true ;
65
66
}
66
67
68
+ bool AudioTransform::initFrames ( const Frame& srcFrame, Frame& dstFrame )
69
+ {
70
+ const AudioFrame& src = static_cast <const AudioFrame&>( srcFrame );
71
+ const AudioFrame& dst = static_cast <const AudioFrame&>( dstFrame );
72
+
73
+ int dstSampleSize = av_get_bytes_per_sample ( dst.desc ().getAVSampleFormat () );
74
+ dstFrame.getBuffer ().resize ( src.getNbSamples () * dstSampleSize );
75
+ return true ;
76
+ }
77
+
67
78
void AudioTransform::convert ( const Frame& srcFrame, Frame& dstFrame )
68
79
{
69
80
if ( ! _isInit )
70
81
_isInit = init ( srcFrame, dstFrame );
71
82
83
+ if ( srcFrame.getSize () != _previousProcessedAudioFrameSize )
84
+ initFrames ( srcFrame, dstFrame );
85
+
72
86
const unsigned char * srcData = srcFrame.getPtr ();
73
87
unsigned char * dstData = dstFrame.getPtr ();
74
88
@@ -89,6 +103,7 @@ void AudioTransform::convert( const Frame& srcFrame, Frame& dstFrame )
89
103
if ( dstFrame.getSize () != nbOutputSamples )
90
104
dstFrame.getBuffer ().resize ( nbOutputSamples, 0 );
91
105
static_cast <AudioFrame&>( dstFrame ).setNbSamples ( static_cast <const AudioFrame&>( srcFrame ).getNbSamples () );
106
+ _previousProcessedAudioFrameSize = srcFrame.getSize ();
92
107
}
93
108
94
109
}
0 commit comments