shaka-packager/docs/d7/dd6/key__source_8cc_source.html

82 lines
17 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/key_source.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">key_source.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/key_source.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 &quot;packager/base/logging.h&quot;</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &quot;packager/media/base/common_pssh_generator.h&quot;</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &quot;packager/media/base/playready_pssh_generator.h&quot;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;packager/media/base/protection_system_ids.h&quot;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;packager/media/base/widevine_pssh_generator.h&quot;</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &quot;packager/status_macros.h&quot;</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="keyword">namespace </span><a class="code" href="../../d8/daf/namespaceshaka.html">shaka</a> {</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">namespace </span>media {</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;KeySource::KeySource(<span class="keywordtype">int</span> protection_systems_flags, FourCC protection_scheme) {</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keywordflow">if</span> (protection_systems_flags &amp; COMMON_PROTECTION_SYSTEM_FLAG) {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; pssh_generators_.emplace_back(<span class="keyword">new</span> CommonPsshGenerator());</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; }</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">if</span> (protection_systems_flags &amp; PLAYREADY_PROTECTION_SYSTEM_FLAG) {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; pssh_generators_.emplace_back(</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">new</span> PlayReadyPsshGenerator(protection_scheme));</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; }</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">if</span> (protection_systems_flags &amp; WIDEVINE_PROTECTION_SYSTEM_FLAG) {</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; pssh_generators_.emplace_back(<span class="keyword">new</span> WidevinePsshGenerator(protection_scheme));</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; }</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">if</span> (protection_systems_flags &amp; FAIRPLAY_PROTECTION_SYSTEM_FLAG) {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; no_pssh_systems_.emplace_back(std::begin(kFairPlaySystemId),</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; std::end(kFairPlaySystemId));</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; }</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="comment">// We only support Marlin Adaptive Streaming Specification Simple Profile</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="comment">// with Implicit Content ID Mapping, which does not need a PSSH. Marlin</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// specific PSSH with Explicit Content ID Mapping is not generated.</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">if</span> (protection_systems_flags &amp; MARLIN_PROTECTION_SYSTEM_FLAG) {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; no_pssh_systems_.emplace_back(std::begin(kMarlinSystemId),</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; std::end(kMarlinSystemId));</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;}</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;KeySource::~KeySource() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="../../d1/d1f/classshaka_1_1media_1_1KeySource.html#a8cb007e01d91f38d64cad4ba47f1208a"> 48</a></span>&#160;<a class="code" href="../../d2/d20/classshaka_1_1Status.html">Status</a> <a class="code" href="../../d1/d1f/classshaka_1_1media_1_1KeySource.html#a8cb007e01d91f38d64cad4ba47f1208a">KeySource::UpdateProtectionSystemInfo</a>(</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; EncryptionKeyMap* encryption_key_map) {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; pssh_generator : pssh_generators_) {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> support_multiple_keys = pssh_generator-&gt;SupportMultipleKeys();</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">if</span> (support_multiple_keys) {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="../../d0/d86/structshaka_1_1media_1_1ProtectionSystemSpecificInfo.html">ProtectionSystemSpecificInfo</a> info;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; std::vector&lt;std::vector&lt;uint8_t&gt;&gt; key_ids;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> EncryptionKeyMap::value_type&amp; pair : *encryption_key_map) {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; key_ids.push_back(pair.second-&gt;key_id);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; RETURN_IF_ERROR(pssh_generator-&gt;GeneratePsshFromKeyIds(key_ids, &amp;info));</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> EncryptionKeyMap::value_type&amp; pair : *encryption_key_map) {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; pair.second-&gt;key_system_info.push_back(info);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; }</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> EncryptionKeyMap::value_type&amp; pair : *encryption_key_map) {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="../../d0/d86/structshaka_1_1media_1_1ProtectionSystemSpecificInfo.html">ProtectionSystemSpecificInfo</a> info;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; RETURN_IF_ERROR(pssh_generator-&gt;GeneratePsshFromKeyIdAndKey(</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; pair.second-&gt;key_id, pair.second-&gt;key, &amp;info));</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; pair.second-&gt;key_system_info.push_back(info);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; }</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; no_pssh_system : no_pssh_systems_) {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="../../d0/d86/structshaka_1_1media_1_1ProtectionSystemSpecificInfo.html">ProtectionSystemSpecificInfo</a> info;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; info.system_id = no_pssh_system;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> EncryptionKeyMap::value_type&amp; pair : *encryption_key_map) {</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; pair.second-&gt;key_system_info.push_back(info);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; }</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">return</span> Status::OK;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;}</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;} <span class="comment">// namespace media</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</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 class="ttc" id="classshaka_1_1Status_html"><div class="ttname"><a href="../../d2/d20/classshaka_1_1Status.html">shaka::Status</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d1/d13/status_8h_source.html#l00110">status.h:110</a></div></div>
<div class="ttc" id="classshaka_1_1media_1_1KeySource_html_a8cb007e01d91f38d64cad4ba47f1208a"><div class="ttname"><a href="../../d1/d1f/classshaka_1_1media_1_1KeySource.html#a8cb007e01d91f38d64cad4ba47f1208a">shaka::media::KeySource::UpdateProtectionSystemInfo</a></div><div class="ttdeci">Status UpdateProtectionSystemInfo(EncryptionKeyMap *encryption_key_map)</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/dd6/key__source_8cc_source.html#l00048">key_source.cc:48</a></div></div>
<div class="ttc" id="structshaka_1_1media_1_1ProtectionSystemSpecificInfo_html"><div class="ttname"><a href="../../d0/d86/structshaka_1_1media_1_1ProtectionSystemSpecificInfo.html">shaka::media::ProtectionSystemSpecificInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d6/d59/protection__system__specific__info_8h_source.html#l00026">protection_system_specific_info.h:26</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Tue Jan 21 2020 16:58:50 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>