Takes into account a corner case with the multistream encoder
authorJean-Marc Valin <jmvalin@jmvalin.ca>
Thu, 4 Sep 2014 06:44:09 +0000 (02:44 -0400)
committerJean-Marc Valin <jmvalin@jmvalin.ca>
Thu, 4 Sep 2014 06:44:09 +0000 (02:44 -0400)
Considers the case where one stream would eat up all the remaining bytes,
including a 2-byte size that would then not leave enough for the even a PLC
packet in the next streams.

src/opus_multistream_encoder.c

index 854f85e..bdacff1 100644 (file)
@@ -864,7 +864,7 @@ static int opus_multistream_encode_native
       curr_max -= IMAX(0,2*(st->layout.nb_streams-s-1)-1);
       curr_max = IMIN(curr_max,MS_FRAME_TMP);
       /* Repacketizer will add one byte for self-delimited frames */
-      if (s != st->layout.nb_streams-1) curr_max--;
+      if (s != st->layout.nb_streams-1) curr_max -=  curr_max>253 ? 2 : 1;
       if (!vbr && s == st->layout.nb_streams-1)
          opus_encoder_ctl(enc, OPUS_SET_BITRATE(curr_max*(8*Fs/frame_size)));
       len = opus_encode_native(enc, buf, frame_size, tmp_data, curr_max, lsb_depth,