1. 02 Mar, 2013 1 commit
  2. 30 Jan, 2013 1 commit
    • Scott LaVarnway's avatar
      WIP: Multiple decoder instances support · 75f647fe
      Scott LaVarnway authored
      Started adding support for multiple internal decoder instances.  Also added
      code to limit the vp8 config options available when using frame-based
      multithreading.
      
      Change-Id: I0f1ee7abcfcff59204f50162e28254b8dd6972eb
      75f647fe
  3. 29 Jan, 2013 1 commit
  4. 22 Jan, 2013 1 commit
  5. 15 Nov, 2012 1 commit
  6. 01 Nov, 2012 2 commits
  7. 31 Oct, 2012 5 commits
  8. 24 Sep, 2012 1 commit
  9. 19 Sep, 2012 1 commit
    • Scott LaVarnway's avatar
      Moved vp8dx_get_raw_frame() call to vp8_get_frame() · e278673c
      Scott LaVarnway authored
      This change is necessary for the frame-based multithreading
      implementation.
      Since the postproc occurs in this call, vpxdec was modified to time around
      vpx_codec_get_frame()
      
      Change-Id: I389acf78b6003cd35e41becc16c893f7d3028523
      e278673c
  10. 17 Jul, 2012 1 commit
  11. 15 Jun, 2012 1 commit
    • John Koleszar's avatar
      Remove threading dependencies with --disable-multithread · 8df79e9d
      John Koleszar authored
      Avoid a pthreads dependency via pthread_once() when compiled with
      --disable-multithread.
      
      In addition, this synchronization is disabled for Win32 as well, even
      though we can be sure that the required primatives exist, so that the
      requirements on the application when built with --disable-multithread
      are consistent across platforms.
      
      Users using libvpx built with --disable-multithread in a multithreaded
      context should provide their own synchronization. Updated the
      documentation to vpx_codec_enc_init_ver() and vpx_codec_dec_init_ver()
      to note this requirement. Moved the RTCD initialization call to match
      this description, as previously it didn't happen until the first
      frame.
      
      Change-Id: Id576f6bce2758362188278d3085051c218a56d4a
      8df79e9d
  12. 04 May, 2012 2 commits
    • John Koleszar's avatar
      remove deprecated pre-v0.9.0 API · 2bf8fb58
      John Koleszar authored
      Remove a bunch of compatibility code dating back to before the initial
      libvpx release.
      
      Change-Id: Ie50b81e7d665955bec3d692cd6521c9583e85ca3
      2bf8fb58
    • Attila Nagy's avatar
      Make global data const · f039a85f
      Attila Nagy authored
      Removes all runtime initialization of global data. This commit is a
      squashed version of the following series cherry-picked from master.
      This is necessary because of a change that was merged to the tester
      that depends on the scaler being moved to the RTCD framework, which
      is a worthwhile thing to include in Eider anyway.
      
        - a91b42f0 Makes all global data in entropy.c const
        - b35a0db0 Makes all global data in tokenize.c const
        - 441cac8e Makes all mode token tables const
        - 5948a021 Ports vpx_xcaler to new RTCD method
        - 317d4244 Makes all mode token tables const part 2
      
      Change-Id: Ifeaea24df2b731e7c509fa6c6ef6891a374afc26
      f039a85f
  13. 19 Apr, 2012 1 commit
    • Attila Nagy's avatar
      Ports vpx_xcaler to new RTCD method · 5948a021
      Attila Nagy authored
      We can get rid of all remaining global initializers now:
       vp8_scale_machine_specific_config()
       vp8_initialize()
       vp8dx_initialize()
      
      Change-Id: I2825cea5d1c01ad9f6c45df49a0f86d803bfeb69
      5948a021
  14. 15 Mar, 2012 1 commit
    • Yaowu Xu's avatar
      WebM Experimental Codec Branch Snapshot · 6035da54
      Yaowu Xu authored
      This is a code snapshot of experimental work currently ongoing for a
      next-generation codec.
      
      The codebase has been cut down considerably from the libvpx baseline.
      For example, we are currently only supporting VBR 2-pass rate control
      and have removed most of the code relating to coding speed, threading,
      error resilience, partitions and various other features.  This is in
      part to make the codebase easier to work on and experiment with, but
      also because we want to have an open discussion about how the bitstream
      will be structured and partitioned and not have that conversation
      constrained by past work.
      
      Our basic working pattern has been to initially encapsulate experiments
      using configure options linked to #IF CONFIG_XXX statements in the
      code. Once experiments have matured and we are reasonably happy that
      they give benefit and can be merged without breaking other experiments,
      we remove the conditional compile statements and merge them in.
      
      Current changes include:
      * Temporal coding experiment for segments (though still only 4 max, it
        will likely be increased).
      * Segment feature experiment - to allow various bits of information to
        be coded at the segment level. Features tested so far include mode
        and reference frame information, limiting end of block offset and
        transform size, alongside Q and loop filter parameters, but this set
        is very fluid.
      * Support for 8x8 transform - 8x8 dct with 2nd order 2x2 haar is used
        in MBs using 16x16 prediction modes within inter frames.
      * Compound prediction (combination of signals from existing predictors
        to create a new predictor).
      * 8 tap interpolation filters and 1/8th pel motion vectors.
      * Loop filter modifications.
      * Various entropy modifications and changes to how entropy contexts and
        updates are handled.
      * Extended quantizer range matched to transform precision improvements.
      
      There are also ongoing further experiments that we hope to merge in the
      near future: For example, coding of motion and other aspects of the
      prediction signal to better support larger image formats, use of larger
      block sizes (e.g. 32x32 and up) and lossless non-transform based coding
      options (especially for key frames). It is our hope that we will be
      able to make regular updates and we will warmly welcome community
      contributions.
      
      Please be warned that, at this stage, the codebase is currently slower
      than VP8 stable branch as most new code has not been optimized, and
      even the 'C' has been deliberately written to be simple and obvious,
      not fast.
      
      The following graphs have the initial test results, numbers in the
      tables measure the compression improvement in terms of percentage. The
      build has  the following optional experiments configured:
      --enable-experimental --enable-enhanced_interp --enable-uvintra
      --enable-high_precision_mv --enable-sixteenth_subpel_uv
      
      CIF Size clips:
      http://getwebm.org/tmp/cif/
      HD size clips:
      http://getwebm.org/tmp/hd/
      (stable_20120309 represents encoding results of WebM master branch
      build as of commit#7a159071)
      
      They were encoded using the following encode parameters:
      --good --cpu-used=0 -t 0 --lag-in-frames=25 --min-q=0 --max-q=63
      --end-usage=0 --auto-alt-ref=1 -p 2 --pass=2 --kf-max-dist=9999
      --kf-min-dist=0 --drop-frame=0 --static-thresh=0 --bias-pct=50
      --minsection-pct=0 --maxsection-pct=800 --sharpness=0
      --arnr-maxframes=7 --arnr-strength=3(for HD,6 for CIF)
      --arnr-type=3
      
      Change-Id: I5c62ed09cfff5815a2bb34e7820d6a810c23183c
      6035da54
  15. 28 Feb, 2012 1 commit
    • Paul Wilkins's avatar
      Code Simplification · b6f02c85
      Paul Wilkins authored
      Removal of code relating to token partitioning
      
      Change-Id: Iaf3c88d6758639a55bd92c3be5c51e6bed407a3c
      b6f02c85
  16. 15 Feb, 2012 1 commit
  17. 27 Jan, 2012 1 commit
    • John Koleszar's avatar
      Hook up VP8D_GET_LAST_REF_USED · 8be41bba
      John Koleszar authored
      Commit 892e23a5 introduced support for the VP8D_GET_LAST_REF_USED,
      but missed the mapping of the control id to the underlying function,
      so it was unavailable to applications.
      
      In addition, the underlying function vp8_references_buffer() is
      moved from common/postproc.c to decoder/onyxd_if.c as postproc.c is
      not built in all configurations.
      
      Change-Id: I426dd254e7e6c4c061b70d729b69a6c384ebbe44
      8be41bba
  18. 10 Jan, 2012 1 commit
  19. 05 Jan, 2012 1 commit
    • Deb Mukherjee's avatar
      Multiframe quality enhancement postprocessing · 87aa846b
      Deb Mukherjee authored
      Adds a multiframe postprocessing module to enhance the quality of
      certain frames that are coded at lower quality than preceding frames.
      The module can be invoked from the commandline by use of the --mfqe
      option, and will be most beneficial for enhancing the quality of
      frames decoded using scalable patterns.
      
      Uses the vp8_variance_var16x16 and vp8_variance_sad16x16 function
      pointers to compute SAD and Variance of blocks.
      
      Change-Id: Id73d2a6e3572d07f9f8e36bbce00a4fc5ffd8961
      87aa846b
  20. 21 Dec, 2011 1 commit
  21. 05 Dec, 2011 1 commit
    • Yunqing Wang's avatar
      Multiple-resolution encoder · aa7335e6
      Yunqing Wang authored
      The example encoder down-samples the input video frames a number of
      times with a down-sampling factor, and then encodes and outputs
      bitstreams with different resolutions.
      
      Support arbitrary down-sampling factor, and down-sampling factor
      can be different for each encoding level.
      
      For example, the encoder can be tested as follows.
      1. Configure with multi-resolution encoding enabled:
      ../libvpx/configure --target=x86-linux-gcc --disable-codecs
      --enable-vp8 --enable-runtime_cpu_detect --enable-debug
      --disable-install-docs --enable-error-concealment
      --enable-multi-res-encoding
      2. Run make
      3. Encode:
      If input video is 1280x720, run:
      ./vp8_multi_resolution_encoder 1280 720 input.yuv 1.ivf 2.ivf 3.ivf 1
      (output: 1.ivf(1280x720); 2.ivf(640x360); 3.ivf(320x180).
      The last parameter is set to 1/0 to show/not show PSNR.)
      4. Decode:
      ./simple_decoder 1.ivf 1.yuv
      ./simple_decoder 2.ivf 2.yuv
      ./simple_decoder 3.ivf 3.yuv
      5. View video:
      mplayer 1.yuv -demuxer rawvideo -rawvideo w=1280:h=720 -loop 0 -fps 30
      mplayer 2.yuv -demuxer rawvideo -rawvideo w=640:h=360 -loop 0 -fps 30
      mplayer 3.yuv -demuxer rawvideo -rawvideo w=320:h=180 -loop 0 -fps 30
      
      The encoding parameters can be modified in vp8_multi_resolution_encoder.c,
      for example, target bitrate, frame rate...
      
      Modified API. John helped a lot with that. Thanks!
      
      Change-Id: I03be9a51167eddf94399f92d269599fb3f3d54f5
      aa7335e6
  22. 01 Nov, 2011 1 commit
    • Stefan Holmer's avatar
      Changing decoder input partition API to input fragments. · 14272052
      Stefan Holmer authored
      Adding support for several partitions within one input fragment.
      This is necessary to fully support all possible packetization
      combinations in the VP8 RTP profile. Several partitions can
      be transmitted in the same packet, and they can only be split
      by reading the partition lengths from the bitstream.
      
      Change-Id: If7d7ea331cc78cb7efd74c4a976b720c9a655463
      14272052
  23. 26 Jul, 2011 1 commit
  24. 20 Jul, 2011 1 commit
    • Timothy B. Terriberry's avatar
      Increase chrow row alignment to 16 bytes. · 7d1b37cd
      Timothy B. Terriberry authored
      This is done by expanding luma row to 32-byte alignment, since
       there is currently a bunch of code that assumes that
       uv_stride == y_stride/2 (see, for example, vp8/common/postproc.c,
       common/reconinter.c, common/arm/neon/recon16x16mb_neon.asm,
       encoder/temporal_filter.c, and possibly others; I haven't done a
       full audit).
      It also uses replaces the hardcoded border of 16 in a number of
       encoder buffers with VP8BORDERINPIXELS (currently 32), as the
       chroma rows start at an offset of border/2.
      Together, these two changes have the nice advantage that simply
       dumping the frame memory as a contiguous blob produces a valid,
       if padded, image.
      
      Change-Id: Iaf5ea722ae5c82d5daa50f6e2dade9de753f1003
      7d1b37cd
  25. 28 Jun, 2011 1 commit
    • Stefan Holmer's avatar
      New ways of passing encoded data between encoder and decoder. · 7296b3f9
      Stefan Holmer authored
      With this commit frames can be received partition-by-partition
      from the encoder and passed partition-by-partition to the
      decoder.
      
      At the encoder-side this makes it easier to split encoded
      frames at partition boundaries, useful when packetizing
      frames. When VPX_CODEC_USE_OUTPUT_PARTITION is enabled,
      several VPX_CODEC_CX_FRAME_PKT packets will be returned
      from vpx_codec_get_cx_data(), containing one partition
      each. The partition_id (starting at 0) specifies the decoding
      order of the partitions. All partitions but the last has
      the VPX_FRAME_IS_FRAGMENT flag set.
      
      At the decoder this opens up the possibility of decoding partition
      N even though partition N-1 was lost (given that independent
      partitioning has been enabled in the encoder) if more info
      about the missing parts of the stream is available through
      external signaling.
      
      Each partition is passed to the decoder through the
      vpx_codec_decode() function, with the data pointer pointing
      to the start of the partition, and with data_sz equal to the
      size of the partition. Missing partitions can be signaled to
      the decoder by setting data != NULL and data_sz = 0. When
      all partitions have been given to the decoder "end of data"
      should be signaled by calling vpx_codec_decode() with
      data = NULL and data_sz = 0.
      
      The first partition is the first partition according to the
      VP8 bitstream + the uncompressed data chunk + DCT address
      offsets if multiple residual partitions are used.
      
      Change-Id: I5bc0682b9e4112e0db77904755c694c3c7ac6e74
      7296b3f9
  26. 22 Jun, 2011 1 commit
    • James Berry's avatar
      get/set reference buffer dimension check added · 2bd90c13
      James Berry authored
      vp8_yv12_copy_frame_ptr() expects same size
      buffers which was not previously gaurenteed.
      Using an improperly allocated buffer would
      cause a crash before.
      
      Change-Id: I904982313ce9352474f80de842013dcd89f48685
      2bd90c13
  27. 19 May, 2011 1 commit
    • Stefan Holmer's avatar
      Adding error-concealment to the decoder. · d04f8523
      Stefan Holmer authored
      The error-concealer is plugged in after any motion vectors have been
      decoded. It tries to estimate any missing motion vectors from the
      motion vectors of the previous frame. Intra blocks with missing
      residual are replaced with inter blocks with estimated motion vectors.
      
      This feature was developed in a separate sandbox
      (sandbox/holmer/error-concealment).
      
      Change-Id: I5c8917b031078d79dbafd90f6006680e84a23412
      d04f8523
  28. 09 May, 2011 1 commit
  29. 17 Mar, 2011 2 commits
    • Ralph Giles's avatar
      Set bounds from the array when iterating mmaps. · 18555734
      Ralph Giles authored
      The mmap allocation code in vp8_dx_iface.c was inconsistent.
      The static array vp8_mem_req_segs defines two descriptors,
      but only the first is real. The second is a sentinel and
      isn't actually allocated, so vpx_codec_alg_priv is declared
      with mmaps[NELEMENTS(vp8_mem_req_segs)-1]. Some functions
      use this reduced upper bound when iterating though the mmap
      array, but these two functions did not.
      
      Instead, this commit calls NELEMENTS(...->mmaps) to directly
      query the bounds of the dereferenced array.
      
      This fixes an array-bounds warning from gcc 4.6 on
      vp8_xma_set_mmap.
      
      Change-Id: I918e2721b401d134c1a9764c978912bdb3188be1
      18555734
    • Ralph Giles's avatar
      Remove commented-out VP6 code from vp8_finalize_mmaps · de5182ee
      Ralph Giles authored
      Change-Id: I48642c380353043bed96026f56de5908fcee270a
      de5182ee
  30. 17 Feb, 2011 1 commit
  31. 10 Feb, 2011 1 commit
    • John Koleszar's avatar
      Fix relative include paths · 02321de0
      John Koleszar authored
      Allow compiling without adding vp8/{common,encoder,decoder} to the
      include paths.
      
      Change-Id: Ifeb5dac351cdfadcd659736f5158b315a0030b6c
      02321de0
  32. 19 Jan, 2011 1 commit
    • Henrik Lundin's avatar
      Implement error tracking in the decoder · 67fb3a51
      Henrik Lundin authored
      A new vpx_codec_control called VP8D_GET_FRAME_CORRUPTED. The output
      from the function is non-zero if the last decoded frame contains
      corruption due to packet losses.
      
      The decoder is also modified to accept encoded frames of zero length.
      A zero length frame indicates to the decoder that one or more frames
      have been completely lost. This will mark the last decoded reference
      buffer as corrupted. The data pointer can be NULL if the length is
      zero.
      
      Change-Id: Ic5902c785a281c6e05329deea958554b7a6c75ce
      67fb3a51
  33. 17 Dec, 2010 1 commit
    • John Koleszar's avatar
      propagate user private data on decode · c49f49b1
      John Koleszar authored
      The pointer passed in the user_priv argument to vpx_codec_decode()
      should be propagated through to the corresponding output frame and
      made available in the image's user_priv member. Fixes issue #252
      
      Change-Id: I182746a6882c8549fb146b4a4fdb64f1789eb750
      c49f49b1