ref: b446e96ad1ff1aad301940cb6cdb7455c83e6cfb
parent: 41bf2a0ac60eb03d8d762f33da1b94339fa4ba39
author: Jean-Marc Valin <jmvalin@amazon.com>
date: Mon May 8 13:59:40 EDT 2023
Fix extensions padding for CBR
--- a/src/opus_demo.c
+++ b/src/opus_demo.c
@@ -712,6 +712,11 @@
stop = 1;
}
len = opus_encode(enc, in, frame_size, data, max_payload_bytes);
+ if (len < 0)
+ {
+ fprintf (stderr, "opus_encode() returned %d\n", len);
+ goto failure;
+ }
nb_encoded = opus_packet_get_samples_per_frame(data, sampling_rate)*opus_packet_get_nb_frames(data, len);
remaining = frame_size-nb_encoded;
for(i=0;i<remaining*channels;i++)
@@ -732,11 +737,6 @@
opus_encoder_ctl(enc, OPUS_SET_BITRATE(bitrate_bps));
}
opus_encoder_ctl(enc, OPUS_GET_FINAL_RANGE(&enc_final_range));
- if (len < 0)
- {
- fprintf (stderr, "opus_encode() returned %d\n", len);
- goto failure;
- }
curr_mode_count += frame_size;
if (curr_mode_count > mode_switch_time && curr_mode < nb_modes_in_list-1)
{
--- a/src/opus_encoder.c
+++ b/src/opus_encoder.c
@@ -2213,6 +2213,8 @@
ret = opus_packet_pad_impl(data, ret, max_data_bytes, !st->use_vbr, &extension, 1);
} else if (!st->use_vbr) {
ret = opus_packet_pad(data, ret, max_data_bytes);
+ if (ret == OPUS_OK)
+ ret = max_data_bytes;
}
if (ret < 0)
{
--
⑨