1. 05 Feb, 2013 - 1 commit
    • Ronald S. Bultje's avatar
      [WIP] Add column-based tiling. · 1407bdc2
      Ronald S. Bultje authored
      This patch adds column-based tiling. The idea is to make each tile
      independently decodable (after reading the common frame header) and
      also independendly encodable (minus within-frame cost adjustments in
      the RD loop) to speed-up hardware & software en/decoders if they used
      multi-threading. Column-based tiling has the added advantage (over
      other tiling methods) that it minimizes realtime use-case latency,
      since all threads can start encoding data as soon as the first SB-row
      worth of data is available to the encoder.
      
      There is some test code that does random tile ordering in the decoder,
      to confirm that each tile is indeed independently decodable from other
      tiles in the same frame. At tile edges, all contexts assume default
      values (i.e. 0, 0 motion vector, no coefficients, DC intra4x4 mode),
      and motion vector search and ordering do not cross tiles in the same
      frame.
      t log
      
      Tile independence is not maintained between frames ATM, i.e. tile 0 of
      frame 1 is free to use motion vect...
      1407bdc2
  2. 24 Jan, 2013 - 1 commit
    • Deb Mukherjee's avatar
      Adds an error-resilient mode with test · 01cafaab
      Deb Mukherjee authored
      Adds an error-resilient mode where frames can be continued
      to be decoded even when there are errors (due to network losses)
      on a prior frame. Specifically, backward updates are turned off
      and probabilities of various symbols are reset to defaults at
      the beginning of each frame. Further, the last frame's mvs are
      not used for the mv reference list, and the sorting of the
      initial list based on search on previous frames is turned off
      as well.
      
      Also adds a test where an arbitrary set of frames are skipped
      from decoding to simulate errors. The test verifies (1) that if
      the error frames are droppable - i.e. frame buffer updates have
      been turned off - there are no mismatch errors for the remaining
      frames after the error frames; and (2) if the error-frames are non
      droppable, there are not only no decoding errors but the mismatch
      PSNR between the decoder's version of the post-error frames and the
      encoder's version is at least 20 dB.
      
      Change-Id: Ie6e2bcd436b1e8643270356d3a930e8989ff52a5
      01cafaab
  3. 16 Jan, 2013 - 1 commit
    • John Koleszar's avatar
      Start to anonymize reference frames · da832a80
      John Koleszar authored
      Remove lst_fb_idx, gld_fb_idx, alt_fb_idx, refresh_last_frame,
      refresh_golden_frame, refresh_alt_ref_frame from common. Gold/Alt are
      encode side conventions. From the decoder's perspective, we want to be
      dealing with numbered references.
      
      Updates to active_ref 2 signal mode context switches, vestigial from
      refresh_alt_ref_frame. This needs some clean up to make sense with
      increased numbers of reference frames, as well as reimplementing the
      swapping of alt/golden which was previously done using the
      buffer-to-buffer copy mechanism removed in an earlier commit.
      
      Change-Id: I7334445158b7666f9295d2a2dd22aa03f4485f58
      da832a80
  4. 11 Jan, 2013 - 1 commit
  5. 18 Dec, 2012 - 1 commit
  6. 27 Nov, 2012 - 1 commit
    • John Koleszar's avatar
      Add vp9_ prefix to all vp9 files · fcccbcbb
      John Koleszar authored
      Support for gyp which doesn't support multiple objects in the same
      static library having the same basename.
      
      Change-Id: Ib947eefbaf68f8b177a796d23f875ccdfa6bc9dc
      fcccbcbb
  7. 15 Nov, 2012 - 2 commits
    • John Koleszar's avatar
      Pack invisible frames without lengths · 64bcffc1
      John Koleszar authored
      Modify the decoder to return the ending position of the bool decoder and
      use that as the starting position for the next frame.
      
      The constant-space algorithm for parsing the appended frame lengths is
      O(n^2), which is a potential DoS concern if n is unbounded. Revisit
      the appended lengths for use as partition lengths when multipartition
      support is added.
      
      In addition, this allows decoding of raw streams outside of a container
      without additional framing information, though it's insufficient to
      be able to remux said stream into a container.
      
      Change-Id: I71e801a9c3e37abe559a56a597635b0cbae1934b
      64bcffc1
    • John Koleszar's avatar
      support building vp8 and vp9 into a single lib · a9c7597a
      John Koleszar authored
      Change-Id: Ib8f8a66c9fd31e508cdc9caa662192f38433aa3d
      a9c7597a
  8. 06 Nov, 2012 - 1 commit
  9. 02 Nov, 2012 - 1 commit
    • John Koleszar's avatar
      vpx_scale: sync from master · 06f3e51d
      John Koleszar authored
      Update vpx_scale from current code in master, run style transform, fix
      lint warnings.
      
      Change-Id: I47eadeb5b6881d448ea3728537f9b8a5b5aac78e
      06f3e51d
  10. 01 Nov, 2012 - 2 commits
  11. 31 Oct, 2012 - 5 commits
  12. 24 Sep, 2012 - 1 commit
  13. 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
  14. 17 Jul, 2012 - 1 commit
  15. 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
  16. 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
  17. 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
  18. 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:
      * T...
      6035da54
  19. 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
  20. 15 Feb, 2012 - 1 commit
  21. 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
  22. 10 Jan, 2012 - 1 commit
  23. 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
  24. 21 Dec, 2011 - 1 commit
  25. 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
  26. 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
  27. 26 Jul, 2011 - 1 commit
  28. 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
  29. 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
  30. 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
  31. 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
  32. 09 May, 2011 - 1 commit
  33. 17 Mar, 2011 - 1 commit
    • 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