Skip to content
Snippets Groups Projects
  1. Mar 07, 2025
  2. Oct 22, 2020
    • Zebediah Figura's avatar
      Avoid creating a Cairo buffer if all telemetry options are set to 0. · 5f38d062
      Zebediah Figura authored
      GStreamer's "theoradec" element always calls th_decode_ctl() for all telemetry
      options, passing 0 if they are not enabled. This results in our creating a
      Cairo buffer and performing YUV/RGB conversion, even if all telemetry is
      disabled, which is very slow and can cause noticeable lag during playback.
      5f38d062
  3. Feb 25, 2020
  4. Feb 14, 2020
  5. Oct 23, 2017
  6. Jul 20, 2017
  7. Sep 23, 2016
    • Timothy B. Terriberry's avatar
      Fix linking with musl libc with asm enabled. · 4bd78cd7
      Timothy B. Terriberry authored
      We made sure to emit emms before potentially calling/returning to
       applicate code, but not before calling libc code.
      It turns out musl libc's malloc/free implementation use floating
       point, so they don't work correctly unless we do.
      Add some extra calls to make sure the FPU is in the proper state
       any place we might potentially call malloc or free.
      
      Thanks to Rune (ztsdztsd on Trac) for the report.
      
      Fixes #2287
      4bd78cd7
    • Timothy B. Terriberry's avatar
      Fix some broken clamping in rate control. · eac29ae2
      Timothy B. Terriberry authored
      If we have some dupe frames right near the end of the buffer, our
       metric window can be slightly larger than the buffer.
      However, the clamping we use to determine how many frames' worth of
       metrics to add to the buffer had a mix of signed and unsigned
       types, so if that number when negative, instead of clamping
       against zero, it would ask for all remaining frames in the file.
      That would cause an infinite loop when we tried to find the last
       keyframe in the circular buffer in oc_enc_select_qi() (which was
       not big enough to actually hold that many frames).
      
      This patch changes the clamp to a form that works with all unsigned
       values.
      
      Thanks to Brion Vibber for the report.
      
      Fixes #2229
      
      Forward-port of r19507 from svn.
      eac29ae2
  8. Jul 27, 2016
    • Timothy B. Terriberry's avatar
      Sanity improvements to oc_dec_headerin() error returns. · 50fd339b
      Timothy B. Terriberry authored
      In the case where we got a data packet before receiving all three
       headers, the old code would check to see if the second through
       seventh bytes matched the magic string "theora" (extremely
       unlikely, but possible), and if so, return TH_EBADHEADER, otherwise
       return TH_ENOTFORMAT.
      That this was not consistent was a bit non-sensical.
      
      5a5f5bb2 changed to returning TH_EBADHEADER if we got a data
       packet after receiving the first header, but left the old behavior
       for the first packet.
      Change instead to explicitly return TH_ENOTFORMAT if the first
       header was missing (since we only check one bit of the packet to
       determine whether or not it's a data packet, odds are it's a packet
       for some other kind of data, like a Vorbis header).
      We continue to return TH_EBADHEADER if we see a data packet after
       encountering a valid header, but before reading all three.
      
      Also re-arrange the NULL checks to follow continue to allow the
       undocumented ability to pass in NULL for parameters which are not
       needed by the next header in the sequence.
      E.g., it's perfectly all right to pass NULL for _setup when
       expecting to read the comment header next.
      In this case we'll now return TH_EBADHEADER instead of TH_EFAULT if
       the packet was actually a data packet.
      50fd339b
    • Timothy B. Terriberry's avatar
      NULL check _tc and _setup even for data packets. · 5a5f5bb2
      Timothy B. Terriberry authored
      Our documentation says we will, so we should.
      
      Thanks to Chris Peterson for the report.
      
      Fixes #2279.
      5a5f5bb2
  9. Oct 31, 2014
    • Timothy B. Terriberry's avatar
      Fix mismatched oc_mb_fill_cmapping11 signature. · 12f20c7a
      Timothy B. Terriberry authored
      oc_mb_fill_cmapping11() was defined without the last two parameters
       of its fellow mapping functions, meaning it got called with extra
       undeclared parameters.
      
      This could confuse the emscripten JavaScript cross-compiler's asm.js
       optimizations, as it's very picky about function signatures.
      
      Fixes #2068.
      Patch by Brion Vibber <brion@pobox.com>.
      
      svn path=/trunk/theora/; revision=19261
      12f20c7a
  10. Jul 23, 2014
  11. Feb 11, 2014
  12. Nov 18, 2013
  13. Feb 23, 2013
  14. Jan 08, 2013
    • Timothy B. Terriberry's avatar
      Include zlib.h when necessary. · d0c140ab
      Timothy B. Terriberry authored
      Newer versions of png.h don't include it for us.
      This is only needed when compiling with OC_DUMP_IMAGES (i.e., for
       debugging).
      
      svn path=/trunk/theora/; revision=18760
      d0c140ab
  15. Jun 02, 2012
  16. May 08, 2012
    • Timothy B. Terriberry's avatar
      Fix pp_sharp_mod calculation. · 0ae66d56
      Timothy B. Terriberry authored
      This was broken when the dequant_tables indexing changed in commit
       r16102, but it only affected post-processing quality, so we never
       noticed.
      With gcc 4.8.0, this can now trigger a segfault during decoder
       initialization.
      
      svn path=/trunk/theora/; revision=18268
      0ae66d56
  17. Mar 31, 2012
  18. Mar 06, 2012
  19. Mar 02, 2012
    • Timothy B. Terriberry's avatar
      Remove some redundant NULL checks and fix a free on error return. · de386d3e
      Timothy B. Terriberry authored
      ref_frame_data was being allocated with the aligned allocator, but
       freed with the normal _ogg_free() function on failure, which
       doesn't work.
      This would only cause a problem if there was just enough memory to
       satisfy the reference frame allocation (just over 4.5 or 9 bytes
       per pixel) but not enough for the fragment buffer offets (1/16 or
       1/8th byte per pixel).
      
      svn path=/trunk/theora/; revision=18219
      de386d3e
    • Timothy B. Terriberry's avatar
      Make telemetry work with striped decoding. · 813791c8
      Timothy B. Terriberry authored
      This allows it to be used from dump_video without having to disable
       striped decoding there.
      
      svn path=/trunk/theora/; revision=18218
      813791c8
  20. Jul 13, 2011
    • Timothy B. Terriberry's avatar
      Clean up some ARM asm issues. · f6d84864
      Timothy B. Terriberry authored
      1) Allow specification of the section alignment and make the
          default alignment 4 bytes (like the RVCT manual says it should
          be).
         This ensures that linking our ARM asm into a Thumb executable
          won't get the section placed on a 2-byte boundary.
      2) Add a linker hint to indicate we don't need an executable stack.
         Otherwise it assumes we do.
      3) Stop building and linking to an (empty) armopts object file.
         This is needed to make 2) work, since we include this file, so
          we can't add the linker hint at the end of it, and linking in
          just one object without that hint makes the whole library ask
          for an executable stack.
      
      svn path=/trunk/theora/; revision=18031
      f6d84864
  21. May 20, 2011
  22. May 19, 2011
  23. May 04, 2011
    • Timothy B. Terriberry's avatar
      Another overflow fix. · b758596b
      Timothy B. Terriberry authored
      This extends the fix from r17276 dealing with the removal of the DC
       skip-prevention flag in r17174.
      If we allow SKIPing even when the cost is right near the maximum
       representable SSD, then the cost of other blocks can push it over
       the edge, causing us to randomly skip a block halfway through the
       macroblock.
      
      svn path=/trunk/theora/; revision=17959
      b758596b
  24. Feb 24, 2011
  25. Feb 10, 2011
  26. Feb 09, 2011
    • Ralph Giles's avatar
      Add a new speed level between the old levels 2 and 3. · 40d573e1
      Ralph Giles authored
      This change inserts a new speed level OC_SP_LEVEL_NOSATD (3)
      between OC_SP_LEVEL_FAST_ANALYSIS (still 2) and OC_SP_LEVEL_NOMC
      (now 4). The new speed level further accelerates analysis by
      using the cheaper SAD (sum of absolute differences) metric
      for measuring distortion instead of the more expensive SATD
      (sum of absolute transformed differences).
      
      The new level is intermediate in both quality and encoding
      speed between the adjacent speed levels, allowing smoother
      adaptation to realtime encoding contraints. In particular
      it's much closer to realtime 720p30 on current Core2 cpus.
      
      The cheaper SAD metric is now also used for the fastest NOMC
      speed level. This is a reduction in quality for this speed level
      as well, but it also about 10% faster. Since the NOMC mode is
      already very poor quality, used as a last resort when performance
      is critical, we deemed this a better option than adding a further
      NOMC_SATD mode or keeping the old NOMC behaviour.
      
      To support the new speed level, parallel copies of the OC_MODE_RD
      table are kept, one for each metric. The encoder context keeps
      track of which on to use based ont eh current speed level. Analysis
      code chooses which metric to calculate and use on the fly. The extra
      conditionals did not measurably affect encoding time in benchmarks.
      
      The metrics collection and fitting code used to generate modedec.h
      is also updated to track both SAD and SATD measurements.
      
      Thanks to Tim Terriberry and Greg Maxwell for their comments and
      and contributions in reviewing this patch. The implementation
      of oc_enc_frag_intra_sad is based on one from earlier development
      work by Greg Maxwell.
      
      svn path=/trunk/theora/; revision=17821
      40d573e1
  27. Jan 15, 2011
  28. Dec 16, 2010
    • Ralph Giles's avatar
      Reject th_info structs with a zero in the frame rate rational. · ef3c399f
      Ralph Giles authored
      The specification says that the frame rate numerator and
      denominator MUST both be greater than zero. This wasn't
      checked as part of the structure validation code, and in
      fact passing a zero value here caused a segfault.
      
      The code now checks for this in oc_state_init() and returns
      TH_EINVAL, which is causes th_encode_alloc() and oc_decode_alloc()
      to return NULL.
      
      A check for that NULL return is also added to encoder_example.c
      to show that it may fail when an invalid th_info parameter is
      passed.
      
      svn path=/trunk/theora/; revision=17760
      ef3c399f
  29. Dec 14, 2010
  30. Dec 13, 2010
    • Timothy B. Terriberry's avatar
      Make arm2gnu.pl emit only one line per input line, if possible. · e1fc857f
      Timothy B. Terriberry authored
      The changes in r17745 made PROC and ENDP directives emit multiple
       lines, leading to mis-matched line numbers between the original RVCT
       source and the GNU translation.
      gas allows multiple statements per line, so use them to keep the line
       numbers in sync.
      Also, contrary to the commit message in r17745, function names actually
       do show up correctly in valgrind; I was testing the wrong binary.
      
      svn path=/trunk/theora/; revision=17752
      e1fc857f
    • Timothy B. Terriberry's avatar
      Formatting clean-up for oc_enc_quantize_neon(). · 648e78bc
      Timothy B. Terriberry authored
      Also knock another instruction off the PMOVMSKB emulation.
      
      svn path=/trunk/theora/; revision=17751
      648e78bc
    • Timothy B. Terriberry's avatar
      Correct two small mistakes in r17749. · b5c02fef
      Timothy B. Terriberry authored
      The wrong offset was being used for the shift factor in
       oc_enc_enquant_table_fixup_neon(), and the wrong value was being returned from
       oc_enc_quantize_neon() when the entire block was quantized to zero.
      
      svn path=/trunk/theora/; revision=17750
      b5c02fef
Loading