Skip to content
Snippets Groups Projects
  1. Feb 13, 2025
  2. Feb 12, 2025
  3. Feb 10, 2025
    • Timothy B. Terriberry's avatar
      Always use L=0 for last repeated long extension. · 60d6c560
      Timothy B. Terriberry authored
      
      Even if it is followed by repeated short extensions with payloads.
      We track the total size of the short extension payloads that need
       to be repeated, and remove that from the available space for the
       last long extension.
      This means we can no longer use L=0 on a repeat to skip coding a
       frame separator when the extensions to be repeated contain a long
       extension followed by one or more short extensions with payloads
       (and there are no more non-repeated extensions in the current
       frame, but there are extensions in the next frame), but this case
       seems uncommon, and hard to explain.
      The savings from always being able to skip coding a length when the
       final extensions are repeated extensions with at least one long
       extension is likely higher.
      We can still skip a frame separator if we repeat only short
       extensions.
      
      Also update existing tests and add a test for the case where we do
       not have enough space for the repeated short extensions after the
       last long extension.
      
      Signed-off-by: default avatarJean-Marc Valin <jeanmarcv@google.com>
      60d6c560
    • Timothy B. Terriberry's avatar
      Advance frame number after an L=0 RTE. · b49c07d1
      Timothy B. Terriberry authored
      
      This avoids the need to code a frame separator in the case that the
       last repeated extension is a short extension, and the next
       non-repeated extension is in the following frame instead of the
       current one (saving one additional byte).
      Also add tests for both encoding and decoding this.
      
      Signed-off-by: default avatarJean-Marc Valin <jeanmarcv@google.com>
      b49c07d1
    • Timothy B. Terriberry's avatar
      Check regenerating then parsing random extensions. · 60b527ae
      Timothy B. Terriberry authored
      
      This gives more confidence that the generation code always produces
       output that the parsing code can parse.
      
      Signed-off-by: default avatarJean-Marc Valin <jeanmarcv@google.com>
      60b527ae
    • Timothy B. Terriberry's avatar
      Encoder implementation of Repeat These Extensions. · 10ceaedb
      Timothy B. Terriberry authored
      
      Also adds tests which exercise generating repeated extensions as
       well as the count_ext() and parse_ext() API for parsing extensions
       in frame order.
      
      Signed-off-by: default avatarJean-Marc Valin <jeanmarcv@google.com>
      10ceaedb
    • Timothy B. Terriberry's avatar
      Decoder implementation of Repeat These Extensions. · 58bf8b41
      Timothy B. Terriberry authored
      
      Right now, opus_packet_extensions_parse() returns the extensions in
       the order they appear in the packet, which is no longer necessarily
       in frame order.
      This adds a new (still private) API that returns parsed extensions
       in frame order, even when repeated extensions are used.
      Nothing has been converted to use this new API yet.
      
      Signed-off-by: default avatarJean-Marc Valin <jeanmarcv@google.com>
      58bf8b41
  4. Jan 27, 2025
    • Jeff Peil's avatar
      Add OpusCustom Test Script · 1b208622
      Jeff Peil authored
      
      Created test_opus_custom script which does a more heavy evaluation of the various use cases of OpusCustom, testing:
      - Mixed float/fixed use cases
      - Mixed Opus/OpusCustom use cases
      - Wide mixture of run-time configurables
      - RMS difference (if RESYNTH) is defined
      
      Signed-off-by: default avatarJean-Marc Valin <jeanmarcv@google.com>
      1b208622
  5. Sep 11, 2024
    • Timothy B. Terriberry's avatar
      Add extension iterator. · 6dabc64a
      Timothy B. Terriberry authored
      Rather than repeating the code to iterate through extensions in
       three different places, each with slight differences, different
       edge cases, different error handling, etc., create an iterator
       that can be used everywhere.
      6dabc64a
  6. Jul 30, 2024
  7. Mar 14, 2024
  8. Mar 02, 2024
  9. Feb 25, 2024
  10. Feb 23, 2024
  11. Feb 16, 2024
  12. Feb 15, 2024
  13. Feb 07, 2024
  14. Jan 31, 2024
  15. Dec 20, 2023
  16. Dec 14, 2023
  17. Nov 29, 2023
  18. Jun 16, 2023
  19. Jul 22, 2022
  20. Jul 06, 2022
Loading