SpaceManiac / opus-rs

Safe Rust bindings for libopus
Apache License 2.0
68 stars 63 forks source link

About the opus encoder and decoder usage. #25

Closed harlanc closed 8 months ago

harlanc commented 8 months ago
 let mut opus_encoder = opus::Encoder::new(48000, opus::Channels::Stereo, opus::Application::Voip).unwrap();
 let mut opus_decoder = opus::Decoder::new(48000, opus::Channels::Stereo).unwrap();
 let pcm_raw_data = vec![0_i16; 960 * 2]; 
  ....//read pcm raw data
 let mut encoded_opus = vec![0; 1500]; 
  match opus_encoder.encode( &pcm_raw_data, &mut encoded_opus, ) {
      Ok(size) =>{
         let samples = opus_decoder.get_nb_samples(&encoded_opus).unwrap(); // why here got 960 samples, half of the primary raw PCM data.
         let mut output = vec![0; 960 * 2];
         if let Ok(size2) = opus_decoder.decode(&encoded_opus[..size],
                                                            &mut output,
                                                            false,
                                                        ) {
                     // size2 is 960 but not 960*2 
             }
       }
      Err(err) =>{
      }
  }

Please look at the code above, why does the number of samples decrease by half after encoding?