<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shreevari SP</title>
    <description>The latest articles on DEV Community by Shreevari SP (@s_p).</description>
    <link>https://dev.to/s_p</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F191618%2F2fb34ec3-e15f-4b90-b6d2-447dd8eca053.jpeg</url>
      <title>DEV Community: Shreevari SP</title>
      <link>https://dev.to/s_p</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/s_p"/>
    <language>en</language>
    <item>
      <title>Overview</title>
      <dc:creator>Shreevari SP</dc:creator>
      <pubDate>Thu, 18 Jul 2019 04:44:04 +0000</pubDate>
      <link>https://dev.to/s_p/overview-1hna</link>
      <guid>https://dev.to/s_p/overview-1hna</guid>
      <description>&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/xiph" rel="noopener noreferrer"&gt;
        xiph
      &lt;/a&gt; / &lt;a href="https://github.com/xiph/rav1e" rel="noopener noreferrer"&gt;
        rav1e
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      The fastest and safest AV1 encoder.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;rav1e &lt;a href="https://github.com/xiph/rav1e/actions" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/xiph/rav1e/workflows/rav1e/badge.svg" alt="Actions Status"&gt;&lt;/a&gt; &lt;a href="https://codecov.io/gh/xiph/rav1e" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a775e9b836ed0fa89fd179bae75165d229f9ca98e03b2b9db638b894d887b13b/68747470733a2f2f636f6465636f762e696f2f67682f786970682f72617631652f6272616e63682f6d61737465722f67726170682f62616467652e737667" alt="CodeCov"&gt;&lt;/a&gt;
&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;The fastest and safest AV1 encoder.&lt;/p&gt;

&lt;b&gt;Table of Content&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/xiph/rav1e#overview" rel="noopener noreferrer"&gt;Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/xiph/rav1e#features" rel="noopener noreferrer"&gt;Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/xiph/rav1e#documentation" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/xiph/rav1e#releases" rel="noopener noreferrer"&gt;Releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/xiph/rav1e#building" rel="noopener noreferrer"&gt;Building&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/xiph/rav1e#dependency-nasm" rel="noopener noreferrer"&gt;Dependency: NASM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/xiph/rav1e#release-binary" rel="noopener noreferrer"&gt;Release binary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/xiph/rav1e#unstable-features" rel="noopener noreferrer"&gt;Unstable features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/xiph/rav1e#target-specific-builds" rel="noopener noreferrer"&gt;Target-specific builds&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/xiph/rav1e#building-the-c-api" rel="noopener noreferrer"&gt;Building the C-API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/xiph/rav1e#usage" rel="noopener noreferrer"&gt;Usage&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/xiph/rav1e#compressing-video" rel="noopener noreferrer"&gt;Compressing video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/xiph/rav1e#decompressing-video" rel="noopener noreferrer"&gt;Decompressing video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/xiph/rav1e#configuring" rel="noopener noreferrer"&gt;Configuring&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/xiph/rav1e#features-1" rel="noopener noreferrer"&gt;Features&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/xiph/rav1e#contributing" rel="noopener noreferrer"&gt;Contributing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/xiph/rav1e#getting-in-touch" rel="noopener noreferrer"&gt;Getting in Touch&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Overview&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;rav1e is an AV1 video encoder. It is designed to eventually cover all use cases, though in its current form it is most suitable for cases where libaom (the reference encoder) is too slow.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Intra, inter, and switch frames&lt;/li&gt;
&lt;li&gt;64x64 superblocks&lt;/li&gt;
&lt;li&gt;4x4 to 64x64 RDO-selected square and rectangular blocks&lt;/li&gt;
&lt;li&gt;DC, H, V, Paeth, smooth, and all directional prediction modes&lt;/li&gt;
&lt;li&gt;DCT, (FLIP-)ADST and identity transforms (up to 64x64, 16x16 and 32x32 respectively)&lt;/li&gt;
&lt;li&gt;8-, 10- and 12-bit depth color&lt;/li&gt;
&lt;li&gt;4:2:0, 4:2:2 and 4:4:4 chroma sampling&lt;/li&gt;
&lt;li&gt;11 speed settings (0-10, exhaustive to near real-time)&lt;/li&gt;
&lt;li&gt;Constant quantizer and target bitrate (single- and multi-pass) encoding modes&lt;/li&gt;
&lt;li&gt;Still picture mode&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Documentation&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Find the documentation in &lt;a href="https://github.com/xiph/rav1edoc/README.md" rel="noopener noreferrer"&gt;&lt;code&gt;doc/&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Releases&lt;/h2&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/xiph/rav1e" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
If you want to know what rav1e is, this is a good place to start.&lt;br&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/luzero" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F153809%2F870c14cf-a8ed-486a-9e26-0cd57543115b.png" alt="luzero"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/luzero/using-rav1e-from-your-own-code-2ie0" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Using rav1e - from your own code&lt;/h2&gt;
      &lt;h3&gt;Luca Barbato ・ Apr 9 '19&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#rust&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#rav1e&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#av1&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  What is?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Rate: Rate of bitstream output of the encoder.&lt;/li&gt;
&lt;li&gt;Distortion: Deviation from the original image.&lt;/li&gt;
&lt;li&gt;RD cost: Rate distortion cost is the trade-off cost between bitrate and quality loss. (We want to optimize this trade-off)&lt;/li&gt;
&lt;li&gt;Lambda: Lagrangian multiplier used to optimize the RD cost.&lt;/li&gt;
&lt;li&gt;tx: &lt;a href="https://en.wikipedia.org/wiki/Transform_theory" rel="noopener noreferrer"&gt;Transform&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;CDEF: &lt;a href="https://people.xiph.org/~xiphmont/demo/av1/demo2.shtml" rel="noopener noreferrer"&gt;Constrained Directional Enhancement Filter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;LRF: Loop Restoration Filter&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Rate-Distortion Optimization?
&lt;/h2&gt;

&lt;p&gt;rav1e makes use of these RDO techniques to reach the saddle point in the trade-off between compression and quality.&lt;/p&gt;




&lt;h1&gt;
  
  
  Mechanism
&lt;/h1&gt;

&lt;p&gt;A full exhaustive search for best RD-cost among all the tools and combinations is infeasible since the cost grows exponentially with every dimension that a tool adds to the search.&lt;br&gt;
Many tools are pruned based on the speed settings and some tools like motion search are approximate by default.&lt;br&gt;
But at the slowest speed setting, there is a search among nearly all available tools in rav1e.&lt;/p&gt;


&lt;h2&gt;
  
  
  How to calculate RD cost?
&lt;/h2&gt;

&lt;p&gt;During the encoding process, we measure RD cost using distortion.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cost = distortion + lambda * rate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;During the post-processing filter stage, we measure RD cost using error.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cost = error + lambda * rate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  What are we optimizing for lowest RD-cost?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;rdo_mode_decision&lt;/code&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inter modes&lt;/li&gt;
&lt;li&gt;Inter Compound modes&lt;/li&gt;
&lt;li&gt;Tx type&lt;/li&gt;
&lt;li&gt;Tx size&lt;/li&gt;
&lt;li&gt;Intra modes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;luma_chroma_mode_rdo&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chroma mode RDO for predicted luma&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;rdo_partition_decision&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Partition decision&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;rdo_loop_decision&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CDEF + LRF combination&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Overview of a tile encode
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Description
&lt;/h3&gt;

&lt;p&gt;Each tile is encoded independent of the other tiles. We can observe RD Optimization abundantly in the encoding process. Even the post-processing filters are chosen with RD costs taken into consideration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Steps
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Build coarse motion vectors of the tile for INTER blocks only.
2. For each superblock in tile:
    1. Motion estimation: Using either Diamond search or Full search on subsampled blocks.
    2. encode_partition_bottomup / encode_partition_topdown. 
    3. rdo_loop_decision.
3. CDEF and LRF.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F8txjqdsm4e2pdufq3hqh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F8txjqdsm4e2pdufq3hqh.png" alt="Illustration"&gt;&lt;/a&gt;&lt;/p&gt;
An overview of how a tile is encoded in rav1e






&lt;h3&gt;
  
  
  Coming up next...
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;RDO for modes&lt;/li&gt;
&lt;li&gt;RDO during partitioning&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>rust</category>
      <category>rav1e</category>
      <category>av1</category>
    </item>
  </channel>
</rss>
