From e430f1eb00993a51101f02bdf93e16d1ed3f74ad Mon Sep 17 00:00:00 2001 From: Kostya Shishkov Date: Wed, 9 Apr 2025 18:30:49 +0200 Subject: [PATCH] set some default audio format for PCM encoder This is better than re-using input format and running into problems with e.g. ADPCM source resulting into 4-bit PCM that sound converter can't handle. --- src/transcoder.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/transcoder.rs b/src/transcoder.rs index 7c3dd08..10a2e73 100644 --- a/src/transcoder.rs +++ b/src/transcoder.rs @@ -803,8 +803,10 @@ impl Transcoder { let mut encoder = (enc_create.unwrap())(); let forced_out = oopts.enc_params.format != NACodecTypeInfo::None; let iformat = istr.get_info().get_properties(); + let mut default_afmt = false; if oopts.enc_params.format == NACodecTypeInfo::None { oopts.enc_params.format = istr.get_info().get_properties(); + default_afmt = true; } else { match (&iformat, &mut oopts.enc_params.format) { (NACodecTypeInfo::Video(svinfo), NACodecTypeInfo::Video(ref mut dvinfo)) => { @@ -821,6 +823,7 @@ impl Transcoder { } if dainfo.format == SND_NO_FORMAT { dainfo.format = sainfo.format; + default_afmt = true; } if dainfo.channels == 0 { dainfo.channels = sainfo.channels; @@ -840,6 +843,11 @@ impl Transcoder { oopts.enc_params.tb_num = istr.tb_num; oopts.enc_params.tb_den = istr.tb_den; } + if oopts.enc_name.as_str() == "pcm" && default_afmt { + if let NACodecTypeInfo::Audio(ref mut dainfo) = oopts.enc_params.format { + dainfo.format = SND_S16_FORMAT; + } + } let ret_eparams = encoder.negotiate_format(&oopts.enc_params); if ret_eparams.is_err() { println!("cannot negotiate encoding parameters"); -- 2.39.5