]> git.nihav.org Git - nihav-encoder.git/commitdiff
set some default audio format for PCM encoder
authorKostya Shishkov <kostya.shishkov@gmail.com>
Wed, 9 Apr 2025 16:30:49 +0000 (18:30 +0200)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Wed, 9 Apr 2025 16:30:49 +0000 (18:30 +0200)
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

index 7c3dd082c81c26d4839351c66147f289d6356c90..10a2e733042eef33456f3ac132fb539e13b978dc 100644 (file)
@@ -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");