@@ -297,20 +297,28 @@ StreamTranscoder::StreamTranscoder(const std::vector<InputStreamDesc>& inputStre
297
297
_filterGraph->addFilter (" amerge" , mergeOptions.str ());
298
298
}
299
299
300
- AudioCodecaudioCodec (_outputEncoder->getCodec ().getCodecType (), _outputEncoder->getCodec ().getCodecId ());
301
- AudioFrameDescaudioFrameDesc (48000 ,1 ," s32" );
302
- audioCodec.setAudioParameters (audioFrameDesc);
300
+ AudioFrameDescinputFrameDesc (inputStream.getAudioCodec ().getAudioFrameDesc ());
303
301
304
302
// output stream
305
- _outputStream = &outputFile.addAudioStream (audioCodec);
303
+ AudioCodecoutputAudioCodec (_outputEncoder->getCodec ().getCodecType (), _outputEncoder->getCodec ().getCodecId ());
304
+ AudioFrameDesc outputAudioFrameDesc = outputAudioCodec.getAudioFrameDesc ();
305
+ if (outputAudioFrameDesc._sampleRate ==0 ) {
306
+ outputAudioFrameDesc._sampleRate = inputFrameDesc._sampleRate ;
307
+ }
308
+ if (outputAudioFrameDesc._sampleFormat == AV_SAMPLE_FMT_NONE) {
309
+ outputAudioFrameDesc._sampleFormat = inputFrameDesc._sampleFormat ;
310
+ }
311
+ outputAudioFrameDesc._nbChannels = nbOutputChannels;
312
+ outputAudioCodec.setAudioParameters (outputAudioFrameDesc);
313
+
314
+ _outputStream = &outputFile.addAudioStream (outputAudioCodec);
306
315
307
316
// buffers to process
308
- AudioFrameDescinputFrameDesc (inputStream.getAudioCodec ().getAudioFrameDesc ());
309
317
if (inputStreamDesc.demultiplexing ())
310
318
inputFrameDesc._nbChannels = nbOutputChannels;
311
319
312
320
_filteredData =new AudioFrame (inputFrameDesc);
313
- _transformedData =new AudioFrame (audioFrameDesc );
321
+ _transformedData =new AudioFrame (outputAudioFrameDesc );
314
322
315
323
// transform
316
324
_transform =new AudioTransform ();