<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>VA-API: VASliceStructVVC Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">VA-API
   &#160;<span id="projectnumber">2.23.0</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-attribs">Public Attributes</a> &#124;
<a href="structVASliceStructVVC-members.html">List of all members</a>  </div>
  <div class="headertitle">
<div class="title">VASliceStructVVC Struct Reference<div class="ingroups"><a class="el" href="group__api__dec__vvc.html">VVC decoding API</a></div></div>  </div>
</div><!--header-->
<div class="contents">

<p>data buffer of tile widths and heights. VATileBufferType is used to send this buffer.  
 <a href="structVASliceStructVVC.html#details">More...</a></p>

<p><code>#include &lt;<a class="el" href="va__dec__vvc_8h_source.html">va_dec_vvc.h</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
Public Attributes</h2></td></tr>
<tr class="memitem:a2b39889a400dd80c069c6af131715237"><td class="memItemLeft" align="right" valign="top"><a id="a2b39889a400dd80c069c6af131715237"></a>
uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structVASliceStructVVC.html#a2b39889a400dd80c069c6af131715237">SliceTopLeftTileIdx</a></td></tr>
<tr class="memdesc:a2b39889a400dd80c069c6af131715237"><td class="mdescLeft">&#160;</td><td class="mdescRight">the tile index of which the starting CTU (top-left) of the slice belongs to. The tile index is in raster scan order. Same syntax variable as in VVC spec. <br /></td></tr>
<tr class="separator:a2b39889a400dd80c069c6af131715237"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a738ddadc0686bb77c75939bf4c8d1454"><td class="memItemLeft" align="right" valign="top"><a id="a738ddadc0686bb77c75939bf4c8d1454"></a>
uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structVASliceStructVVC.html#a738ddadc0686bb77c75939bf4c8d1454">va_reserved</a> [<a class="el" href="group__api__core.html#gaaa4fb20d1c2606379cccfa562c2ebb3b">VA_PADDING_LOW</a>]</td></tr>
<tr class="memdesc:a738ddadc0686bb77c75939bf4c8d1454"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reserved for future use, must be zero. <br /></td></tr>
<tr class="separator:a738ddadc0686bb77c75939bf4c8d1454"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>data buffer of tile widths and heights. VATileBufferType is used to send this buffer. </p>
<p>Host decoder sends in number of pps_num_exp_tile_columns_minus1 + 1 tile column widths of pps_tile_column_width_minus1[i], followed by number of pps_num_exp_tile_rows_minus1 + 1 of tile row heights of pps_tile_row_height_minus1[i], through one or multiple buffers. Each tile width or height is formatted as uint16_t tile_dimension; Each buffer contains an integer number of tile_dimension with no gap in between. The buffers with type VATileBufferType should be submitted for each picture. And driver will derive the tile structure from it. When pps_num_exp_tile_columns_minus1 + pps_num_exp_tile_rows_minus1 equals 0, this buffer is still submitted by app to driver.</p>
<p>VVC SliceStruct Data Structure</p>
<p>Host decoder sends in an array of SliceStruct sets through one or multiple buffers. These SliceStruct sets contain only the "explicit" slices parsed from PPS header. Each SliceStruct set is described by <a class="el" href="structVASliceStructVVC.html" title="data buffer of tile widths and heights. VATileBufferType is used to send this buffer.">VASliceStructVVC</a> data structure. Each buffer contains an integer number of <a class="el" href="structVASliceStructVVC.html" title="data buffer of tile widths and heights. VATileBufferType is used to send this buffer.">VASliceStructVVC</a> data structures, which are laid out sequentially in the order of ascending slice indices according to the spec with no gap in between.</p>
<p>When pps_rect_slice_flag equals 0 or there are no explicit slices, this buffer is not submitted by app to driver. Otherwise, for each picture, this buffer should be submitted.</p>
<p>Note: When pps_slice_width_in_tiles_minus1 + pps_slice_height_in_tiles_minus1 equals 0, if the sum of pps_exp_slice_height_in_ctus_minus1 + 1 of all those slices with same SliceTopLeftTileIdx value is less than the height of tile SliceTopLeftTileIdx in unit of CTUs, driver should derive the rest slices in that tile according to equation (21) in spec section 6.5.1. And <a class="el" href="structVASliceStructVVC.html" title="data buffer of tile widths and heights. VATileBufferType is used to send this buffer.">VASliceStructVVC</a> for these (derived) slices are not passed in to LibVA by App.</p>
<p>App should populate the data entries regardless of values of pps_single_slice_per_subpic_flag or sps_subpic_info_present_flag.</p>
<p>VASliceStructBufferType is used to send this buffer. </p>
</div><hr/>The documentation for this struct was generated from the following file:<ul>
<li><a class="el" href="va__dec__vvc_8h_source.html">va_dec_vvc.h</a></li>
</ul>
</div><!-- contents -->
<hr class="footer"/><address class="footer"><small>
Generated for VA-API by&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.9.1</small></address>
</body>
</html>
