1. 24 Aug, 2011 1 commit
  2. 09 Aug, 2011 1 commit
    • Loren Merritt's avatar
      Remove some unused, broken, and/or useless functions · 52f287e8
      Loren Merritt authored
      Unused frame_sort.
      Unused x86_64 dequant_4x4dc_mmx2, predict_8x8_vr_mmx2.
      Unused and broken high_depth integral_init*h_sse4, optimize_chroma_*, dequant_flat_*, sub8x8_dct_dc_*, zigzag_sub_*.
      Useless high_depth dequant_sse4, dequant_dc_sse4.
      52f287e8
  3. 22 Jul, 2011 2 commits
  4. 10 Jul, 2011 1 commit
  5. 15 Jun, 2011 1 commit
  6. 12 May, 2011 5 commits
  7. 25 Jan, 2011 2 commits
  8. 10 Jan, 2011 1 commit
  9. 10 Nov, 2010 1 commit
  10. 19 Sep, 2010 1 commit
  11. 18 Sep, 2010 1 commit
    • Fiona Glaser's avatar
      Update source file headers · 213a99d0
      Fiona Glaser authored
      Update dates, improve file descriptions, make things more consistent.
      Also add information about commercial licensing.
      213a99d0
  12. 24 Aug, 2010 1 commit
  13. 16 Aug, 2010 1 commit
    • Fiona Glaser's avatar
      Deblock-aware RD · c9f17d93
      Fiona Glaser authored
      Small quality gain (~0.5%) at lower bitrates, potentially larger with QPRD.
      May help more with psy, maybe not.
      Enabled at subme >= 9.  Small speed cost (a few %).
      c9f17d93
  14. 15 Jul, 2010 1 commit
    • Loren Merritt's avatar
      Convert x264 to use NV12 pixel format internally · 387828ed
      Loren Merritt authored
      ~1% faster overall on Conroe, mostly due to improved cache locality.
      Also allows improved SIMD on some chroma functions (e.g. deblock).
      This change also extends the API to allow direct NV12 input, which should be a bit faster than YV12.
      This isn't currently used in the x264cli, as swscale does not have fast NV12 conversion routines, but it might be useful for other applications.
      
      Note this patch disables the chroma SIMD code for PPC and ARM until new versions are written.
      387828ed
  15. 25 Jun, 2010 2 commits
    • Fiona Glaser's avatar
      Interactive encoder control: error resilience · edc1135e
      Fiona Glaser authored
      In low-latency streaming with few clients, it is often feasible to modify encoder behavior in some fashion based on feedback from clients.
      One possible application of this is error resilience: if a packet is lost, mark the associated frame (and any referenced from it) as lost.
      This allows quick recovery from errors with minimal expense bit-wise.
      
      The new i_dpb_size parameter allows a calling application to tell x264 to use a larger DPB size than required by the number of reference frames.
      This lets x264 and the client keep a large buffer of old references to fall back to in case of lost frames.
      If no recovery is possible even with the available buffer, x264 will force a keyframe.
      
      This initial version does not support B-frames or intra refresh.
      Recommended usage is to set keyint to a very large value, so that keyframes do not occur except as necessary for extreme error recovery.
      
      Full documentation is in x264.h.
      
      Move DTS/PTS calculation to before encoding each frame instead of after.
      Improve documentation of x264_encoder_intra_refresh.
      edc1135e
    • Steven Walters's avatar
      Use threadpools to avoid unnecessary thread creation · 81cada8e
      Steven Walters authored
      Tiny performance improvement with fast settings and lots of threads.
      May help more on some OSs with slow thread creation, like OS X.
      Unify inconsistent synchronized abbreviations to sync.
      81cada8e
  16. 02 Jun, 2010 1 commit
  17. 31 May, 2010 1 commit
  18. 26 May, 2010 1 commit
    • Fiona Glaser's avatar
      Overhaul deblocking again · 4947b0fb
      Fiona Glaser authored
      Move deblock strength calculation to immediately after encoding to take advantage of the data that's already in cache.
      Keep the deblocking itself as per-row.
      4947b0fb
  19. 21 May, 2010 1 commit
    • Fiona Glaser's avatar
      Rewrite deblock strength calculation, add asm · 2ea35adf
      Fiona Glaser authored
      Rewrite is significantly slower, but is necessary to make asm possible.
      Similar concept to ffmpeg's deblock strength asm.
      Roughly one order of magnitude faster than C.
      Overall, with the asm, saves ~100-300 clocks in deblocking per MB.
      2ea35adf
  20. 08 May, 2010 1 commit
  21. 06 May, 2010 2 commits
    • Fiona Glaser's avatar
      Don't force row QPs to integer values with VBV · 9ce27834
      Fiona Glaser authored
      VBV should no longer raise the bitrate of the video.  That is, at a given quality level or average bitrate, turning on VBV should only lower the bitrate.
      This isn't quite true if adaptive quant is off, but nobody should be doing that anyways.
      Also may result in slightly more accurate per-row VBV ratecontrol.
      9ce27834
    • Fiona Glaser's avatar
      Improve temporal MV prediction · 94123d65
      Fiona Glaser authored
      Predict based on the results of p16x16 search, not final MVs.
      This lets us get predictions even if mode decision chose intra.
      Also improves cache coherency.
      94123d65
  22. 29 Apr, 2010 1 commit
  23. 27 Mar, 2010 1 commit
    • Kieran Kunhya's avatar
      Blu-ray support: NAL-HRD, VFR ratecontrol, filler, pulldown · bb9b16b4
      Kieran Kunhya authored
      x264 can now generate Blu-ray-compliant streams for authoring Blu-ray Discs!
      Compliance tested using Sony BD-ROM Verifier 1.21.
      Thanks to The Criterion Collection for sponsoring compliance testing!
      
      An example command, using constant quality mode, for 1080p24 content:
      x264 --crf 16 --preset veryslow --tune film --weightp 0 --bframes 3 --nal-hrd vbr --vbv-maxrate 40000 --vbv-bufsize 30000 --level 4.1 --keyint 24 --b-pyramid strict --slices 4 --aud --colorprim "bt709" --transfer "bt709" --colormatrix "bt709" --sar 1:1 <input> -o <output>
      
      This command is much more complicated than usual due to the very complicated restrictions the Blu-ray spec has.
      Most options after "tune" are required by the spec.
      --weightp 0 is not, but there are known bugged Blu-ray player chipsets (Mediatek, notably) that will decode video with --weightp 1 or 2 incorrectly.
      Furthermore, note the Blu-ray spec has very strict limitations on allowed resolution/fps combinations.
      Examples include 1080p @ 24000/1001fps (NTSC FILM) and 720p @ 60000/1001fps.
      
      Detailed features introduced in this patch:
      
      Full NAL-HRD compliance, with both VBR (no filler) and CBR (filler) modes.
      Can be enabled with --nal-hrd vbr/cbr.
      libx264 now returns HRD timing information to the caller in the form of an x264_hrd_t.
      x264cli doesn't currently use it, but this information is critical for compliant TS muxing.
      
      Full VFR ratecontrol support: VBV, 1-pass ABR, and 2-pass modes.
      This means that, even without knowing the average framerate, x264 can achieve a correct bitrate in target bitrate modes.
      Note that this changes the statsfile format; first pass encodes make before this patch will have to be re-run.
      
      Pulldown support: libx264 allows the calling application to specify a pulldown mode for each frame.
      This is similar to the way that RFFs (Repeat Field Flags) work in MPEG-2.
      Note that libx264 does not modify timestamps: it assumes the calling application has set timestamps correctly for pulldown!
      x264cli contains an example implementation of caller-side pulldown code.
      
      Pic_struct support: necessary for pulldown and allows interlaced signalling.
      Also signal TFF vs BFF with delta_poc_bottom: should significantly improve interlaced compression.
      --tff and --bff should be preferred to the old --interlaced in order to tell x264 what field order to use.
      
      Huge thanks to Alex Giladi and Lamont Alston for their work on code that eventually became part of this patch.
      bb9b16b4
  24. 23 Feb, 2010 2 commits
  25. 15 Feb, 2010 1 commit
    • Fiona Glaser's avatar
      Don't even try direct temporal when it would give junk MVs · 6953f9ee
      Fiona Glaser authored
      In PbBbP pyramid structure, the last "b" cannot use temporal because L0Ref0(L1Ref0) != L0Ref0.
      Don't even bother analyzing it, just use spatial.
      Should improve speed and direct auto effectiveness in CRF and 1-pass modes when b-pyramid is used.
      Also makes --direct temporal useful with --b-pyramid, since it will fall back to spatial for frames where temporal is broken.
      6953f9ee
  26. 30 Jan, 2010 1 commit
    • Yusuke Nakamura's avatar
      Improve DTS generation, move DTS compression into libx264 · afc36d0b
      Yusuke Nakamura authored
      This change fixes some cases in which PTS could be less than DTS.
      
      Additionally, a new parameter, b_dts_compress, enables DTS compression.
      DTS compression eliminates negative DTS (i.e. initial delay) due to B-frames.
      The algorithm changes timebase in order to avoid duplicating DTS.
      Currently, in x264cli, only the FLV muxer uses it.  The MP4 muxer doesn't need it, as it uses an EditBox instead.
      afc36d0b
  27. 14 Jan, 2010 2 commits
    • Fiona Glaser's avatar
      Periodic intra refresh · cde39046
      Fiona Glaser authored
      Uses SEI recovery points, a moving vertical "bar" of intra blocks, and motion vector restrictions to eliminate keyframes.
      Attempt to hide the visual appearance of the intra bar when --no-psy isn't set.
      Enabled with --intra-refresh.
      The refresh interval is controlled using keyint, but won't exceed the number of macroblock columns in the frame.
      Greatly benefits low-latency streaming by making it possible to achieve constant framesize without intra-only encoding.
      Combined with slice-max size for one slice per packet, tests suggest effective resiliance against packet loss as high as 25%.
      x264 is now the best free software low-latency video encoder in the world.
      
      Accordingly, change the API to add b_keyframe to the parameters present in output pictures.
      Calling applications should check this to see if a frame is seekable, not the frame type.
      
      Also make x264's motion estimation strictly abide by horizontal MV range limits in order for PIR to work.
      Also fix a major bug in sliced-threads VBV handling.
      Also change "auto" threads for sliced threads to "cores" instead of "1.5*cores" after performance testing.
      Also simplify ratecontrol's checking of first pass options.
      Also some minor tweaks to row-based VBV that should improve VBV accuracy on small frames.
      cde39046
    • Kieran Kunhya's avatar
      LAVF/FFMS input support, native VFR timestamp handling · 30d76a5e
      Kieran Kunhya authored
      libx264 now takes three new API parameters.
      b_vfr_input tells x264 whether or not the input is VFR, and is 1 by default.
      i_timebase_num and i_timebase_den pass the timebase to x264.
      
      x264_picture_t now returns the DTS of each frame: the calling app need not calculate it anymore.
      
      Add libavformat and FFMS2 input support: requires libav* and ffms2 libraries respectively.
      FFMS2 is _STRONGLY_ preferred over libavformat: we encourage all distributions to compile with FFMS2 support if at all possible.
      FFMS2 can be found at http://code.google.com/p/ffmpegsource/.
      --index, a new x264cli option, allows the user to store (or load) an FFMS2 index file for future use, to avoid re-indexing in the future.
      
      Overhaul the muxers to pass through timestamps instead of assuming CFR.
      Also overhaul muxers to correctly use b_annexb and b_repeat_headers to simplify the code.
      Remove VFW input support, since it's now pretty much redundant with native AVS support and LAVF support.
      Finally, overhaul a large part of the x264cli internals.
      
      --force-cfr, a new x264cli option, allows the user to force the old method of timestamp handling.  May be useful in case of a source with broken timestamps.
      Avisynth, YUV, and Y4M input are all still CFR.  LAVF or FFMS2 must be used for VFR support.
      
      Do note that this patch does *not* add VFR ratecontrol yet.
      Support for telecined input is also somewhat dubious at the moment.
      
      Large parts of this patch by Mike Gurlitz <mike.gurlitz@gmail.com>, Steven Walters <kemuri9@gmail.com>, and Yusuke Nakamura <muken.the.vfrmaniac@gmail.com>.
      30d76a5e
  28. 27 Nov, 2009 1 commit
    • Fiona Glaser's avatar
      Much faster weightp · 979c14da
      Fiona Glaser authored
      Move sum/ssd calculation out of lookahead and do it only once per frame.
      Also various minor optimizations, cosmetics, and cleanups.
      979c14da
  29. 09 Nov, 2009 2 commits
    • Loren Merritt's avatar
      cosmetics · df732ec7
      Loren Merritt authored
      df732ec7
    • Dylan Yudaken's avatar
      Weighted P-frame prediction · ccac8546
      Dylan Yudaken authored
      Merge Dylan's Google Summer of Code 2009 tree.
      Detect fades and use weighted prediction to improve compression and quality.
      "Blind" mode provides a small overall quality increase by using a -1 offset without doing any analysis, as described in JVT-AB033.
      "Smart", the default mode, also performs fade detection and decides weights accordingly.
      MB-tree takes into account the effects of "smart" analysis in lookahead, even further improving quality in fades.
      If psy is on, mbtree is on, interlaced is off, and weightp is off, fade detection will still be performed.
      However, it will be used to adjust quality instead of create actual weights.
      This will improve quality in fades when encoding in Baseline profile.
      
      Doesn't add support for interlaced encoding with weightp yet.
      Only adds support for luma weights, not chroma weights.
      Internal code for chroma weights is in, but there's no analysis yet.
      Baseline profile requires that weightp be off.
      All weightp modes may cause minor breakage in non-compliant decoders that take shortcuts in deblocking reference frame checks.
      "Smart" may cause serious breakage in non-compliant decoders that take shortcuts in handling of duplicate reference frames.
      
      Thanks to Google for sponsoring our most successful Summer of Code yet!
      ccac8546