1. 19 Oct, 2009 1 commit
    • Lamont Alston's avatar
      Make B-pyramid spec-compliant · cf5ba813
      Lamont Alston authored
      The rules of the specification with regard to picture buffering for pyramid coding are widely ignored.
      x264's b-pyramid implementation, despite being practically identical to that proposed by the original paper, was technically not compliant.
      Now it is.
      Two modes are now available:
      1) strict b-pyramid, while worse for compression, follows the rule mandated by Blu-ray (no P-frames can reference B-frames)
      2) normal b-pyramid, which is like the old mode except fully compliant.
      This patch also adds MMCO support (necessary for compliant pyramid in some cases).
      MB-tree still doesn't support b-pyramid (but will soon).
      cf5ba813
  2. 18 Oct, 2009 1 commit
  3. 12 Oct, 2009 3 commits
    • Loren Merritt's avatar
      change all dct arrays to 1d. · 1fbba0ca
      Loren Merritt authored
      the C standard doesn't allow you to iterate 1-dimensionally over 2d arrays, and nothing other than the dsp functions themselves cares about the 2dness of dct.
      this fixes a miscompilation in x264_mb_optimize_chroma_dc.
      1fbba0ca
    • Anton Mitrofanov's avatar
      Optimize exp2fix8 · 1a1b9c6f
      Anton Mitrofanov authored
      Slightly faster and more accurate rounding.
      1a1b9c6f
    • Fiona Glaser's avatar
      Avoid scenecuts in flashes and similar situations · c695f524
      Fiona Glaser authored
      "Flashes" are defined as any scene which lasts a very short period before a previous scene returns.
      A common example of this is of course a camera flash.
      Accordingly, look ahead during scenecut analysis and rule out the possibility of certain frames being scenecuts.
      Also handles cases of tons of short scenes in sequence and avoids making those scenecuts as well.
      Can only catch flashes of 1 frame in length with b-adapt 1.
      With b-adapt 2, can catch flashes of length --bframes.
      Speed cost should be negligible.
      c695f524
  4. 07 Oct, 2009 3 commits
  5. 23 Sep, 2009 1 commit
  6. 21 Sep, 2009 2 commits
    • Fiona Glaser's avatar
      Add intra prediction modes to output stats · bbf573c7
      Fiona Glaser authored
      Also eliminate some NANs in stat output with intra-only encoding.
      Marginal speedup: disable stat calculation if log level is below X264_LOG_INFO.
      Various minor cosmetics.
      bbf573c7
    • Fiona Glaser's avatar
      Major API change: encapsulate NALs within libx264 · 7a0fbed7
      Fiona Glaser authored
      libx264 now returns NAL units instead of raw data.  x264_nal_encode is no longer a public function.
      See x264.h for full documentation of changes.
      New parameter: b_annexb, on by default.  If disabled, startcodes are replaced by sizes as in mp4.
      x264's VBV now works on a NAL level, taking into account escape codes.
      VBV will also take into account the bit cost of SPS/PPS, but only if b_repeat_headers is set.
      Add an overhead tracking system to VBV to better predict the constant overhead of frames (headers, NALU overhead, etc).
      7a0fbed7
  7. 14 Sep, 2009 1 commit
    • Fiona Glaser's avatar
      Make MV costs global instead of static · b1eac265
      Fiona Glaser authored
      Fixes some extremely rare threading race conditions and makes the code cleaner.
      Downside: slightly higher memory usage when calling multiple encoders from the same application.
      b1eac265
  8. 02 Sep, 2009 3 commits
    • David Conrad's avatar
      Compile fixes for pre-ARMv6T2 and/or PIC · de4c39b7
      David Conrad authored
      de4c39b7
    • Steven Walters's avatar
      Change priority handling on some OSs · bc120190
      Steven Walters authored
      Instead of setting the lookahead thread to max priority, lower all the other threads' priorities instead.
      This is particularly useful when the "max priority" is "realtime", as in Windows, which can cause some problems.
      bc120190
    • Steven Walters's avatar
      Threaded lookahead · 6940dcae
      Steven Walters authored
      Move lookahead into a separate thread, set to higher priority than the other threads, for optimal performance.
      Reduces the amount that lookahead bottlenecks encoding, greatly increasing performance with lookahead-intensive settings (e.g. b-adapt 2) on many-core CPUs.
      Buffer size can be controlled with --sync-lookahead, which defaults to auto (threads+bframes buffer size).
      Note that this buffer is separate from the rc-lookahead value.
      Note also that this does not split lookahead itself into multiple threads yet; this may be added in the future.
      Additionally, split frames into "fdec" and "fenc" frame types and keep the two separate.
      This split greatly reduces memory usage, which helps compensate for the larger lookahead size.
      Extremely special thanks to Michael Kazmier and Alex Giladi of Avail Media, the original authors of this patch.
      6940dcae
  9. 31 Aug, 2009 1 commit
    • Fiona Glaser's avatar
      Multi-slice encoding support · 4ccbb199
      Fiona Glaser authored
      Slicing support is available through three methods (which can be mixed):
      --slices sets a number of slices per frame and ensures rectangular slices (required for Blu-ray).  Overridden by either of the following options:
      --slice-max-mbs sets a maximum number of macroblocks per slice.
      --slice-max-size sets a maximum slice size, in bytes (includes NAL overhead).
      Implement macroblock re-encoding support to allow highly accurate slice size limitation.  Might be useful for other things in the future, too.
      4ccbb199
  10. 28 Aug, 2009 1 commit
  11. 27 Aug, 2009 2 commits
  12. 24 Aug, 2009 6 commits
  13. 23 Aug, 2009 1 commit
    • David Conrad's avatar
      GSOC merge part 2: ARM stack alignment · ca7da1ae
      David Conrad authored
      Neither GCC nor ARMCC support 16 byte stack alignment despite the fact that NEON loads require it.
      These macros only work for arrays, but fortunately that covers almost all instances of stack alignment in x264.
      ca7da1ae
  14. 21 Aug, 2009 1 commit
  15. 20 Aug, 2009 2 commits
  16. 19 Aug, 2009 1 commit
    • Fiona Glaser's avatar
      Add support for frame-accurate parameter changes · c83699f1
      Fiona Glaser authored
      Parameter structs can now be passed with individual frames.
      The previous method would only change the parameter of what was currently being encoded, which due to delay might be very far from an intended exact frame.
      Also add support for changing aspect ratio.  Only works in a stream with repeating headers and requires the caller to force an IDR to ensure instant effect.
      c83699f1
  17. 17 Aug, 2009 1 commit
    • Fiona Glaser's avatar
      Lookahead VBV · 30a82c75
      Fiona Glaser authored
      Use the large-scale lookahead capability introduced in MB-tree for ratecontrol purposes.
      (Does not require MB-tree, however.)
      Greatly improved quality and compliance in 1-pass VBV mode, especially in CBR; +2db OPSNR or more in some cases.
      Fix some other bugs in VBV, which should improve non-lookahead mode as well.
      Change the tolerance algorithm in row VBV to allow for more significant mispredictions when buffer is nearly full.
      Note that due to the fixing of an extremely long-standing bug (>1 year), bitrates may change by nontrivial amounts in CRF without MB-tree.
      30a82c75
  18. 13 Aug, 2009 1 commit
  19. 09 Aug, 2009 3 commits
  20. 08 Aug, 2009 1 commit
  21. 07 Aug, 2009 1 commit
    • Fiona Glaser's avatar
      Macroblock-tree ratecontrol · 835ccc3c
      Fiona Glaser authored
      On by default; can be turned off with --no-mbtree.
      Uses a large lookahead to track temporal propagation of data and weight quality accordingly.
      Requires a very large separate statsfile (2 bytes per macroblock) in multi-pass mode.
      Doesn't work with b-pyramid yet.
      Note that MB-tree inherently measures quality different from the standard qcomp method, so bitrates produced by CRF may change somewhat.
      This makes the "medium" preset a bit slower.  Accordingly, make "fast" slower as well, and introduce a new preset "faster" between "fast" and "veryfast".
      All presets "fast" and above will have MB-tree on.
      Add a new option, --rc-lookahead, to control the distance MB tree looks ahead to perform propagation analysis.
      Default is 40; larger values will be slower and require more memory but give more accurate results.
      This value will be used in the future to control ratecontrol lookahead (VBV).
      Add a new option, --no-psy, to disable all psy optimizations that don't improve PSNR or SSIM.
      This disables psy-RD/trellis, but also other more subtle internal psy optimizations that can't be controlled directly via external parameters.
      Quality improvement from MB-tree is about 2-70% depending on content.
      Strength of MB-tree adjustments can be tweaked using qcompress; higher values mean lower MB-tree strength.
      Note that MB-tree may perform slightly suboptimally on fades; this will be fixed by weighted prediction, which is coming soon.
      835ccc3c
  22. 26 Jul, 2009 2 commits
    • Fiona Glaser's avatar
      Add QPRD support as subme=10 · 4304c427
      Fiona Glaser authored
      Refactor trellis lambda selection to be done in analyse_init instead of in trellis.
      This will allow for more easy adaption of lambda later on; for now it allows constant lambda across variable QPs.
      QPRD is only available with adaptive quantization enabled and generally improves SSIM and visual quality.
      Additionally, weight the SSD values from RD based on the relative QP offset for chroma; helps visually at high QPs where chroma has a lower QP than luma.
      This fixes some visual artifacts created by QPRD at high QPs.
      Note that this generally hurts PSNR and SSIM, and so is only on when psy-RD is on.
      4304c427
    • Fiona Glaser's avatar
      SSSE3 cachesplit workaround for avg2_w16 · d68f3b07
      Fiona Glaser authored
      Palignr-based solution for the most commonly used qpel function.
      1-1.5% faster overall on Core 2 chips.
      d68f3b07
  23. 17 Jul, 2009 1 commit