shaka-packager/docs/df/d31/muxer__util_8cc_source.html

79 lines
28 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Shaka Packager SDK: packager/media/base/muxer_util.cc Source File</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">Shaka Packager SDK
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
</script>
<script type="text/javascript" src="../../menudata.js"></script>
<script type="text/javascript" src="../../menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('../../',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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 id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="../../dir_3f8eec2fc361645de4b1ec14c19fffc7.html">packager</a></li><li class="navelem"><a class="el" href="../../dir_f99dae54fe7170f791f339b952d5067a.html">media</a></li><li class="navelem"><a class="el" href="../../dir_e3bda0bde998a4d5063328245b9909be.html">base</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">muxer_util.cc</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright 2014 Google Inc. All rights reserved.</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Use of this source code is governed by a BSD-style</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// license that can be found in the LICENSE file or at</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// https://developers.google.com/open-source/licenses/bsd</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &quot;packager/media/base/muxer_util.h&quot;</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &lt;inttypes.h&gt;</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &quot;packager/base/logging.h&quot;</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &quot;packager/base/strings/string_number_conversions.h&quot;</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &quot;packager/base/strings/string_split.h&quot;</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &quot;packager/base/strings/stringprintf.h&quot;</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;packager/media/base/video_stream_info.h&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">namespace </span><a class="code" href="../../d8/daf/namespaceshaka.html">shaka</a> {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">namespace </span>{</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;Status ValidateFormatTag(<span class="keyword">const</span> std::string&amp; format_tag) {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">if</span> (format_tag.empty()) {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">return</span> Status(error::INVALID_ARGUMENT, <span class="stringliteral">&quot;Format tag should not be empty&quot;</span>);</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; }</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="comment">// Format tag should follow this prototype: %0[width]d.</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">if</span> (format_tag.size() &gt; 3 &amp;&amp; format_tag[0] == <span class="charliteral">&#39;%&#39;</span> &amp;&amp; format_tag[1] == <span class="charliteral">&#39;0&#39;</span> &amp;&amp;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; format_tag[format_tag.size() - 1] == <span class="charliteral">&#39;d&#39;</span>) {</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordtype">unsigned</span> out;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">if</span> (base::StringToUint(format_tag.substr(2, format_tag.size() - 3), &amp;out)) {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">return</span> Status::OK;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; }</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; }</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">return</span> Status(</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; error::INVALID_ARGUMENT,</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="stringliteral">&quot;Format tag should follow this prototype: %0[width]d if exist.&quot;</span>);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;}</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;} <span class="comment">// namespace</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="keyword">namespace </span>media {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;Status ValidateSegmentTemplate(<span class="keyword">const</span> std::string&amp; segment_template) {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">if</span> (segment_template.empty()) {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">return</span> Status(error::INVALID_ARGUMENT,</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="stringliteral">&quot;Segment template should not be empty.&quot;</span>);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; }</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; std::vector&lt;std::string&gt; splits = base::SplitString(</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; segment_template, <span class="stringliteral">&quot;$&quot;</span>, base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="comment">// ISO/IEC 23009-1:2012 5.3.9.4.4 Template-based Segment URL construction.</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="comment">// Allowed identifiers: $$, $RepresentationID$, $Number$, $Bandwidth$, $Time$.</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="comment">// &quot;$&quot; always appears in pairs, so there should be odd number of splits.</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">if</span> (splits.size() % 2 == 0) {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">return</span> Status(error::INVALID_ARGUMENT,</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="stringliteral">&quot;In segment templates, &#39;$&#39; should appear in pairs.&quot;</span>);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordtype">bool</span> has_number = <span class="keyword">false</span>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordtype">bool</span> has_time = <span class="keyword">false</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="comment">// Every second substring in split output should be an identifier.</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 1; i &lt; splits.size(); i += 2) {</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="comment">// Each identifier may be suffixed, within the enclosing $ characters,</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="comment">// with an additional format tag aligned with the printf format tag as</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="comment">// defined in IEEE 1003.1-2008 [10] following this prototype: %0[width]d.</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordtype">size_t</span> format_pos = splits[i].find(<span class="charliteral">&#39;%&#39;</span>);</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; std::string identifier = splits[i].substr(0, format_pos);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">if</span> (format_pos != std::string::npos) {</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; Status tag_check = ValidateFormatTag(splits[i].substr(format_pos));</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">if</span> (!tag_check.ok()) {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">return</span> tag_check;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; }</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="comment">// TODO(kqyang): Support &quot;RepresentationID&quot;.</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">if</span> (identifier == <span class="stringliteral">&quot;RepresentationID&quot;</span>) {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">return</span> Status(</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; error::UNIMPLEMENTED,</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="stringliteral">&quot;Segment template flag $RepresentationID$ is not supported yet.&quot;</span>);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (identifier == <span class="stringliteral">&quot;Number&quot;</span>) {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; has_number = <span class="keyword">true</span>;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (identifier == <span class="stringliteral">&quot;Time&quot;</span>) {</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; has_time = <span class="keyword">true</span>;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (identifier == <span class="stringliteral">&quot;&quot;</span>) {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">if</span> (format_pos != std::string::npos) {</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">return</span> Status(error::INVALID_ARGUMENT,</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="stringliteral">&quot;&#39;$$&#39; should not have any format tags.&quot;</span>);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (identifier != <span class="stringliteral">&quot;Bandwidth&quot;</span>) {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">return</span> Status(error::INVALID_ARGUMENT,</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="stringliteral">&quot;&#39;$&quot;</span> + splits[i] + <span class="stringliteral">&quot;$&#39; is not a valid identifier.&quot;</span>);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">if</span> (has_number &amp;&amp; has_time) {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> Status(</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; error::INVALID_ARGUMENT,</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="stringliteral">&quot;In segment templates $Number$ and $Time$ should not co-exist.&quot;</span>);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">if</span> (!has_number &amp;&amp; !has_time) {</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">return</span> Status(error::INVALID_ARGUMENT,</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="stringliteral">&quot;In segment templates $Number$ or $Time$ should exist.&quot;</span>);</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; }</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="comment">// Note: The below check is skipped.</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="comment">// Strings outside identifiers shall only contain characters that are</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="comment">// permitted within URLs according to RFC 1738.</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">return</span> Status::OK;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;}</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;std::string GetSegmentName(<span class="keyword">const</span> std::string&amp; segment_template,</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; uint64_t segment_start_time,</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; uint32_t segment_index,</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; uint32_t bandwidth) {</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; DCHECK_EQ(Status::OK, ValidateSegmentTemplate(segment_template));</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; std::vector&lt;std::string&gt; splits = base::SplitString(</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; segment_template, <span class="stringliteral">&quot;$&quot;</span>, base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="comment">// &quot;$&quot; always appears in pairs, so there should be odd number of splits.</span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; DCHECK_EQ(1u, splits.size() % 2);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; std::string segment_name;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; splits.size(); ++i) {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="comment">// Every second substring in split output should be an identifier.</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="comment">// Simply copy the non-identifier part.</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">if</span> (i % 2 == 0) {</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; segment_name += splits[i];</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">if</span> (splits[i].empty()) {</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="comment">// &quot;$$&quot; is an escape sequence, replaced with a single &quot;$&quot;.</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; segment_name += <span class="stringliteral">&quot;$&quot;</span>;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; }</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordtype">size_t</span> format_pos = splits[i].find(<span class="charliteral">&#39;%&#39;</span>);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; std::string identifier = splits[i].substr(0, format_pos);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; DCHECK(identifier == <span class="stringliteral">&quot;Number&quot;</span> || identifier == <span class="stringliteral">&quot;Time&quot;</span> ||</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; identifier == <span class="stringliteral">&quot;Bandwidth&quot;</span>);</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; std::string format_tag;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">if</span> (format_pos != std::string::npos) {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; format_tag = splits[i].substr(format_pos);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; DCHECK_EQ(Status::OK, ValidateFormatTag(format_tag));</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="comment">// Replace %d formatting to correctly format uint64_t.</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; format_tag = format_tag.substr(0, format_tag.size() - 1) + PRIu64;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="comment">// Default format tag &quot;%01d&quot;, modified to format uint64_t correctly.</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; format_tag = <span class="stringliteral">&quot;%01&quot;</span> PRIu64;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">if</span> (identifier == <span class="stringliteral">&quot;Number&quot;</span>) {</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="comment">// SegmentNumber starts from 1.</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; segment_name += base::StringPrintf(</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; format_tag.c_str(), <span class="keyword">static_cast&lt;</span>uint64_t<span class="keyword">&gt;</span>(segment_index + 1));</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (identifier == <span class="stringliteral">&quot;Time&quot;</span>) {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; segment_name +=</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; base::StringPrintf(format_tag.c_str(), segment_start_time);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (identifier == <span class="stringliteral">&quot;Bandwidth&quot;</span>) {</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; segment_name += base::StringPrintf(format_tag.c_str(),</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keyword">static_cast&lt;</span>uint64_t<span class="keyword">&gt;</span>(bandwidth));</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">return</span> segment_name;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;}</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;} <span class="comment">// namespace media</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;} <span class="comment">// namespace shaka</span></div><div class="ttc" id="namespaceshaka_html"><div class="ttname"><a href="../../d8/daf/namespaceshaka.html">shaka</a></div><div class="ttdoc">All the methods that are virtual are virtual for mocking. </div><div class="ttdef"><b>Definition:</b> <a href="../../d4/d15/gflags__hex__bytes_8cc_source.html#l00011">gflags_hex_bytes.cc:11</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Jun 28 2018 17:32:55 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.13
</small></address>
</body>
</html>