shaka-packager/docs/db/d86/classshaka_1_1media_1_1Nalu...

359 lines
19 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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.8.6"/>
<title>Shaka Packager SDK: shaka::media::NaluReader Class 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/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">Shaka Packager SDK
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
<li><a href="../../namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="../../annotated.html"><span>Classes</span></a></li>
<li><a href="../../files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="../../search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="../../annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="../../classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="../../hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="../../functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Friends</a></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 id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="../../d8/daf/namespaceshaka.html">shaka</a></li><li class="navelem"><b>media</b></li><li class="navelem"><a class="el" href="../../db/d86/classshaka_1_1media_1_1NaluReader.html">NaluReader</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
<a href="../../d8/da6/classshaka_1_1media_1_1NaluReader-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">shaka::media::NaluReader Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<p><code>#include &lt;<a class="el" href="../../d4/d87/nalu__reader_8h_source.html">nalu_reader.h</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:aad5f0714659461429e2616f8186f4d53"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><b>Result</b> { <b>kOk</b>,
<b>kInvalidStream</b>,
<b>kEOStream</b>
}</td></tr>
<tr class="separator:aad5f0714659461429e2616f8186f4d53"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a2d1611fe3e60fc6570fe0c21e13911b0"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d86/classshaka_1_1media_1_1NaluReader.html#a2d1611fe3e60fc6570fe0c21e13911b0">NaluReader</a> (Nalu::CodecType type, uint8_t nal_length_size, const uint8_t *stream, uint64_t stream_size)</td></tr>
<tr class="separator:a2d1611fe3e60fc6570fe0c21e13911b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6890eb05c83bb540af84494ed0590c6b"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d86/classshaka_1_1media_1_1NaluReader.html#a6890eb05c83bb540af84494ed0590c6b">NaluReader</a> (Nalu::CodecType type, uint8_t nal_length_size, const uint8_t *stream, uint64_t stream_size, const std::vector&lt; <a class="el" href="../../d1/d34/structshaka_1_1media_1_1SubsampleEntry.html">SubsampleEntry</a> &gt; &amp;subsamples)</td></tr>
<tr class="separator:a6890eb05c83bb540af84494ed0590c6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae051f1f92d84acfcd4cc159d972d647a"><td class="memItemLeft" align="right" valign="top">Result&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d86/classshaka_1_1media_1_1NaluReader.html#ae051f1f92d84acfcd4cc159d972d647a">Advance</a> (<a class="el" href="../../d6/dff/classshaka_1_1media_1_1Nalu.html">Nalu</a> *nalu)</td></tr>
<tr class="separator:ae051f1f92d84acfcd4cc159d972d647a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9ed9d56a06f43717cdb7035f86075975"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d86/classshaka_1_1media_1_1NaluReader.html#a9ed9d56a06f43717cdb7035f86075975">StartsWithStartCode</a> ()</td></tr>
<tr class="separator:a9ed9d56a06f43717cdb7035f86075975"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
Static Public Member Functions</h2></td></tr>
<tr class="memitem:ae7407c5437c807a51e8611a40a798966"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae7407c5437c807a51e8611a40a798966"></a>
static bool&#160;</td><td class="memItemRight" valign="bottom"><b>FindStartCode</b> (const uint8_t *data, uint64_t data_size, uint64_t *offset, uint8_t *start_code_size)</td></tr>
<tr class="separator:ae7407c5437c807a51e8611a40a798966"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa14b3cd5da5657d8a3d0ecfdf301a184"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d86/classshaka_1_1media_1_1NaluReader.html#aa14b3cd5da5657d8a3d0ecfdf301a184">FindStartCodeInClearRange</a> (const uint8_t *data, uint64_t data_size, uint64_t *offset, uint8_t *start_code_size, const std::vector&lt; <a class="el" href="../../d1/d34/structshaka_1_1media_1_1SubsampleEntry.html">SubsampleEntry</a> &gt; &amp;subsamples)</td></tr>
<tr class="separator:aa14b3cd5da5657d8a3d0ecfdf301a184"><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>Helper class used to read NAL units based on several formats:</p>
<ul>
<li>Annex B H.264/h.265</li>
<li>NAL Unit Stream </li>
</ul>
<p>Definition at line <a class="el" href="../../d4/d87/nalu__reader_8h_source.html#l00149">149</a> of file <a class="el" href="../../d4/d87/nalu__reader_8h_source.html">nalu_reader.h</a>.</p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a class="anchor" id="a2d1611fe3e60fc6570fe0c21e13911b0"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">shaka::media::NaluReader::NaluReader </td>
<td>(</td>
<td class="paramtype">Nalu::CodecType&#160;</td>
<td class="paramname"><em>type</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>nal_length_size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>stream</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint64_t&#160;</td>
<td class="paramname"><em>stream_size</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">nalu_length_size</td><td>should be set to 0 for AnnexB byte streams; otherwise, it indicates the size of NAL unit length for the NAL unit stream. </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <a class="el" href="../../d1/df5/nalu__reader_8cc_source.html#l00212">212</a> of file <a class="el" href="../../d1/df5/nalu__reader_8cc_source.html">nalu_reader.cc</a>.</p>
</div>
</div>
<a class="anchor" id="a6890eb05c83bb540af84494ed0590c6b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">shaka::media::NaluReader::NaluReader </td>
<td>(</td>
<td class="paramtype">Nalu::CodecType&#160;</td>
<td class="paramname"><em>type</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>nal_length_size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>stream</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint64_t&#160;</td>
<td class="paramname"><em>stream_size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="../../d1/d34/structshaka_1_1media_1_1SubsampleEntry.html">SubsampleEntry</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>subsamples</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">type</td><td>is the codec type of the NALU unit. </td></tr>
<tr><td class="paramname">nalu_length_size</td><td>should be set to 0 for AnnexB byte streams; otherwise, it indicates the size of NAL unit length for the NAL unit stream. </td></tr>
<tr><td class="paramname">stream</td><td>is the input stream. </td></tr>
<tr><td class="paramname">stream_size</td><td>is the size of <em>stream</em>. </td></tr>
<tr><td class="paramname">subsamples</td><td>specifies the clear and encrypted sections of the <em>stream</em> starting from the beginning of the <em>stream</em>. If <em>subsamples</em> doesn't cover the entire stream, then the rest is assumed to be in the clear. </td></tr>
</table>
</dd>
</dl>
<p>Definition at line <a class="el" href="../../d1/df5/nalu__reader_8cc_source.html#l00222">222</a> of file <a class="el" href="../../d1/df5/nalu__reader_8cc_source.html">nalu_reader.cc</a>.</p>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="ae051f1f92d84acfcd4cc159d972d647a"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">NaluReader::Result shaka::media::NaluReader::Advance </td>
<td>(</td>
<td class="paramtype"><a class="el" href="../../d6/dff/classshaka_1_1media_1_1Nalu.html">Nalu</a> *&#160;</td>
<td class="paramname"><em>nalu</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Reads a NALU from the stream into |*nalu|, if one exists, and then advances to the next NALU. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">nalu</td><td>contains the NALU read if it exists. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>kOk if a NALU is read; kEOStream if the stream is at the end-of-stream; kInvalidStream on error. </dd></dl>
<p>Definition at line <a class="el" href="../../d1/df5/nalu__reader_8cc_source.html#l00239">239</a> of file <a class="el" href="../../d1/df5/nalu__reader_8cc_source.html">nalu_reader.cc</a>.</p>
</div>
</div>
<a class="anchor" id="aa14b3cd5da5657d8a3d0ecfdf301a184"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool shaka::media::NaluReader::FindStartCodeInClearRange </td>
<td>(</td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint64_t&#160;</td>
<td class="paramname"><em>data_size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint64_t *&#160;</td>
<td class="paramname"><em>offset</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>start_code_size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="../../d1/d34/structshaka_1_1media_1_1SubsampleEntry.html">SubsampleEntry</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>subsamples</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Same as FindStartCode() but also specify the subsamples. This searches for start codes in the clear section and will not scan for start codes in the encrypted section. Even if there is a real NALU start code in the encrypted section, this will skip them. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">subsamples</td><td>starting from the start of <em>data</em>. If <em>subsamples</em> does not cover the whole <em>data</em>, the rest is assumed to be in the clear. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>true if it finds a NALU. false otherwise. </dd></dl>
<p>Definition at line <a class="el" href="../../d1/df5/nalu__reader_8cc_source.html#l00344">344</a> of file <a class="el" href="../../d1/df5/nalu__reader_8cc_source.html">nalu_reader.cc</a>.</p>
</div>
</div>
<a class="anchor" id="a9ed9d56a06f43717cdb7035f86075975"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool shaka::media::NaluReader::StartsWithStartCode </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>true if the current position points to a start code. </dd></dl>
<p>Definition at line <a class="el" href="../../d1/df5/nalu__reader_8cc_source.html#l00297">297</a> of file <a class="el" href="../../d1/df5/nalu__reader_8cc_source.html">nalu_reader.cc</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>packager/media/codecs/<a class="el" href="../../d4/d87/nalu__reader_8h_source.html">nalu_reader.h</a></li>
<li>packager/media/codecs/<a class="el" href="../../d1/df5/nalu__reader_8cc_source.html">nalu_reader.cc</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Tue Sep 19 2017 20:22:13 for Shaka Packager SDK by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>