Multistream encoder: allocate an extra byte per stream for 100 ms
authorFelicia Lim <flim@google.com>
Fri, 28 Oct 2016 18:11:18 +0000 (11:11 -0700)
committerJean-Marc Valin <jmvalin@jmvalin.ca>
Fri, 28 Oct 2016 19:54:05 +0000 (15:54 -0400)
Signed-off-by: Jean-Marc Valin <jmvalin@jmvalin.ca>
src/opus_multistream_encoder.c

index 6ec0fc5..83e1758 100644 (file)
@@ -915,6 +915,9 @@ static int opus_multistream_encode_native
 
    /* Smallest packet the encoder can produce. */
    smallest_packet = st->layout.nb_streams*2-1;
+   /* 100 ms needs an extra byte per stream for the ToC. */
+   if (Fs/frame_size == 10)
+     smallest_packet += st->layout.nb_streams;
    if (max_data_bytes < smallest_packet)
    {
       RESTORE_STACK;
@@ -1036,6 +1039,9 @@ static int opus_multistream_encode_native
       curr_max = max_data_bytes - tot_size;
       /* Reserve one byte for the last stream and two for the others */
       curr_max -= IMAX(0,2*(st->layout.nb_streams-s-1)-1);
+      /* For 100 ms, reserve an extra byte per stream for the Toc */
+      if (Fs/frame_size == 10)
+        curr_max -= st->layout.nb_streams-s;
       curr_max = IMIN(curr_max,MS_FRAME_TMP);
       /* Repacketizer will add one or two bytes for self-delimited frames */
       if (s != st->layout.nb_streams-1) curr_max -=  curr_max>253 ? 2 : 1;