diff --git a/docs/annotated.html b/docs/annotated.html index b559d22b31..203991d4a9 100644 --- a/docs/annotated.html +++ b/docs/annotated.html @@ -371,7 +371,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/classes.html b/docs/classes.html index 1af2d5f1e1..8c85f5663d 100644 --- a/docs/classes.html +++ b/docs/classes.html @@ -179,7 +179,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/d0/d00/structshaka_1_1media_1_1mp4_1_1HandlerReference-members.html b/docs/d0/d00/structshaka_1_1media_1_1mp4_1_1HandlerReference-members.html index fe7069de7f..e9932d879a 100644 --- a/docs/d0/d00/structshaka_1_1media_1_1mp4_1_1HandlerReference-members.html +++ b/docs/d0/d00/structshaka_1_1media_1_1mp4_1_1HandlerReference-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d04/classshaka_1_1media_1_1RsaRequestSigner-members.html b/docs/d0/d04/classshaka_1_1media_1_1RsaRequestSigner-members.html index 7cd3a1a5c3..2a443ed322 100644 --- a/docs/d0/d04/classshaka_1_1media_1_1RsaRequestSigner-members.html +++ b/docs/d0/d04/classshaka_1_1media_1_1RsaRequestSigner-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d06/mpd__flags_8cc_source.html b/docs/d0/d06/mpd__flags_8cc_source.html index d21bcb1e21..415aa1858b 100644 --- a/docs/d0/d06/mpd__flags_8cc_source.html +++ b/docs/d0/d06/mpd__flags_8cc_source.html @@ -140,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d0e/classshaka_1_1media_1_1HttpKeyFetcher-members.html b/docs/d0/d0e/classshaka_1_1media_1_1HttpKeyFetcher-members.html index 2ef6175b9d..7235c037e8 100644 --- a/docs/d0/d0e/classshaka_1_1media_1_1HttpKeyFetcher-members.html +++ b/docs/d0/d0e/classshaka_1_1media_1_1HttpKeyFetcher-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d0e/hevc__decoder__configuration__record_8h_source.html b/docs/d0/d0e/hevc__decoder__configuration__record_8h_source.html index 73dca37b0d..77a0f0c99c 100644 --- a/docs/d0/d0e/hevc__decoder__configuration__record_8h_source.html +++ b/docs/d0/d0e/hevc__decoder__configuration__record_8h_source.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
24  HEVCDecoderConfigurationRecord();
25  ~HEVCDecoderConfigurationRecord() override;
26 
-
28  std::string GetCodecString(VideoCodec codec) const;
+
28  std::string GetCodecString(Codec codec) const;
29 
30  private:
31  bool ParseInternal() override;
@@ -132,13 +132,13 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
45 } // namespace shaka
46 
47 #endif // MEDIA_CODECS_HEVC_DECODER_CONFIGURATION_RECORD_H_
-
shaka::media::HEVCDecoderConfigurationRecord::GetCodecString
std::string GetCodecString(VideoCodec codec) const
Definition: hevc_decoder_configuration_record.cc:135
shaka::media::DecoderConfigurationRecord
Definition: decoder_configuration_record.h:20
shaka::media::HEVCDecoderConfigurationRecord
Class for parsing HEVC decoder configuration record.
Definition: hevc_decoder_configuration_record.h:22
+
shaka::media::HEVCDecoderConfigurationRecord::GetCodecString
std::string GetCodecString(Codec codec) const
Definition: hevc_decoder_configuration_record.cc:135
diff --git a/docs/d0/d0e/muxer__options_8h_source.html b/docs/d0/d0e/muxer__options_8h_source.html index c7fa2e0dbf..a09d15b60c 100644 --- a/docs/d0/d0e/muxer__options_8h_source.html +++ b/docs/d0/d0e/muxer__options_8h_source.html @@ -128,12 +128,15 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
71  std::string temp_dir;
72 
75  uint32_t bandwidth;
-
76 };
-
77 
-
78 } // namespace media
-
79 } // namespace shaka
+
76 
+
77  // Enable/disable subsample encryption for WebM containers.
+
78  bool webm_subsample_encryption;
+
79 };
80 
-
81 #endif // MEDIA_BASE_MUXER_OPTIONS_H_
+
81 } // namespace media
+
82 } // namespace shaka
+
83 
+
84 #endif // MEDIA_BASE_MUXER_OPTIONS_H_
shaka::media::MuxerOptions::fragment_sap_aligned
bool fragment_sap_aligned
Definition: muxer_options.h:43
shaka::media::MuxerOptions::output_file_name
std::string output_file_name
Definition: muxer_options.h:62
shaka::media::MuxerOptions::mp4_use_decoding_timestamp_in_timeline
bool mp4_use_decoding_timestamp_in_timeline
Definition: muxer_options.h:57
@@ -149,7 +152,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d0f/classshaka_1_1media_1_1mp2t_1_1TsSectionPmt-members.html b/docs/d0/d0f/classshaka_1_1media_1_1mp2t_1_1TsSectionPmt-members.html index 3e664853e6..f2fb3cda44 100644 --- a/docs/d0/d0f/classshaka_1_1media_1_1mp2t_1_1TsSectionPmt-members.html +++ b/docs/d0/d0f/classshaka_1_1media_1_1mp2t_1_1TsSectionPmt-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d11/structshaka_1_1media_1_1VPxFrameInfo.html b/docs/d0/d11/structshaka_1_1media_1_1VPxFrameInfo.html index 085d861d6e..b97b97b7df 100644 --- a/docs/d0/d11/structshaka_1_1media_1_1VPxFrameInfo.html +++ b/docs/d0/d11/structshaka_1_1media_1_1VPxFrameInfo.html @@ -121,7 +121,7 @@ uint32_t height diff --git a/docs/d0/d1e/classshaka_1_1media_1_1H265ByteToUnitStreamConverter-members.html b/docs/d0/d1e/classshaka_1_1media_1_1H265ByteToUnitStreamConverter-members.html index 11bd63e46f..062356d033 100644 --- a/docs/d0/d1e/classshaka_1_1media_1_1H265ByteToUnitStreamConverter-members.html +++ b/docs/d0/d1e/classshaka_1_1media_1_1H265ByteToUnitStreamConverter-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d1f/structshaka_1_1media_1_1mp4_1_1VTTCueBox-members.html b/docs/d0/d1f/structshaka_1_1media_1_1mp4_1_1VTTCueBox-members.html index e6530e2494..4fc0566b49 100644 --- a/docs/d0/d1f/structshaka_1_1media_1_1mp4_1_1VTTCueBox-members.html +++ b/docs/d0/d1f/structshaka_1_1media_1_1mp4_1_1VTTCueBox-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d26/classshaka_1_1media_1_1mp2t_1_1TsSectionPat.html b/docs/d0/d26/classshaka_1_1media_1_1mp2t_1_1TsSectionPat.html index 10cd9cb0a5..393011c7d8 100644 --- a/docs/d0/d26/classshaka_1_1media_1_1mp2t_1_1TsSectionPat.html +++ b/docs/d0/d26/classshaka_1_1media_1_1mp2t_1_1TsSectionPat.html @@ -155,7 +155,7 @@ void Reset () override diff --git a/docs/d0/d27/structshaka_1_1media_1_1MuxerOptions.html b/docs/d0/d27/structshaka_1_1media_1_1MuxerOptions.html index 162e5c2960..96075955c8 100644 --- a/docs/d0/d27/structshaka_1_1media_1_1MuxerOptions.html +++ b/docs/d0/d27/structshaka_1_1media_1_1MuxerOptions.html @@ -125,6 +125,9 @@ std::string   uint32_t bandwidth   + +bool webm_subsample_encryption

Detailed Description

This structure contains the list of configuration options for Muxer.

@@ -288,7 +291,7 @@ std::string  diff --git a/docs/d0/d30/mock__mpd__notifier_8h_source.html b/docs/d0/d30/mock__mpd__notifier_8h_source.html index 6fec8fae4c..4a04a93154 100644 --- a/docs/d0/d30/mock__mpd__notifier_8h_source.html +++ b/docs/d0/d30/mock__mpd__notifier_8h_source.html @@ -148,7 +148,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
diff --git a/docs/d0/d32/mp2t__common_8h_source.html b/docs/d0/d32/mp2t__common_8h_source.html index af4f7dc336..42020994dc 100644 --- a/docs/d0/d32/mp2t__common_8h_source.html +++ b/docs/d0/d32/mp2t__common_8h_source.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d33/classshaka_1_1MockRepresentation.html b/docs/d0/d33/classshaka_1_1MockRepresentation.html index 2d86d0f9f3..725b54a366 100644 --- a/docs/d0/d33/classshaka_1_1MockRepresentation.html +++ b/docs/d0/d33/classshaka_1_1MockRepresentation.html @@ -160,7 +160,7 @@ Additional Inherited Members diff --git a/docs/d0/d35/es__descriptor_8cc_source.html b/docs/d0/d35/es__descriptor_8cc_source.html index 9b65b2486e..4672fdcb33 100644 --- a/docs/d0/d35/es__descriptor_8cc_source.html +++ b/docs/d0/d35/es__descriptor_8cc_source.html @@ -285,7 +285,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d3a/hls__notify__muxer__listener_8cc_source.html b/docs/d0/d3a/hls__notify__muxer__listener_8cc_source.html index 0fbeb602fd..aa5b43155d 100644 --- a/docs/d0/d3a/hls__notify__muxer__listener_8cc_source.html +++ b/docs/d0/d3a/hls__notify__muxer__listener_8cc_source.html @@ -208,7 +208,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
119 } // namespace media
120 } // namespace shaka
shaka::media::HlsNotifyMuxerListener::OnMediaStart
void OnMediaStart(const MuxerOptions &muxer_options, const StreamInfo &stream_info, uint32_t time_scale, ContainerType container_type) override
Definition: hls_notify_muxer_listener.cc:74
-
shaka::media::StreamInfo
Abstract class holds stream information.
Definition: stream_info.h:26
+
shaka::media::StreamInfo
Abstract class holds stream information.
Definition: stream_info.h:53
shaka::media::HlsNotifyMuxerListener::OnEncryptionInfoReady
void OnEncryptionInfoReady(bool is_initial_encryption_info, FourCC protection_scheme, const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &iv, const std::vector< ProtectionSystemSpecificInfo > &key_system_info) override
Definition: hls_notify_muxer_listener.cc:33
shaka::media::MuxerOptions
This structure contains the list of configuration options for Muxer.
Definition: muxer_options.h:18
shaka::media::HlsNotifyMuxerListener::OnEncryptionStart
void OnEncryptionStart() override
Definition: hls_notify_muxer_listener.cc:52
@@ -220,7 +220,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d3a/webm__constants_8h_source.html b/docs/d0/d3a/webm__constants_8h_source.html index f384d02387..d6748a86e9 100644 --- a/docs/d0/d3a/webm__constants_8h_source.html +++ b/docs/d0/d3a/webm__constants_8h_source.html @@ -94,226 +94,231 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
5 #ifndef MEDIA_FORMATS_WEBM_WEBM_CONSTANTS_H_
6 #define MEDIA_FORMATS_WEBM_WEBM_CONSTANTS_H_
7 
-
8 #include <stdint.h>
-
9 
-
10 namespace shaka {
-
11 namespace media {
-
12 
-
16 const int kWebMIdAESSettingsCipherMode = 0x47E8;
-
17 const int kWebMIdAlphaMode = 0x53C0;
-
18 const int kWebMIdAspectRatioType = 0x54B3;
-
19 const int kWebMIdAttachedFile = 0x61A7;
-
20 const int kWebMIdAttachmentLink = 0x7446;
-
21 const int kWebMIdAttachments = 0x1941A469;
-
22 const int kWebMIdAudio = 0xE1;
-
23 const int kWebMIdBitDepth = 0x6264;
-
24 const int kWebMIdBlock = 0xA1;
-
25 const int kWebMIdBlockAddID = 0xEE;
-
26 const int kWebMIdBlockAdditions = 0x75A1;
-
27 const int kWebMIdBlockAdditional = 0xA5;
-
28 const int kWebMIdBlockDuration = 0x9B;
-
29 const int kWebMIdBlockGroup = 0xA0;
-
30 const int kWebMIdBlockMore = 0xA6;
-
31 const int kWebMIdChannels = 0x9F;
-
32 const int kWebMIdChapCountry = 0x437E;
-
33 const int kWebMIdChapLanguage = 0x437C;
-
34 const int kWebMIdChapProcess = 0x6944;
-
35 const int kWebMIdChapProcessCodecID = 0x6955;
-
36 const int kWebMIdChapProcessCommand = 0x6911;
-
37 const int kWebMIdChapProcessData = 0x6933;
-
38 const int kWebMIdChapProcessPrivate = 0x450D;
-
39 const int kWebMIdChapProcessTime = 0x6922;
-
40 const int kWebMIdChapString = 0x85;
-
41 const int kWebMIdChapterAtom = 0xB6;
-
42 const int kWebMIdChapterDisplay = 0x80;
-
43 const int kWebMIdChapterFlagEnabled = 0x4598;
-
44 const int kWebMIdChapterFlagHidden = 0x98;
-
45 const int kWebMIdChapterPhysicalEquiv = 0x63C3;
-
46 const int kWebMIdChapters = 0x1043A770;
-
47 const int kWebMIdChapterSegmentEditionUID = 0x6EBC;
-
48 const int kWebMIdChapterSegmentUID = 0x6E67;
-
49 const int kWebMIdChapterTimeEnd = 0x92;
-
50 const int kWebMIdChapterTimeStart = 0x91;
-
51 const int kWebMIdChapterTrack = 0x8F;
-
52 const int kWebMIdChapterTrackNumber = 0x89;
-
53 const int kWebMIdChapterTranslate = 0x6924;
-
54 const int kWebMIdChapterTranslateCodec = 0x69BF;
-
55 const int kWebMIdChapterTranslateEditionUID = 0x69FC;
-
56 const int kWebMIdChapterTranslateID = 0x69A5;
-
57 const int kWebMIdChapterUID = 0x73C4;
-
58 const int kWebMIdCluster = 0x1F43B675;
-
59 const int kWebMIdCodecDecodeAll = 0xAA;
-
60 const int kWebMIdCodecDelay = 0x56AA;
-
61 const int kWebMIdCodecID = 0x86;
-
62 const int kWebMIdCodecName = 0x258688;
-
63 const int kWebMIdCodecPrivate = 0x63A2;
-
64 const int kWebMIdCodecState = 0xA4;
-
65 const int kWebMIdColorSpace = 0x2EB524;
-
66 const int kWebMIdContentCompAlgo = 0x4254;
-
67 const int kWebMIdContentCompression = 0x5034;
-
68 const int kWebMIdContentCompSettings = 0x4255;
-
69 const int kWebMIdContentEncAESSettings = 0x47E7;
-
70 const int kWebMIdContentEncAlgo = 0x47E1;
-
71 const int kWebMIdContentEncKeyID = 0x47E2;
-
72 const int kWebMIdContentEncoding = 0x6240;
-
73 const int kWebMIdContentEncodingOrder = 0x5031;
-
74 const int kWebMIdContentEncodings = 0x6D80;
-
75 const int kWebMIdContentEncodingScope = 0x5032;
-
76 const int kWebMIdContentEncodingType = 0x5033;
-
77 const int kWebMIdContentEncryption = 0x5035;
-
78 const int kWebMIdContentSigAlgo = 0x47E5;
-
79 const int kWebMIdContentSigHashAlgo = 0x47E6;
-
80 const int kWebMIdContentSigKeyID = 0x47E4;
-
81 const int kWebMIdContentSignature = 0x47E3;
-
82 const int kWebMIdCRC32 = 0xBF;
-
83 const int kWebMIdCueBlockNumber = 0x5378;
-
84 const int kWebMIdCueClusterPosition = 0xF1;
-
85 const int kWebMIdCueCodecState = 0xEA;
-
86 const int kWebMIdCuePoint = 0xBB;
-
87 const int kWebMIdCueReference = 0xDB;
-
88 const int kWebMIdCueRefTime = 0x96;
-
89 const int kWebMIdCues = 0x1C53BB6B;
-
90 const int kWebMIdCueTime = 0xB3;
-
91 const int kWebMIdCueTrack = 0xF7;
-
92 const int kWebMIdCueTrackPositions = 0xB7;
-
93 const int kWebMIdDateUTC = 0x4461;
-
94 const int kWebMIdDefaultDuration = 0x23E383;
-
95 const int kWebMIdDiscardPadding = 0x75A2;
-
96 const int kWebMIdDisplayHeight = 0x54BA;
-
97 const int kWebMIdDisplayUnit = 0x54B2;
-
98 const int kWebMIdDisplayWidth = 0x54B0;
-
99 const int kWebMIdDocType = 0x4282;
-
100 const int kWebMIdDocTypeReadVersion = 0x4285;
-
101 const int kWebMIdDocTypeVersion = 0x4287;
-
102 const int kWebMIdDuration = 0x4489;
-
103 const int kWebMIdEBMLHeader = 0x1A45DFA3;
-
104 const int kWebMIdEBMLMaxIDLength = 0x42F2;
-
105 const int kWebMIdEBMLMaxSizeLength = 0x42F3;
-
106 const int kWebMIdEBMLReadVersion = 0x42F7;
-
107 const int kWebMIdEBMLVersion = 0x4286;
-
108 const int kWebMIdEditionEntry = 0x45B9;
-
109 const int kWebMIdEditionFlagDefault = 0x45DB;
-
110 const int kWebMIdEditionFlagHidden = 0x45BD;
-
111 const int kWebMIdEditionFlagOrdered = 0x45DD;
-
112 const int kWebMIdEditionUID = 0x45BC;
-
113 const int kWebMIdFileData = 0x465C;
-
114 const int kWebMIdFileDescription = 0x467E;
-
115 const int kWebMIdFileMimeType = 0x4660;
-
116 const int kWebMIdFileName = 0x466E;
-
117 const int kWebMIdFileUID = 0x46AE;
-
118 const int kWebMIdFlagDefault = 0x88;
-
119 const int kWebMIdFlagEnabled = 0xB9;
-
120 const int kWebMIdFlagForced = 0x55AA;
-
121 const int kWebMIdFlagInterlaced = 0x9A;
-
122 const int kWebMIdFlagLacing = 0x9C;
-
123 const int kWebMIdFrameRate = 0x2383E3;
-
124 const int kWebMIdInfo = 0x1549A966;
-
125 const int kWebMIdJoinBlocks = 0xE9;
-
126 const int kWebMIdLaceNumber = 0xCC;
-
127 const int kWebMIdLanguage = 0x22B59C;
-
128 const int kWebMIdMaxBlockAdditionId = 0x55EE;
-
129 const int kWebMIdMaxCache = 0x6DF8;
-
130 const int kWebMIdMinCache = 0x6DE7;
-
131 const int kWebMIdMuxingApp = 0x4D80;
-
132 const int kWebMIdName = 0x536E;
-
133 const int kWebMIdNextFilename = 0x3E83BB;
-
134 const int kWebMIdNextUID = 0x3EB923;
-
135 const int kWebMIdOutputSamplingFrequency = 0x78B5;
-
136 const int kWebMIdPixelCropBottom = 0x54AA;
-
137 const int kWebMIdPixelCropLeft = 0x54CC;
-
138 const int kWebMIdPixelCropRight = 0x54DD;
-
139 const int kWebMIdPixelCropTop = 0x54BB;
-
140 const int kWebMIdPixelHeight = 0xBA;
-
141 const int kWebMIdPixelWidth = 0xB0;
-
142 const int kWebMIdPosition = 0xA7;
-
143 const int kWebMIdPrevFilename = 0x3C83AB;
-
144 const int kWebMIdPrevSize = 0xAB;
-
145 const int kWebMIdPrevUID = 0x3CB923;
-
146 const int kWebMIdReferenceBlock = 0xFB;
-
147 const int kWebMIdReferencePriority = 0xFA;
-
148 const int kWebMIdSamplingFrequency = 0xB5;
-
149 const int kWebMIdSeek = 0x4DBB;
-
150 const int kWebMIdSeekHead = 0x114D9B74;
-
151 const int kWebMIdSeekID = 0x53AB;
-
152 const int kWebMIdSeekPosition = 0x53AC;
-
153 const int kWebMIdSeekPreRoll = 0x56BB;
-
154 const int kWebMIdSegment = 0x18538067;
-
155 const int kWebMIdSegmentFamily = 0x4444;
-
156 const int kWebMIdSegmentFilename = 0x7384;
-
157 const int kWebMIdSegmentUID = 0x73A4;
-
158 const int kWebMIdSilentTrackNumber = 0x58D7;
-
159 const int kWebMIdSilentTracks = 0x5854;
-
160 const int kWebMIdSimpleBlock = 0xA3;
-
161 const int kWebMIdSimpleTag = 0x67C8;
-
162 const int kWebMIdSlices = 0x8E;
-
163 const int kWebMIdStereoMode = 0x53B8;
-
164 const int kWebMIdTag = 0x7373;
-
165 const int kWebMIdTagAttachmentUID = 0x63C6;
-
166 const int kWebMIdTagBinary = 0x4485;
-
167 const int kWebMIdTagChapterUID = 0x63C4;
-
168 const int kWebMIdTagDefault = 0x4484;
-
169 const int kWebMIdTagEditionUID = 0x63C9;
-
170 const int kWebMIdTagLanguage = 0x447A;
-
171 const int kWebMIdTagName = 0x45A3;
-
172 const int kWebMIdTags = 0x1254C367;
-
173 const int kWebMIdTagString = 0x4487;
-
174 const int kWebMIdTagTrackUID = 0x63C5;
-
175 const int kWebMIdTargets = 0x63C0;
-
176 const int kWebMIdTargetType = 0x63CA;
-
177 const int kWebMIdTargetTypeValue = 0x68CA;
-
178 const int kWebMIdTimecode = 0xE7;
-
179 const int kWebMIdTimecodeScale = 0x2AD7B1;
-
180 const int kWebMIdTimeSlice = 0xE8;
-
181 const int kWebMIdTitle = 0x7BA9;
-
182 const int kWebMIdTrackCombinePlanes = 0xE3;
-
183 const int kWebMIdTrackEntry = 0xAE;
-
184 const int kWebMIdTrackJoinUID = 0xED;
-
185 const int kWebMIdTrackNumber = 0xD7;
-
186 const int kWebMIdTrackOperation = 0xE2;
-
187 const int kWebMIdTrackOverlay = 0x6FAB;
-
188 const int kWebMIdTrackPlane = 0xE4;
-
189 const int kWebMIdTrackPlaneType = 0xE6;
-
190 const int kWebMIdTrackPlaneUID = 0xE5;
-
191 const int kWebMIdTracks = 0x1654AE6B;
-
192 const int kWebMIdTrackTimecodeScale = 0x23314F;
-
193 const int kWebMIdTrackTranslate = 0x6624;
-
194 const int kWebMIdTrackTranslateCodec = 0x66BF;
-
195 const int kWebMIdTrackTranslateEditionUID = 0x66FC;
-
196 const int kWebMIdTrackTranslateTrackID = 0x66A5;
-
197 const int kWebMIdTrackType = 0x83;
-
198 const int kWebMIdTrackUID = 0x73C5;
-
199 const int kWebMIdVideo = 0xE0;
-
200 const int kWebMIdVoid = 0xEC;
-
201 const int kWebMIdWritingApp = 0x5741;
-
202 
-
203 const int64_t kWebMReservedId = 0x1FFFFFFF;
-
204 const int64_t kWebMUnknownSize = 0x00FFFFFFFFFFFFFFLL;
-
205 
-
206 const uint8_t kWebMFlagKeyframe = 0x80;
-
207 
-
210 const uint8_t kWebMFlagEncryptedFrame = 0x1;
-
211 const int kWebMIvSize = 8;
-
212 const int kWebMSignalByteSize = 1;
-
213 
-
216 
-
217 const int kWebMTrackTypeVideo = 1;
-
218 const int kWebMTrackTypeAudio = 2;
-
219 const int kWebMTrackTypeSubtitlesOrCaptions = 0x11;
-
220 const int kWebMTrackTypeDescriptionsOrMetadata = 0x21;
+
8 #include <stddef.h>
+
9 #include <stdint.h>
+
10 
+
11 namespace shaka {
+
12 namespace media {
+
13 
+
17 const int kWebMIdAESSettingsCipherMode = 0x47E8;
+
18 const int kWebMIdAlphaMode = 0x53C0;
+
19 const int kWebMIdAspectRatioType = 0x54B3;
+
20 const int kWebMIdAttachedFile = 0x61A7;
+
21 const int kWebMIdAttachmentLink = 0x7446;
+
22 const int kWebMIdAttachments = 0x1941A469;
+
23 const int kWebMIdAudio = 0xE1;
+
24 const int kWebMIdBitDepth = 0x6264;
+
25 const int kWebMIdBlock = 0xA1;
+
26 const int kWebMIdBlockAddID = 0xEE;
+
27 const int kWebMIdBlockAdditions = 0x75A1;
+
28 const int kWebMIdBlockAdditional = 0xA5;
+
29 const int kWebMIdBlockDuration = 0x9B;
+
30 const int kWebMIdBlockGroup = 0xA0;
+
31 const int kWebMIdBlockMore = 0xA6;
+
32 const int kWebMIdChannels = 0x9F;
+
33 const int kWebMIdChapCountry = 0x437E;
+
34 const int kWebMIdChapLanguage = 0x437C;
+
35 const int kWebMIdChapProcess = 0x6944;
+
36 const int kWebMIdChapProcessCodecID = 0x6955;
+
37 const int kWebMIdChapProcessCommand = 0x6911;
+
38 const int kWebMIdChapProcessData = 0x6933;
+
39 const int kWebMIdChapProcessPrivate = 0x450D;
+
40 const int kWebMIdChapProcessTime = 0x6922;
+
41 const int kWebMIdChapString = 0x85;
+
42 const int kWebMIdChapterAtom = 0xB6;
+
43 const int kWebMIdChapterDisplay = 0x80;
+
44 const int kWebMIdChapterFlagEnabled = 0x4598;
+
45 const int kWebMIdChapterFlagHidden = 0x98;
+
46 const int kWebMIdChapterPhysicalEquiv = 0x63C3;
+
47 const int kWebMIdChapters = 0x1043A770;
+
48 const int kWebMIdChapterSegmentEditionUID = 0x6EBC;
+
49 const int kWebMIdChapterSegmentUID = 0x6E67;
+
50 const int kWebMIdChapterTimeEnd = 0x92;
+
51 const int kWebMIdChapterTimeStart = 0x91;
+
52 const int kWebMIdChapterTrack = 0x8F;
+
53 const int kWebMIdChapterTrackNumber = 0x89;
+
54 const int kWebMIdChapterTranslate = 0x6924;
+
55 const int kWebMIdChapterTranslateCodec = 0x69BF;
+
56 const int kWebMIdChapterTranslateEditionUID = 0x69FC;
+
57 const int kWebMIdChapterTranslateID = 0x69A5;
+
58 const int kWebMIdChapterUID = 0x73C4;
+
59 const int kWebMIdCluster = 0x1F43B675;
+
60 const int kWebMIdCodecDecodeAll = 0xAA;
+
61 const int kWebMIdCodecDelay = 0x56AA;
+
62 const int kWebMIdCodecID = 0x86;
+
63 const int kWebMIdCodecName = 0x258688;
+
64 const int kWebMIdCodecPrivate = 0x63A2;
+
65 const int kWebMIdCodecState = 0xA4;
+
66 const int kWebMIdColorSpace = 0x2EB524;
+
67 const int kWebMIdContentCompAlgo = 0x4254;
+
68 const int kWebMIdContentCompression = 0x5034;
+
69 const int kWebMIdContentCompSettings = 0x4255;
+
70 const int kWebMIdContentEncAESSettings = 0x47E7;
+
71 const int kWebMIdContentEncAlgo = 0x47E1;
+
72 const int kWebMIdContentEncKeyID = 0x47E2;
+
73 const int kWebMIdContentEncoding = 0x6240;
+
74 const int kWebMIdContentEncodingOrder = 0x5031;
+
75 const int kWebMIdContentEncodings = 0x6D80;
+
76 const int kWebMIdContentEncodingScope = 0x5032;
+
77 const int kWebMIdContentEncodingType = 0x5033;
+
78 const int kWebMIdContentEncryption = 0x5035;
+
79 const int kWebMIdContentSigAlgo = 0x47E5;
+
80 const int kWebMIdContentSigHashAlgo = 0x47E6;
+
81 const int kWebMIdContentSigKeyID = 0x47E4;
+
82 const int kWebMIdContentSignature = 0x47E3;
+
83 const int kWebMIdCRC32 = 0xBF;
+
84 const int kWebMIdCueBlockNumber = 0x5378;
+
85 const int kWebMIdCueClusterPosition = 0xF1;
+
86 const int kWebMIdCueCodecState = 0xEA;
+
87 const int kWebMIdCuePoint = 0xBB;
+
88 const int kWebMIdCueReference = 0xDB;
+
89 const int kWebMIdCueRefTime = 0x96;
+
90 const int kWebMIdCues = 0x1C53BB6B;
+
91 const int kWebMIdCueTime = 0xB3;
+
92 const int kWebMIdCueTrack = 0xF7;
+
93 const int kWebMIdCueTrackPositions = 0xB7;
+
94 const int kWebMIdDateUTC = 0x4461;
+
95 const int kWebMIdDefaultDuration = 0x23E383;
+
96 const int kWebMIdDiscardPadding = 0x75A2;
+
97 const int kWebMIdDisplayHeight = 0x54BA;
+
98 const int kWebMIdDisplayUnit = 0x54B2;
+
99 const int kWebMIdDisplayWidth = 0x54B0;
+
100 const int kWebMIdDocType = 0x4282;
+
101 const int kWebMIdDocTypeReadVersion = 0x4285;
+
102 const int kWebMIdDocTypeVersion = 0x4287;
+
103 const int kWebMIdDuration = 0x4489;
+
104 const int kWebMIdEBMLHeader = 0x1A45DFA3;
+
105 const int kWebMIdEBMLMaxIDLength = 0x42F2;
+
106 const int kWebMIdEBMLMaxSizeLength = 0x42F3;
+
107 const int kWebMIdEBMLReadVersion = 0x42F7;
+
108 const int kWebMIdEBMLVersion = 0x4286;
+
109 const int kWebMIdEditionEntry = 0x45B9;
+
110 const int kWebMIdEditionFlagDefault = 0x45DB;
+
111 const int kWebMIdEditionFlagHidden = 0x45BD;
+
112 const int kWebMIdEditionFlagOrdered = 0x45DD;
+
113 const int kWebMIdEditionUID = 0x45BC;
+
114 const int kWebMIdFileData = 0x465C;
+
115 const int kWebMIdFileDescription = 0x467E;
+
116 const int kWebMIdFileMimeType = 0x4660;
+
117 const int kWebMIdFileName = 0x466E;
+
118 const int kWebMIdFileUID = 0x46AE;
+
119 const int kWebMIdFlagDefault = 0x88;
+
120 const int kWebMIdFlagEnabled = 0xB9;
+
121 const int kWebMIdFlagForced = 0x55AA;
+
122 const int kWebMIdFlagInterlaced = 0x9A;
+
123 const int kWebMIdFlagLacing = 0x9C;
+
124 const int kWebMIdFrameRate = 0x2383E3;
+
125 const int kWebMIdInfo = 0x1549A966;
+
126 const int kWebMIdJoinBlocks = 0xE9;
+
127 const int kWebMIdLaceNumber = 0xCC;
+
128 const int kWebMIdLanguage = 0x22B59C;
+
129 const int kWebMIdMaxBlockAdditionId = 0x55EE;
+
130 const int kWebMIdMaxCache = 0x6DF8;
+
131 const int kWebMIdMinCache = 0x6DE7;
+
132 const int kWebMIdMuxingApp = 0x4D80;
+
133 const int kWebMIdName = 0x536E;
+
134 const int kWebMIdNextFilename = 0x3E83BB;
+
135 const int kWebMIdNextUID = 0x3EB923;
+
136 const int kWebMIdOutputSamplingFrequency = 0x78B5;
+
137 const int kWebMIdPixelCropBottom = 0x54AA;
+
138 const int kWebMIdPixelCropLeft = 0x54CC;
+
139 const int kWebMIdPixelCropRight = 0x54DD;
+
140 const int kWebMIdPixelCropTop = 0x54BB;
+
141 const int kWebMIdPixelHeight = 0xBA;
+
142 const int kWebMIdPixelWidth = 0xB0;
+
143 const int kWebMIdPosition = 0xA7;
+
144 const int kWebMIdPrevFilename = 0x3C83AB;
+
145 const int kWebMIdPrevSize = 0xAB;
+
146 const int kWebMIdPrevUID = 0x3CB923;
+
147 const int kWebMIdReferenceBlock = 0xFB;
+
148 const int kWebMIdReferencePriority = 0xFA;
+
149 const int kWebMIdSamplingFrequency = 0xB5;
+
150 const int kWebMIdSeek = 0x4DBB;
+
151 const int kWebMIdSeekHead = 0x114D9B74;
+
152 const int kWebMIdSeekID = 0x53AB;
+
153 const int kWebMIdSeekPosition = 0x53AC;
+
154 const int kWebMIdSeekPreRoll = 0x56BB;
+
155 const int kWebMIdSegment = 0x18538067;
+
156 const int kWebMIdSegmentFamily = 0x4444;
+
157 const int kWebMIdSegmentFilename = 0x7384;
+
158 const int kWebMIdSegmentUID = 0x73A4;
+
159 const int kWebMIdSilentTrackNumber = 0x58D7;
+
160 const int kWebMIdSilentTracks = 0x5854;
+
161 const int kWebMIdSimpleBlock = 0xA3;
+
162 const int kWebMIdSimpleTag = 0x67C8;
+
163 const int kWebMIdSlices = 0x8E;
+
164 const int kWebMIdStereoMode = 0x53B8;
+
165 const int kWebMIdTag = 0x7373;
+
166 const int kWebMIdTagAttachmentUID = 0x63C6;
+
167 const int kWebMIdTagBinary = 0x4485;
+
168 const int kWebMIdTagChapterUID = 0x63C4;
+
169 const int kWebMIdTagDefault = 0x4484;
+
170 const int kWebMIdTagEditionUID = 0x63C9;
+
171 const int kWebMIdTagLanguage = 0x447A;
+
172 const int kWebMIdTagName = 0x45A3;
+
173 const int kWebMIdTags = 0x1254C367;
+
174 const int kWebMIdTagString = 0x4487;
+
175 const int kWebMIdTagTrackUID = 0x63C5;
+
176 const int kWebMIdTargets = 0x63C0;
+
177 const int kWebMIdTargetType = 0x63CA;
+
178 const int kWebMIdTargetTypeValue = 0x68CA;
+
179 const int kWebMIdTimecode = 0xE7;
+
180 const int kWebMIdTimecodeScale = 0x2AD7B1;
+
181 const int kWebMIdTimeSlice = 0xE8;
+
182 const int kWebMIdTitle = 0x7BA9;
+
183 const int kWebMIdTrackCombinePlanes = 0xE3;
+
184 const int kWebMIdTrackEntry = 0xAE;
+
185 const int kWebMIdTrackJoinUID = 0xED;
+
186 const int kWebMIdTrackNumber = 0xD7;
+
187 const int kWebMIdTrackOperation = 0xE2;
+
188 const int kWebMIdTrackOverlay = 0x6FAB;
+
189 const int kWebMIdTrackPlane = 0xE4;
+
190 const int kWebMIdTrackPlaneType = 0xE6;
+
191 const int kWebMIdTrackPlaneUID = 0xE5;
+
192 const int kWebMIdTracks = 0x1654AE6B;
+
193 const int kWebMIdTrackTimecodeScale = 0x23314F;
+
194 const int kWebMIdTrackTranslate = 0x6624;
+
195 const int kWebMIdTrackTranslateCodec = 0x66BF;
+
196 const int kWebMIdTrackTranslateEditionUID = 0x66FC;
+
197 const int kWebMIdTrackTranslateTrackID = 0x66A5;
+
198 const int kWebMIdTrackType = 0x83;
+
199 const int kWebMIdTrackUID = 0x73C5;
+
200 const int kWebMIdVideo = 0xE0;
+
201 const int kWebMIdVoid = 0xEC;
+
202 const int kWebMIdWritingApp = 0x5741;
+
203 
+
204 const int64_t kWebMReservedId = 0x1FFFFFFF;
+
205 const int64_t kWebMUnknownSize = 0x00FFFFFFFFFFFFFFLL;
+
206 
+
207 const uint8_t kWebMFlagKeyframe = 0x80;
+
208 
+
211 const size_t kWebMIvSize = 8;
+
212 const size_t kWebMSignalByteSize = 1;
+
213 const uint8_t kWebMEncryptedSignal = 0x01;
+
214 const uint8_t kWebMPartitionedSignal = 0x02;
+
215 const size_t kWebMNumPartitionsSize = 1;
+
216 const size_t kWebMPartitionOffsetSize = sizeof(uint32_t);
+
217 const uint8_t kWebMMaxSubsamples = 127;
+
218 
221 
-
222 extern const char kWebMCodecSubtitles[];
-
223 extern const char kWebMCodecCaptions[];
-
224 extern const char kWebMCodecDescriptions[];
-
225 extern const char kWebMCodecMetadata[];
+
222 const int kWebMTrackTypeVideo = 1;
+
223 const int kWebMTrackTypeAudio = 2;
+
224 const int kWebMTrackTypeSubtitlesOrCaptions = 0x11;
+
225 const int kWebMTrackTypeDescriptionsOrMetadata = 0x21;
226 
-
227 } // namespace media
-
228 } // namespace shaka
-
229 
-
230 #endif // MEDIA_FORMATS_WEBM_WEBM_CONSTANTS_H_
+
227 extern const char kWebMCodecSubtitles[];
+
228 extern const char kWebMCodecCaptions[];
+
229 extern const char kWebMCodecDescriptions[];
+
230 extern const char kWebMCodecMetadata[];
+
231 
+
232 } // namespace media
+
233 } // namespace shaka
+
234 
+
235 #endif // MEDIA_FORMATS_WEBM_WEBM_CONSTANTS_H_
diff --git a/docs/d0/d3c/structshaka_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html b/docs/d0/d3c/structshaka_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html index 9fc5313258..41d2ccffc4 100644 --- a/docs/d0/d3c/structshaka_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html +++ b/docs/d0/d3c/structshaka_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d0/d42/aes__cryptor_8h_source.html b/docs/d0/d42/aes__cryptor_8h_source.html index 36b08ac7f7..584e531489 100644 --- a/docs/d0/d42/aes__cryptor_8h_source.html +++ b/docs/d0/d42/aes__cryptor_8h_source.html @@ -215,7 +215,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d42/widevine__encryption__flags_8cc_source.html b/docs/d0/d42/widevine__encryption__flags_8cc_source.html index b515477c98..288bcd7c72 100644 --- a/docs/d0/d42/widevine__encryption__flags_8cc_source.html +++ b/docs/d0/d42/widevine__encryption__flags_8cc_source.html @@ -258,7 +258,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d46/fourccs_8h_source.html b/docs/d0/d46/fourccs_8h_source.html index de72349073..ff916242e5 100644 --- a/docs/d0/d46/fourccs_8h_source.html +++ b/docs/d0/d46/fourccs_8h_source.html @@ -248,7 +248,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d49/vod__media__info__dump__muxer__listener_8cc_source.html b/docs/d0/d49/vod__media__info__dump__muxer__listener_8cc_source.html index 788c0a7ce5..f76d4177f9 100644 --- a/docs/d0/d49/vod__media__info__dump__muxer__listener_8cc_source.html +++ b/docs/d0/d49/vod__media__info__dump__muxer__listener_8cc_source.html @@ -221,7 +221,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
132 } // namespace media
133 } // namespace shaka
shaka::media::File::Open
virtual bool Open()=0
Internal open. Should not be used directly.
-
shaka::media::StreamInfo
Abstract class holds stream information.
Definition: stream_info.h:26
+
shaka::media::StreamInfo
Abstract class holds stream information.
Definition: stream_info.h:53
shaka::media::VodMediaInfoDumpMuxerListener::OnSampleDurationReady
void OnSampleDurationReady(uint32_t sample_duration) override
Definition: vod_media_info_dump_muxer_listener.cc:67
shaka::media::File::Close
virtual bool Close()=0
shaka::media::File::Write
virtual int64_t Write(const void *buffer, uint64_t length)=0
@@ -237,7 +237,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d4b/structshaka_1_1media_1_1mp4_1_1MediaInformation-members.html b/docs/d0/d4b/structshaka_1_1media_1_1mp4_1_1MediaInformation-members.html index 2ee82586d4..adb5b9f2a5 100644 --- a/docs/d0/d4b/structshaka_1_1media_1_1mp4_1_1MediaInformation-members.html +++ b/docs/d0/d4b/structshaka_1_1media_1_1mp4_1_1MediaInformation-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d4d/classshaka_1_1media_1_1AudioTimestampHelper.html b/docs/d0/d4d/classshaka_1_1media_1_1AudioTimestampHelper.html index 457c323ec7..14b7dcc65c 100644 --- a/docs/d0/d4d/classshaka_1_1media_1_1AudioTimestampHelper.html +++ b/docs/d0/d4d/classshaka_1_1media_1_1AudioTimestampHelper.html @@ -131,7 +131,7 @@ int64_t GetFramesToTarget< diff --git a/docs/d0/d4e/libcrypto__threading_8cc_source.html b/docs/d0/d4e/libcrypto__threading_8cc_source.html index 9cd4bbda29..7adf49004c 100644 --- a/docs/d0/d4e/libcrypto__threading_8cc_source.html +++ b/docs/d0/d4e/libcrypto__threading_8cc_source.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d53/classshaka_1_1media_1_1mp2t_1_1TsMuxer-members.html b/docs/d0/d53/classshaka_1_1media_1_1mp2t_1_1TsMuxer-members.html index d357c048a4..8a681dc2b2 100644 --- a/docs/d0/d53/classshaka_1_1media_1_1mp2t_1_1TsMuxer-members.html +++ b/docs/d0/d53/classshaka_1_1media_1_1mp2t_1_1TsMuxer-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d5b/classshaka_1_1media_1_1MpdNotifyMuxerListener-members.html b/docs/d0/d5b/classshaka_1_1media_1_1MpdNotifyMuxerListener-members.html index 85e2cf7ed2..3ba4ed0811 100644 --- a/docs/d0/d5b/classshaka_1_1media_1_1MpdNotifyMuxerListener-members.html +++ b/docs/d0/d5b/classshaka_1_1media_1_1MpdNotifyMuxerListener-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d66/classshaka_1_1media_1_1ThreadedIoFile.html b/docs/d0/d66/classshaka_1_1media_1_1ThreadedIoFile.html index 3601c206da..bed4c6d4a3 100644 --- a/docs/d0/d66/classshaka_1_1media_1_1ThreadedIoFile.html +++ b/docs/d0/d66/classshaka_1_1media_1_1ThreadedIoFile.html @@ -438,7 +438,7 @@ Additional Inherited Members diff --git a/docs/d0/d6a/classshaka_1_1media_1_1StreamDescriptorCompareFn-members.html b/docs/d0/d6a/classshaka_1_1media_1_1StreamDescriptorCompareFn-members.html index 265bb97b98..e14a09cbef 100644 --- a/docs/d0/d6a/classshaka_1_1media_1_1StreamDescriptorCompareFn-members.html +++ b/docs/d0/d6a/classshaka_1_1media_1_1StreamDescriptorCompareFn-members.html @@ -97,7 +97,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d73/structshaka_1_1media_1_1mp4_1_1VideoSampleEntry.html b/docs/d0/d73/structshaka_1_1media_1_1mp4_1_1VideoSampleEntry.html index e655911388..494cd34bd8 100644 --- a/docs/d0/d73/structshaka_1_1media_1_1mp4_1_1VideoSampleEntry.html +++ b/docs/d0/d73/structshaka_1_1media_1_1mp4_1_1VideoSampleEntry.html @@ -197,7 +197,7 @@ Additional Inherited Members diff --git a/docs/d0/d7c/structshaka_1_1media_1_1mp4_1_1SampleToGroup.html b/docs/d0/d7c/structshaka_1_1media_1_1mp4_1_1SampleToGroup.html index 91edcd6052..5b96e9849e 100644 --- a/docs/d0/d7c/structshaka_1_1media_1_1mp4_1_1SampleToGroup.html +++ b/docs/d0/d7c/structshaka_1_1media_1_1mp4_1_1SampleToGroup.html @@ -188,7 +188,7 @@ Additional Inherited Members diff --git a/docs/d0/d7d/decryptor__source_8h_source.html b/docs/d0/d7d/decryptor__source_8h_source.html index 4b5fef9094..7725ca95b6 100644 --- a/docs/d0/d7d/decryptor__source_8h_source.html +++ b/docs/d0/d7d/decryptor__source_8h_source.html @@ -133,7 +133,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d80/classshaka_1_1media_1_1AesCbcEncryptor-members.html b/docs/d0/d80/classshaka_1_1media_1_1AesCbcEncryptor-members.html index b14161a008..64d92ac82e 100644 --- a/docs/d0/d80/classshaka_1_1media_1_1AesCbcEncryptor-members.html +++ b/docs/d0/d80/classshaka_1_1media_1_1AesCbcEncryptor-members.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d80/classshaka_1_1media_1_1Status-members.html b/docs/d0/d80/classshaka_1_1media_1_1Status-members.html index 5dc54de915..e9a4aab346 100644 --- a/docs/d0/d80/classshaka_1_1media_1_1Status-members.html +++ b/docs/d0/d80/classshaka_1_1media_1_1Status-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d93/classshaka_1_1media_1_1Status.html b/docs/d0/d93/classshaka_1_1media_1_1Status.html index 0a4a9e71c6..76c284e4bb 100644 --- a/docs/d0/d93/classshaka_1_1media_1_1Status.html +++ b/docs/d0/d93/classshaka_1_1media_1_1Status.html @@ -302,7 +302,7 @@ static const diff --git a/docs/d0/d9a/structshaka_1_1media_1_1mp4_1_1Movie.html b/docs/d0/d9a/structshaka_1_1media_1_1mp4_1_1Movie.html index e08e5636e9..39f7aa84ab 100644 --- a/docs/d0/d9a/structshaka_1_1media_1_1mp4_1_1Movie.html +++ b/docs/d0/d9a/structshaka_1_1media_1_1mp4_1_1Movie.html @@ -186,7 +186,7 @@ Additional Inherited Members diff --git a/docs/d0/da2/classshaka_1_1media_1_1AACAudioSpecificConfig.html b/docs/d0/da2/classshaka_1_1media_1_1AACAudioSpecificConfig.html index 55c243acaf..811de3dbe9 100644 --- a/docs/d0/da2/classshaka_1_1media_1_1AACAudioSpecificConfig.html +++ b/docs/d0/da2/classshaka_1_1media_1_1AACAudioSpecificConfig.html @@ -329,7 +329,7 @@ static const size_t  diff --git a/docs/d0/da2/classshaka_1_1media_1_1RequestSigner-members.html b/docs/d0/da2/classshaka_1_1media_1_1RequestSigner-members.html index e82ffe251b..77258ab7c2 100644 --- a/docs/d0/da2/classshaka_1_1media_1_1RequestSigner-members.html +++ b/docs/d0/da2/classshaka_1_1media_1_1RequestSigner-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/da2/structshaka_1_1xml_1_1XmlDeleter-members.html b/docs/d0/da2/structshaka_1_1xml_1_1XmlDeleter-members.html index 3fc22d8ccb..2483778ab5 100644 --- a/docs/d0/da2/structshaka_1_1xml_1_1XmlDeleter-members.html +++ b/docs/d0/da2/structshaka_1_1xml_1_1XmlDeleter-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/da6/stream__descriptor_8cc_source.html b/docs/d0/da6/stream__descriptor_8cc_source.html index 36bbe76496..59b2d9a9df 100644 --- a/docs/d0/da6/stream__descriptor_8cc_source.html +++ b/docs/d0/da6/stream__descriptor_8cc_source.html @@ -295,7 +295,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/dab/classshaka_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html b/docs/d0/dab/classshaka_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html index b5061e6d4f..efd9bcb8ed 100644 --- a/docs/d0/dab/classshaka_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html +++ b/docs/d0/dab/classshaka_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html @@ -259,7 +259,7 @@ void set_progress_target diff --git a/docs/d0/dac/classshaka_1_1media_1_1FixedKeySource.html b/docs/d0/dac/classshaka_1_1media_1_1FixedKeySource.html index b85dd5d2e1..62c35b417f 100644 --- a/docs/d0/dac/classshaka_1_1media_1_1FixedKeySource.html +++ b/docs/d0/dac/classshaka_1_1media_1_1FixedKeySource.html @@ -479,7 +479,7 @@ Additional Inherited Members diff --git a/docs/d0/dbd/classshaka_1_1media_1_1webm_1_1MultiSegmentSegmenter-members.html b/docs/d0/dbd/classshaka_1_1media_1_1webm_1_1MultiSegmentSegmenter-members.html index 6db7438d09..7c80903d06 100644 --- a/docs/d0/dbd/classshaka_1_1media_1_1webm_1_1MultiSegmentSegmenter-members.html +++ b/docs/d0/dbd/classshaka_1_1media_1_1webm_1_1MultiSegmentSegmenter-members.html @@ -123,7 +123,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/dc1/structshaka_1_1media_1_1mp4_1_1VTTEmptyCueBox-members.html b/docs/d0/dc1/structshaka_1_1media_1_1mp4_1_1VTTEmptyCueBox-members.html index 0f0f666708..01d604da8b 100644 --- a/docs/d0/dc1/structshaka_1_1media_1_1mp4_1_1VTTEmptyCueBox-members.html +++ b/docs/d0/dc1/structshaka_1_1media_1_1mp4_1_1VTTEmptyCueBox-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/dc8/classshaka_1_1xml_1_1AdaptationSetXmlNode-members.html b/docs/d0/dc8/classshaka_1_1xml_1_1AdaptationSetXmlNode-members.html index 58f51062d8..a09feb1b65 100644 --- a/docs/d0/dc8/classshaka_1_1xml_1_1AdaptationSetXmlNode-members.html +++ b/docs/d0/dc8/classshaka_1_1xml_1_1AdaptationSetXmlNode-members.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/dce/classshaka_1_1media_1_1RsaPrivateKey.html b/docs/d0/dce/classshaka_1_1media_1_1RsaPrivateKey.html index 372bb2b1a2..09a0be9fad 100644 --- a/docs/d0/dce/classshaka_1_1media_1_1RsaPrivateKey.html +++ b/docs/d0/dce/classshaka_1_1media_1_1RsaPrivateKey.html @@ -224,7 +224,7 @@ Static Public Member Functions diff --git a/docs/d0/dd0/structshaka_1_1media_1_1mp4_1_1CueSettingsBox.html b/docs/d0/dd0/structshaka_1_1media_1_1mp4_1_1CueSettingsBox.html index 64304e810e..858ff2ef3a 100644 --- a/docs/d0/dd0/structshaka_1_1media_1_1mp4_1_1CueSettingsBox.html +++ b/docs/d0/dd0/structshaka_1_1media_1_1mp4_1_1CueSettingsBox.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d0/dd4/classshaka_1_1media_1_1ProtectionSystemSpecificInfo.html b/docs/d0/dd4/classshaka_1_1media_1_1ProtectionSystemSpecificInfo.html index fb6ab3f71d..a958e3345c 100644 --- a/docs/d0/dd4/classshaka_1_1media_1_1ProtectionSystemSpecificInfo.html +++ b/docs/d0/dd4/classshaka_1_1media_1_1ProtectionSystemSpecificInfo.html @@ -222,7 +222,7 @@ Static Public Member Functions diff --git a/docs/d0/dd6/webm__crypto__helpers_8cc_source.html b/docs/d0/dd6/webm__crypto__helpers_8cc_source.html index 0d6b94e0f8..5910737916 100644 --- a/docs/d0/dd6/webm__crypto__helpers_8cc_source.html +++ b/docs/d0/dd6/webm__crypto__helpers_8cc_source.html @@ -95,68 +95,117 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
6 
7 #include "packager/base/logging.h"
8 #include "packager/base/sys_byteorder.h"
-
9 #include "packager/media/formats/webm/webm_constants.h"
-
10 
-
11 namespace shaka {
-
12 namespace media {
-
13 namespace {
-
14 
-
15 // Generates a 16 byte CTR counter block. The CTR counter block format is a
-
16 // CTR IV appended with a CTR block counter. |iv| is an 8 byte CTR IV.
-
17 // |iv_size| is the size of |iv| in btyes. Returns a string of
-
18 // kDecryptionKeySize bytes.
-
19 std::string GenerateWebMCounterBlock(const uint8_t* iv, int iv_size) {
-
20  std::string counter_block(reinterpret_cast<const char*>(iv), iv_size);
-
21  counter_block.append(DecryptConfig::kDecryptionKeySize - iv_size, 0);
-
22  return counter_block;
-
23 }
-
24 
-
25 } // namespace anonymous
+
9 #include "packager/media/base/buffer_reader.h"
+
10 #include "packager/media/formats/webm/webm_constants.h"
+
11 
+
12 namespace shaka {
+
13 namespace media {
+
14 namespace {
+
15 
+
16 // Generates a 16 byte CTR counter block. The CTR counter block format is a
+
17 // CTR IV appended with a CTR block counter. |iv| is an 8 byte CTR IV.
+
18 // |iv_size| is the size of |iv| in btyes. Returns a string of
+
19 // kDecryptionKeySize bytes.
+
20 std::vector<uint8_t> GenerateWebMCounterBlock(const uint8_t* iv, int iv_size) {
+
21  std::vector<uint8_t> counter_block(iv, iv + iv_size);
+
22  counter_block.insert(counter_block.end(),
+ +
24  return counter_block;
+
25 }
26 
-
27 bool WebMCreateDecryptConfig(const uint8_t* data,
-
28  int data_size,
-
29  const uint8_t* key_id,
-
30  int key_id_size,
-
31  scoped_ptr<DecryptConfig>* decrypt_config,
-
32  int* data_offset) {
-
33  if (data_size < kWebMSignalByteSize) {
-
34  DVLOG(1) << "Got a block from an encrypted stream with no data.";
-
35  return false;
-
36  }
-
37 
-
38  uint8_t signal_byte = data[0];
-
39  int frame_offset = sizeof(signal_byte);
-
40 
-
41  // Setting the DecryptConfig object of the buffer while leaving the
-
42  // initialization vector empty will tell the decryptor that the frame is
-
43  // unencrypted.
-
44  std::string counter_block;
-
45 
-
46  if (signal_byte & kWebMFlagEncryptedFrame) {
-
47  if (data_size < kWebMSignalByteSize + kWebMIvSize) {
-
48  DVLOG(1) << "Got an encrypted block with not enough data " << data_size;
-
49  return false;
-
50  }
-
51  counter_block = GenerateWebMCounterBlock(data + frame_offset, kWebMIvSize);
-
52  frame_offset += kWebMIvSize;
-
53  }
-
54 
-
55  decrypt_config->reset(new DecryptConfig(
-
56  std::vector<uint8_t>(key_id, key_id + key_id_size),
-
57  std::vector<uint8_t>(counter_block.begin(), counter_block.end()),
-
58  std::vector<SubsampleEntry>()));
-
59  *data_offset = frame_offset;
-
60 
-
61  return true;
-
62 }
-
63 
-
64 } // namespace media
-
65 } // namespace shaka
+
27 } // namespace anonymous
+
28 
+
29 // TODO(tinskip): Add unit test for this function.
+
30 bool WebMCreateDecryptConfig(const uint8_t* data,
+
31  int data_size,
+
32  const uint8_t* key_id,
+
33  int key_id_size,
+
34  scoped_ptr<DecryptConfig>* decrypt_config,
+
35  int* data_offset) {
+
36  int header_size = kWebMSignalByteSize;
+
37  if (data_size < header_size) {
+
38  DVLOG(1) << "Empty WebM sample.";
+
39  return false;
+
40  }
+
41  uint8_t signal_byte = data[0];
+
42 
+
43  if (signal_byte & kWebMEncryptedSignal) {
+
44  // Encrypted sample.
+
45  header_size += kWebMIvSize;
+
46  if (data_size < header_size) {
+
47  DVLOG(1) << "Encrypted WebM sample too small to hold IV: " << data_size;
+
48  return false;
+
49  }
+
50  std::vector<SubsampleEntry> subsamples;
+
51  if (signal_byte & kWebMPartitionedSignal) {
+
52  // Encrypted sample with subsamples / partitioning.
+
53  header_size += kWebMNumPartitionsSize;
+
54  if (data_size < header_size) {
+
55  DVLOG(1)
+
56  << "Encrypted WebM sample too small to hold number of partitions: "
+
57  << data_size;
+
58  return false;
+
59  }
+
60  uint8_t num_partitions = data[kWebMSignalByteSize + kWebMIvSize];
+
61  BufferReader offsets_buffer(data + header_size, data_size - header_size);
+
62  header_size += num_partitions * kWebMPartitionOffsetSize;
+
63  uint32_t subsample_offset = 0;
+
64  bool encrypted_subsample = false;
+
65  uint16_t clear_size = 0;
+
66  uint32_t encrypted_size = 0;
+
67  for (uint8_t partition_idx = 0; partition_idx < num_partitions;
+
68  ++partition_idx) {
+
69  uint32_t partition_offset;
+
70  if (!offsets_buffer.Read4(&partition_offset)) {
+
71  DVLOG(1)
+
72  << "Encrypted WebM sample too small to hold partition offsets: "
+
73  << data_size;
+
74  return false;
+
75  }
+
76  if (partition_offset < subsample_offset) {
+
77  DVLOG(1) << "Partition offsets out of order.";
+
78  return false;
+
79  }
+
80  if (encrypted_subsample) {
+
81  encrypted_size = partition_offset - subsample_offset;
+
82  subsamples.push_back(SubsampleEntry(clear_size, encrypted_size));
+
83  } else {
+
84  clear_size = partition_offset - subsample_offset;
+
85  if (partition_idx == (num_partitions - 1)) {
+
86  encrypted_size = data_size - header_size - subsample_offset - clear_size;
+
87  subsamples.push_back(SubsampleEntry(clear_size, encrypted_size));
+
88  }
+
89  }
+
90  subsample_offset = partition_offset;
+
91  encrypted_subsample = !encrypted_subsample;
+
92  }
+
93  if (!(num_partitions % 2)) {
+
94  // Even number of partitions. Add one last all-clear subsample.
+
95  clear_size = data_size - header_size - subsample_offset;
+
96  encrypted_size = 0;
+
97  subsamples.push_back(SubsampleEntry(clear_size, encrypted_size));
+
98  }
+
99  }
+
100  decrypt_config->reset(new DecryptConfig(
+
101  std::vector<uint8_t>(key_id, key_id + key_id_size),
+
102  GenerateWebMCounterBlock(data + kWebMSignalByteSize, kWebMIvSize),
+
103  subsamples));
+
104  } else {
+
105  // Clear sample.
+
106  decrypt_config->reset();
+
107  }
+
108 
+
109  *data_offset = header_size;
+
110  return true;
+
111 }
+
112 
+
113 } // namespace media
+
114 } // namespace shaka
static const size_t kDecryptionKeySize
Keys are always 128 bits.
diff --git a/docs/d0/dd8/classshaka_1_1media_1_1AesCtrEncryptor.html b/docs/d0/dd8/classshaka_1_1media_1_1AesCtrEncryptor.html index e14e3750d0..c48c9fedb9 100644 --- a/docs/d0/dd8/classshaka_1_1media_1_1AesCtrEncryptor.html +++ b/docs/d0/dd8/classshaka_1_1media_1_1AesCtrEncryptor.html @@ -165,7 +165,7 @@ AES_KEY * mutable_aes_key< diff --git a/docs/d0/dee/segmenter__test__base_8h_source.html b/docs/d0/dee/segmenter__test__base_8h_source.html index 4492988f61..c5deed59b8 100644 --- a/docs/d0/dee/segmenter__test__base_8h_source.html +++ b/docs/d0/dee/segmenter__test__base_8h_source.html @@ -198,7 +198,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
115 
116 #endif // MEDIA_FORMATS_WEBM_SEGMENTER_TEST_UTILS_H_
-
Abstract class holds stream information.
Definition: stream_info.h:26
+
Abstract class holds stream information.
Definition: stream_info.h:53
VideoStreamInfo * CreateVideoStreamInfo() const
Creates a video stream info object for testing.
This structure contains the list of configuration options for Muxer.
Definition: muxer_options.h:18
@@ -208,14 +208,14 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
An implementation of IMkvWriter using our File type.
Definition: mkv_writer.h:21
MuxerOptions CreateMuxerOptions() const
Creates a Muxer options object for testing.
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:31
-
Holds video stream information.
+
Holds video stream information.
std::string TemplateFileName(int number) const
Gets the file name of the given template file.
diff --git a/docs/d0/df3/packager__util_8cc_source.html b/docs/d0/df3/packager__util_8cc_source.html index 8476190e6f..4cb4da9d63 100644 --- a/docs/d0/df3/packager__util_8cc_source.html +++ b/docs/d0/df3/packager__util_8cc_source.html @@ -243,7 +243,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
154  muxer_options->segment_sap_aligned = FLAGS_segment_sap_aligned;
155  muxer_options->fragment_sap_aligned = FLAGS_fragment_sap_aligned;
156  muxer_options->num_subsegments_per_sidx = FLAGS_num_subsegments_per_sidx;
-
157 
+
157  muxer_options->webm_subsample_encryption = FLAGS_webm_subsample_encryption;
158  if (FLAGS_mp4_use_decoding_timestamp_in_timeline) {
159  LOG(WARNING) << "Flag --mp4_use_decoding_timestamp_in_timeline is set. "
160  "Note that it is a temporary hack to workaround Chromium "
@@ -334,7 +334,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/dfc/structshaka_1_1media_1_1mp4_1_1AudioSampleEntry-members.html b/docs/d0/dfc/structshaka_1_1media_1_1mp4_1_1AudioSampleEntry-members.html index bdb4013ea6..9a904f5057 100644 --- a/docs/d0/dfc/structshaka_1_1media_1_1mp4_1_1AudioSampleEntry-members.html +++ b/docs/d0/dfc/structshaka_1_1media_1_1mp4_1_1AudioSampleEntry-members.html @@ -120,7 +120,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d0a/classshaka_1_1media_1_1MkvWriter.html b/docs/d1/d0a/classshaka_1_1media_1_1MkvWriter.html index 9d4d7385dc..be070f5844 100644 --- a/docs/d1/d0a/classshaka_1_1media_1_1MkvWriter.html +++ b/docs/d1/d0a/classshaka_1_1media_1_1MkvWriter.html @@ -376,7 +376,7 @@ Public Member Functions diff --git a/docs/d1/d0a/structshaka_1_1media_1_1H264Sps.html b/docs/d1/d0a/structshaka_1_1media_1_1H264Sps.html index d3e0fec383..1a014de2a3 100644 --- a/docs/d1/d0a/structshaka_1_1media_1_1H264Sps.html +++ b/docs/d1/d0a/structshaka_1_1media_1_1H264Sps.html @@ -242,7 +242,7 @@ int chroma_array_type< diff --git a/docs/d1/d0b/hevc__decoder__configuration__record_8cc_source.html b/docs/d1/d0b/hevc__decoder__configuration__record_8cc_source.html index 03df4f25c3..bdec6b4e89 100644 --- a/docs/d1/d0b/hevc__decoder__configuration__record_8cc_source.html +++ b/docs/d1/d0b/hevc__decoder__configuration__record_8cc_source.html @@ -148,7 +148,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
59  return TrimLeadingZeros(base::HexEncode(bytes, arraysize(bytes)));
60 }
61 
-
62 std::string CodecAsString(VideoCodec codec) {
+
62 std::string CodecAsString(Codec codec) {
63  switch (codec) {
64  case kCodecHEV1:
65  return "hev1";
@@ -221,43 +221,42 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
132  return true;
133 }
134 
- -
136  VideoCodec codec) const {
-
137  // ISO/IEC 14496-15:2014 Annex E.
-
138  std::vector<std::string> fields;
-
139  fields.push_back(CodecAsString(codec));
-
140  fields.push_back(GeneralProfileSpaceAsString(general_profile_space_) +
-
141  base::IntToString(general_profile_idc_));
-
142  fields.push_back(
-
143  ReverseBitsAndHexEncode(general_profile_compatibility_flags_));
-
144  fields.push_back((general_tier_flag_ ? "H" : "L") +
-
145  base::IntToString(general_level_idc_));
-
146 
-
147  // Remove trailing bytes that are zero.
-
148  std::vector<uint8_t> constraints = general_constraint_indicator_flags_;
-
149  size_t size = constraints.size();
-
150  for (; size > 0; --size) {
-
151  if (constraints[size - 1] != 0) break;
-
152  }
-
153  constraints.resize(size);
-
154  for (uint8_t constraint : constraints)
-
155  fields.push_back(TrimLeadingZeros(base::HexEncode(&constraint, 1)));
-
156 
-
157  return base::JoinString(fields, ".");
-
158 }
-
159 
-
160 } // namespace media
-
161 } // namespace shaka
- +
135 std::string HEVCDecoderConfigurationRecord::GetCodecString(Codec codec) const {
+
136  // ISO/IEC 14496-15:2014 Annex E.
+
137  std::vector<std::string> fields;
+
138  fields.push_back(CodecAsString(codec));
+
139  fields.push_back(GeneralProfileSpaceAsString(general_profile_space_) +
+
140  base::IntToString(general_profile_idc_));
+
141  fields.push_back(
+
142  ReverseBitsAndHexEncode(general_profile_compatibility_flags_));
+
143  fields.push_back((general_tier_flag_ ? "H" : "L") +
+
144  base::IntToString(general_level_idc_));
+
145 
+
146  // Remove trailing bytes that are zero.
+
147  std::vector<uint8_t> constraints = general_constraint_indicator_flags_;
+
148  size_t size = constraints.size();
+
149  for (; size > 0; --size) {
+
150  if (constraints[size - 1] != 0) break;
+
151  }
+
152  constraints.resize(size);
+
153  for (uint8_t constraint : constraints)
+
154  fields.push_back(TrimLeadingZeros(base::HexEncode(&constraint, 1)));
+
155 
+
156  return base::JoinString(fields, ".");
+
157 }
+
158 
+
159 } // namespace media
+
160 } // namespace shaka
void AddNalu(const Nalu &nalu)
Adds the given Nalu to the configuration.
void set_nalu_length_size(uint8_t nalu_length_size)
Sets the size of the NAL unit length field.
+ diff --git a/docs/d1/d12/classshaka_1_1media_1_1mp2t_1_1EsParserH264-members.html b/docs/d1/d12/classshaka_1_1media_1_1mp2t_1_1EsParserH264-members.html index b12dd6812b..e9de61bd16 100644 --- a/docs/d1/d12/classshaka_1_1media_1_1mp2t_1_1EsParserH264-members.html +++ b/docs/d1/d12/classshaka_1_1media_1_1mp2t_1_1EsParserH264-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d13/status_8h_source.html b/docs/d1/d13/status_8h_source.html index 48cb048c63..022aba2dea 100644 --- a/docs/d1/d13/status_8h_source.html +++ b/docs/d1/d13/status_8h_source.html @@ -239,7 +239,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d1c/two__pass__single__segment__segmenter_8cc_source.html b/docs/d1/d1c/two__pass__single__segment__segmenter_8cc_source.html index 10d947ddf0..d46e6eae7b 100644 --- a/docs/d1/d1c/two__pass__single__segment__segmenter_8cc_source.html +++ b/docs/d1/d1c/two__pass__single__segment__segmenter_8cc_source.html @@ -276,7 +276,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d1d/muxer__flags_8cc_source.html b/docs/d1/d1d/muxer__flags_8cc_source.html index 0c80e16aef..3e5087664f 100644 --- a/docs/d1/d1d/muxer__flags_8cc_source.html +++ b/docs/d1/d1d/muxer__flags_8cc_source.html @@ -139,11 +139,12 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
50  "",
51  "Specify a directory in which to store temporary (intermediate) "
52  " files. Used only if single_segment=true.");
-
53 
+
53 DEFINE_bool(webm_subsample_encryption, true,
+
54  "Enable WebM subsample encryption.");
diff --git a/docs/d1/d1f/classshaka_1_1media_1_1KeySource.html b/docs/d1/d1f/classshaka_1_1media_1_1KeySource.html index 53abfb8689..57fcb042cf 100644 --- a/docs/d1/d1f/classshaka_1_1media_1_1KeySource.html +++ b/docs/d1/d1f/classshaka_1_1media_1_1KeySource.html @@ -407,7 +407,7 @@ static std::string  diff --git a/docs/d1/d20/classshaka_1_1media_1_1mp4_1_1DecodingTimeIterator.html b/docs/d1/d20/classshaka_1_1media_1_1mp4_1_1DecodingTimeIterator.html index 91d734df90..244e87c8c2 100644 --- a/docs/d1/d20/classshaka_1_1media_1_1mp4_1_1DecodingTimeIterator.html +++ b/docs/d1/d20/classshaka_1_1media_1_1mp4_1_1DecodingTimeIterator.html @@ -235,7 +235,7 @@ Public Member Functions diff --git a/docs/d1/d27/key__fetcher_8h_source.html b/docs/d1/d27/key__fetcher_8h_source.html index 18e553aaec..4effb6503c 100644 --- a/docs/d1/d27/key__fetcher_8h_source.html +++ b/docs/d1/d27/key__fetcher_8h_source.html @@ -126,7 +126,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d28/classshaka_1_1media_1_1mp2t_1_1AdtsHeader-members.html b/docs/d1/d28/classshaka_1_1media_1_1mp2t_1_1AdtsHeader-members.html index 597bbfeca6..fb9b2e5665 100644 --- a/docs/d1/d28/classshaka_1_1media_1_1mp2t_1_1AdtsHeader-members.html +++ b/docs/d1/d28/classshaka_1_1media_1_1mp2t_1_1AdtsHeader-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d2a/decryptor__source_8cc_source.html b/docs/d1/d2a/decryptor__source_8cc_source.html index c2f9702a3a..88dc5e739a 100644 --- a/docs/d1/d2a/decryptor__source_8cc_source.html +++ b/docs/d1/d2a/decryptor__source_8cc_source.html @@ -209,7 +209,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d2c/structshaka_1_1media_1_1mp4_1_1DataReference-members.html b/docs/d1/d2c/structshaka_1_1media_1_1mp4_1_1DataReference-members.html index f2b6156525..8ea59a9855 100644 --- a/docs/d1/d2c/structshaka_1_1media_1_1mp4_1_1DataReference-members.html +++ b/docs/d1/d2c/structshaka_1_1media_1_1mp4_1_1DataReference-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d2d/structshaka_1_1media_1_1mp4_1_1Box.html b/docs/d1/d2d/structshaka_1_1media_1_1mp4_1_1Box.html index 503fb604c9..302aee3461 100644 --- a/docs/d1/d2d/structshaka_1_1media_1_1mp4_1_1Box.html +++ b/docs/d1/d2d/structshaka_1_1media_1_1mp4_1_1Box.html @@ -385,7 +385,7 @@ class BoxBuffer diff --git a/docs/d1/d2f/webvtt__media__parser_8cc_source.html b/docs/d1/d2f/webvtt__media__parser_8cc_source.html index 3157e3691d..8cea43b8d9 100644 --- a/docs/d1/d2f/webvtt__media__parser_8cc_source.html +++ b/docs/d1/d2f/webvtt__media__parser_8cc_source.html @@ -383,102 +383,99 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
294  // There is no one metadata to determine what the language is. Parts
295  // of the text may be annotated as some specific language.
296  const char kLanguage[] = "";
-
297  streams.push_back(new TextStreamInfo(
-
298  kTrackId,
-
299  kTimescale,
-
300  kDuration,
-
301  "wvtt",
-
302  kLanguage,
-
303  base::JoinString(header_, "\n"),
-
304  0, // Not necessary.
-
305  0)); // Not necessary.
-
306 
-
307  init_cb_.Run(streams);
-
308  state_ = kCueIdentifierOrTimingOrComment;
-
309  break;
-
310  }
-
311 
-
312  header_.push_back(line);
-
313  break;
-
314  }
-
315  case kCueIdentifierOrTimingOrComment: {
-
316  // Note that there can be one or more line breaks before a cue starts;
-
317  // skip this line.
-
318  // Or the file could end without a new cue.
-
319  if (line.empty())
-
320  break;
-
321 
-
322  if (!has_arrow) {
-
323  if (base::StartsWith(line, "NOTE",
-
324  base::CompareCase::INSENSITIVE_ASCII)) {
-
325  state_ = kComment;
-
326  current_cue_.comment.push_back(line);
-
327  } else {
-
328  // A cue can start from a cue identifier.
-
329  // https://w3c.github.io/webvtt/#webvtt-cue-identifier
-
330  current_cue_.identifier = line;
-
331  // The next line must be a timing.
-
332  state_ = kCueTiming;
-
333  }
-
334  break;
-
335  }
-
336 
-
337  // No break statement if the line has an arrow; it should be a WebVTT
-
338  // timing, so fall thru. Setting state_ to kCueTiming so that the state
-
339  // always matches the case.
-
340  state_ = kCueTiming;
-
341  FALLTHROUGH_INTENDED;
-
342  }
-
343  case kCueTiming: {
-
344  DCHECK(has_arrow);
-
345  if (!ParseTimingAndSettingsLine(line, &current_cue_.start_time,
-
346  &current_cue_.duration,
-
347  &current_cue_.settings)) {
-
348  state_ = kParseError;
-
349  return false;
-
350  }
-
351  state_ = kCuePayload;
-
352  break;
-
353  }
-
354  case kCuePayload: {
-
355  if (line.empty()) {
-
356  state_ = kCueIdentifierOrTimingOrComment;
-
357  if (!new_sample_cb_.Run(kTrackId, CueToMediaSample(current_cue_))) {
-
358  state_ = kParseError;
-
359  return false;
-
360  }
-
361  current_cue_ = Cue();
-
362  break;
-
363  }
-
364 
-
365  current_cue_.payload.push_back(line);
-
366  break;
-
367  }
-
368  case kComment: {
-
369  if (line.empty()) {
-
370  state_ = kCueIdentifierOrTimingOrComment;
-
371  if (!new_sample_cb_.Run(kTrackId, CueToMediaSample(current_cue_))) {
-
372  state_ = kParseError;
-
373  return false;
-
374  }
-
375  current_cue_ = Cue();
-
376  break;
-
377  }
-
378 
-
379  current_cue_.comment.push_back(line);
-
380  break;
-
381  }
-
382  case kParseError:
-
383  NOTREACHED();
-
384  return false;
-
385  }
-
386  }
+
297  streams.push_back(new TextStreamInfo(kTrackId, kTimescale, kDuration,
+
298  "wvtt",
+
299  base::JoinString(header_, "\n"),
+
300  0, // Not necessary.
+
301  0,
+
302  kLanguage)); // Not necessary.
+
303 
+
304  init_cb_.Run(streams);
+
305  state_ = kCueIdentifierOrTimingOrComment;
+
306  break;
+
307  }
+
308 
+
309  header_.push_back(line);
+
310  break;
+
311  }
+
312  case kCueIdentifierOrTimingOrComment: {
+
313  // Note that there can be one or more line breaks before a cue starts;
+
314  // skip this line.
+
315  // Or the file could end without a new cue.
+
316  if (line.empty())
+
317  break;
+
318 
+
319  if (!has_arrow) {
+
320  if (base::StartsWith(line, "NOTE",
+
321  base::CompareCase::INSENSITIVE_ASCII)) {
+
322  state_ = kComment;
+
323  current_cue_.comment.push_back(line);
+
324  } else {
+
325  // A cue can start from a cue identifier.
+
326  // https://w3c.github.io/webvtt/#webvtt-cue-identifier
+
327  current_cue_.identifier = line;
+
328  // The next line must be a timing.
+
329  state_ = kCueTiming;
+
330  }
+
331  break;
+
332  }
+
333 
+
334  // No break statement if the line has an arrow; it should be a WebVTT
+
335  // timing, so fall thru. Setting state_ to kCueTiming so that the state
+
336  // always matches the case.
+
337  state_ = kCueTiming;
+
338  FALLTHROUGH_INTENDED;
+
339  }
+
340  case kCueTiming: {
+
341  DCHECK(has_arrow);
+
342  if (!ParseTimingAndSettingsLine(line, &current_cue_.start_time,
+
343  &current_cue_.duration,
+
344  &current_cue_.settings)) {
+
345  state_ = kParseError;
+
346  return false;
+
347  }
+
348  state_ = kCuePayload;
+
349  break;
+
350  }
+
351  case kCuePayload: {
+
352  if (line.empty()) {
+
353  state_ = kCueIdentifierOrTimingOrComment;
+
354  if (!new_sample_cb_.Run(kTrackId, CueToMediaSample(current_cue_))) {
+
355  state_ = kParseError;
+
356  return false;
+
357  }
+
358  current_cue_ = Cue();
+
359  break;
+
360  }
+
361 
+
362  current_cue_.payload.push_back(line);
+
363  break;
+
364  }
+
365  case kComment: {
+
366  if (line.empty()) {
+
367  state_ = kCueIdentifierOrTimingOrComment;
+
368  if (!new_sample_cb_.Run(kTrackId, CueToMediaSample(current_cue_))) {
+
369  state_ = kParseError;
+
370  return false;
+
371  }
+
372  current_cue_ = Cue();
+
373  break;
+
374  }
+
375 
+
376  current_cue_.comment.push_back(line);
+
377  break;
+
378  }
+
379  case kParseError:
+
380  NOTREACHED();
+
381  return false;
+
382  }
+
383  }
+
384 
+
385  return true;
+
386 }
387 
-
388  return true;
-
389 }
-
390 
-
391 } // namespace media
-
392 } // namespace shaka
+
388 } // namespace media
+
389 } // namespace shaka
static scoped_refptr< MediaSample > FromMetadata(const uint8_t *metadata, size_t metadata_size)
Definition: media_sample.cc:67
void Init(const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source) override
bool Parse(const uint8_t *buf, int size) override WARN_UNUSED_RESULT
@@ -491,7 +488,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d30/classshaka_1_1media_1_1mp2t_1_1TsSectionPes.html b/docs/d1/d30/classshaka_1_1media_1_1mp2t_1_1TsSectionPes.html index dd0e3e1a45..024ff10f17 100644 --- a/docs/d1/d30/classshaka_1_1media_1_1mp2t_1_1TsSectionPes.html +++ b/docs/d1/d30/classshaka_1_1media_1_1mp2t_1_1TsSectionPes.html @@ -142,7 +142,7 @@ Additional Inherited Members diff --git a/docs/d1/d31/classshaka_1_1xml_1_1XmlNode.html b/docs/d1/d31/classshaka_1_1xml_1_1XmlNode.html index 1d1637c96e..5f78b04b1b 100644 --- a/docs/d1/d31/classshaka_1_1xml_1_1XmlNode.html +++ b/docs/d1/d31/classshaka_1_1xml_1_1XmlNode.html @@ -419,7 +419,7 @@ bool  diff --git a/docs/d1/d34/structshaka_1_1media_1_1SubsampleEntry.html b/docs/d1/d34/structshaka_1_1media_1_1SubsampleEntry.html index b68ed1c605..a784d8f0f0 100644 --- a/docs/d1/d34/structshaka_1_1media_1_1SubsampleEntry.html +++ b/docs/d1/d34/structshaka_1_1media_1_1SubsampleEntry.html @@ -122,7 +122,7 @@ uint32_t cipher_bytes< diff --git a/docs/d1/d37/es__parser__h264_8h_source.html b/docs/d1/d37/es__parser__h264_8h_source.html index 1f23f5fd64..4129702dec 100644 --- a/docs/d1/d37/es__parser__h264_8h_source.html +++ b/docs/d1/d37/es__parser__h264_8h_source.html @@ -153,7 +153,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d3b/mpd__generator__flags_8h_source.html b/docs/d1/d3b/mpd__generator__flags_8h_source.html index 2262f959e4..2cfbb0e12c 100644 --- a/docs/d1/d3b/mpd__generator__flags_8h_source.html +++ b/docs/d1/d3b/mpd__generator__flags_8h_source.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d3e/structshaka_1_1media_1_1mp4_1_1MovieExtends.html b/docs/d1/d3e/structshaka_1_1media_1_1mp4_1_1MovieExtends.html index 8f916b7f4d..8b08fe2033 100644 --- a/docs/d1/d3e/structshaka_1_1media_1_1mp4_1_1MovieExtends.html +++ b/docs/d1/d3e/structshaka_1_1media_1_1mp4_1_1MovieExtends.html @@ -176,7 +176,7 @@ Additional Inherited Members diff --git a/docs/d1/d40/classshaka_1_1MpdWriter-members.html b/docs/d1/d40/classshaka_1_1MpdWriter-members.html index 61606f28b4..0eb4f13f19 100644 --- a/docs/d1/d40/classshaka_1_1MpdWriter-members.html +++ b/docs/d1/d40/classshaka_1_1MpdWriter-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d45/decoding__time__iterator_8cc_source.html b/docs/d1/d45/decoding__time__iterator_8cc_source.html index 856dfb5515..5c33c4ca2d 100644 --- a/docs/d1/d45/decoding__time__iterator_8cc_source.html +++ b/docs/d1/d45/decoding__time__iterator_8cc_source.html @@ -168,7 +168,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d48/text__track__config_8h_source.html b/docs/d1/d48/text__track__config_8h_source.html index ca5391b568..bdc8b60b62 100644 --- a/docs/d1/d48/text__track__config_8h_source.html +++ b/docs/d1/d48/text__track__config_8h_source.html @@ -139,7 +139,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d4f/classshaka_1_1media_1_1OffsetByteQueue-members.html b/docs/d1/d4f/classshaka_1_1media_1_1OffsetByteQueue-members.html index 6ea5546af8..ef6bd54c82 100644 --- a/docs/d1/d4f/classshaka_1_1media_1_1OffsetByteQueue-members.html +++ b/docs/d1/d4f/classshaka_1_1media_1_1OffsetByteQueue-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d5a/structshaka_1_1media_1_1EncryptionKey-members.html b/docs/d1/d5a/structshaka_1_1media_1_1EncryptionKey-members.html index 6b4cf2323a..981eba861f 100644 --- a/docs/d1/d5a/structshaka_1_1media_1_1EncryptionKey-members.html +++ b/docs/d1/d5a/structshaka_1_1media_1_1EncryptionKey-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d6e/structshaka_1_1media_1_1mp4_1_1TrackFragmentHeader.html b/docs/d1/d6e/structshaka_1_1media_1_1mp4_1_1TrackFragmentHeader.html index 5b2fb5625b..9166a0b8b6 100644 --- a/docs/d1/d6e/structshaka_1_1media_1_1mp4_1_1TrackFragmentHeader.html +++ b/docs/d1/d6e/structshaka_1_1media_1_1mp4_1_1TrackFragmentHeader.html @@ -222,7 +222,7 @@ Additional Inherited Members diff --git a/docs/d1/d70/vp8__parser_8cc_source.html b/docs/d1/d70/vp8__parser_8cc_source.html index a5081daff0..f8bf9b0964 100644 --- a/docs/d1/d70/vp8__parser_8cc_source.html +++ b/docs/d1/d70/vp8__parser_8cc_source.html @@ -293,7 +293,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d72/language__utils_8cc_source.html b/docs/d1/d72/language__utils_8cc_source.html index acc31e5a6b..e0341d9ad9 100644 --- a/docs/d1/d72/language__utils_8cc_source.html +++ b/docs/d1/d72/language__utils_8cc_source.html @@ -226,7 +226,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d74/mp2t__media__parser_8cc_source.html b/docs/d1/d74/mp2t__media__parser_8cc_source.html index 23f07a4cbe..c565fb5904 100644 --- a/docs/d1/d74/mp2t__media__parser_8cc_source.html +++ b/docs/d1/d74/mp2t__media__parser_8cc_source.html @@ -539,7 +539,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d79/classshaka_1_1media_1_1H265VideoSliceHeaderParser.html b/docs/d1/d79/classshaka_1_1media_1_1H265VideoSliceHeaderParser.html index 2e6982a5c1..262a3c2475 100644 --- a/docs/d1/d79/classshaka_1_1media_1_1H265VideoSliceHeaderParser.html +++ b/docs/d1/d79/classshaka_1_1media_1_1H265VideoSliceHeaderParser.html @@ -152,7 +152,7 @@ int64_t  diff --git a/docs/d1/d7d/webm__video__client_8cc_source.html b/docs/d1/d7d/webm__video__client_8cc_source.html index a11b623289..1780d4643b 100644 --- a/docs/d1/d7d/webm__video__client_8cc_source.html +++ b/docs/d1/d7d/webm__video__client_8cc_source.html @@ -142,7 +142,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
53  const std::string& codec_id,
54  const std::vector<uint8_t>& codec_private,
55  bool is_encrypted) {
-
56  VideoCodec video_codec = kUnknownVideoCodec;
+
56  Codec video_codec = kUnknownCodec;
57  if (codec_id == "V_VP8") {
58  video_codec = kCodecVP8;
59  } else if (codec_id == "V_VP9") {
@@ -199,9 +199,9 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
110  sar_y /= gcd;
111 
112  return scoped_refptr<VideoStreamInfo>(new VideoStreamInfo(
-
113  track_num, kWebMTimeScale, 0, video_codec, std::string(), std::string(),
-
114  width_after_crop, height_after_crop, sar_x, sar_y, 0, 0,
-
115  codec_private.data(), codec_private.size(), is_encrypted));
+
113  track_num, kWebMTimeScale, 0, video_codec, std::string(),
+
114  codec_private.data(), codec_private.size(), width_after_crop,
+
115  height_after_crop, sar_x, sar_y, 0, 0, std::string(), is_encrypted));
116 }
117 
118 bool WebMVideoClient::OnUInt(int id, int64_t val) {
@@ -266,11 +266,11 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
177 } // namespace shaka
void Reset()
Reset this object's state so it can process a new video track element.
scoped_refptr< VideoStreamInfo > GetVideoStreamInfo(int64_t track_num, const std::string &codec_id, const std::vector< uint8_t > &codec_private, bool is_encrypted)
-
Holds video stream information.
+
Holds video stream information.
diff --git a/docs/d1/d81/structshaka_1_1media_1_1H265ReferencePictureSet-members.html b/docs/d1/d81/structshaka_1_1media_1_1H265ReferencePictureSet-members.html index 574384572e..72074d2c20 100644 --- a/docs/d1/d81/structshaka_1_1media_1_1H265ReferencePictureSet-members.html +++ b/docs/d1/d81/structshaka_1_1media_1_1H265ReferencePictureSet-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d82/adts__constants_8h_source.html b/docs/d1/d82/adts__constants_8h_source.html index f8481badca..4c3f19eac7 100644 --- a/docs/d1/d82/adts__constants_8h_source.html +++ b/docs/d1/d82/adts__constants_8h_source.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d82/classshaka_1_1media_1_1WebMParserClient-members.html b/docs/d1/d82/classshaka_1_1media_1_1WebMParserClient-members.html index 455df65e86..275323de9f 100644 --- a/docs/d1/d82/classshaka_1_1media_1_1WebMParserClient-members.html +++ b/docs/d1/d82/classshaka_1_1media_1_1WebMParserClient-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d86/classshaka_1_1media_1_1mp4_1_1KeyRotationFragmenter-members.html b/docs/d1/d86/classshaka_1_1media_1_1mp4_1_1KeyRotationFragmenter-members.html index 4392a17e43..735d74a8f6 100644 --- a/docs/d1/d86/classshaka_1_1media_1_1mp4_1_1KeyRotationFragmenter-members.html +++ b/docs/d1/d86/classshaka_1_1media_1_1mp4_1_1KeyRotationFragmenter-members.html @@ -124,7 +124,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d8e/webm__audio__client_8cc_source.html b/docs/d1/d8e/webm__audio__client_8cc_source.html index acbab1cf7b..8176f7d531 100644 --- a/docs/d1/d8e/webm__audio__client_8cc_source.html +++ b/docs/d1/d8e/webm__audio__client_8cc_source.html @@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
36  int64_t codec_delay,
37  const std::string& language,
38  bool is_encrypted) {
-
39  AudioCodec audio_codec = kUnknownAudioCodec;
+
39  Codec audio_codec = kUnknownCodec;
40  if (codec_id == "A_VORBIS") {
41  audio_codec = kCodecVorbis;
42  } else if (codec_id == "A_OPUS") {
@@ -159,10 +159,10 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
70  const uint8_t kSampleSizeInBits = 16u;
71  return scoped_refptr<AudioStreamInfo>(new AudioStreamInfo(
72  track_num, kWebMTimeScale, 0, audio_codec,
-
73  AudioStreamInfo::GetCodecString(audio_codec, 0), language,
-
74  kSampleSizeInBits, channels_, sampling_frequency,
+
73  AudioStreamInfo::GetCodecString(audio_codec, 0), codec_config,
+
74  codec_config_size, kSampleSizeInBits, channels_, sampling_frequency,
75  seek_preroll < 0 ? 0 : seek_preroll, codec_delay < 0 ? 0 : codec_delay, 0,
-
76  0, codec_config, codec_config_size, is_encrypted));
+
76  0, language, is_encrypted));
77 }
78 
79 bool WebMAudioClient::OnUInt(int id, int64_t val) {
@@ -207,14 +207,14 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
118 
119 } // namespace media
120 } // namespace shaka
-
static std::string GetCodecString(AudioCodec codec, uint8_t audio_object_type)
+
static std::string GetCodecString(Codec codec, uint8_t audio_object_type)
void Reset()
Reset this object's state so it can process a new audio track element.
-
Holds audio stream information.
+
Holds audio stream information.
scoped_refptr< AudioStreamInfo > GetAudioStreamInfo(int64_t track_num, const std::string &codec_id, const std::vector< uint8_t > &codec_private, int64_t seek_preroll, int64_t codec_delay, const std::string &language, bool is_encrypted)
diff --git a/docs/d1/d91/classshaka_1_1media_1_1H26xBitReader-members.html b/docs/d1/d91/classshaka_1_1media_1_1H26xBitReader-members.html index 8f5946e421..0c9331bfb5 100644 --- a/docs/d1/d91/classshaka_1_1media_1_1H26xBitReader-members.html +++ b/docs/d1/d91/classshaka_1_1media_1_1H26xBitReader-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d9d/classshaka_1_1media_1_1ByteQueue-members.html b/docs/d1/d9d/classshaka_1_1media_1_1ByteQueue-members.html index e76bf6e88d..8a580c164a 100644 --- a/docs/d1/d9d/classshaka_1_1media_1_1ByteQueue-members.html +++ b/docs/d1/d9d/classshaka_1_1media_1_1ByteQueue-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d9d/tracks__builder_8h_source.html b/docs/d1/d9d/tracks__builder_8h_source.html index 35d523fd38..9163d51b56 100644 --- a/docs/d1/d9d/tracks__builder_8h_source.html +++ b/docs/d1/d9d/tracks__builder_8h_source.html @@ -210,7 +210,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d9e/structshaka_1_1media_1_1mp4_1_1CodecConfiguration-members.html b/docs/d1/d9e/structshaka_1_1media_1_1mp4_1_1CodecConfiguration-members.html index 719bb053b6..fc27adff7c 100644 --- a/docs/d1/d9e/structshaka_1_1media_1_1mp4_1_1CodecConfiguration-members.html +++ b/docs/d1/d9e/structshaka_1_1media_1_1mp4_1_1CodecConfiguration-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/da1/classshaka_1_1media_1_1mp4_1_1BoxBuffer.html b/docs/d1/da1/classshaka_1_1media_1_1mp4_1_1BoxBuffer.html index 1e37190951..4a63ea25e2 100644 --- a/docs/d1/da1/classshaka_1_1media_1_1mp4_1_1BoxBuffer.html +++ b/docs/d1/da1/classshaka_1_1media_1_1mp4_1_1BoxBuffer.html @@ -589,7 +589,7 @@ bool ReadWriteInt64 (i diff --git a/docs/d1/da1/structshaka_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample.html b/docs/d1/da1/structshaka_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample.html index 2907b08e31..827ae75354 100644 --- a/docs/d1/da1/structshaka_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample.html +++ b/docs/d1/da1/structshaka_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample.html @@ -116,7 +116,7 @@ scoped_refptr< diff --git a/docs/d1/da2/classshaka_1_1media_1_1NalUnitToByteStreamConverter-members.html b/docs/d1/da2/classshaka_1_1media_1_1NalUnitToByteStreamConverter-members.html index e64b899738..9d51397438 100644 --- a/docs/d1/da2/classshaka_1_1media_1_1NalUnitToByteStreamConverter-members.html +++ b/docs/d1/da2/classshaka_1_1media_1_1NalUnitToByteStreamConverter-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/da5/classshaka_1_1media_1_1VPCodecConfigurationRecord.html b/docs/d1/da5/classshaka_1_1media_1_1VPCodecConfigurationRecord.html index aea1d67be1..e8cee3242b 100644 --- a/docs/d1/da5/classshaka_1_1media_1_1VPCodecConfigurationRecord.html +++ b/docs/d1/da5/classshaka_1_1media_1_1VPCodecConfigurationRecord.html @@ -139,8 +139,8 @@ Public Member Functions   void WriteWebM (std::vector< uint8_t > *data) const   -std::string GetCodecString (VideoCodec codec) const -  +std::string GetCodecString (Codec codec) const +  void MergeFrom (const VPCodecConfigurationRecord &other)   @@ -192,14 +192,14 @@ bool video_full_range_flag

Definition at line 21 of file vp_codec_configuration_record.h.

Member Function Documentation

- +
- + @@ -306,7 +306,7 @@ bool 
std::string shaka::media::VPCodecConfigurationRecord::GetCodecString (VideoCodec Codec  codec) const
video_full_range_flag diff --git a/docs/d1/dad/classshaka_1_1media_1_1Demuxer-members.html b/docs/d1/dad/classshaka_1_1media_1_1Demuxer-members.html index 56b2d2d702..cb7725a24c 100644 --- a/docs/d1/dad/classshaka_1_1media_1_1Demuxer-members.html +++ b/docs/d1/dad/classshaka_1_1media_1_1Demuxer-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
diff --git a/docs/d1/db0/structshaka_1_1media_1_1mp4_1_1VideoMediaHeader.html b/docs/d1/db0/structshaka_1_1media_1_1mp4_1_1VideoMediaHeader.html index f36936297e..9d6f83a331 100644 --- a/docs/d1/db0/structshaka_1_1media_1_1mp4_1_1VideoMediaHeader.html +++ b/docs/d1/db0/structshaka_1_1media_1_1mp4_1_1VideoMediaHeader.html @@ -191,7 +191,7 @@ Additional Inherited Members
diff --git a/docs/d1/db2/decoder__configuration__record_8h_source.html b/docs/d1/db2/decoder__configuration__record_8h_source.html index 913378796b..08f78f6aa2 100644 --- a/docs/d1/db2/decoder__configuration__record_8h_source.html +++ b/docs/d1/db2/decoder__configuration__record_8h_source.html @@ -166,7 +166,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/dc2/h26x__bit__reader_8h_source.html b/docs/d1/dc2/h26x__bit__reader_8h_source.html index 649d93656a..c4aa21398e 100644 --- a/docs/d1/dc2/h26x__bit__reader_8h_source.html +++ b/docs/d1/dc2/h26x__bit__reader_8h_source.html @@ -192,7 +192,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/dcb/encrypting__fragmenter_8h_source.html b/docs/d1/dcb/encrypting__fragmenter_8h_source.html index aa4fc9a67e..856f061803 100644 --- a/docs/d1/dcb/encrypting__fragmenter_8h_source.html +++ b/docs/d1/dcb/encrypting__fragmenter_8h_source.html @@ -160,7 +160,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
92  // and type of NAL units remain unencrypted. This function returns the size of
93  // the size field in bytes. Can be 1, 2 or 4 bytes.
94  const uint8_t nalu_length_size_;
-
95  const VideoCodec video_codec_;
+
95  const Codec video_codec_;
96  int64_t clear_time_;
97  const FourCC protection_scheme_;
98  const uint8_t crypt_byte_block_;
@@ -178,24 +178,24 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
110 } // namespace shaka
111 
112 #endif // MEDIA_FORMATS_MP4_ENCRYPTING_FRAGMENTER_H_
-
Status AddSample(scoped_refptr< MediaSample > sample) override
+
Status AddSample(scoped_refptr< MediaSample > sample) override
-
Status InitializeFragment(int64_t first_sample_dts) override
-
EncryptingFragmenter(scoped_refptr< StreamInfo > info, TrackFragment *traf, scoped_ptr< EncryptionKey > encryption_key, int64_t clear_time, FourCC protection_scheme, uint8_t crypt_byte_block, uint8_t skip_byte_block, MuxerListener *listener)
+
Status InitializeFragment(int64_t first_sample_dts) override
+
EncryptingFragmenter(scoped_refptr< StreamInfo > info, TrackFragment *traf, scoped_ptr< EncryptionKey > encryption_key, int64_t clear_time, FourCC protection_scheme, uint8_t crypt_byte_block, uint8_t skip_byte_block, MuxerListener *listener)
-
void FinalizeFragment() override
Finalize and optimize the fragment.
-
virtual void FinalizeFragmentForEncryption()
Finalize current fragment for encryption.
+
void FinalizeFragment() override
Finalize and optimize the fragment.
+
virtual void FinalizeFragmentForEncryption()
Finalize current fragment for encryption.
EncryptingFragmenter generates MP4 fragments with sample encrypted.
- -
virtual Status PrepareFragmentForEncryption(bool enable_encryption)
+ +
virtual Status PrepareFragmentForEncryption(bool enable_encryption)
diff --git a/docs/d1/dd5/classshaka_1_1media_1_1Cluster.html b/docs/d1/dd5/classshaka_1_1media_1_1Cluster.html index ced4664dfa..5e4f1386f7 100644 --- a/docs/d1/dd5/classshaka_1_1media_1_1Cluster.html +++ b/docs/d1/dd5/classshaka_1_1media_1_1Cluster.html @@ -116,7 +116,7 @@ int size () const diff --git a/docs/d1/dd6/structshaka_1_1media_1_1mp4_1_1DataInformation-members.html b/docs/d1/dd6/structshaka_1_1media_1_1mp4_1_1DataInformation-members.html index 72f209374b..d16f4e86b9 100644 --- a/docs/d1/dd6/structshaka_1_1media_1_1mp4_1_1DataInformation-members.html +++ b/docs/d1/dd6/structshaka_1_1media_1_1mp4_1_1DataInformation-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/de2/classshaka_1_1media_1_1VideoStreamInfo-members.html b/docs/d1/de2/classshaka_1_1media_1_1VideoStreamInfo-members.html index 2002183749..4388e66a2f 100644 --- a/docs/d1/de2/classshaka_1_1media_1_1VideoStreamInfo-members.html +++ b/docs/d1/de2/classshaka_1_1media_1_1VideoStreamInfo-members.html @@ -93,7 +93,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');

This is the complete list of members for shaka::media::VideoStreamInfo, including all inherited members.

- + @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); - + @@ -114,18 +114,18 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); - + - +
codec() const (defined in shaka::media::VideoStreamInfo)shaka::media::VideoStreamInfoinline
codec() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
codec_config() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
codec_string() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
duration() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
nalu_length_size() const (defined in shaka::media::VideoStreamInfo)shaka::media::VideoStreamInfoinline
pixel_height() const shaka::media::VideoStreamInfoinline
pixel_width() const shaka::media::VideoStreamInfoinline
set_codec(VideoCodec codec) (defined in shaka::media::VideoStreamInfo)shaka::media::VideoStreamInfoinline
set_codec(Codec codec) (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
set_codec_config(const std::vector< uint8_t > &data) (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
set_codec_string(const std::string &codec_string) (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
set_duration(int duration) (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
set_pixel_width(uint32_t pixel_width) (defined in shaka::media::VideoStreamInfo)shaka::media::VideoStreamInfoinline
set_width(uint32_t width) (defined in shaka::media::VideoStreamInfo)shaka::media::VideoStreamInfoinline
stream_type() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
StreamInfo(StreamType stream_type, int track_id, uint32_t time_scale, uint64_t duration, const std::string &codec_string, const std::string &language, const uint8_t *codec_config, size_t codec_config_size, bool is_encrypted) (defined in shaka::media::StreamInfo)shaka::media::StreamInfo
StreamInfo(StreamType stream_type, int track_id, uint32_t time_scale, uint64_t duration, Codec codec, const std::string &codec_string, const uint8_t *codec_config, size_t codec_config_size, const std::string &language, bool is_encrypted) (defined in shaka::media::StreamInfo)shaka::media::StreamInfo
time_scale() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
ToString() const overrideshaka::media::VideoStreamInfovirtual
track_id() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
trick_play_rate() const (defined in shaka::media::VideoStreamInfo)shaka::media::VideoStreamInfoinline
VideoStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, VideoCodec codec, const std::string &codec_string, const std::string &language, uint16_t width, uint16_t height, uint32_t pixel_width, uint32_t pixel_height, int16_t trick_play_rate, uint8_t nalu_length_size, const uint8_t *codec_config, size_t codec_config_size, bool is_encrypted)shaka::media::VideoStreamInfo
VideoStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, Codec codec, const std::string &codec_string, const uint8_t *codec_config, size_t codec_config_size, uint16_t width, uint16_t height, uint32_t pixel_width, uint32_t pixel_height, int16_t trick_play_rate, uint8_t nalu_length_size, const std::string &language, bool is_encrypted)shaka::media::VideoStreamInfo
width() const (defined in shaka::media::VideoStreamInfo)shaka::media::VideoStreamInfoinline
~StreamInfo() (defined in shaka::media::StreamInfo)shaka::media::StreamInfoprotectedvirtual
diff --git a/docs/d1/de2/composition__offset__iterator_8cc_source.html b/docs/d1/de2/composition__offset__iterator_8cc_source.html index 283d994831..b30cec7d25 100644 --- a/docs/d1/de2/composition__offset__iterator_8cc_source.html +++ b/docs/d1/de2/composition__offset__iterator_8cc_source.html @@ -159,7 +159,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/de4/classshaka_1_1media_1_1KeyFetcher-members.html b/docs/d1/de4/classshaka_1_1media_1_1KeyFetcher-members.html index 1e6d4467d8..ef30bd9d3e 100644 --- a/docs/d1/de4/classshaka_1_1media_1_1KeyFetcher-members.html +++ b/docs/d1/de4/classshaka_1_1media_1_1KeyFetcher-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/de7/classshaka_1_1xml_1_1AdaptationSetXmlNode.html b/docs/d1/de7/classshaka_1_1xml_1_1AdaptationSetXmlNode.html index 67dc16b2a1..f94e7f4fda 100644 --- a/docs/d1/de7/classshaka_1_1xml_1_1AdaptationSetXmlNode.html +++ b/docs/d1/de7/classshaka_1_1xml_1_1AdaptationSetXmlNode.html @@ -197,7 +197,7 @@ Additional Inherited Members diff --git a/docs/d1/de7/structshaka_1_1media_1_1H265ReferencePictureListModifications-members.html b/docs/d1/de7/structshaka_1_1media_1_1H265ReferencePictureListModifications-members.html index ec9f96886c..a347ec85e0 100644 --- a/docs/d1/de7/structshaka_1_1media_1_1H265ReferencePictureListModifications-members.html +++ b/docs/d1/de7/structshaka_1_1media_1_1H265ReferencePictureListModifications-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/de9/classshaka_1_1media_1_1ProgressListener-members.html b/docs/d1/de9/classshaka_1_1media_1_1ProgressListener-members.html index 6a56fbb49a..f04cb14d34 100644 --- a/docs/d1/de9/classshaka_1_1media_1_1ProgressListener-members.html +++ b/docs/d1/de9/classshaka_1_1media_1_1ProgressListener-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/dee/classshaka_1_1media_1_1mp4_1_1BoxReader.html b/docs/d1/dee/classshaka_1_1media_1_1mp4_1_1BoxReader.html index e62f16d046..7f74d4780a 100644 --- a/docs/d1/dee/classshaka_1_1media_1_1mp4_1_1BoxReader.html +++ b/docs/d1/dee/classshaka_1_1media_1_1mp4_1_1BoxReader.html @@ -468,7 +468,7 @@ template<typename T > diff --git a/docs/d1/dee/structshaka_1_1media_1_1mp4_1_1SampleTable.html b/docs/d1/dee/structshaka_1_1media_1_1mp4_1_1SampleTable.html index 842f6f3839..792ef64e74 100644 --- a/docs/d1/dee/structshaka_1_1media_1_1mp4_1_1SampleTable.html +++ b/docs/d1/dee/structshaka_1_1media_1_1mp4_1_1SampleTable.html @@ -198,7 +198,7 @@ Additional Inherited Members diff --git a/docs/d1/df0/aes__encryptor_8h_source.html b/docs/d1/df0/aes__encryptor_8h_source.html index f128438583..3012e2ab02 100644 --- a/docs/d1/df0/aes__encryptor_8h_source.html +++ b/docs/d1/df0/aes__encryptor_8h_source.html @@ -195,7 +195,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/df3/structshaka_1_1MpdOptions.html b/docs/d1/df3/structshaka_1_1MpdOptions.html index 7aec038693..b0e8148304 100644 --- a/docs/d1/df3/structshaka_1_1MpdOptions.html +++ b/docs/d1/df3/structshaka_1_1MpdOptions.html @@ -127,7 +127,7 @@ double suggested_presentat diff --git a/docs/d1/df5/nalu__reader_8cc_source.html b/docs/d1/df5/nalu__reader_8cc_source.html index 58c1ded760..a3e0c54e91 100644 --- a/docs/d1/df5/nalu__reader_8cc_source.html +++ b/docs/d1/df5/nalu__reader_8cc_source.html @@ -434,7 +434,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/df9/structshaka_1_1media_1_1mp4_1_1VideoMediaHeader-members.html b/docs/d1/df9/structshaka_1_1media_1_1mp4_1_1VideoMediaHeader-members.html index 8340effeae..31409c8b74 100644 --- a/docs/d1/df9/structshaka_1_1media_1_1mp4_1_1VideoMediaHeader-members.html +++ b/docs/d1/df9/structshaka_1_1media_1_1mp4_1_1VideoMediaHeader-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d02/timestamp_8h_source.html b/docs/d2/d02/timestamp_8h_source.html index 3fc8e03957..523d23c1d1 100644 --- a/docs/d2/d02/timestamp_8h_source.html +++ b/docs/d2/d02/timestamp_8h_source.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d0b/classshaka_1_1media_1_1SeekHead-members.html b/docs/d2/d0b/classshaka_1_1media_1_1SeekHead-members.html index 67e23227d9..bc2fb1a22c 100644 --- a/docs/d2/d0b/classshaka_1_1media_1_1SeekHead-members.html +++ b/docs/d2/d0b/classshaka_1_1media_1_1SeekHead-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d0f/classshaka_1_1MpdBuilder-members.html b/docs/d2/d0f/classshaka_1_1MpdBuilder-members.html index 18e49ad14f..6aa5edb709 100644 --- a/docs/d2/d0f/classshaka_1_1MpdBuilder-members.html +++ b/docs/d2/d0f/classshaka_1_1MpdBuilder-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d0f/structshaka_1_1media_1_1wvm_1_1PrevSampleData.html b/docs/d2/d0f/structshaka_1_1media_1_1wvm_1_1PrevSampleData.html index 65c96b597b..8fed701897 100644 --- a/docs/d2/d0f/structshaka_1_1media_1_1wvm_1_1PrevSampleData.html +++ b/docs/d2/d0f/structshaka_1_1media_1_1wvm_1_1PrevSampleData.html @@ -132,7 +132,7 @@ int64_t video_sample_durat diff --git a/docs/d2/d11/classshaka_1_1media_1_1MuxerListener-members.html b/docs/d2/d11/classshaka_1_1media_1_1MuxerListener-members.html index 188d645e37..d03ccd2d8d 100644 --- a/docs/d2/d11/classshaka_1_1media_1_1MuxerListener-members.html +++ b/docs/d2/d11/classshaka_1_1media_1_1MuxerListener-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d17/ts__section__pat_8cc_source.html b/docs/d2/d17/ts__section__pat_8cc_source.html index f9c87013c7..f861e5abc3 100644 --- a/docs/d2/d17/ts__section__pat_8cc_source.html +++ b/docs/d2/d17/ts__section__pat_8cc_source.html @@ -214,7 +214,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d23/threaded__io__file_8cc_source.html b/docs/d2/d23/threaded__io__file_8cc_source.html index e285dc7933..34a06fe2dc 100644 --- a/docs/d2/d23/threaded__io__file_8cc_source.html +++ b/docs/d2/d23/threaded__io__file_8cc_source.html @@ -315,7 +315,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d24/packager__util_8h_source.html b/docs/d2/d24/packager__util_8h_source.html index 667e1035fc..c24e6792bd 100644 --- a/docs/d2/d24/packager__util_8h_source.html +++ b/docs/d2/d24/packager__util_8h_source.html @@ -141,7 +141,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d29/classshaka_1_1media_1_1mp4_1_1KeyRotationFragmenter.html b/docs/d2/d29/classshaka_1_1media_1_1mp4_1_1KeyRotationFragmenter.html index ea6a0cf488..3725cf3f1d 100644 --- a/docs/d2/d29/classshaka_1_1media_1_1mp4_1_1KeyRotationFragmenter.html +++ b/docs/d2/d29/classshaka_1_1media_1_1mp4_1_1KeyRotationFragmenter.html @@ -328,7 +328,7 @@ void set_encryption_key diff --git a/docs/d2/d30/tracks__builder_8cc_source.html b/docs/d2/d30/tracks__builder_8cc_source.html index ad417faafa..23b2dd481c 100644 --- a/docs/d2/d30/tracks__builder_8cc_source.html +++ b/docs/d2/d30/tracks__builder_8cc_source.html @@ -487,7 +487,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d33/video__slice__header__parser_8h_source.html b/docs/d2/d33/video__slice__header__parser_8h_source.html index 59512637f8..d4c0367c90 100644 --- a/docs/d2/d33/video__slice__header__parser_8h_source.html +++ b/docs/d2/d33/video__slice__header__parser_8h_source.html @@ -167,7 +167,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d35/classshaka_1_1media_1_1WidevineKeySource-members.html b/docs/d2/d35/classshaka_1_1media_1_1WidevineKeySource-members.html index 262ed9c177..9252990dbe 100644 --- a/docs/d2/d35/classshaka_1_1media_1_1WidevineKeySource-members.html +++ b/docs/d2/d35/classshaka_1_1media_1_1WidevineKeySource-members.html @@ -119,7 +119,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d3c/structshaka_1_1media_1_1mp4_1_1TrackFragmentHeader-members.html b/docs/d2/d3c/structshaka_1_1media_1_1mp4_1_1TrackFragmentHeader-members.html index c5c7d84e2e..33c9376867 100644 --- a/docs/d2/d3c/structshaka_1_1media_1_1mp4_1_1TrackFragmentHeader-members.html +++ b/docs/d2/d3c/structshaka_1_1media_1_1mp4_1_1TrackFragmentHeader-members.html @@ -133,7 +133,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d45/program__map__table__writer_8cc_source.html b/docs/d2/d45/program__map__table__writer_8cc_source.html index 2a867e269a..f069cdf6d8 100644 --- a/docs/d2/d45/program__map__table__writer_8cc_source.html +++ b/docs/d2/d45/program__map__table__writer_8cc_source.html @@ -500,7 +500,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d4c/nal__unit__to__byte__stream__converter_8cc_source.html b/docs/d2/d4c/nal__unit__to__byte__stream__converter_8cc_source.html index 7d7b86c6f5..485403918e 100644 --- a/docs/d2/d4c/nal__unit__to__byte__stream__converter_8cc_source.html +++ b/docs/d2/d4c/nal__unit__to__byte__stream__converter_8cc_source.html @@ -291,7 +291,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d4d/file_8h_source.html b/docs/d2/d4d/file_8h_source.html index 174d4a38da..9034f9afc6 100644 --- a/docs/d2/d4d/file_8h_source.html +++ b/docs/d2/d4d/file_8h_source.html @@ -191,7 +191,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d4f/structshaka_1_1Element-members.html b/docs/d2/d4f/structshaka_1_1Element-members.html index caeff49fbe..3a49ca1497 100644 --- a/docs/d2/d4f/structshaka_1_1Element-members.html +++ b/docs/d2/d4f/structshaka_1_1Element-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d51/classshaka_1_1MockMpdNotifier-members.html b/docs/d2/d51/classshaka_1_1MockMpdNotifier-members.html index 5fd14feac6..ee073142e2 100644 --- a/docs/d2/d51/classshaka_1_1MockMpdNotifier-members.html +++ b/docs/d2/d51/classshaka_1_1MockMpdNotifier-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d59/structshaka_1_1media_1_1H264SliceHeader.html b/docs/d2/d59/structshaka_1_1media_1_1H264SliceHeader.html index 81a6bc9a4f..23f8baf2a1 100644 --- a/docs/d2/d59/structshaka_1_1media_1_1H264SliceHeader.html +++ b/docs/d2/d59/structshaka_1_1media_1_1H264SliceHeader.html @@ -276,7 +276,7 @@ int slice_beta_offset_div2 diff --git a/docs/d2/d5b/classshaka_1_1media_1_1KeySource-members.html b/docs/d2/d5b/classshaka_1_1media_1_1KeySource-members.html index f6734ad318..c49f15daf4 100644 --- a/docs/d2/d5b/classshaka_1_1media_1_1KeySource-members.html +++ b/docs/d2/d5b/classshaka_1_1media_1_1KeySource-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d5c/classshaka_1_1SimpleMpdNotifier-members.html b/docs/d2/d5c/classshaka_1_1SimpleMpdNotifier-members.html index 769635d70c..fa65c6ad15 100644 --- a/docs/d2/d5c/classshaka_1_1SimpleMpdNotifier-members.html +++ b/docs/d2/d5c/classshaka_1_1SimpleMpdNotifier-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d61/structshaka_1_1media_1_1H264ModificationOfPicNum-members.html b/docs/d2/d61/structshaka_1_1media_1_1H264ModificationOfPicNum-members.html index cfebbadcd2..a93b2e8f1f 100644 --- a/docs/d2/d61/structshaka_1_1media_1_1H264ModificationOfPicNum-members.html +++ b/docs/d2/d61/structshaka_1_1media_1_1H264ModificationOfPicNum-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d62/simple__mpd__notifier_8h_source.html b/docs/d2/d62/simple__mpd__notifier_8h_source.html index e0fabde8b6..d523980a3a 100644 --- a/docs/d2/d62/simple__mpd__notifier_8h_source.html +++ b/docs/d2/d62/simple__mpd__notifier_8h_source.html @@ -186,7 +186,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d62/structshaka_1_1media_1_1mp4_1_1Movie-members.html b/docs/d2/d62/structshaka_1_1media_1_1mp4_1_1Movie-members.html index 55c7d77c95..e23ae983be 100644 --- a/docs/d2/d62/structshaka_1_1media_1_1mp4_1_1Movie-members.html +++ b/docs/d2/d62/structshaka_1_1media_1_1mp4_1_1Movie-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d6a/classshaka_1_1media_1_1AesCryptor-members.html b/docs/d2/d6a/classshaka_1_1media_1_1AesCryptor-members.html index 6b98d402c4..f1d7808046 100644 --- a/docs/d2/d6a/classshaka_1_1media_1_1AesCryptor-members.html +++ b/docs/d2/d6a/classshaka_1_1media_1_1AesCryptor-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d6f/classBandwidthEstimator.html b/docs/d2/d6f/classBandwidthEstimator.html index 55dfa2f3d7..ef82913500 100644 --- a/docs/d2/d6f/classBandwidthEstimator.html +++ b/docs/d2/d6f/classBandwidthEstimator.html @@ -151,7 +151,7 @@ static const int kUseAllBl diff --git a/docs/d2/d70/structshaka_1_1media_1_1mp4_1_1SchemeInfo.html b/docs/d2/d70/structshaka_1_1media_1_1mp4_1_1SchemeInfo.html index b1dbcaa58c..cb45fd0b43 100644 --- a/docs/d2/d70/structshaka_1_1media_1_1mp4_1_1SchemeInfo.html +++ b/docs/d2/d70/structshaka_1_1media_1_1mp4_1_1SchemeInfo.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d2/d7b/classshaka_1_1DashIopMpdNotifier-members.html b/docs/d2/d7b/classshaka_1_1DashIopMpdNotifier-members.html index 1dbe98a63d..08e03f3e33 100644 --- a/docs/d2/d7b/classshaka_1_1DashIopMpdNotifier-members.html +++ b/docs/d2/d7b/classshaka_1_1DashIopMpdNotifier-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d7b/simple__mpd__notifier_8cc_source.html b/docs/d2/d7b/simple__mpd__notifier_8cc_source.html index 8caf87db53..b405dfc67a 100644 --- a/docs/d2/d7b/simple__mpd__notifier_8cc_source.html +++ b/docs/d2/d7b/simple__mpd__notifier_8cc_source.html @@ -239,7 +239,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d7e/aac__audio__specific__config_8h_source.html b/docs/d2/d7e/aac__audio__specific__config_8h_source.html index 96eef595a2..5f179b24b8 100644 --- a/docs/d2/d7e/aac__audio__specific__config_8h_source.html +++ b/docs/d2/d7e/aac__audio__specific__config_8h_source.html @@ -164,7 +164,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d7f/structshaka_1_1media_1_1mp4_1_1CuePayloadBox.html b/docs/d2/d7f/structshaka_1_1media_1_1mp4_1_1CuePayloadBox.html index b471cb7eda..673c7ab6b3 100644 --- a/docs/d2/d7f/structshaka_1_1media_1_1mp4_1_1CuePayloadBox.html +++ b/docs/d2/d7f/structshaka_1_1media_1_1mp4_1_1CuePayloadBox.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d2/d8a/hls__notify__muxer__listener_8h_source.html b/docs/d2/d8a/hls__notify__muxer__listener_8h_source.html index 1fb0d75bfe..859b7c3bb1 100644 --- a/docs/d2/d8a/hls__notify__muxer__listener_8h_source.html +++ b/docs/d2/d8a/hls__notify__muxer__listener_8h_source.html @@ -162,7 +162,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
85 } // namespace shaka
86 #endif // PACKAGER_MEDIA_EVENT_HLS_NOTIFY_MUXER_LISTENER_H_
void OnMediaStart(const MuxerOptions &muxer_options, const StreamInfo &stream_info, uint32_t time_scale, ContainerType container_type) override
-
Abstract class holds stream information.
Definition: stream_info.h:26
+
Abstract class holds stream information.
Definition: stream_info.h:53
void OnEncryptionInfoReady(bool is_initial_encryption_info, FourCC protection_scheme, const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &iv, const std::vector< ProtectionSystemSpecificInfo > &key_system_info) override
MuxerListener that uses HlsNotifier.
This structure contains the list of configuration options for Muxer.
Definition: muxer_options.h:18
@@ -175,7 +175,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d91/structshaka_1_1media_1_1mp4_1_1CuePayloadBox-members.html b/docs/d2/d91/structshaka_1_1media_1_1mp4_1_1CuePayloadBox-members.html index db069f7fdc..205e9f16f6 100644 --- a/docs/d2/d91/structshaka_1_1media_1_1mp4_1_1CuePayloadBox-members.html +++ b/docs/d2/d91/structshaka_1_1media_1_1mp4_1_1CuePayloadBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d92/box__reader_8h_source.html b/docs/d2/d92/box__reader_8h_source.html index 7771740265..21f371fcbe 100644 --- a/docs/d2/d92/box__reader_8h_source.html +++ b/docs/d2/d92/box__reader_8h_source.html @@ -246,7 +246,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d93/classshaka_1_1media_1_1mp2t_1_1PesPacket.html b/docs/d2/d93/classshaka_1_1media_1_1mp2t_1_1PesPacket.html index 74b81378fb..8da8a9018e 100644 --- a/docs/d2/d93/classshaka_1_1media_1_1mp2t_1_1PesPacket.html +++ b/docs/d2/d93/classshaka_1_1media_1_1mp2t_1_1PesPacket.html @@ -387,7 +387,7 @@ const std::vector< uint8_t > &  diff --git a/docs/d2/d95/structshaka_1_1media_1_1StreamDescriptor.html b/docs/d2/d95/structshaka_1_1media_1_1StreamDescriptor.html index c429ecb8aa..bb7d7e6576 100644 --- a/docs/d2/d95/structshaka_1_1media_1_1StreamDescriptor.html +++ b/docs/d2/d95/structshaka_1_1media_1_1StreamDescriptor.html @@ -140,7 +140,7 @@ std::string hls_playlist_n diff --git a/docs/d2/da6/threaded__io__file_8h_source.html b/docs/d2/da6/threaded__io__file_8h_source.html index 55801069f6..147e7aeb13 100644 --- a/docs/d2/da6/threaded__io__file_8h_source.html +++ b/docs/d2/da6/threaded__io__file_8h_source.html @@ -172,7 +172,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/da8/mp4_2segmenter_8cc_source.html b/docs/d2/da8/mp4_2segmenter_8cc_source.html index b59764e715..98cef8ac00 100644 --- a/docs/d2/da8/mp4_2segmenter_8cc_source.html +++ b/docs/d2/da8/mp4_2segmenter_8cc_source.html @@ -575,8 +575,8 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
486 } // namespace media
487 } // namespace shaka
- -
Status AddSample(scoped_refptr< MediaSample > sample)
Definition: segmenter.cc:117
+ +
Status AddSample(scoped_refptr< MediaSample > sample)
Definition: segmenter.cc:118
virtual Status AddSample(scoped_refptr< MediaSample > sample)
Definition: fragmenter.cc:47
@@ -591,17 +591,17 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
virtual void OnProgress(double progress)=0
- +
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:31
-
void UpdateProgress(uint64_t progress)
Update segmentation progress using ProgressListener.
Definition: segmenter.cc:254
+
void UpdateProgress(uint64_t progress)
Update segmentation progress using ProgressListener.
Definition: segmenter.cc:255
diff --git a/docs/d2/da9/classshaka_1_1media_1_1BufferWriter-members.html b/docs/d2/da9/classshaka_1_1media_1_1BufferWriter-members.html index 74edfc355c..299c6050fb 100644 --- a/docs/d2/da9/classshaka_1_1media_1_1BufferWriter-members.html +++ b/docs/d2/da9/classshaka_1_1media_1_1BufferWriter-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dae/classshaka_1_1MockAdaptationSet-members.html b/docs/d2/dae/classshaka_1_1MockAdaptationSet-members.html index 49c4703b50..63c0ba0493 100644 --- a/docs/d2/dae/classshaka_1_1MockAdaptationSet-members.html +++ b/docs/d2/dae/classshaka_1_1MockAdaptationSet-members.html @@ -126,7 +126,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dae/webm__muxer_8cc_source.html b/docs/d2/dae/webm__muxer_8cc_source.html index 4a970628b0..a16d49e560 100644 --- a/docs/d2/dae/webm__muxer_8cc_source.html +++ b/docs/d2/dae/webm__muxer_8cc_source.html @@ -225,7 +225,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/db1/structshaka_1_1media_1_1mp4_1_1SampleToGroup-members.html b/docs/d2/db1/structshaka_1_1media_1_1mp4_1_1SampleToGroup-members.html index b360338aa3..a7496b7cb3 100644 --- a/docs/d2/db1/structshaka_1_1media_1_1mp4_1_1SampleToGroup-members.html +++ b/docs/d2/db1/structshaka_1_1media_1_1mp4_1_1SampleToGroup-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/db6/structshaka_1_1media_1_1mp4_1_1FileType-members.html b/docs/d2/db6/structshaka_1_1media_1_1mp4_1_1FileType-members.html index 45677b9053..4152d3144f 100644 --- a/docs/d2/db6/structshaka_1_1media_1_1mp4_1_1FileType-members.html +++ b/docs/d2/db6/structshaka_1_1media_1_1mp4_1_1FileType-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/db8/structshaka_1_1media_1_1mp4_1_1CueSourceIDBox-members.html b/docs/d2/db8/structshaka_1_1media_1_1mp4_1_1CueSourceIDBox-members.html index ad3e364168..cf34497ad2 100644 --- a/docs/d2/db8/structshaka_1_1media_1_1mp4_1_1CueSourceIDBox-members.html +++ b/docs/d2/db8/structshaka_1_1media_1_1mp4_1_1CueSourceIDBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dba/classshaka_1_1media_1_1SegmentTestBase.html b/docs/d2/dba/classshaka_1_1media_1_1SegmentTestBase.html index 891e59e002..59176ea73e 100644 --- a/docs/d2/dba/classshaka_1_1media_1_1SegmentTestBase.html +++ b/docs/d2/dba/classshaka_1_1media_1_1SegmentTestBase.html @@ -180,7 +180,7 @@ bool single_segment_ diff --git a/docs/d2/dc3/structshaka_1_1media_1_1mp4_1_1Track-members.html b/docs/d2/dc3/structshaka_1_1media_1_1mp4_1_1Track-members.html index dfa0002b27..11cda3fd73 100644 --- a/docs/d2/dc3/structshaka_1_1media_1_1mp4_1_1Track-members.html +++ b/docs/d2/dc3/structshaka_1_1media_1_1mp4_1_1Track-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dc7/structshaka_1_1MpdOptions-members.html b/docs/d2/dc7/structshaka_1_1MpdOptions-members.html index 2e6dcdb948..c66223f759 100644 --- a/docs/d2/dc7/structshaka_1_1MpdOptions-members.html +++ b/docs/d2/dc7/structshaka_1_1MpdOptions-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dcd/program__map__table__writer_8h_source.html b/docs/d2/dcd/program__map__table__writer_8h_source.html index 33862a4b1c..9b64d7de9b 100644 --- a/docs/d2/dcd/program__map__table__writer_8h_source.html +++ b/docs/d2/dcd/program__map__table__writer_8h_source.html @@ -190,7 +190,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dcd/structshaka_1_1media_1_1mp4_1_1EditList-members.html b/docs/d2/dcd/structshaka_1_1media_1_1mp4_1_1EditList-members.html index 1815b1709f..226f504a90 100644 --- a/docs/d2/dcd/structshaka_1_1media_1_1mp4_1_1EditList-members.html +++ b/docs/d2/dcd/structshaka_1_1media_1_1mp4_1_1EditList-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dd5/classshaka_1_1media_1_1webm_1_1MultiSegmentSegmenter.html b/docs/d2/dd5/classshaka_1_1media_1_1webm_1_1MultiSegmentSegmenter.html index c76ed6b97a..37da9a6762 100644 --- a/docs/d2/dd5/classshaka_1_1media_1_1webm_1_1MultiSegmentSegmenter.html +++ b/docs/d2/dd5/classshaka_1_1media_1_1webm_1_1MultiSegmentSegmenter.html @@ -277,7 +277,7 @@ double cluster_length_sec< diff --git a/docs/d2/dd6/mkv__writer_8h_source.html b/docs/d2/dd6/mkv__writer_8h_source.html index 4e78cc2ddd..711251db23 100644 --- a/docs/d2/dd6/mkv__writer_8h_source.html +++ b/docs/d2/dd6/mkv__writer_8h_source.html @@ -152,7 +152,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/ddb/classshaka_1_1media_1_1WebMMediaParser.html b/docs/d2/ddb/classshaka_1_1media_1_1WebMMediaParser.html index ce9e89dfd5..75c6836f00 100644 --- a/docs/d2/ddb/classshaka_1_1media_1_1WebMMediaParser.html +++ b/docs/d2/ddb/classshaka_1_1media_1_1WebMMediaParser.html @@ -256,7 +256,7 @@ track_id, const scoped_refptr
diff --git a/docs/d2/de3/classshaka_1_1media_1_1mp2t_1_1TsSectionPmt.html b/docs/d2/de3/classshaka_1_1media_1_1mp2t_1_1TsSectionPmt.html index 92a9d6dad5..f135a66d62 100644 --- a/docs/d2/de3/classshaka_1_1media_1_1mp2t_1_1TsSectionPmt.html +++ b/docs/d2/de3/classshaka_1_1media_1_1mp2t_1_1TsSectionPmt.html @@ -155,7 +155,7 @@ void Reset () override diff --git a/docs/d2/de6/packager__main_8cc_source.html b/docs/d2/de6/packager__main_8cc_source.html index 135e09ada0..149e0b3a6e 100644 --- a/docs/d2/de6/packager__main_8cc_source.html +++ b/docs/d2/de6/packager__main_8cc_source.html @@ -692,7 +692,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/de7/classshaka_1_1media_1_1TextStreamInfo-members.html b/docs/d2/de7/classshaka_1_1media_1_1TextStreamInfo-members.html index e9015ddf9c..200d75585a 100644 --- a/docs/d2/de7/classshaka_1_1media_1_1TextStreamInfo-members.html +++ b/docs/d2/de7/classshaka_1_1media_1_1TextStreamInfo-members.html @@ -93,20 +93,22 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');

This is the complete list of members for shaka::media::TextStreamInfo, including all inherited members.

- - - - - - - + + + + + + + + + - - + + @@ -116,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
codec_config() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
codec_string() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
duration() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
height() const (defined in shaka::media::TextStreamInfo)shaka::media::TextStreamInfoinline
is_encrypted() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
IsValidConfig() const overrideshaka::media::TextStreamInfovirtual
language() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
codec() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
codec_config() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
codec_string() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
duration() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
height() const (defined in shaka::media::TextStreamInfo)shaka::media::TextStreamInfoinline
is_encrypted() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
IsValidConfig() const overrideshaka::media::TextStreamInfovirtual
language() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
set_codec(Codec codec) (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
set_codec_config(const std::vector< uint8_t > &data) (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
set_codec_string(const std::string &codec_string) (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
set_duration(int duration) (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
set_language(const std::string &language) (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
stream_type() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
StreamInfo(StreamType stream_type, int track_id, uint32_t time_scale, uint64_t duration, const std::string &codec_string, const std::string &language, const uint8_t *codec_config, size_t codec_config_size, bool is_encrypted) (defined in shaka::media::StreamInfo)shaka::media::StreamInfo
TextStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, const std::string &codec_string, const std::string &language, const std::string &codec_config, uint16_t width, uint16_t height)shaka::media::TextStreamInfo
StreamInfo(StreamType stream_type, int track_id, uint32_t time_scale, uint64_t duration, Codec codec, const std::string &codec_string, const uint8_t *codec_config, size_t codec_config_size, const std::string &language, bool is_encrypted) (defined in shaka::media::StreamInfo)shaka::media::StreamInfo
TextStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, const std::string &codec_string, const std::string &codec_config, uint16_t width, uint16_t height, const std::string &language)shaka::media::TextStreamInfo
time_scale() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
ToString() const shaka::media::StreamInfovirtual
track_id() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
diff --git a/docs/d2/de7/structshaka_1_1media_1_1mp4_1_1Edit-members.html b/docs/d2/de7/structshaka_1_1media_1_1mp4_1_1Edit-members.html index f0ffd3f823..bb8d6c4325 100644 --- a/docs/d2/de7/structshaka_1_1media_1_1mp4_1_1Edit-members.html +++ b/docs/d2/de7/structshaka_1_1media_1_1mp4_1_1Edit-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/de9/mock__muxer__listener_8h_source.html b/docs/d2/de9/mock__muxer__listener_8h_source.html index ec04a527b9..e691c40a13 100644 --- a/docs/d2/de9/mock__muxer__listener_8h_source.html +++ b/docs/d2/de9/mock__muxer__listener_8h_source.html @@ -153,7 +153,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
virtual void OnNewSegment(const std::string &segment_name, uint64_t start_time, uint64_t duration, uint64_t segment_file_size)=0
virtual void OnEncryptionInfoReady(bool is_initial_encryption_info, FourCC protection_scheme, const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &iv, const std::vector< ProtectionSystemSpecificInfo > &key_system_info)=0
virtual void OnMediaEnd(bool has_init_range, uint64_t init_range_start, uint64_t init_range_end, bool has_index_range, uint64_t index_range_start, uint64_t index_range_end, float duration_seconds, uint64_t file_size)=0
-
Abstract class holds stream information.
Definition: stream_info.h:26
+
Abstract class holds stream information.
Definition: stream_info.h:53
virtual void OnSampleDurationReady(uint32_t sample_duration)=0
virtual void OnEncryptionStart()=0
@@ -163,7 +163,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/deb/es__parser_8h_source.html b/docs/d2/deb/es__parser_8h_source.html index b288072648..0a69dd94d0 100644 --- a/docs/d2/deb/es__parser_8h_source.html +++ b/docs/d2/deb/es__parser_8h_source.html @@ -145,7 +145,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dee/classshaka_1_1media_1_1mp2t_1_1TsSectionPes-members.html b/docs/d2/dee/classshaka_1_1media_1_1mp2t_1_1TsSectionPes-members.html index 3dd57bc417..efd3dc6370 100644 --- a/docs/d2/dee/classshaka_1_1media_1_1mp2t_1_1TsSectionPes-members.html +++ b/docs/d2/dee/classshaka_1_1media_1_1mp2t_1_1TsSectionPes-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dee/pes__packet__generator_8cc_source.html b/docs/d2/dee/pes__packet__generator_8cc_source.html index a82763f86a..ecde576908 100644 --- a/docs/d2/dee/pes__packet__generator_8cc_source.html +++ b/docs/d2/dee/pes__packet__generator_8cc_source.html @@ -186,7 +186,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
97  if (stream_type_ == kStreamVideo) {
98  const VideoStreamInfo& video_stream_info =
99  static_cast<const VideoStreamInfo&>(stream_info);
-
100  if (video_stream_info.codec() != VideoCodec::kCodecH264) {
+
100  if (video_stream_info.codec() != Codec::kCodecH264) {
101  NOTIMPLEMENTED() << "Video codec " << video_stream_info.codec()
102  << " is not supported.";
103  return false;
@@ -199,7 +199,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
110  } else if (stream_type_ == kStreamAudio) {
111  const AudioStreamInfo& audio_stream_info =
112  static_cast<const AudioStreamInfo&>(stream_info);
-
113  if (audio_stream_info.codec() != AudioCodec::kCodecAAC) {
+
113  if (audio_stream_info.codec() != Codec::kCodecAAC) {
114  NOTIMPLEMENTED() << "Audio codec " << audio_stream_info.codec()
115  << " is not supported yet.";
116  return false;
@@ -310,7 +310,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
221 } // namespace mp2t
222 } // namespace media
223 } // namespace shaka
-
Abstract class holds stream information.
Definition: stream_info.h:26
+
Abstract class holds stream information.
Definition: stream_info.h:53
virtual scoped_ptr< PesPacket > GetNextPesPacket()
@@ -321,14 +321,14 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
virtual bool Initialize(const StreamInfo &stream)
Implements pattern-based encryption/decryption.
Class that carries PES packet information.
Definition: pes_packet.h:20
-
Holds video stream information.
-
Holds audio stream information.
+
Holds video stream information.
+
Holds audio stream information.
virtual bool PushSample(scoped_refptr< MediaSample > sample)
diff --git a/docs/d2/df8/classshaka_1_1media_1_1SegmentTestBase_1_1ClusterParser.html b/docs/d2/df8/classshaka_1_1media_1_1SegmentTestBase_1_1ClusterParser.html index 8b5d525cf3..bf52c63aab 100644 --- a/docs/d2/df8/classshaka_1_1media_1_1SegmentTestBase_1_1ClusterParser.html +++ b/docs/d2/df8/classshaka_1_1media_1_1SegmentTestBase_1_1ClusterParser.html @@ -128,7 +128,7 @@ int cluster_count () c diff --git a/docs/d2/dfc/classshaka_1_1media_1_1MkvWriter-members.html b/docs/d2/dfc/classshaka_1_1media_1_1MkvWriter-members.html index b4bf3c9eed..3c80e4bfc9 100644 --- a/docs/d2/dfc/classshaka_1_1media_1_1MkvWriter-members.html +++ b/docs/d2/dfc/classshaka_1_1media_1_1MkvWriter-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dfd/adts__header_8h_source.html b/docs/d2/dfd/adts__header_8h_source.html index 10f5096362..e34c557052 100644 --- a/docs/d2/dfd/adts__header_8h_source.html +++ b/docs/d2/dfd/adts__header_8h_source.html @@ -150,7 +150,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d07/classshaka_1_1media_1_1mp4_1_1BoxReader-members.html b/docs/d3/d07/classshaka_1_1media_1_1mp4_1_1BoxReader-members.html index 47fe0f487a..0a2d1fe87b 100644 --- a/docs/d3/d07/classshaka_1_1media_1_1mp4_1_1BoxReader-members.html +++ b/docs/d3/d07/classshaka_1_1media_1_1mp4_1_1BoxReader-members.html @@ -127,7 +127,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d09/classshaka_1_1media_1_1mp4_1_1SyncSampleIterator-members.html b/docs/d3/d09/classshaka_1_1media_1_1mp4_1_1SyncSampleIterator-members.html index 110358d0cf..86123387f5 100644 --- a/docs/d3/d09/classshaka_1_1media_1_1mp4_1_1SyncSampleIterator-members.html +++ b/docs/d3/d09/classshaka_1_1media_1_1mp4_1_1SyncSampleIterator-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d0a/classshaka_1_1media_1_1MediaParser.html b/docs/d3/d0a/classshaka_1_1media_1_1MediaParser.html index 68056c8ecb..6ee2516fe0 100644 --- a/docs/d3/d0a/classshaka_1_1media_1_1MediaParser.html +++ b/docs/d3/d0a/classshaka_1_1media_1_1MediaParser.html @@ -298,7 +298,7 @@ Public Member Functions diff --git a/docs/d3/d0c/classshaka_1_1media_1_1mp2t_1_1AdtsHeader.html b/docs/d3/d0c/classshaka_1_1media_1_1mp2t_1_1AdtsHeader.html index 3335e2209d..3dbfe17c7c 100644 --- a/docs/d3/d0c/classshaka_1_1media_1_1mp2t_1_1AdtsHeader.html +++ b/docs/d3/d0c/classshaka_1_1media_1_1mp2t_1_1AdtsHeader.html @@ -336,7 +336,7 @@ Static Public Member Functions diff --git a/docs/d3/d12/classshaka_1_1media_1_1LibcryptoThreading-members.html b/docs/d3/d12/classshaka_1_1media_1_1LibcryptoThreading-members.html index 2031bdf89b..20b0916741 100644 --- a/docs/d3/d12/classshaka_1_1media_1_1LibcryptoThreading-members.html +++ b/docs/d3/d12/classshaka_1_1media_1_1LibcryptoThreading-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d15/udp__file__win_8cc_source.html b/docs/d3/d15/udp__file__win_8cc_source.html index 729f36457e..8ccf16e476 100644 --- a/docs/d3/d15/udp__file__win_8cc_source.html +++ b/docs/d3/d15/udp__file__win_8cc_source.html @@ -160,7 +160,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d18/classshaka_1_1media_1_1mp2t_1_1TsSectionPat-members.html b/docs/d3/d18/classshaka_1_1media_1_1mp2t_1_1TsSectionPat-members.html index 7fd5efb9fb..f9b0f3cd44 100644 --- a/docs/d3/d18/classshaka_1_1media_1_1mp2t_1_1TsSectionPat-members.html +++ b/docs/d3/d18/classshaka_1_1media_1_1mp2t_1_1TsSectionPat-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d19/io__cache_8h_source.html b/docs/d3/d19/io__cache_8h_source.html index 3a3fd9c02a..a765ba7476 100644 --- a/docs/d3/d19/io__cache_8h_source.html +++ b/docs/d3/d19/io__cache_8h_source.html @@ -162,7 +162,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d35/video__slice__header__parser_8cc_source.html b/docs/d3/d35/video__slice__header__parser_8cc_source.html index 17562f6f46..0699193106 100644 --- a/docs/d3/d35/video__slice__header__parser_8cc_source.html +++ b/docs/d3/d35/video__slice__header__parser_8cc_source.html @@ -200,7 +200,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d47/structshaka_1_1media_1_1mp4_1_1PrivFrame.html b/docs/d3/d47/structshaka_1_1media_1_1mp4_1_1PrivFrame.html index 2e05930f25..a3fdaeacff 100644 --- a/docs/d3/d47/structshaka_1_1media_1_1mp4_1_1PrivFrame.html +++ b/docs/d3/d47/structshaka_1_1media_1_1mp4_1_1PrivFrame.html @@ -129,7 +129,7 @@ std::string value diff --git a/docs/d3/d51/classshaka_1_1media_1_1LibcryptoThreading.html b/docs/d3/d51/classshaka_1_1media_1_1LibcryptoThreading.html index b85732ed87..4f1d5e89a8 100644 --- a/docs/d3/d51/classshaka_1_1media_1_1LibcryptoThreading.html +++ b/docs/d3/d51/classshaka_1_1media_1_1LibcryptoThreading.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d56/decrypt__config_8cc_source.html b/docs/d3/d56/decrypt__config_8cc_source.html index 1f09d738d5..2799378019 100644 --- a/docs/d3/d56/decrypt__config_8cc_source.html +++ b/docs/d3/d56/decrypt__config_8cc_source.html @@ -127,7 +127,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d61/classshaka_1_1media_1_1File.html b/docs/d3/d61/classshaka_1_1media_1_1File.html index 5177afb955..2925dc44c1 100644 --- a/docs/d3/d61/classshaka_1_1media_1_1File.html +++ b/docs/d3/d61/classshaka_1_1media_1_1File.html @@ -811,7 +811,7 @@ class ThreadedIoFile diff --git a/docs/d3/d62/continuity__counter_8h_source.html b/docs/d3/d62/continuity__counter_8h_source.html index 115f04adf4..94d6f1c633 100644 --- a/docs/d3/d62/continuity__counter_8h_source.html +++ b/docs/d3/d62/continuity__counter_8h_source.html @@ -124,7 +124,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d62/rcheck_8h_source.html b/docs/d3/d62/rcheck_8h_source.html index 86f0ddf49f..8a7103a6b1 100644 --- a/docs/d3/d62/rcheck_8h_source.html +++ b/docs/d3/d62/rcheck_8h_source.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d66/structshaka_1_1media_1_1mp4_1_1DataEntryUrl-members.html b/docs/d3/d66/structshaka_1_1media_1_1mp4_1_1DataEntryUrl-members.html index 4d18ec407a..312694924b 100644 --- a/docs/d3/d66/structshaka_1_1media_1_1mp4_1_1DataEntryUrl-members.html +++ b/docs/d3/d66/structshaka_1_1media_1_1mp4_1_1DataEntryUrl-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d67/classshaka_1_1media_1_1WebMVideoClient.html b/docs/d3/d67/classshaka_1_1media_1_1WebMVideoClient.html index 37e3d28823..931d77de07 100644 --- a/docs/d3/d67/classshaka_1_1media_1_1WebMVideoClient.html +++ b/docs/d3/d67/classshaka_1_1media_1_1WebMVideoClient.html @@ -190,7 +190,7 @@ An empty scoped_refptr if there was unexpected values in the provided parameters diff --git a/docs/d3/d6b/fixed__key__source_8cc_source.html b/docs/d3/d6b/fixed__key__source_8cc_source.html index e7a4557272..6fe3e28439 100644 --- a/docs/d3/d6b/fixed__key__source_8cc_source.html +++ b/docs/d3/d6b/fixed__key__source_8cc_source.html @@ -245,7 +245,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d71/classshaka_1_1media_1_1mp2t_1_1TsMuxer.html b/docs/d3/d71/classshaka_1_1media_1_1mp2t_1_1TsMuxer.html index d7378e1caa..30ca0f4e72 100644 --- a/docs/d3/d71/classshaka_1_1media_1_1mp2t_1_1TsMuxer.html +++ b/docs/d3/d71/classshaka_1_1media_1_1mp2t_1_1TsMuxer.html @@ -178,7 +178,7 @@ FourCC protection_scheme diff --git a/docs/d3/d72/fixed__key__source_8h_source.html b/docs/d3/d72/fixed__key__source_8h_source.html index a352e37805..47761e4f58 100644 --- a/docs/d3/d72/fixed__key__source_8h_source.html +++ b/docs/d3/d72/fixed__key__source_8h_source.html @@ -160,7 +160,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d73/classshaka_1_1media_1_1webm_1_1WebMMuxer.html b/docs/d3/d73/classshaka_1_1media_1_1webm_1_1WebMMuxer.html index 8e4c0291f1..4a78ea08f2 100644 --- a/docs/d3/d73/classshaka_1_1media_1_1webm_1_1WebMMuxer.html +++ b/docs/d3/d73/classshaka_1_1media_1_1webm_1_1WebMMuxer.html @@ -182,7 +182,7 @@ FourCC protection_scheme diff --git a/docs/d3/d75/classshaka_1_1media_1_1AesEncryptor.html b/docs/d3/d75/classshaka_1_1media_1_1AesEncryptor.html index d1c15e4627..c0ff98bd05 100644 --- a/docs/d3/d75/classshaka_1_1media_1_1AesEncryptor.html +++ b/docs/d3/d75/classshaka_1_1media_1_1AesEncryptor.html @@ -236,7 +236,7 @@ AES_KEY * mutable_aes_key< diff --git a/docs/d3/d75/classshaka_1_1media_1_1mp4_1_1ChunkInfoIterator-members.html b/docs/d3/d75/classshaka_1_1media_1_1mp4_1_1ChunkInfoIterator-members.html index 7fd957fe5c..6ba8c1da99 100644 --- a/docs/d3/d75/classshaka_1_1media_1_1mp4_1_1ChunkInfoIterator-members.html +++ b/docs/d3/d75/classshaka_1_1media_1_1mp4_1_1ChunkInfoIterator-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d76/muxer__flags_8h_source.html b/docs/d3/d76/muxer__flags_8h_source.html index 9c6e8c7e0a..53eb678007 100644 --- a/docs/d3/d76/muxer__flags_8h_source.html +++ b/docs/d3/d76/muxer__flags_8h_source.html @@ -109,12 +109,13 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
20 DECLARE_bool(fragment_sap_aligned);
21 DECLARE_int32(num_subsegments_per_sidx);
22 DECLARE_string(temp_dir);
-
23 
-
24 #endif // APP_MUXER_FLAGS_H_
+
23 DECLARE_bool(webm_subsample_encryption);
+
24 
+
25 #endif // APP_MUXER_FLAGS_H_
diff --git a/docs/d3/d77/structshaka_1_1media_1_1mp4_1_1TextSampleEntry-members.html b/docs/d3/d77/structshaka_1_1media_1_1mp4_1_1TextSampleEntry-members.html index 3a2171b2e4..ad9b687049 100644 --- a/docs/d3/d77/structshaka_1_1media_1_1mp4_1_1TextSampleEntry-members.html +++ b/docs/d3/d77/structshaka_1_1media_1_1mp4_1_1TextSampleEntry-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d7b/classshaka_1_1media_1_1RsaPublicKey-members.html b/docs/d3/d7b/classshaka_1_1media_1_1RsaPublicKey-members.html index 30ac0b37c7..757edbb231 100644 --- a/docs/d3/d7b/classshaka_1_1media_1_1RsaPublicKey-members.html +++ b/docs/d3/d7b/classshaka_1_1media_1_1RsaPublicKey-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d7c/classshaka_1_1media_1_1WebMAudioClient.html b/docs/d3/d7c/classshaka_1_1media_1_1WebMAudioClient.html index d13fff7c6d..b40107dd49 100644 --- a/docs/d3/d7c/classshaka_1_1media_1_1WebMAudioClient.html +++ b/docs/d3/d7c/classshaka_1_1media_1_1WebMAudioClient.html @@ -223,7 +223,7 @@ An empty scoped_refptr if there was unexpected values in the provided parameters diff --git a/docs/d3/d80/muxer__util_8h_source.html b/docs/d3/d80/muxer__util_8h_source.html index c42b440b3b..00158b1f97 100644 --- a/docs/d3/d80/muxer__util_8h_source.html +++ b/docs/d3/d80/muxer__util_8h_source.html @@ -127,7 +127,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d87/structshaka_1_1media_1_1mp4_1_1SampleToChunk.html b/docs/d3/d87/structshaka_1_1media_1_1mp4_1_1SampleToChunk.html index e6be9e411f..05bb42e17c 100644 --- a/docs/d3/d87/structshaka_1_1media_1_1mp4_1_1SampleToChunk.html +++ b/docs/d3/d87/structshaka_1_1media_1_1mp4_1_1SampleToChunk.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d3/d8b/structshaka_1_1media_1_1FileCloser.html b/docs/d3/d8b/structshaka_1_1media_1_1FileCloser.html index 2e6c594592..a33ae1ffaa 100644 --- a/docs/d3/d8b/structshaka_1_1media_1_1FileCloser.html +++ b/docs/d3/d8b/structshaka_1_1media_1_1FileCloser.html @@ -112,7 +112,7 @@ void operator() ( diff --git a/docs/d3/d8d/webm__audio__client_8h_source.html b/docs/d3/d8d/webm__audio__client_8h_source.html index f9201c4443..589858051d 100644 --- a/docs/d3/d8d/webm__audio__client_8h_source.html +++ b/docs/d3/d8d/webm__audio__client_8h_source.html @@ -144,7 +144,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d90/ec3__audio__util_8cc_source.html b/docs/d3/d90/ec3__audio__util_8cc_source.html index cd6413a7e6..4e0b50d2e6 100644 --- a/docs/d3/d90/ec3__audio__util_8cc_source.html +++ b/docs/d3/d90/ec3__audio__util_8cc_source.html @@ -245,7 +245,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d91/classshaka_1_1media_1_1H264Parser.html b/docs/d3/d91/classshaka_1_1media_1_1H264Parser.html index 52f288c4c1..4faf5ea926 100644 --- a/docs/d3/d91/classshaka_1_1media_1_1H264Parser.html +++ b/docs/d3/d91/classshaka_1_1media_1_1H264Parser.html @@ -135,7 +135,7 @@ Result ParseSEI (const diff --git a/docs/d3/da0/ec3__audio__util_8h_source.html b/docs/d3/da0/ec3__audio__util_8h_source.html index 44125c4da5..fd7a2fa73d 100644 --- a/docs/d3/da0/ec3__audio__util_8h_source.html +++ b/docs/d3/da0/ec3__audio__util_8h_source.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/da1/classshaka_1_1media_1_1webm_1_1SingleSegmentSegmenter.html b/docs/d3/da1/classshaka_1_1media_1_1webm_1_1SingleSegmentSegmenter.html index 9accd988d9..c8f41c924a 100644 --- a/docs/d3/da1/classshaka_1_1media_1_1webm_1_1SingleSegmentSegmenter.html +++ b/docs/d3/da1/classshaka_1_1media_1_1webm_1_1SingleSegmentSegmenter.html @@ -293,7 +293,7 @@ double cluster_length_sec< diff --git a/docs/d3/da2/structshaka_1_1media_1_1mp4_1_1SchemeType.html b/docs/d3/da2/structshaka_1_1media_1_1mp4_1_1SchemeType.html index bd1be83d06..79289b5c5b 100644 --- a/docs/d3/da2/structshaka_1_1media_1_1mp4_1_1SchemeType.html +++ b/docs/d3/da2/structshaka_1_1media_1_1mp4_1_1SchemeType.html @@ -185,7 +185,7 @@ Additional Inherited Members diff --git a/docs/d3/dad/structshaka_1_1media_1_1mp4_1_1ID3v2.html b/docs/d3/dad/structshaka_1_1media_1_1mp4_1_1ID3v2.html index 31f7918aeb..80220f21ae 100644 --- a/docs/d3/dad/structshaka_1_1media_1_1mp4_1_1ID3v2.html +++ b/docs/d3/dad/structshaka_1_1media_1_1mp4_1_1ID3v2.html @@ -189,7 +189,7 @@ Additional Inherited Members diff --git a/docs/d3/db4/classshaka_1_1media_1_1WebMWebVTTParser-members.html b/docs/d3/db4/classshaka_1_1media_1_1WebMWebVTTParser-members.html index 34a33dc086..34781f76b1 100644 --- a/docs/d3/db4/classshaka_1_1media_1_1WebMWebVTTParser-members.html +++ b/docs/d3/db4/classshaka_1_1media_1_1WebMWebVTTParser-members.html @@ -97,7 +97,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/db5/structshaka_1_1media_1_1mp4_1_1Track.html b/docs/d3/db5/structshaka_1_1media_1_1mp4_1_1Track.html index f66a364985..81791f5f04 100644 --- a/docs/d3/db5/structshaka_1_1media_1_1mp4_1_1Track.html +++ b/docs/d3/db5/structshaka_1_1media_1_1mp4_1_1Track.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d3/db6/webm__parser_8cc_source.html b/docs/d3/db6/webm__parser_8cc_source.html index 3afa330510..d9cd70316c 100644 --- a/docs/d3/db6/webm__parser_8cc_source.html +++ b/docs/d3/db6/webm__parser_8cc_source.html @@ -1068,7 +1068,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/dbc/seek__head_8cc_source.html b/docs/d3/dbc/seek__head_8cc_source.html index d1ee938014..bcce34018f 100644 --- a/docs/d3/dbc/seek__head_8cc_source.html +++ b/docs/d3/dbc/seek__head_8cc_source.html @@ -216,7 +216,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/dbe/demuxer_8cc_source.html b/docs/d3/dbe/demuxer_8cc_source.html index 53a6726ef2..a87e81eaf0 100644 --- a/docs/d3/dbe/demuxer_8cc_source.html +++ b/docs/d3/dbe/demuxer_8cc_source.html @@ -345,7 +345,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/dbe/structshaka_1_1media_1_1mp4_1_1EditList.html b/docs/d3/dbe/structshaka_1_1media_1_1mp4_1_1EditList.html index b44728e349..04d00ac9ca 100644 --- a/docs/d3/dbe/structshaka_1_1media_1_1mp4_1_1EditList.html +++ b/docs/d3/dbe/structshaka_1_1media_1_1mp4_1_1EditList.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d3/dc1/classshaka_1_1media_1_1mp2t_1_1Mp2tMediaParser.html b/docs/d3/dc1/classshaka_1_1media_1_1mp2t_1_1Mp2tMediaParser.html index 92c5913797..a93d923b1c 100644 --- a/docs/d3/dc1/classshaka_1_1media_1_1mp2t_1_1Mp2tMediaParser.html +++ b/docs/d3/dc1/classshaka_1_1media_1_1mp2t_1_1Mp2tMediaParser.html @@ -256,7 +256,7 @@ track_id, const scoped_refptr
diff --git a/docs/d3/dd0/classshaka_1_1MpdNotifier.html b/docs/d3/dd0/classshaka_1_1MpdNotifier.html index 9a897c9d31..6b7e4ab9e2 100644 --- a/docs/d3/dd0/classshaka_1_1MpdNotifier.html +++ b/docs/d3/dd0/classshaka_1_1MpdNotifier.html @@ -472,7 +472,7 @@ Public Member Functions diff --git a/docs/d3/dd0/structshaka_1_1media_1_1mp4_1_1SegmentType.html b/docs/d3/dd0/structshaka_1_1media_1_1mp4_1_1SegmentType.html index 5ae744116f..6b3408750b 100644 --- a/docs/d3/dd0/structshaka_1_1media_1_1mp4_1_1SegmentType.html +++ b/docs/d3/dd0/structshaka_1_1media_1_1mp4_1_1SegmentType.html @@ -177,7 +177,7 @@ std::vector< FourCC > < diff --git a/docs/d3/de4/seek__head_8h_source.html b/docs/d3/de4/seek__head_8h_source.html index 28ab163b06..0f616b6a46 100644 --- a/docs/d3/de4/seek__head_8h_source.html +++ b/docs/d3/de4/seek__head_8h_source.html @@ -140,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/de9/classshaka_1_1media_1_1mp4_1_1BoxBuffer-members.html b/docs/d3/de9/classshaka_1_1media_1_1mp4_1_1BoxBuffer-members.html index a8b4493e6b..7c2d27905b 100644 --- a/docs/d3/de9/classshaka_1_1media_1_1mp4_1_1BoxBuffer-members.html +++ b/docs/d3/de9/classshaka_1_1media_1_1mp4_1_1BoxBuffer-members.html @@ -121,7 +121,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/de9/structshaka_1_1media_1_1mp4_1_1SampleGroupDescription-members.html b/docs/d3/de9/structshaka_1_1media_1_1mp4_1_1SampleGroupDescription-members.html index e51e1eebb1..88ca2faa3b 100644 --- a/docs/d3/de9/structshaka_1_1media_1_1mp4_1_1SampleGroupDescription-members.html +++ b/docs/d3/de9/structshaka_1_1media_1_1mp4_1_1SampleGroupDescription-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/df1/box__reader_8cc_source.html b/docs/d3/df1/box__reader_8cc_source.html index 4ef379c8e9..f9d293d75e 100644 --- a/docs/d3/df1/box__reader_8cc_source.html +++ b/docs/d3/df1/box__reader_8cc_source.html @@ -260,7 +260,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/dfe/classshaka_1_1media_1_1AesPatternCryptor.html b/docs/d3/dfe/classshaka_1_1media_1_1AesPatternCryptor.html index d675ab7005..99aabfa21d 100644 --- a/docs/d3/dfe/classshaka_1_1media_1_1AesPatternCryptor.html +++ b/docs/d3/dfe/classshaka_1_1media_1_1AesPatternCryptor.html @@ -297,7 +297,7 @@ AES_KEY * mutable_aes_key< diff --git a/docs/d4/d00/mp4_2multi__segment__segmenter_8cc_source.html b/docs/d4/d00/mp4_2multi__segment__segmenter_8cc_source.html index 47c52db63a..6ca2126656 100644 --- a/docs/d4/d00/mp4_2multi__segment__segmenter_8cc_source.html +++ b/docs/d4/d00/mp4_2multi__segment__segmenter_8cc_source.html @@ -304,7 +304,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d08/classshaka_1_1media_1_1mp4_1_1MP4MediaParser-members.html b/docs/d4/d08/classshaka_1_1media_1_1mp4_1_1MP4MediaParser-members.html index 7f2b2bb275..589c97c1be 100644 --- a/docs/d4/d08/classshaka_1_1media_1_1mp4_1_1MP4MediaParser-members.html +++ b/docs/d4/d08/classshaka_1_1media_1_1mp4_1_1MP4MediaParser-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d0b/classshaka_1_1media_1_1TextTrack.html b/docs/d4/d0b/classshaka_1_1media_1_1TextTrack.html index d1c4059605..07811909d2 100644 --- a/docs/d4/d0b/classshaka_1_1media_1_1TextTrack.html +++ b/docs/d4/d0b/classshaka_1_1media_1_1TextTrack.html @@ -109,7 +109,7 @@ virtual void addWebVTTCue< diff --git a/docs/d4/d14/classshaka_1_1media_1_1WebVttMediaParser-members.html b/docs/d4/d14/classshaka_1_1media_1_1WebVttMediaParser-members.html index 1318a5d1b7..669e52fadc 100644 --- a/docs/d4/d14/classshaka_1_1media_1_1WebVttMediaParser-members.html +++ b/docs/d4/d14/classshaka_1_1media_1_1WebVttMediaParser-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d18/structshaka_1_1media_1_1mp4_1_1EditListEntry.html b/docs/d4/d18/structshaka_1_1media_1_1mp4_1_1EditListEntry.html index a42b48f68f..1d971f3906 100644 --- a/docs/d4/d18/structshaka_1_1media_1_1mp4_1_1EditListEntry.html +++ b/docs/d4/d18/structshaka_1_1media_1_1mp4_1_1EditListEntry.html @@ -118,7 +118,7 @@ int16_t media_rate_fractio diff --git a/docs/d4/d20/classshaka_1_1media_1_1AesCbcEncryptor.html b/docs/d4/d20/classshaka_1_1media_1_1AesCbcEncryptor.html index c27921bf04..e6aee0802c 100644 --- a/docs/d4/d20/classshaka_1_1media_1_1AesCbcEncryptor.html +++ b/docs/d4/d20/classshaka_1_1media_1_1AesCbcEncryptor.html @@ -235,7 +235,7 @@ AES_KEY * mutable_aes_key< diff --git a/docs/d4/d20/structshaka_1_1media_1_1mp4_1_1ChunkLargeOffset-members.html b/docs/d4/d20/structshaka_1_1media_1_1mp4_1_1ChunkLargeOffset-members.html index 51035c0f24..8d31cd1343 100644 --- a/docs/d4/d20/structshaka_1_1media_1_1mp4_1_1ChunkLargeOffset-members.html +++ b/docs/d4/d20/structshaka_1_1media_1_1mp4_1_1ChunkLargeOffset-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d2c/structshaka_1_1media_1_1mp4_1_1ID3v2-members.html b/docs/d4/d2c/structshaka_1_1media_1_1mp4_1_1ID3v2-members.html index bee13b7e8c..d74b262df4 100644 --- a/docs/d4/d2c/structshaka_1_1media_1_1mp4_1_1ID3v2-members.html +++ b/docs/d4/d2c/structshaka_1_1media_1_1mp4_1_1ID3v2-members.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d33/structshaka_1_1media_1_1mp4_1_1WebVTTSourceLabelBox.html b/docs/d4/d33/structshaka_1_1media_1_1mp4_1_1WebVTTSourceLabelBox.html index 67ac9c234b..e8777d1dd0 100644 --- a/docs/d4/d33/structshaka_1_1media_1_1mp4_1_1WebVTTSourceLabelBox.html +++ b/docs/d4/d33/structshaka_1_1media_1_1mp4_1_1WebVTTSourceLabelBox.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d4/d37/io__cache_8cc_source.html b/docs/d4/d37/io__cache_8cc_source.html index f2dc5ca04c..082880ee24 100644 --- a/docs/d4/d37/io__cache_8cc_source.html +++ b/docs/d4/d37/io__cache_8cc_source.html @@ -252,7 +252,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d3a/structshaka_1_1media_1_1H264Sps-members.html b/docs/d4/d3a/structshaka_1_1media_1_1H264Sps-members.html index a1d56c2f61..21bac3d4ed 100644 --- a/docs/d4/d3a/structshaka_1_1media_1_1H264Sps-members.html +++ b/docs/d4/d3a/structshaka_1_1media_1_1H264Sps-members.html @@ -142,7 +142,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d4a/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset-members.html b/docs/d4/d4a/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset-members.html index f95396ab11..f9153c123f 100644 --- a/docs/d4/d4a/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset-members.html +++ b/docs/d4/d4a/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d4c/structshaka_1_1media_1_1H264WeightingFactors.html b/docs/d4/d4c/structshaka_1_1media_1_1H264WeightingFactors.html index 4d780c6650..a4b4a98b59 100644 --- a/docs/d4/d4c/structshaka_1_1media_1_1H264WeightingFactors.html +++ b/docs/d4/d4c/structshaka_1_1media_1_1H264WeightingFactors.html @@ -124,7 +124,7 @@ int chroma_offset [32] diff --git a/docs/d4/d58/classshaka_1_1media_1_1Nalu-members.html b/docs/d4/d58/classshaka_1_1media_1_1Nalu-members.html index e0c8ff3cf6..55842ebf48 100644 --- a/docs/d4/d58/classshaka_1_1media_1_1Nalu-members.html +++ b/docs/d4/d58/classshaka_1_1media_1_1Nalu-members.html @@ -157,7 +157,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d59/classshaka_1_1media_1_1WebMWebVTTParser.html b/docs/d4/d59/classshaka_1_1media_1_1WebMWebVTTParser.html index 5d481d07f6..eaa3cd9442 100644 --- a/docs/d4/d59/classshaka_1_1media_1_1WebMWebVTTParser.html +++ b/docs/d4/d59/classshaka_1_1media_1_1WebMWebVTTParser.html @@ -111,7 +111,7 @@ static void  diff --git a/docs/d4/d5c/classshaka_1_1media_1_1DecryptConfig-members.html b/docs/d4/d5c/classshaka_1_1media_1_1DecryptConfig-members.html index 2221a267ef..14d8822005 100644 --- a/docs/d4/d5c/classshaka_1_1media_1_1DecryptConfig-members.html +++ b/docs/d4/d5c/classshaka_1_1media_1_1DecryptConfig-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d5d/classshaka_1_1media_1_1UdpFile-members.html b/docs/d4/d5d/classshaka_1_1media_1_1UdpFile-members.html index ddcb4047c7..23cf890a46 100644 --- a/docs/d4/d5d/classshaka_1_1media_1_1UdpFile-members.html +++ b/docs/d4/d5d/classshaka_1_1media_1_1UdpFile-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d70/classshaka_1_1DashIopMpdNotifier.html b/docs/d4/d70/classshaka_1_1DashIopMpdNotifier.html index 42c2ee6bc9..6f68db1276 100644 --- a/docs/d4/d70/classshaka_1_1DashIopMpdNotifier.html +++ b/docs/d4/d70/classshaka_1_1DashIopMpdNotifier.html @@ -473,7 +473,7 @@ class DashIopMpdNotifierTe diff --git a/docs/d4/d70/structshaka_1_1SegmentInfo-members.html b/docs/d4/d70/structshaka_1_1SegmentInfo-members.html index db2428d820..5fc5aecf05 100644 --- a/docs/d4/d70/structshaka_1_1SegmentInfo-members.html +++ b/docs/d4/d70/structshaka_1_1SegmentInfo-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d87/nalu__reader_8h_source.html b/docs/d4/d87/nalu__reader_8h_source.html index c572988f74..16182c3c29 100644 --- a/docs/d4/d87/nalu__reader_8h_source.html +++ b/docs/d4/d87/nalu__reader_8h_source.html @@ -297,7 +297,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d8a/classshaka_1_1media_1_1HEVCDecoderConfigurationRecord.html b/docs/d4/d8a/classshaka_1_1media_1_1HEVCDecoderConfigurationRecord.html index 02b3144335..6ce5c9c332 100644 --- a/docs/d4/d8a/classshaka_1_1media_1_1HEVCDecoderConfigurationRecord.html +++ b/docs/d4/d8a/classshaka_1_1media_1_1HEVCDecoderConfigurationRecord.html @@ -110,8 +110,8 @@ Inheritance diagram for shaka::media::HEVCDecoderConfigurationRecord: - - + + @@ -145,14 +145,14 @@ void  diff --git a/docs/d4/dc8/classshaka_1_1media_1_1mp2t_1_1AacProgramMapTableWriter.html b/docs/d4/dc8/classshaka_1_1media_1_1mp2t_1_1AacProgramMapTableWriter.html index ab35be23c6..b8ff3d4364 100644 --- a/docs/d4/dc8/classshaka_1_1media_1_1mp2t_1_1AacProgramMapTableWriter.html +++ b/docs/d4/dc8/classshaka_1_1media_1_1mp2t_1_1AacProgramMapTableWriter.html @@ -140,7 +140,7 @@ static const uint8_t 

Public Member Functions

std::string GetCodecString (VideoCodec codec) const
 
std::string GetCodecString (Codec codec) const
 
- Public Member Functions inherited from shaka::media::DecoderConfigurationRecord
bool Parse (const std::vector< uint8_t > &data)
 
22 of file hevc_decoder_configuration_record.h.

Member Function Documentation

- +
- + @@ -171,7 +171,7 @@ void  diff --git a/docs/d4/da7/segmenter__test__base_8cc_source.html b/docs/d4/da7/segmenter__test__base_8cc_source.html index 1888011a4a..4ae7798915 100644 --- a/docs/d4/da7/segmenter__test__base_8cc_source.html +++ b/docs/d4/da7/segmenter__test__base_8cc_source.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
25 const int kTrackId = 1;
26 const uint32_t kTimeScale = 1000;
27 const uint64_t kDuration = 8000;
-
28 const VideoCodec kVideoCodec = kCodecVP8;
+
28 const Codec kCodec = kCodecVP8;
29 const std::string kCodecString = "vp8";
30 const std::string kLanguage = "en";
31 const uint16_t kWidth = 100;
@@ -181,10 +181,10 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
92 }
93 
-
95  return new VideoStreamInfo(kTrackId, kTimeScale, kDuration, kVideoCodec,
-
96  kCodecString, kLanguage, kWidth, kHeight,
+
95  return new VideoStreamInfo(kTrackId, kTimeScale, kDuration, kCodec,
+
96  kCodecString, NULL, 0, kWidth, kHeight,
97  kPixelWidth, kPixelHeight, kTrickPlayRate,
-
98  kNaluLengthSize, NULL, 0, false);
+
98  kNaluLengthSize, kLanguage, false);
99 }
100 
101 std::string SegmentTestBase::OutputFileName() const {
@@ -289,7 +289,6 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
200 
201 } // namespace media
202 } // namespace shaka
-
203 
VideoStreamInfo * CreateVideoStreamInfo() const
Creates a video stream info object for testing.
@@ -305,13 +304,13 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
static scoped_refptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
Definition: media_sample.cc:45
-
Holds video stream information.
+
Holds video stream information.
std::string TemplateFileName(int number) const
Gets the file name of the given template file.
diff --git a/docs/d4/dad/structshaka_1_1media_1_1mp4_1_1SampleEncryption.html b/docs/d4/dad/structshaka_1_1media_1_1mp4_1_1SampleEncryption.html index 15d1853000..4ee9273095 100644 --- a/docs/d4/dad/structshaka_1_1media_1_1mp4_1_1SampleEncryption.html +++ b/docs/d4/dad/structshaka_1_1media_1_1mp4_1_1SampleEncryption.html @@ -250,7 +250,7 @@ Additional Inherited Members diff --git a/docs/d4/db1/structshaka_1_1media_1_1mp4_1_1CompactSampleSize-members.html b/docs/d4/db1/structshaka_1_1media_1_1mp4_1_1CompactSampleSize-members.html index c65ab60422..5a5d339dee 100644 --- a/docs/d4/db1/structshaka_1_1media_1_1mp4_1_1CompactSampleSize-members.html +++ b/docs/d4/db1/structshaka_1_1media_1_1mp4_1_1CompactSampleSize-members.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
std::string shaka::media::HEVCDecoderConfigurationRecord::GetCodecString (VideoCodec Codec  codec) const
diff --git a/docs/d4/d8d/structshaka_1_1media_1_1mp4_1_1EC3Specific.html b/docs/d4/d8d/structshaka_1_1media_1_1mp4_1_1EC3Specific.html index f879317f42..4be67b59b1 100644 --- a/docs/d4/d8d/structshaka_1_1media_1_1mp4_1_1EC3Specific.html +++ b/docs/d4/d8d/structshaka_1_1media_1_1mp4_1_1EC3Specific.html @@ -173,7 +173,7 @@ Additional Inherited Members
diff --git a/docs/d4/db2/cluster__builder_8h_source.html b/docs/d4/db2/cluster__builder_8h_source.html index cbfe492acf..925c4b3011 100644 --- a/docs/d4/db2/cluster__builder_8h_source.html +++ b/docs/d4/db2/cluster__builder_8h_source.html @@ -176,7 +176,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
diff --git a/docs/d4/db4/classshaka_1_1MpdNotifierFactory.html b/docs/d4/db4/classshaka_1_1MpdNotifierFactory.html index 40ff70b897..e6e5ca6155 100644 --- a/docs/d4/db4/classshaka_1_1MpdNotifierFactory.html +++ b/docs/d4/db4/classshaka_1_1MpdNotifierFactory.html @@ -112,7 +112,7 @@ virtual scoped_ptr< diff --git a/docs/d4/db9/structshaka_1_1media_1_1mp4_1_1MediaHeader.html b/docs/d4/db9/structshaka_1_1media_1_1mp4_1_1MediaHeader.html index 4243bf5fbf..0fdfc4382c 100644 --- a/docs/d4/db9/structshaka_1_1media_1_1mp4_1_1MediaHeader.html +++ b/docs/d4/db9/structshaka_1_1media_1_1mp4_1_1MediaHeader.html @@ -194,7 +194,7 @@ Additional Inherited Members
kElem diff --git a/docs/d4/dd3/bit__reader_8h_source.html b/docs/d4/dd3/bit__reader_8h_source.html index a817d89e0a..e5f157ef35 100644 --- a/docs/d4/dd3/bit__reader_8h_source.html +++ b/docs/d4/dd3/bit__reader_8h_source.html @@ -187,7 +187,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/dd4/structshaka_1_1media_1_1mp4_1_1FullBox-members.html b/docs/d4/dd4/structshaka_1_1media_1_1mp4_1_1FullBox-members.html index f205bbbfed..d435af16fa 100644 --- a/docs/d4/dd4/structshaka_1_1media_1_1mp4_1_1FullBox-members.html +++ b/docs/d4/dd4/structshaka_1_1media_1_1mp4_1_1FullBox-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
diff --git a/docs/d4/ddb/classshaka_1_1media_1_1MemoryFile-members.html b/docs/d4/ddb/classshaka_1_1media_1_1MemoryFile-members.html index 469d515055..7e1a2298f4 100644 --- a/docs/d4/ddb/classshaka_1_1media_1_1MemoryFile-members.html +++ b/docs/d4/ddb/classshaka_1_1media_1_1MemoryFile-members.html @@ -119,7 +119,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/dde/webvtt__util_8h_source.html b/docs/d4/dde/webvtt__util_8h_source.html index a1fe607a5b..23a7278ede 100644 --- a/docs/d4/dde/webvtt__util_8h_source.html +++ b/docs/d4/dde/webvtt__util_8h_source.html @@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/de3/structshaka_1_1media_1_1mp4_1_1DataReference.html b/docs/d4/de3/structshaka_1_1media_1_1mp4_1_1DataReference.html index e720ea7a8b..f6091a7134 100644 --- a/docs/d4/de3/structshaka_1_1media_1_1mp4_1_1DataReference.html +++ b/docs/d4/de3/structshaka_1_1media_1_1mp4_1_1DataReference.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d4/de6/classshaka_1_1media_1_1ProgressListener.html b/docs/d4/de6/classshaka_1_1media_1_1ProgressListener.html index 5a1573589a..8aba26bc9d 100644 --- a/docs/d4/de6/classshaka_1_1media_1_1ProgressListener.html +++ b/docs/d4/de6/classshaka_1_1media_1_1ProgressListener.html @@ -146,7 +146,7 @@ Public Member Functions diff --git a/docs/d4/de7/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener-members.html b/docs/d4/de7/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener-members.html index d3a6505220..f17b11b6c4 100644 --- a/docs/d4/de7/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener-members.html +++ b/docs/d4/de7/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/dec/hls__flags_8h_source.html b/docs/d4/dec/hls__flags_8h_source.html index c4cfd98db3..9b36631167 100644 --- a/docs/d4/dec/hls__flags_8h_source.html +++ b/docs/d4/dec/hls__flags_8h_source.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/df5/request__signer_8cc_source.html b/docs/d4/df5/request__signer_8cc_source.html index 7bbc77772c..78661cc69a 100644 --- a/docs/d4/df5/request__signer_8cc_source.html +++ b/docs/d4/df5/request__signer_8cc_source.html @@ -178,7 +178,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/df9/structshaka_1_1media_1_1mp4_1_1SegmentIndex.html b/docs/d4/df9/structshaka_1_1media_1_1mp4_1_1SegmentIndex.html index 3da988f177..d9220d3639 100644 --- a/docs/d4/df9/structshaka_1_1media_1_1mp4_1_1SegmentIndex.html +++ b/docs/d4/df9/structshaka_1_1media_1_1mp4_1_1SegmentIndex.html @@ -194,7 +194,7 @@ Additional Inherited Members diff --git a/docs/d4/dfa/structshaka_1_1media_1_1mp4_1_1AC3Specific.html b/docs/d4/dfa/structshaka_1_1media_1_1mp4_1_1AC3Specific.html index c81eca0bb5..d7656a254d 100644 --- a/docs/d4/dfa/structshaka_1_1media_1_1mp4_1_1AC3Specific.html +++ b/docs/d4/dfa/structshaka_1_1media_1_1mp4_1_1AC3Specific.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d4/dfd/structshaka_1_1media_1_1H265Sps.html b/docs/d4/dfd/structshaka_1_1media_1_1H265Sps.html index 868de63f72..da674cb1f4 100644 --- a/docs/d4/dfd/structshaka_1_1media_1_1H265Sps.html +++ b/docs/d4/dfd/structshaka_1_1media_1_1H265Sps.html @@ -256,7 +256,7 @@ bool vui_parameters_presen diff --git a/docs/d4/dff/webm__media__parser_8cc_source.html b/docs/d4/dff/webm__media__parser_8cc_source.html index f5daaa26fc..19c62abb9f 100644 --- a/docs/d4/dff/webm__media__parser_8cc_source.html +++ b/docs/d4/dff/webm__media__parser_8cc_source.html @@ -364,7 +364,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d03/structshaka_1_1media_1_1mp4_1_1FileType.html b/docs/d5/d03/structshaka_1_1media_1_1mp4_1_1FileType.html index 629ba6778d..adf8fed2b5 100644 --- a/docs/d5/d03/structshaka_1_1media_1_1mp4_1_1FileType.html +++ b/docs/d5/d03/structshaka_1_1media_1_1mp4_1_1FileType.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d5/d05/structshaka_1_1media_1_1mp4_1_1OriginalFormat.html b/docs/d5/d05/structshaka_1_1media_1_1mp4_1_1OriginalFormat.html index 26d7d2c029..7f89b9586c 100644 --- a/docs/d5/d05/structshaka_1_1media_1_1mp4_1_1OriginalFormat.html +++ b/docs/d5/d05/structshaka_1_1media_1_1mp4_1_1OriginalFormat.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d5/d09/structshaka_1_1media_1_1mp4_1_1CueIDBox.html b/docs/d5/d09/structshaka_1_1media_1_1mp4_1_1CueIDBox.html index ce7e20ae77..a7e6666a28 100644 --- a/docs/d5/d09/structshaka_1_1media_1_1mp4_1_1CueIDBox.html +++ b/docs/d5/d09/structshaka_1_1media_1_1mp4_1_1CueIDBox.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d5/d11/classshaka_1_1media_1_1WebMInfoParser-members.html b/docs/d5/d11/classshaka_1_1media_1_1WebMInfoParser-members.html index 9415105216..ab07716815 100644 --- a/docs/d5/d11/classshaka_1_1media_1_1WebMInfoParser-members.html +++ b/docs/d5/d11/classshaka_1_1media_1_1WebMInfoParser-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d11/structshaka_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html b/docs/d5/d11/structshaka_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html index 4af3c72c9a..3d61b1692d 100644 --- a/docs/d5/d11/structshaka_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html +++ b/docs/d5/d11/structshaka_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html @@ -185,7 +185,7 @@ Additional Inherited Members diff --git a/docs/d5/d13/classshaka_1_1media_1_1ESDescriptor.html b/docs/d5/d13/classshaka_1_1media_1_1ESDescriptor.html index ace6c1f2be..51655eb661 100644 --- a/docs/d5/d13/classshaka_1_1media_1_1ESDescriptor.html +++ b/docs/d5/d13/classshaka_1_1media_1_1ESDescriptor.html @@ -181,7 +181,7 @@ bool IsDTS () const diff --git a/docs/d5/d15/producer__consumer__queue_8h_source.html b/docs/d5/d15/producer__consumer__queue_8h_source.html index 3e418215d1..186abde921 100644 --- a/docs/d5/d15/producer__consumer__queue_8h_source.html +++ b/docs/d5/d15/producer__consumer__queue_8h_source.html @@ -374,7 +374,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d1a/ts__section_8h_source.html b/docs/d5/d1a/ts__section_8h_source.html index 0b5aefc1a3..2ce0aa205b 100644 --- a/docs/d5/d1a/ts__section_8h_source.html +++ b/docs/d5/d1a/ts__section_8h_source.html @@ -134,7 +134,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d26/classshaka_1_1media_1_1mp4_1_1TrackRunIterator-members.html b/docs/d5/d26/classshaka_1_1media_1_1mp4_1_1TrackRunIterator-members.html index f141a85ec3..4386160a15 100644 --- a/docs/d5/d26/classshaka_1_1media_1_1mp4_1_1TrackRunIterator-members.html +++ b/docs/d5/d26/classshaka_1_1media_1_1mp4_1_1TrackRunIterator-members.html @@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d27/key__fetcher_8cc_source.html b/docs/d5/d27/key__fetcher_8cc_source.html index c3e1a096b6..83df585ec8 100644 --- a/docs/d5/d27/key__fetcher_8cc_source.html +++ b/docs/d5/d27/key__fetcher_8cc_source.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d33/classshaka_1_1media_1_1ProducerConsumerQueue.html b/docs/d5/d33/classshaka_1_1media_1_1ProducerConsumerQueue.html index 3d622f1828..7a4fb1aae6 100644 --- a/docs/d5/d33/classshaka_1_1media_1_1ProducerConsumerQueue.html +++ b/docs/d5/d33/classshaka_1_1media_1_1ProducerConsumerQueue.html @@ -501,7 +501,7 @@ template<class T > diff --git a/docs/d5/d3b/structshaka_1_1media_1_1mp4_1_1Media-members.html b/docs/d5/d3b/structshaka_1_1media_1_1mp4_1_1Media-members.html index e9b3d022ce..ed938ef461 100644 --- a/docs/d5/d3b/structshaka_1_1media_1_1mp4_1_1Media-members.html +++ b/docs/d5/d3b/structshaka_1_1media_1_1mp4_1_1Media-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d40/webm_2single__segment__segmenter_8h_source.html b/docs/d5/d40/webm_2single__segment__segmenter_8h_source.html index 4edf446bcf..a77c94703e 100644 --- a/docs/d5/d40/webm_2single__segment__segmenter_8h_source.html +++ b/docs/d5/d40/webm_2single__segment__segmenter_8h_source.html @@ -156,7 +156,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d4b/classshaka_1_1media_1_1mp2t_1_1TsSectionPsi-members.html b/docs/d5/d4b/classshaka_1_1media_1_1mp2t_1_1TsSectionPsi-members.html index 54d29ae922..5b32ce2817 100644 --- a/docs/d5/d4b/classshaka_1_1media_1_1mp2t_1_1TsSectionPsi-members.html +++ b/docs/d5/d4b/classshaka_1_1media_1_1mp2t_1_1TsSectionPsi-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d4d/box_8cc_source.html b/docs/d5/d4d/box_8cc_source.html index dce52d1ef6..a672414fd6 100644 --- a/docs/d5/d4d/box_8cc_source.html +++ b/docs/d5/d4d/box_8cc_source.html @@ -195,7 +195,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d52/ts__section__pes_8h_source.html b/docs/d5/d52/ts__section__pes_8h_source.html index e7d027548c..eddfdc5f76 100644 --- a/docs/d5/d52/ts__section__pes_8h_source.html +++ b/docs/d5/d52/ts__section__pes_8h_source.html @@ -161,7 +161,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d53/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize-members.html b/docs/d5/d53/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize-members.html index 62e93bea13..648e5c20d4 100644 --- a/docs/d5/d53/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize-members.html +++ b/docs/d5/d53/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d57/classshaka_1_1RepresentationStateChangeListener-members.html b/docs/d5/d57/classshaka_1_1RepresentationStateChangeListener-members.html index 4e74aaed15..5f5c5daddb 100644 --- a/docs/d5/d57/classshaka_1_1RepresentationStateChangeListener-members.html +++ b/docs/d5/d57/classshaka_1_1RepresentationStateChangeListener-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d59/classshaka_1_1MockRepresentation-members.html b/docs/d5/d59/classshaka_1_1MockRepresentation-members.html index deeeb5e5fd..5f737c7a21 100644 --- a/docs/d5/d59/classshaka_1_1MockRepresentation-members.html +++ b/docs/d5/d59/classshaka_1_1MockRepresentation-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d5c/continuity__counter_8cc_source.html b/docs/d5/d5c/continuity__counter_8cc_source.html index 11825620f4..d94de0fa18 100644 --- a/docs/d5/d5c/continuity__counter_8cc_source.html +++ b/docs/d5/d5c/continuity__counter_8cc_source.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d63/classshaka_1_1media_1_1mp2t_1_1EsParserH265.html b/docs/d5/d63/classshaka_1_1media_1_1mp2t_1_1EsParserH265.html index 52bcfd64b4..9b425b23e3 100644 --- a/docs/d5/d63/classshaka_1_1media_1_1mp2t_1_1EsParserH265.html +++ b/docs/d5/d63/classshaka_1_1media_1_1mp2t_1_1EsParserH265.html @@ -161,7 +161,7 @@ const
diff --git a/docs/d5/d63/network__util_8cc_source.html b/docs/d5/d63/network__util_8cc_source.html index cca972202f..c49e94f235 100644 --- a/docs/d5/d63/network__util_8cc_source.html +++ b/docs/d5/d63/network__util_8cc_source.html @@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d66/classshaka_1_1media_1_1NalUnitToByteStreamConverter.html b/docs/d5/d66/classshaka_1_1media_1_1NalUnitToByteStreamConverter.html index f81f5afb5a..ef6c5fe01a 100644 --- a/docs/d5/d66/classshaka_1_1media_1_1NalUnitToByteStreamConverter.html +++ b/docs/d5/d66/classshaka_1_1media_1_1NalUnitToByteStreamConverter.html @@ -229,7 +229,7 @@ class NalUnitToByteStreamC diff --git a/docs/d5/d6f/vlog__flags_8cc_source.html b/docs/d5/d6f/vlog__flags_8cc_source.html index 01df42884d..8daf0b8108 100644 --- a/docs/d5/d6f/vlog__flags_8cc_source.html +++ b/docs/d5/d6f/vlog__flags_8cc_source.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d72/avc__decoder__configuration__record_8cc_source.html b/docs/d5/d72/avc__decoder__configuration__record_8cc_source.html index 13bc3502ec..58a411db7c 100644 --- a/docs/d5/d72/avc__decoder__configuration__record_8cc_source.html +++ b/docs/d5/d72/avc__decoder__configuration__record_8cc_source.html @@ -203,7 +203,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d7b/box__definitions_8h_source.html b/docs/d5/d7b/box__definitions_8h_source.html index ec090b56a8..7174f57366 100644 --- a/docs/d5/d7b/box__definitions_8h_source.html +++ b/docs/d5/d7b/box__definitions_8h_source.html @@ -1000,7 +1000,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d86/structshaka_1_1media_1_1mp4_1_1MediaInformation.html b/docs/d5/d86/structshaka_1_1media_1_1mp4_1_1MediaInformation.html index 6d147853c7..1d38d2658a 100644 --- a/docs/d5/d86/structshaka_1_1media_1_1mp4_1_1MediaInformation.html +++ b/docs/d5/d86/structshaka_1_1media_1_1mp4_1_1MediaInformation.html @@ -185,7 +185,7 @@ Additional Inherited Members diff --git a/docs/d5/d89/widevine__key__source_8cc_source.html b/docs/d5/d89/widevine__key__source_8cc_source.html index 1e666d2ade..8fe5529592 100644 --- a/docs/d5/d89/widevine__key__source_8cc_source.html +++ b/docs/d5/d89/widevine__key__source_8cc_source.html @@ -720,7 +720,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d8c/structshaka_1_1media_1_1mp4_1_1CompositionOffset.html b/docs/d5/d8c/structshaka_1_1media_1_1mp4_1_1CompositionOffset.html index 2fe6eebf10..629ecac688 100644 --- a/docs/d5/d8c/structshaka_1_1media_1_1mp4_1_1CompositionOffset.html +++ b/docs/d5/d8c/structshaka_1_1media_1_1mp4_1_1CompositionOffset.html @@ -112,7 +112,7 @@ int64_t sample_offset< diff --git a/docs/d5/d8f/webm__cluster__parser_8cc_source.html b/docs/d5/d8f/webm__cluster__parser_8cc_source.html index 2703921795..5f594e6e25 100644 --- a/docs/d5/d8f/webm__cluster__parser_8cc_source.html +++ b/docs/d5/d8f/webm__cluster__parser_8cc_source.html @@ -116,635 +116,631 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
27 // block is a keyframe.
28 // |data| contains the bytes in the block.
29 // |size| indicates the number of bytes in |data|.
-
30 bool IsKeyframe(bool is_video,
-
31  VideoCodec codec,
-
32  const uint8_t* data,
-
33  int size) {
-
34  // For now, assume that all blocks are keyframes for datatypes other than
-
35  // video. This is a valid assumption for Vorbis, WebVTT, & Opus.
-
36  if (!is_video)
-
37  return true;
-
38 
-
39  switch (codec) {
-
40  case kCodecVP8:
-
41  return VP8Parser::IsKeyframe(data, size);
-
42  case kCodecVP9:
-
43  return VP9Parser::IsKeyframe(data, size);
-
44  default:
-
45  NOTIMPLEMENTED() << "Unsupported codec " << codec;
-
46  return false;
-
47  }
-
48 }
-
49 
-
50 } // namespace
-
51 
- -
53  int64_t timecode_scale,
-
54  scoped_refptr<AudioStreamInfo> audio_stream_info,
-
55  scoped_refptr<VideoStreamInfo> video_stream_info,
-
56  int64_t audio_default_duration,
-
57  int64_t video_default_duration,
-
58  const WebMTracksParser::TextTracks& text_tracks,
-
59  const std::set<int64_t>& ignored_tracks,
-
60  const std::string& audio_encryption_key_id,
-
61  const std::string& video_encryption_key_id,
-
62  const MediaParser::NewSampleCB& new_sample_cb,
-
63  const MediaParser::InitCB& init_cb,
-
64  KeySource* decryption_key_source)
-
65  : timecode_multiplier_(timecode_scale / 1000.0),
-
66  audio_stream_info_(audio_stream_info),
-
67  video_stream_info_(video_stream_info),
-
68  ignored_tracks_(ignored_tracks),
-
69  audio_encryption_key_id_(audio_encryption_key_id),
-
70  video_encryption_key_id_(video_encryption_key_id),
-
71  parser_(kWebMIdCluster, this),
-
72  initialized_(false),
-
73  init_cb_(init_cb),
-
74  cluster_start_time_(kNoTimestamp),
-
75  audio_(audio_stream_info ? audio_stream_info->track_id() : -1,
-
76  false,
-
77  audio_default_duration,
-
78  new_sample_cb),
-
79  video_(video_stream_info ? video_stream_info->track_id() : -1,
-
80  true,
-
81  video_default_duration,
-
82  new_sample_cb) {
-
83  if (decryption_key_source)
-
84  decryptor_source_.reset(new DecryptorSource(decryption_key_source));
-
85  for (WebMTracksParser::TextTracks::const_iterator it = text_tracks.begin();
-
86  it != text_tracks.end();
-
87  ++it) {
-
88  text_track_map_.insert(std::make_pair(
-
89  it->first, Track(it->first, false, kNoTimestamp, new_sample_cb)));
-
90  }
-
91 }
-
92 
-
93 WebMClusterParser::~WebMClusterParser() {}
-
94 
- -
96  last_block_timecode_ = -1;
-
97  cluster_timecode_ = -1;
-
98  cluster_start_time_ = kNoTimestamp;
-
99  cluster_ended_ = false;
-
100  parser_.Reset();
-
101  audio_.Reset();
-
102  video_.Reset();
-
103  ResetTextTracks();
-
104 }
-
105 
- -
107  // Estimate the duration of the last frame if necessary.
-
108  bool audio_result = audio_.ApplyDurationEstimateIfNeeded();
-
109  bool video_result = video_.ApplyDurationEstimateIfNeeded();
-
110  Reset();
-
111  return audio_result && video_result;
-
112 }
+
30 bool IsKeyframe(bool is_video, Codec codec, const uint8_t* data, int size) {
+
31  // For now, assume that all blocks are keyframes for datatypes other than
+
32  // video. This is a valid assumption for Vorbis, WebVTT, & Opus.
+
33  if (!is_video)
+
34  return true;
+
35 
+
36  switch (codec) {
+
37  case kCodecVP8:
+
38  return VP8Parser::IsKeyframe(data, size);
+
39  case kCodecVP9:
+
40  return VP9Parser::IsKeyframe(data, size);
+
41  default:
+
42  NOTIMPLEMENTED() << "Unsupported codec " << codec;
+
43  return false;
+
44  }
+
45 }
+
46 
+
47 } // namespace
+
48 
+ +
50  int64_t timecode_scale,
+
51  scoped_refptr<AudioStreamInfo> audio_stream_info,
+
52  scoped_refptr<VideoStreamInfo> video_stream_info,
+
53  int64_t audio_default_duration,
+
54  int64_t video_default_duration,
+
55  const WebMTracksParser::TextTracks& text_tracks,
+
56  const std::set<int64_t>& ignored_tracks,
+
57  const std::string& audio_encryption_key_id,
+
58  const std::string& video_encryption_key_id,
+
59  const MediaParser::NewSampleCB& new_sample_cb,
+
60  const MediaParser::InitCB& init_cb,
+
61  KeySource* decryption_key_source)
+
62  : timecode_multiplier_(timecode_scale / 1000.0),
+
63  audio_stream_info_(audio_stream_info),
+
64  video_stream_info_(video_stream_info),
+
65  ignored_tracks_(ignored_tracks),
+
66  audio_encryption_key_id_(audio_encryption_key_id),
+
67  video_encryption_key_id_(video_encryption_key_id),
+
68  parser_(kWebMIdCluster, this),
+
69  initialized_(false),
+
70  init_cb_(init_cb),
+
71  cluster_start_time_(kNoTimestamp),
+
72  audio_(audio_stream_info ? audio_stream_info->track_id() : -1,
+
73  false,
+
74  audio_default_duration,
+
75  new_sample_cb),
+
76  video_(video_stream_info ? video_stream_info->track_id() : -1,
+
77  true,
+
78  video_default_duration,
+
79  new_sample_cb) {
+
80  if (decryption_key_source)
+
81  decryptor_source_.reset(new DecryptorSource(decryption_key_source));
+
82  for (WebMTracksParser::TextTracks::const_iterator it = text_tracks.begin();
+
83  it != text_tracks.end();
+
84  ++it) {
+
85  text_track_map_.insert(std::make_pair(
+
86  it->first, Track(it->first, false, kNoTimestamp, new_sample_cb)));
+
87  }
+
88 }
+
89 
+
90 WebMClusterParser::~WebMClusterParser() {}
+
91 
+ +
93  last_block_timecode_ = -1;
+
94  cluster_timecode_ = -1;
+
95  cluster_start_time_ = kNoTimestamp;
+
96  cluster_ended_ = false;
+
97  parser_.Reset();
+
98  audio_.Reset();
+
99  video_.Reset();
+
100  ResetTextTracks();
+
101 }
+
102 
+ +
104  // Estimate the duration of the last frame if necessary.
+
105  bool audio_result = audio_.ApplyDurationEstimateIfNeeded();
+
106  bool video_result = video_.ApplyDurationEstimateIfNeeded();
+
107  Reset();
+
108  return audio_result && video_result;
+
109 }
+
110 
+
111 int WebMClusterParser::Parse(const uint8_t* buf, int size) {
+
112  int result = parser_.Parse(buf, size);
113 
-
114 int WebMClusterParser::Parse(const uint8_t* buf, int size) {
-
115  int result = parser_.Parse(buf, size);
-
116 
-
117  if (result < 0) {
-
118  cluster_ended_ = false;
-
119  return result;
-
120  }
-
121 
-
122  cluster_ended_ = parser_.IsParsingComplete();
-
123  if (cluster_ended_) {
-
124  // If there were no buffers in this cluster, set the cluster start time to
-
125  // be the |cluster_timecode_|.
-
126  if (cluster_start_time_ == kNoTimestamp) {
-
127  // If the cluster did not even have a |cluster_timecode_|, signal parse
-
128  // error.
-
129  if (cluster_timecode_ < 0)
-
130  return -1;
+
114  if (result < 0) {
+
115  cluster_ended_ = false;
+
116  return result;
+
117  }
+
118 
+
119  cluster_ended_ = parser_.IsParsingComplete();
+
120  if (cluster_ended_) {
+
121  // If there were no buffers in this cluster, set the cluster start time to
+
122  // be the |cluster_timecode_|.
+
123  if (cluster_start_time_ == kNoTimestamp) {
+
124  // If the cluster did not even have a |cluster_timecode_|, signal parse
+
125  // error.
+
126  if (cluster_timecode_ < 0)
+
127  return -1;
+
128 
+
129  cluster_start_time_ = cluster_timecode_ * timecode_multiplier_;
+
130  }
131 
-
132  cluster_start_time_ = cluster_timecode_ * timecode_multiplier_;
-
133  }
-
134 
-
135  // Reset the parser if we're done parsing so that
-
136  // it is ready to accept another cluster on the next
-
137  // call.
-
138  parser_.Reset();
-
139 
-
140  last_block_timecode_ = -1;
-
141  cluster_timecode_ = -1;
-
142  }
+
132  // Reset the parser if we're done parsing so that
+
133  // it is ready to accept another cluster on the next
+
134  // call.
+
135  parser_.Reset();
+
136 
+
137  last_block_timecode_ = -1;
+
138  cluster_timecode_ = -1;
+
139  }
+
140 
+
141  return result;
+
142 }
143 
-
144  return result;
-
145 }
-
146 
-
147 WebMParserClient* WebMClusterParser::OnListStart(int id) {
-
148  if (id == kWebMIdCluster) {
-
149  cluster_timecode_ = -1;
-
150  cluster_start_time_ = kNoTimestamp;
-
151  } else if (id == kWebMIdBlockGroup) {
-
152  block_data_.reset();
-
153  block_data_size_ = -1;
-
154  block_duration_ = -1;
-
155  discard_padding_ = -1;
-
156  discard_padding_set_ = false;
-
157  } else if (id == kWebMIdBlockAdditions) {
-
158  block_add_id_ = -1;
-
159  block_additional_data_.reset();
-
160  block_additional_data_size_ = 0;
-
161  }
+
144 WebMParserClient* WebMClusterParser::OnListStart(int id) {
+
145  if (id == kWebMIdCluster) {
+
146  cluster_timecode_ = -1;
+
147  cluster_start_time_ = kNoTimestamp;
+
148  } else if (id == kWebMIdBlockGroup) {
+
149  block_data_.reset();
+
150  block_data_size_ = -1;
+
151  block_duration_ = -1;
+
152  discard_padding_ = -1;
+
153  discard_padding_set_ = false;
+
154  } else if (id == kWebMIdBlockAdditions) {
+
155  block_add_id_ = -1;
+
156  block_additional_data_.reset();
+
157  block_additional_data_size_ = 0;
+
158  }
+
159 
+
160  return this;
+
161 }
162 
-
163  return this;
-
164 }
-
165 
-
166 bool WebMClusterParser::OnListEnd(int id) {
-
167  if (id != kWebMIdBlockGroup)
-
168  return true;
-
169 
-
170  // Make sure the BlockGroup actually had a Block.
-
171  if (block_data_size_ == -1) {
-
172  LOG(ERROR) << "Block missing from BlockGroup.";
-
173  return false;
-
174  }
-
175 
-
176  bool result = ParseBlock(false, block_data_.get(), block_data_size_,
-
177  block_additional_data_.get(),
-
178  block_additional_data_size_, block_duration_,
-
179  discard_padding_set_ ? discard_padding_ : 0);
-
180  block_data_.reset();
-
181  block_data_size_ = -1;
-
182  block_duration_ = -1;
-
183  block_add_id_ = -1;
-
184  block_additional_data_.reset();
-
185  block_additional_data_size_ = 0;
-
186  discard_padding_ = -1;
-
187  discard_padding_set_ = false;
-
188  return result;
-
189 }
-
190 
-
191 bool WebMClusterParser::OnUInt(int id, int64_t val) {
-
192  int64_t* dst;
-
193  switch (id) {
-
194  case kWebMIdTimecode:
-
195  dst = &cluster_timecode_;
+
163 bool WebMClusterParser::OnListEnd(int id) {
+
164  if (id != kWebMIdBlockGroup)
+
165  return true;
+
166 
+
167  // Make sure the BlockGroup actually had a Block.
+
168  if (block_data_size_ == -1) {
+
169  LOG(ERROR) << "Block missing from BlockGroup.";
+
170  return false;
+
171  }
+
172 
+
173  bool result = ParseBlock(false, block_data_.get(), block_data_size_,
+
174  block_additional_data_.get(),
+
175  block_additional_data_size_, block_duration_,
+
176  discard_padding_set_ ? discard_padding_ : 0);
+
177  block_data_.reset();
+
178  block_data_size_ = -1;
+
179  block_duration_ = -1;
+
180  block_add_id_ = -1;
+
181  block_additional_data_.reset();
+
182  block_additional_data_size_ = 0;
+
183  discard_padding_ = -1;
+
184  discard_padding_set_ = false;
+
185  return result;
+
186 }
+
187 
+
188 bool WebMClusterParser::OnUInt(int id, int64_t val) {
+
189  int64_t* dst;
+
190  switch (id) {
+
191  case kWebMIdTimecode:
+
192  dst = &cluster_timecode_;
+
193  break;
+
194  case kWebMIdBlockDuration:
+
195  dst = &block_duration_;
196  break;
-
197  case kWebMIdBlockDuration:
-
198  dst = &block_duration_;
+
197  case kWebMIdBlockAddID:
+
198  dst = &block_add_id_;
199  break;
-
200  case kWebMIdBlockAddID:
-
201  dst = &block_add_id_;
-
202  break;
-
203  default:
-
204  return true;
-
205  }
-
206  if (*dst != -1)
-
207  return false;
-
208  *dst = val;
-
209  return true;
-
210 }
-
211 
-
212 bool WebMClusterParser::ParseBlock(bool is_simple_block,
-
213  const uint8_t* buf,
-
214  int size,
-
215  const uint8_t* additional,
-
216  int additional_size,
-
217  int duration,
-
218  int64_t discard_padding) {
-
219  if (size < 4)
-
220  return false;
-
221 
-
222  // Return an error if the trackNum > 127. We just aren't
-
223  // going to support large track numbers right now.
-
224  if (!(buf[0] & 0x80)) {
-
225  LOG(ERROR) << "TrackNumber over 127 not supported";
-
226  return false;
-
227  }
-
228 
-
229  int track_num = buf[0] & 0x7f;
-
230  int timecode = buf[1] << 8 | buf[2];
-
231  int flags = buf[3] & 0xff;
-
232  int lacing = (flags >> 1) & 0x3;
-
233 
-
234  if (lacing) {
-
235  LOG(ERROR) << "Lacing " << lacing << " is not supported yet.";
-
236  return false;
-
237  }
-
238 
-
239  // Sign extend negative timecode offsets.
-
240  if (timecode & 0x8000)
-
241  timecode |= ~0xffff;
-
242 
-
243  const uint8_t* frame_data = buf + 4;
-
244  int frame_size = size - (frame_data - buf);
-
245  return OnBlock(is_simple_block, track_num, timecode, duration, flags,
-
246  frame_data, frame_size, additional, additional_size,
-
247  discard_padding);
-
248 }
-
249 
-
250 bool WebMClusterParser::OnBinary(int id, const uint8_t* data, int size) {
-
251  switch (id) {
-
252  case kWebMIdSimpleBlock:
-
253  return ParseBlock(true, data, size, NULL, 0, -1, 0);
-
254 
-
255  case kWebMIdBlock:
-
256  if (block_data_) {
-
257  LOG(ERROR) << "More than 1 Block in a BlockGroup is not "
-
258  "supported.";
-
259  return false;
-
260  }
-
261  block_data_.reset(new uint8_t[size]);
-
262  memcpy(block_data_.get(), data, size);
-
263  block_data_size_ = size;
-
264  return true;
-
265 
-
266  case kWebMIdBlockAdditional: {
-
267  uint64_t block_add_id = base::HostToNet64(block_add_id_);
-
268  if (block_additional_data_) {
-
269  // TODO: Technically, more than 1 BlockAdditional is allowed as per
-
270  // matroska spec. But for now we don't have a use case to support
-
271  // parsing of such files. Take a look at this again when such a case
-
272  // arises.
-
273  LOG(ERROR) << "More than 1 BlockAdditional in a "
-
274  "BlockGroup is not supported.";
-
275  return false;
-
276  }
-
277  // First 8 bytes of side_data in DecoderBuffer is the BlockAddID
-
278  // element's value in Big Endian format. This is done to mimic ffmpeg
-
279  // demuxer's behavior.
-
280  block_additional_data_size_ = size + sizeof(block_add_id);
-
281  block_additional_data_.reset(new uint8_t[block_additional_data_size_]);
-
282  memcpy(block_additional_data_.get(), &block_add_id,
-
283  sizeof(block_add_id));
-
284  memcpy(block_additional_data_.get() + 8, data, size);
-
285  return true;
-
286  }
-
287  case kWebMIdDiscardPadding: {
-
288  if (discard_padding_set_ || size <= 0 || size > 8)
-
289  return false;
-
290  discard_padding_set_ = true;
-
291 
-
292  // Read in the big-endian integer.
-
293  discard_padding_ = static_cast<int8_t>(data[0]);
-
294  for (int i = 1; i < size; ++i)
-
295  discard_padding_ = (discard_padding_ << 8) | data[i];
-
296 
+
200  default:
+
201  return true;
+
202  }
+
203  if (*dst != -1)
+
204  return false;
+
205  *dst = val;
+
206  return true;
+
207 }
+
208 
+
209 bool WebMClusterParser::ParseBlock(bool is_simple_block,
+
210  const uint8_t* buf,
+
211  int size,
+
212  const uint8_t* additional,
+
213  int additional_size,
+
214  int duration,
+
215  int64_t discard_padding) {
+
216  if (size < 4)
+
217  return false;
+
218 
+
219  // Return an error if the trackNum > 127. We just aren't
+
220  // going to support large track numbers right now.
+
221  if (!(buf[0] & 0x80)) {
+
222  LOG(ERROR) << "TrackNumber over 127 not supported";
+
223  return false;
+
224  }
+
225 
+
226  int track_num = buf[0] & 0x7f;
+
227  int timecode = buf[1] << 8 | buf[2];
+
228  int flags = buf[3] & 0xff;
+
229  int lacing = (flags >> 1) & 0x3;
+
230 
+
231  if (lacing) {
+
232  LOG(ERROR) << "Lacing " << lacing << " is not supported yet.";
+
233  return false;
+
234  }
+
235 
+
236  // Sign extend negative timecode offsets.
+
237  if (timecode & 0x8000)
+
238  timecode |= ~0xffff;
+
239 
+
240  const uint8_t* frame_data = buf + 4;
+
241  int frame_size = size - (frame_data - buf);
+
242  return OnBlock(is_simple_block, track_num, timecode, duration, flags,
+
243  frame_data, frame_size, additional, additional_size,
+
244  discard_padding);
+
245 }
+
246 
+
247 bool WebMClusterParser::OnBinary(int id, const uint8_t* data, int size) {
+
248  switch (id) {
+
249  case kWebMIdSimpleBlock:
+
250  return ParseBlock(true, data, size, NULL, 0, -1, 0);
+
251 
+
252  case kWebMIdBlock:
+
253  if (block_data_) {
+
254  LOG(ERROR) << "More than 1 Block in a BlockGroup is not "
+
255  "supported.";
+
256  return false;
+
257  }
+
258  block_data_.reset(new uint8_t[size]);
+
259  memcpy(block_data_.get(), data, size);
+
260  block_data_size_ = size;
+
261  return true;
+
262 
+
263  case kWebMIdBlockAdditional: {
+
264  uint64_t block_add_id = base::HostToNet64(block_add_id_);
+
265  if (block_additional_data_) {
+
266  // TODO: Technically, more than 1 BlockAdditional is allowed as per
+
267  // matroska spec. But for now we don't have a use case to support
+
268  // parsing of such files. Take a look at this again when such a case
+
269  // arises.
+
270  LOG(ERROR) << "More than 1 BlockAdditional in a "
+
271  "BlockGroup is not supported.";
+
272  return false;
+
273  }
+
274  // First 8 bytes of side_data in DecoderBuffer is the BlockAddID
+
275  // element's value in Big Endian format. This is done to mimic ffmpeg
+
276  // demuxer's behavior.
+
277  block_additional_data_size_ = size + sizeof(block_add_id);
+
278  block_additional_data_.reset(new uint8_t[block_additional_data_size_]);
+
279  memcpy(block_additional_data_.get(), &block_add_id,
+
280  sizeof(block_add_id));
+
281  memcpy(block_additional_data_.get() + 8, data, size);
+
282  return true;
+
283  }
+
284  case kWebMIdDiscardPadding: {
+
285  if (discard_padding_set_ || size <= 0 || size > 8)
+
286  return false;
+
287  discard_padding_set_ = true;
+
288 
+
289  // Read in the big-endian integer.
+
290  discard_padding_ = static_cast<int8_t>(data[0]);
+
291  for (int i = 1; i < size; ++i)
+
292  discard_padding_ = (discard_padding_ << 8) | data[i];
+
293 
+
294  return true;
+
295  }
+
296  default:
297  return true;
-
298  }
-
299  default:
-
300  return true;
-
301  }
-
302 }
-
303 
-
304 bool WebMClusterParser::OnBlock(bool is_simple_block,
-
305  int track_num,
-
306  int timecode,
-
307  int block_duration,
-
308  int flags,
-
309  const uint8_t* data,
-
310  int size,
-
311  const uint8_t* additional,
-
312  int additional_size,
-
313  int64_t discard_padding) {
-
314  DCHECK_GE(size, 0);
-
315  if (cluster_timecode_ == -1) {
-
316  LOG(ERROR) << "Got a block before cluster timecode.";
-
317  return false;
-
318  }
-
319 
-
320  // TODO: Should relative negative timecode offsets be rejected? Or only when
-
321  // the absolute timecode is negative? See http://crbug.com/271794
-
322  if (timecode < 0) {
-
323  LOG(ERROR) << "Got a block with negative timecode offset " << timecode;
-
324  return false;
-
325  }
-
326 
-
327  if (last_block_timecode_ != -1 && timecode < last_block_timecode_) {
-
328  LOG(ERROR) << "Got a block with a timecode before the previous block.";
-
329  return false;
-
330  }
-
331 
-
332  Track* track = NULL;
-
333  StreamType stream_type = kStreamUnknown;
-
334  std::string encryption_key_id;
-
335  if (track_num == audio_.track_num()) {
-
336  track = &audio_;
-
337  encryption_key_id = audio_encryption_key_id_;
-
338  stream_type = kStreamAudio;
-
339  } else if (track_num == video_.track_num()) {
-
340  track = &video_;
-
341  encryption_key_id = video_encryption_key_id_;
-
342  stream_type = kStreamVideo;
-
343  } else if (ignored_tracks_.find(track_num) != ignored_tracks_.end()) {
-
344  return true;
-
345  } else if (Track* const text_track = FindTextTrack(track_num)) {
-
346  if (is_simple_block) // BlockGroup is required for WebVTT cues
-
347  return false;
-
348  if (block_duration < 0) // not specified
-
349  return false;
-
350  track = text_track;
-
351  stream_type = kStreamText;
-
352  } else {
-
353  LOG(ERROR) << "Unexpected track number " << track_num;
-
354  return false;
-
355  }
-
356  DCHECK_NE(stream_type, kStreamUnknown);
-
357 
-
358  last_block_timecode_ = timecode;
-
359 
-
360  int64_t timestamp = (cluster_timecode_ + timecode) * timecode_multiplier_;
-
361 
-
362  scoped_refptr<MediaSample> buffer;
-
363  if (stream_type != kStreamText) {
-
364  // The first bit of the flags is set when a SimpleBlock contains only
-
365  // keyframes. If this is a Block, then inspection of the payload is
-
366  // necessary to determine whether it contains a keyframe or not.
-
367  // http://www.matroska.org/technical/specs/index.html
-
368  bool is_keyframe =
-
369  is_simple_block
-
370  ? (flags & 0x80) != 0
-
371  : IsKeyframe(stream_type == kStreamVideo,
-
372  video_stream_info_ ? video_stream_info_->codec()
-
373  : kUnknownVideoCodec,
-
374  data, size);
-
375 
-
376  // Every encrypted Block has a signal byte and IV prepended to it. Current
-
377  // encrypted WebM request for comments specification is here
-
378  // http://wiki.webmproject.org/encryption/webm-encryption-rfc
-
379  scoped_ptr<DecryptConfig> decrypt_config;
-
380  int data_offset = 0;
-
381  if (!encryption_key_id.empty() &&
-
382  !WebMCreateDecryptConfig(
-
383  data, size,
-
384  reinterpret_cast<const uint8_t*>(encryption_key_id.data()),
-
385  encryption_key_id.size(),
-
386  &decrypt_config, &data_offset)) {
-
387  return false;
-
388  }
+
298  }
+
299 }
+
300 
+
301 bool WebMClusterParser::OnBlock(bool is_simple_block,
+
302  int track_num,
+
303  int timecode,
+
304  int block_duration,
+
305  int flags,
+
306  const uint8_t* data,
+
307  int size,
+
308  const uint8_t* additional,
+
309  int additional_size,
+
310  int64_t discard_padding) {
+
311  DCHECK_GE(size, 0);
+
312  if (cluster_timecode_ == -1) {
+
313  LOG(ERROR) << "Got a block before cluster timecode.";
+
314  return false;
+
315  }
+
316 
+
317  // TODO: Should relative negative timecode offsets be rejected? Or only when
+
318  // the absolute timecode is negative? See http://crbug.com/271794
+
319  if (timecode < 0) {
+
320  LOG(ERROR) << "Got a block with negative timecode offset " << timecode;
+
321  return false;
+
322  }
+
323 
+
324  if (last_block_timecode_ != -1 && timecode < last_block_timecode_) {
+
325  LOG(ERROR) << "Got a block with a timecode before the previous block.";
+
326  return false;
+
327  }
+
328 
+
329  Track* track = NULL;
+
330  StreamType stream_type = kStreamUnknown;
+
331  std::string encryption_key_id;
+
332  if (track_num == audio_.track_num()) {
+
333  track = &audio_;
+
334  encryption_key_id = audio_encryption_key_id_;
+
335  stream_type = kStreamAudio;
+
336  } else if (track_num == video_.track_num()) {
+
337  track = &video_;
+
338  encryption_key_id = video_encryption_key_id_;
+
339  stream_type = kStreamVideo;
+
340  } else if (ignored_tracks_.find(track_num) != ignored_tracks_.end()) {
+
341  return true;
+
342  } else if (Track* const text_track = FindTextTrack(track_num)) {
+
343  if (is_simple_block) // BlockGroup is required for WebVTT cues
+
344  return false;
+
345  if (block_duration < 0) // not specified
+
346  return false;
+
347  track = text_track;
+
348  stream_type = kStreamText;
+
349  } else {
+
350  LOG(ERROR) << "Unexpected track number " << track_num;
+
351  return false;
+
352  }
+
353  DCHECK_NE(stream_type, kStreamUnknown);
+
354 
+
355  last_block_timecode_ = timecode;
+
356 
+
357  int64_t timestamp = (cluster_timecode_ + timecode) * timecode_multiplier_;
+
358 
+
359  scoped_refptr<MediaSample> buffer;
+
360  if (stream_type != kStreamText) {
+
361  // The first bit of the flags is set when a SimpleBlock contains only
+
362  // keyframes. If this is a Block, then inspection of the payload is
+
363  // necessary to determine whether it contains a keyframe or not.
+
364  // http://www.matroska.org/technical/specs/index.html
+
365  bool is_keyframe =
+
366  is_simple_block
+
367  ? (flags & 0x80) != 0
+
368  : IsKeyframe(stream_type == kStreamVideo,
+
369  video_stream_info_ ? video_stream_info_->codec()
+
370  : kUnknownCodec,
+
371  data, size);
+
372 
+
373  // Every encrypted Block has a signal byte and IV prepended to it. Current
+
374  // encrypted WebM request for comments specification is here
+
375  // http://wiki.webmproject.org/encryption/webm-encryption-rfc
+
376  scoped_ptr<DecryptConfig> decrypt_config;
+
377  int data_offset = 0;
+
378  if (!encryption_key_id.empty() &&
+
379  !WebMCreateDecryptConfig(
+
380  data, size,
+
381  reinterpret_cast<const uint8_t*>(encryption_key_id.data()),
+
382  encryption_key_id.size(),
+
383  &decrypt_config, &data_offset)) {
+
384  return false;
+
385  }
+
386 
+
387  buffer = MediaSample::CopyFrom(data + data_offset, size - data_offset,
+
388  additional, additional_size, is_keyframe);
389 
-
390  buffer = MediaSample::CopyFrom(data + data_offset, size - data_offset,
-
391  additional, additional_size, is_keyframe);
-
392 
-
393  // An empty iv indicates that this sample is not encrypted.
-
394  if (decrypt_config && !decrypt_config->iv().empty()) {
-
395  if (!decryptor_source_) {
-
396  LOG(ERROR) << "Encrypted media sample encountered, but decryption is "
-
397  "not enabled";
-
398  return false;
-
399  }
-
400  if (!decryptor_source_->DecryptSampleBuffer(decrypt_config.get(),
-
401  buffer->writable_data(),
-
402  buffer->data_size())) {
-
403  LOG(ERROR) << "Cannot decrypt samples";
-
404  return false;
-
405  }
-
406  }
-
407  } else {
-
408  std::string id, settings, content;
-
409  WebMWebVTTParser::Parse(data, size, &id, &settings, &content);
-
410 
-
411  std::vector<uint8_t> side_data;
-
412  MakeSideData(id.begin(), id.end(),
-
413  settings.begin(), settings.end(),
-
414  &side_data);
-
415 
-
416  buffer = MediaSample::CopyFrom(
-
417  reinterpret_cast<const uint8_t*>(content.data()), content.length(),
-
418  &side_data[0], side_data.size(), true);
-
419  }
-
420 
-
421  buffer->set_dts(timestamp);
-
422  buffer->set_pts(timestamp);
-
423  if (cluster_start_time_ == kNoTimestamp)
-
424  cluster_start_time_ = timestamp;
-
425  buffer->set_duration(block_duration > 0
-
426  ? (block_duration * timecode_multiplier_)
-
427  : kNoTimestamp);
-
428 
-
429  if (!init_cb_.is_null() && !initialized_) {
-
430  std::vector<scoped_refptr<StreamInfo>> streams;
-
431  if (audio_stream_info_)
-
432  streams.push_back(audio_stream_info_);
-
433  if (video_stream_info_) {
-
434  if (stream_type == kStreamVideo) {
-
435  scoped_ptr<VPxParser> vpx_parser;
-
436  switch (video_stream_info_->codec()) {
-
437  case kCodecVP8:
-
438  vpx_parser.reset(new VP8Parser);
-
439  break;
-
440  case kCodecVP9:
-
441  vpx_parser.reset(new VP9Parser);
-
442  break;
-
443  default:
-
444  NOTIMPLEMENTED() << "Unsupported codec "
-
445  << video_stream_info_->codec();
-
446  return false;
-
447  }
-
448  std::vector<VPxFrameInfo> vpx_frames;
-
449  if (!vpx_parser->Parse(buffer->data(), buffer->data_size(),
-
450  &vpx_frames)) {
-
451  LOG(ERROR) << "Failed to parse vpx frame.";
+
390  if (decrypt_config) {
+
391  if (!decryptor_source_) {
+
392  LOG(ERROR) << "Encrypted media sample encountered, but decryption is "
+
393  "not enabled";
+
394  return false;
+
395  }
+
396  if (!decryptor_source_->DecryptSampleBuffer(decrypt_config.get(),
+
397  buffer->writable_data(),
+
398  buffer->data_size())) {
+
399  LOG(ERROR) << "Cannot decrypt samples";
+
400  return false;
+
401  }
+
402  }
+
403  } else {
+
404  std::string id, settings, content;
+
405  WebMWebVTTParser::Parse(data, size, &id, &settings, &content);
+
406 
+
407  std::vector<uint8_t> side_data;
+
408  MakeSideData(id.begin(), id.end(),
+
409  settings.begin(), settings.end(),
+
410  &side_data);
+
411 
+
412  buffer = MediaSample::CopyFrom(
+
413  reinterpret_cast<const uint8_t*>(content.data()), content.length(),
+
414  &side_data[0], side_data.size(), true);
+
415  }
+
416 
+
417  buffer->set_dts(timestamp);
+
418  buffer->set_pts(timestamp);
+
419  if (cluster_start_time_ == kNoTimestamp)
+
420  cluster_start_time_ = timestamp;
+
421  buffer->set_duration(block_duration > 0
+
422  ? (block_duration * timecode_multiplier_)
+
423  : kNoTimestamp);
+
424 
+
425  if (!init_cb_.is_null() && !initialized_) {
+
426  std::vector<scoped_refptr<StreamInfo>> streams;
+
427  if (audio_stream_info_)
+
428  streams.push_back(audio_stream_info_);
+
429  if (video_stream_info_) {
+
430  if (stream_type == kStreamVideo) {
+
431  scoped_ptr<VPxParser> vpx_parser;
+
432  switch (video_stream_info_->codec()) {
+
433  case kCodecVP8:
+
434  vpx_parser.reset(new VP8Parser);
+
435  break;
+
436  case kCodecVP9:
+
437  vpx_parser.reset(new VP9Parser);
+
438  break;
+
439  default:
+
440  NOTIMPLEMENTED() << "Unsupported codec "
+
441  << video_stream_info_->codec();
+
442  return false;
+
443  }
+
444  std::vector<VPxFrameInfo> vpx_frames;
+
445  if (!vpx_parser->Parse(buffer->data(), buffer->data_size(),
+
446  &vpx_frames)) {
+
447  LOG(ERROR) << "Failed to parse vpx frame.";
+
448  return false;
+
449  }
+
450  if (vpx_frames.size() != 1u || !vpx_frames[0].is_keyframe) {
+
451  LOG(ERROR) << "The first frame should be a key frame.";
452  return false;
453  }
-
454  if (vpx_frames.size() != 1u || !vpx_frames[0].is_keyframe) {
-
455  LOG(ERROR) << "The first frame should be a key frame.";
-
456  return false;
-
457  }
-
458 
-
459  VPCodecConfigurationRecord codec_config;
-
460  if (!video_stream_info_->codec_config().empty())
-
461  codec_config.ParseWebM(video_stream_info_->codec_config());
-
462  codec_config.MergeFrom(vpx_parser->codec_config());
-
463 
-
464  video_stream_info_->set_codec_string(
-
465  codec_config.GetCodecString(video_stream_info_->codec()));
-
466  std::vector<uint8_t> config_serialized;
-
467  codec_config.WriteMP4(&config_serialized);
-
468  video_stream_info_->set_codec_config(config_serialized);
-
469  streams.push_back(video_stream_info_);
-
470  init_cb_.Run(streams);
-
471  initialized_ = true;
-
472  }
-
473  } else {
-
474  init_cb_.Run(streams);
-
475  initialized_ = true;
-
476  }
-
477  }
-
478 
-
479  return track->EmitBuffer(buffer);
-
480 }
-
481 
-
482 WebMClusterParser::Track::Track(int track_num,
-
483  bool is_video,
-
484  int64_t default_duration,
-
485  const MediaParser::NewSampleCB& new_sample_cb)
-
486  : track_num_(track_num),
-
487  is_video_(is_video),
-
488  default_duration_(default_duration),
-
489  estimated_next_frame_duration_(kNoTimestamp),
-
490  new_sample_cb_(new_sample_cb) {
-
491  DCHECK(default_duration_ == kNoTimestamp || default_duration_ > 0);
-
492 }
-
493 
-
494 WebMClusterParser::Track::~Track() {}
-
495 
-
496 bool WebMClusterParser::Track::EmitBuffer(
-
497  const scoped_refptr<MediaSample>& buffer) {
-
498  DVLOG(2) << "EmitBuffer() : " << track_num_
-
499  << " ts " << buffer->pts()
-
500  << " dur " << buffer->duration()
-
501  << " kf " << buffer->is_key_frame()
-
502  << " size " << buffer->data_size();
-
503 
-
504  if (last_added_buffer_missing_duration_.get()) {
-
505  int64_t derived_duration =
-
506  buffer->pts() - last_added_buffer_missing_duration_->pts();
-
507  last_added_buffer_missing_duration_->set_duration(derived_duration);
-
508 
-
509  DVLOG(2) << "EmitBuffer() : applied derived duration to held-back buffer : "
-
510  << " ts "
-
511  << last_added_buffer_missing_duration_->pts()
-
512  << " dur "
-
513  << last_added_buffer_missing_duration_->duration()
-
514  << " kf " << last_added_buffer_missing_duration_->is_key_frame()
-
515  << " size " << last_added_buffer_missing_duration_->data_size();
-
516  scoped_refptr<MediaSample> updated_buffer =
-
517  last_added_buffer_missing_duration_;
-
518  last_added_buffer_missing_duration_ = NULL;
-
519  if (!EmitBufferHelp(updated_buffer))
-
520  return false;
-
521  }
-
522 
-
523  if (buffer->duration() == kNoTimestamp) {
-
524  last_added_buffer_missing_duration_ = buffer;
-
525  DVLOG(2) << "EmitBuffer() : holding back buffer that is missing duration";
-
526  return true;
-
527  }
-
528 
-
529  return EmitBufferHelp(buffer);
-
530 }
+
454 
+
455  VPCodecConfigurationRecord codec_config;
+
456  if (!video_stream_info_->codec_config().empty())
+
457  codec_config.ParseWebM(video_stream_info_->codec_config());
+
458  codec_config.MergeFrom(vpx_parser->codec_config());
+
459 
+
460  video_stream_info_->set_codec_string(
+
461  codec_config.GetCodecString(video_stream_info_->codec()));
+
462  std::vector<uint8_t> config_serialized;
+
463  codec_config.WriteMP4(&config_serialized);
+
464  video_stream_info_->set_codec_config(config_serialized);
+
465  streams.push_back(video_stream_info_);
+
466  init_cb_.Run(streams);
+
467  initialized_ = true;
+
468  }
+
469  } else {
+
470  init_cb_.Run(streams);
+
471  initialized_ = true;
+
472  }
+
473  }
+
474 
+
475  return track->EmitBuffer(buffer);
+
476 }
+
477 
+
478 WebMClusterParser::Track::Track(int track_num,
+
479  bool is_video,
+
480  int64_t default_duration,
+
481  const MediaParser::NewSampleCB& new_sample_cb)
+
482  : track_num_(track_num),
+
483  is_video_(is_video),
+
484  default_duration_(default_duration),
+
485  estimated_next_frame_duration_(kNoTimestamp),
+
486  new_sample_cb_(new_sample_cb) {
+
487  DCHECK(default_duration_ == kNoTimestamp || default_duration_ > 0);
+
488 }
+
489 
+
490 WebMClusterParser::Track::~Track() {}
+
491 
+
492 bool WebMClusterParser::Track::EmitBuffer(
+
493  const scoped_refptr<MediaSample>& buffer) {
+
494  DVLOG(2) << "EmitBuffer() : " << track_num_
+
495  << " ts " << buffer->pts()
+
496  << " dur " << buffer->duration()
+
497  << " kf " << buffer->is_key_frame()
+
498  << " size " << buffer->data_size();
+
499 
+
500  if (last_added_buffer_missing_duration_.get()) {
+
501  int64_t derived_duration =
+
502  buffer->pts() - last_added_buffer_missing_duration_->pts();
+
503  last_added_buffer_missing_duration_->set_duration(derived_duration);
+
504 
+
505  DVLOG(2) << "EmitBuffer() : applied derived duration to held-back buffer : "
+
506  << " ts "
+
507  << last_added_buffer_missing_duration_->pts()
+
508  << " dur "
+
509  << last_added_buffer_missing_duration_->duration()
+
510  << " kf " << last_added_buffer_missing_duration_->is_key_frame()
+
511  << " size " << last_added_buffer_missing_duration_->data_size();
+
512  scoped_refptr<MediaSample> updated_buffer =
+
513  last_added_buffer_missing_duration_;
+
514  last_added_buffer_missing_duration_ = NULL;
+
515  if (!EmitBufferHelp(updated_buffer))
+
516  return false;
+
517  }
+
518 
+
519  if (buffer->duration() == kNoTimestamp) {
+
520  last_added_buffer_missing_duration_ = buffer;
+
521  DVLOG(2) << "EmitBuffer() : holding back buffer that is missing duration";
+
522  return true;
+
523  }
+
524 
+
525  return EmitBufferHelp(buffer);
+
526 }
+
527 
+
528 bool WebMClusterParser::Track::ApplyDurationEstimateIfNeeded() {
+
529  if (!last_added_buffer_missing_duration_.get())
+
530  return true;
531 
-
532 bool WebMClusterParser::Track::ApplyDurationEstimateIfNeeded() {
-
533  if (!last_added_buffer_missing_duration_.get())
-
534  return true;
-
535 
-
536  int64_t estimated_duration = GetDurationEstimate();
-
537  last_added_buffer_missing_duration_->set_duration(estimated_duration);
-
538 
-
539  VLOG(1) << "Track " << track_num_ << ": Estimating WebM block duration to be "
-
540  << estimated_duration / 1000
-
541  << "ms for the last (Simple)Block in the Cluster for this Track. Use "
-
542  "BlockGroups with BlockDurations at the end of each Track in a "
-
543  "Cluster to avoid estimation.";
-
544 
-
545  DVLOG(2) << " new dur : ts " << last_added_buffer_missing_duration_->pts()
-
546  << " dur " << last_added_buffer_missing_duration_->duration()
-
547  << " kf " << last_added_buffer_missing_duration_->is_key_frame()
-
548  << " size " << last_added_buffer_missing_duration_->data_size();
-
549 
-
550  // Don't use the applied duration as a future estimation (don't use
-
551  // EmitBufferHelp() here.)
-
552  if (!new_sample_cb_.Run(track_num_, last_added_buffer_missing_duration_))
-
553  return false;
-
554  last_added_buffer_missing_duration_ = NULL;
-
555  return true;
+
532  int64_t estimated_duration = GetDurationEstimate();
+
533  last_added_buffer_missing_duration_->set_duration(estimated_duration);
+
534 
+
535  VLOG(1) << "Track " << track_num_ << ": Estimating WebM block duration to be "
+
536  << estimated_duration / 1000
+
537  << "ms for the last (Simple)Block in the Cluster for this Track. Use "
+
538  "BlockGroups with BlockDurations at the end of each Track in a "
+
539  "Cluster to avoid estimation.";
+
540 
+
541  DVLOG(2) << " new dur : ts " << last_added_buffer_missing_duration_->pts()
+
542  << " dur " << last_added_buffer_missing_duration_->duration()
+
543  << " kf " << last_added_buffer_missing_duration_->is_key_frame()
+
544  << " size " << last_added_buffer_missing_duration_->data_size();
+
545 
+
546  // Don't use the applied duration as a future estimation (don't use
+
547  // EmitBufferHelp() here.)
+
548  if (!new_sample_cb_.Run(track_num_, last_added_buffer_missing_duration_))
+
549  return false;
+
550  last_added_buffer_missing_duration_ = NULL;
+
551  return true;
+
552 }
+
553 
+
554 void WebMClusterParser::Track::Reset() {
+
555  last_added_buffer_missing_duration_ = NULL;
556 }
557 
-
558 void WebMClusterParser::Track::Reset() {
-
559  last_added_buffer_missing_duration_ = NULL;
-
560 }
+
558 bool WebMClusterParser::Track::EmitBufferHelp(
+
559  const scoped_refptr<MediaSample>& buffer) {
+
560  DCHECK(!last_added_buffer_missing_duration_.get());
561 
-
562 bool WebMClusterParser::Track::EmitBufferHelp(
-
563  const scoped_refptr<MediaSample>& buffer) {
-
564  DCHECK(!last_added_buffer_missing_duration_.get());
-
565 
-
566  int64_t duration = buffer->duration();
-
567  if (duration < 0 || duration == kNoTimestamp) {
-
568  LOG(ERROR) << "Invalid buffer duration: " << duration;
-
569  return false;
-
570  }
-
571 
-
572  // The estimated frame duration is the maximum non-zero duration since the
-
573  // last initialization segment.
-
574  if (duration > 0) {
-
575  int64_t orig_duration_estimate = estimated_next_frame_duration_;
-
576  if (estimated_next_frame_duration_ == kNoTimestamp) {
-
577  estimated_next_frame_duration_ = duration;
-
578  } else {
-
579  estimated_next_frame_duration_ =
-
580  std::max(duration, estimated_next_frame_duration_);
-
581  }
-
582 
-
583  if (orig_duration_estimate != estimated_next_frame_duration_) {
-
584  DVLOG(3) << "Updated duration estimate:"
-
585  << orig_duration_estimate
-
586  << " -> "
-
587  << estimated_next_frame_duration_
-
588  << " at timestamp: "
-
589  << buffer->dts();
-
590  }
-
591  }
-
592 
-
593  return new_sample_cb_.Run(track_num_, buffer);
-
594 }
-
595 
-
596 int64_t WebMClusterParser::Track::GetDurationEstimate() {
-
597  int64_t duration = kNoTimestamp;
-
598  if (default_duration_ != kNoTimestamp) {
-
599  duration = default_duration_;
-
600  DVLOG(3) << __FUNCTION__ << " : using track default duration " << duration;
-
601  } else if (estimated_next_frame_duration_ != kNoTimestamp) {
-
602  duration = estimated_next_frame_duration_;
-
603  DVLOG(3) << __FUNCTION__ << " : using estimated duration " << duration;
-
604  } else {
-
605  if (is_video_) {
-
606  duration = kDefaultVideoBufferDurationInMs * kMicrosecondsPerMillisecond;
-
607  } else {
-
608  duration = kDefaultAudioBufferDurationInMs * kMicrosecondsPerMillisecond;
-
609  }
-
610  DVLOG(3) << __FUNCTION__ << " : using hardcoded default duration "
-
611  << duration;
-
612  }
-
613 
-
614  DCHECK_GT(duration, 0);
-
615  DCHECK_NE(duration, kNoTimestamp);
-
616  return duration;
-
617 }
-
618 
-
619 void WebMClusterParser::ResetTextTracks() {
-
620  for (TextTrackMap::iterator it = text_track_map_.begin();
-
621  it != text_track_map_.end();
-
622  ++it) {
-
623  it->second.Reset();
-
624  }
-
625 }
+
562  int64_t duration = buffer->duration();
+
563  if (duration < 0 || duration == kNoTimestamp) {
+
564  LOG(ERROR) << "Invalid buffer duration: " << duration;
+
565  return false;
+
566  }
+
567 
+
568  // The estimated frame duration is the maximum non-zero duration since the
+
569  // last initialization segment.
+
570  if (duration > 0) {
+
571  int64_t orig_duration_estimate = estimated_next_frame_duration_;
+
572  if (estimated_next_frame_duration_ == kNoTimestamp) {
+
573  estimated_next_frame_duration_ = duration;
+
574  } else {
+
575  estimated_next_frame_duration_ =
+
576  std::max(duration, estimated_next_frame_duration_);
+
577  }
+
578 
+
579  if (orig_duration_estimate != estimated_next_frame_duration_) {
+
580  DVLOG(3) << "Updated duration estimate:"
+
581  << orig_duration_estimate
+
582  << " -> "
+
583  << estimated_next_frame_duration_
+
584  << " at timestamp: "
+
585  << buffer->dts();
+
586  }
+
587  }
+
588 
+
589  return new_sample_cb_.Run(track_num_, buffer);
+
590 }
+
591 
+
592 int64_t WebMClusterParser::Track::GetDurationEstimate() {
+
593  int64_t duration = kNoTimestamp;
+
594  if (default_duration_ != kNoTimestamp) {
+
595  duration = default_duration_;
+
596  DVLOG(3) << __FUNCTION__ << " : using track default duration " << duration;
+
597  } else if (estimated_next_frame_duration_ != kNoTimestamp) {
+
598  duration = estimated_next_frame_duration_;
+
599  DVLOG(3) << __FUNCTION__ << " : using estimated duration " << duration;
+
600  } else {
+
601  if (is_video_) {
+
602  duration = kDefaultVideoBufferDurationInMs * kMicrosecondsPerMillisecond;
+
603  } else {
+
604  duration = kDefaultAudioBufferDurationInMs * kMicrosecondsPerMillisecond;
+
605  }
+
606  DVLOG(3) << __FUNCTION__ << " : using hardcoded default duration "
+
607  << duration;
+
608  }
+
609 
+
610  DCHECK_GT(duration, 0);
+
611  DCHECK_NE(duration, kNoTimestamp);
+
612  return duration;
+
613 }
+
614 
+
615 void WebMClusterParser::ResetTextTracks() {
+
616  for (TextTrackMap::iterator it = text_track_map_.begin();
+
617  it != text_track_map_.end();
+
618  ++it) {
+
619  it->second.Reset();
+
620  }
+
621 }
+
622 
+
623 WebMClusterParser::Track*
+
624 WebMClusterParser::FindTextTrack(int track_num) {
+
625  const TextTrackMap::iterator it = text_track_map_.find(track_num);
626 
-
627 WebMClusterParser::Track*
-
628 WebMClusterParser::FindTextTrack(int track_num) {
-
629  const TextTrackMap::iterator it = text_track_map_.find(track_num);
-
630 
-
631  if (it == text_track_map_.end())
-
632  return NULL;
-
633 
-
634  return &it->second;
-
635 }
-
636 
-
637 } // namespace media
-
638 } // namespace shaka
+
627  if (it == text_track_map_.end())
+
628  return NULL;
+
629 
+
630  return &it->second;
+
631 }
+
632 
+
633 } // namespace media
+
634 } // namespace shaka
static bool IsKeyframe(const uint8_t *data, size_t data_size)
Definition: vp9_parser.cc:535
base::Callback< void(const std::vector< scoped_refptr< StreamInfo > > &stream_info)> InitCB
Definition: media_parser.h:35
-
int Parse(const uint8_t *buf, int size)
+
int Parse(const uint8_t *buf, int size)
void Reset()
Resets the state of the parser so it can start parsing a new list.
Definition: webm_parser.cc:714
int Parse(const uint8_t *buf, int size)
Definition: webm_parser.cc:719
-
bool Flush() WARN_UNUSED_RESULT
+
bool Flush() WARN_UNUSED_RESULT
static void Parse(const uint8_t *payload, int payload_size, std::string *id, std::string *settings, std::string *content)
Utility function to parse the WebVTT cue from a byte stream.
static bool IsKeyframe(const uint8_t *data, size_t data_size)
Definition: vp8_parser.cc:183
base::Callback< bool(uint32_t track_id, const scoped_refptr< MediaSample > &media_sample)> NewSampleCB
Definition: media_parser.h:44
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:31
static scoped_refptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
Definition: media_sample.cc:45
-
WebMClusterParser(int64_t timecode_scale, scoped_refptr< AudioStreamInfo > audio_stream_info, scoped_refptr< VideoStreamInfo > video_stream_info, int64_t audio_default_duration, int64_t video_default_duration, const WebMTracksParser::TextTracks &text_tracks, const std::set< int64_t > &ignored_tracks, const std::string &audio_encryption_key_id, const std::string &video_encryption_key_id, const MediaParser::NewSampleCB &new_sample_cb, const MediaParser::InitCB &init_cb, KeySource *decryption_key_source)
+
WebMClusterParser(int64_t timecode_scale, scoped_refptr< AudioStreamInfo > audio_stream_info, scoped_refptr< VideoStreamInfo > video_stream_info, int64_t audio_default_duration, int64_t video_default_duration, const WebMTracksParser::TextTracks &text_tracks, const std::set< int64_t > &ignored_tracks, const std::string &audio_encryption_key_id, const std::string &video_encryption_key_id, const MediaParser::NewSampleCB &new_sample_cb, const MediaParser::InitCB &init_cb, KeySource *decryption_key_source)
DecryptorSource wraps KeySource and is responsible for decryptor management.
-
void Reset()
Resets the parser state so it can accept a new cluster.
+
void Reset()
Resets the parser state so it can accept a new cluster.
diff --git a/docs/d5/d91/es__parser__adts_8cc_source.html b/docs/d5/d91/es__parser__adts_8cc_source.html index 212c426ae1..b98ffc5e6a 100644 --- a/docs/d5/d91/es__parser__adts_8cc_source.html +++ b/docs/d5/d91/es__parser__adts_8cc_source.html @@ -310,75 +310,63 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
221  ? std::min(2 * samples_per_second, 48000)
222  : samples_per_second;
223 
-
224  last_audio_decoder_config_ = scoped_refptr<StreamInfo>(
-
225  new AudioStreamInfo(
-
226  pid(),
-
227  kMpeg2Timescale,
-
228  kInfiniteDuration,
-
229  kCodecAAC,
- -
231  adts_header.GetObjectType()),
-
232  std::string(),
-
233  kAacSampleSizeBits,
-
234  adts_header.GetNumChannels(),
-
235  extended_samples_per_second,
-
236  0 /* seek preroll */,
-
237  0 /* codec delay */,
-
238  0 /* max bitrate */,
-
239  0 /* avg bitrate */,
-
240  audio_specific_config.data(),
-
241  audio_specific_config.size(),
-
242  false));
-
243 
-
244  DVLOG(1) << "Sampling frequency: " << samples_per_second;
-
245  DVLOG(1) << "Extended sampling frequency: " << extended_samples_per_second;
-
246  DVLOG(1) << "Channel config: " << adts_header.GetNumChannels();
-
247  DVLOG(1) << "Object type: " << adts_header.GetObjectType();
-
248  // Reset the timestamp helper to use a new sampling frequency.
-
249  if (audio_timestamp_helper_) {
-
250  int64_t base_timestamp = audio_timestamp_helper_->GetTimestamp();
-
251  audio_timestamp_helper_.reset(
-
252  new AudioTimestampHelper(kMpeg2Timescale, samples_per_second));
-
253  audio_timestamp_helper_->SetBaseTimestamp(base_timestamp);
-
254  } else {
-
255  audio_timestamp_helper_.reset(
-
256  new AudioTimestampHelper(kMpeg2Timescale, extended_samples_per_second));
-
257  }
-
258 
-
259  // Audio config notification.
-
260  new_stream_info_cb_.Run(last_audio_decoder_config_);
+
224  last_audio_decoder_config_ = scoped_refptr<StreamInfo>(new AudioStreamInfo(
+
225  pid(), kMpeg2Timescale, kInfiniteDuration, kCodecAAC,
+
226  AudioStreamInfo::GetCodecString(kCodecAAC, adts_header.GetObjectType()),
+
227  audio_specific_config.data(), audio_specific_config.size(),
+
228  kAacSampleSizeBits, adts_header.GetNumChannels(),
+
229  extended_samples_per_second, 0 /* seek preroll */, 0 /* codec delay */,
+
230  0 /* max bitrate */, 0 /* avg bitrate */, std::string(), false));
+
231 
+
232  DVLOG(1) << "Sampling frequency: " << samples_per_second;
+
233  DVLOG(1) << "Extended sampling frequency: " << extended_samples_per_second;
+
234  DVLOG(1) << "Channel config: " << adts_header.GetNumChannels();
+
235  DVLOG(1) << "Object type: " << adts_header.GetObjectType();
+
236  // Reset the timestamp helper to use a new sampling frequency.
+
237  if (audio_timestamp_helper_) {
+
238  int64_t base_timestamp = audio_timestamp_helper_->GetTimestamp();
+
239  audio_timestamp_helper_.reset(
+
240  new AudioTimestampHelper(kMpeg2Timescale, samples_per_second));
+
241  audio_timestamp_helper_->SetBaseTimestamp(base_timestamp);
+
242  } else {
+
243  audio_timestamp_helper_.reset(
+
244  new AudioTimestampHelper(kMpeg2Timescale, extended_samples_per_second));
+
245  }
+
246 
+
247  // Audio config notification.
+
248  new_stream_info_cb_.Run(last_audio_decoder_config_);
+
249 
+
250  return true;
+
251 }
+
252 
+
253 void EsParserAdts::DiscardEs(int nbytes) {
+
254  DCHECK_GE(nbytes, 0);
+
255  if (nbytes <= 0)
+
256  return;
+
257 
+
258  // Adjust the ES position of each PTS.
+
259  for (EsPtsList::iterator it = pts_list_.begin(); it != pts_list_.end(); ++it)
+
260  it->first -= nbytes;
261 
-
262  return true;
-
263 }
-
264 
-
265 void EsParserAdts::DiscardEs(int nbytes) {
-
266  DCHECK_GE(nbytes, 0);
-
267  if (nbytes <= 0)
-
268  return;
-
269 
-
270  // Adjust the ES position of each PTS.
-
271  for (EsPtsList::iterator it = pts_list_.begin(); it != pts_list_.end(); ++it)
-
272  it->first -= nbytes;
-
273 
-
274  // Discard |nbytes| of ES.
-
275  es_byte_queue_.Pop(nbytes);
-
276 }
-
277 
-
278 } // namespace mp2t
-
279 } // namespace media
-
280 } // namespace shaka
-
static std::string GetCodecString(AudioCodec codec, uint8_t audio_object_type)
+
262  // Discard |nbytes| of ES.
+
263  es_byte_queue_.Pop(nbytes);
+
264 }
+
265 
+
266 } // namespace mp2t
+
267 } // namespace media
+
268 } // namespace shaka
void Push(const uint8_t *data, int size)
Append new bytes to the end of the queue.
Definition: byte_queue.cc:29
void Pop(int count)
Definition: byte_queue.cc:70
static size_t GetAdtsFrameSize(const uint8_t *data, size_t num_bytes)
Definition: adts_header.cc:23
void Reset()
Reset the queue to the empty state.
Definition: byte_queue.cc:24
void Peek(const uint8_t **data, int *size) const
Definition: byte_queue.cc:63
+
static std::string GetCodecString(Codec codec, uint8_t audio_object_type)
static scoped_refptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
Definition: media_sample.cc:45
static size_t GetAdtsHeaderSize(const uint8_t *data, size_t num_bytes)
Definition: adts_header.cc:31
diff --git a/docs/d5/d95/structshaka_1_1media_1_1mp4_1_1EditListEntry-members.html b/docs/d5/d95/structshaka_1_1media_1_1mp4_1_1EditListEntry-members.html index 68f77c6909..f613104387 100644 --- a/docs/d5/d95/structshaka_1_1media_1_1mp4_1_1EditListEntry-members.html +++ b/docs/d5/d95/structshaka_1_1media_1_1mp4_1_1EditListEntry-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d98/encryptor_8cc_source.html b/docs/d5/d98/encryptor_8cc_source.html index e50637960f..6228691714 100644 --- a/docs/d5/d98/encryptor_8cc_source.html +++ b/docs/d5/d98/encryptor_8cc_source.html @@ -95,146 +95,228 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
6 
7 #include "packager/media/formats/webm/encryptor.h"
8 
-
9 #include "packager/media/base/aes_encryptor.h"
-
10 #include "packager/media/base/fourccs.h"
-
11 #include "packager/media/base/media_sample.h"
-
12 
-
13 namespace shaka {
-
14 namespace media {
-
15 namespace webm {
-
16 namespace {
-
17 
-
18 Status CreateContentEncryption(mkvmuxer::Track* track, EncryptionKey* key) {
-
19  if (!track->AddContentEncoding()) {
-
20  return Status(error::INTERNAL_ERROR,
-
21  "Could not add ContentEncoding to track.");
-
22  }
+
9 #include <gflags/gflags.h>
+
10 #include "packager/media/base/aes_encryptor.h"
+
11 #include "packager/media/base/buffer_writer.h"
+
12 #include "packager/media/base/fourccs.h"
+
13 #include "packager/media/base/media_sample.h"
+
14 #include "packager/media/codecs/vp9_parser.h"
+
15 #include "packager/media/formats/webm/webm_constants.h"
+
16 
+
17 namespace shaka {
+
18 namespace media {
+
19 namespace webm {
+
20 namespace {
+
21 
+
22 const size_t kAesBlockSize = 16;
23 
-
24  mkvmuxer::ContentEncoding* const encoding =
-
25  track->GetContentEncodingByIndex(0);
-
26  if (!encoding) {
-
27  return Status(error::INTERNAL_ERROR,
-
28  "Could not add ContentEncoding to track.");
-
29  }
-
30 
-
31  mkvmuxer::ContentEncAESSettings* const aes = encoding->enc_aes_settings();
-
32  if (!aes) {
+
24 Status CreateContentEncryption(mkvmuxer::Track* track, EncryptionKey* key) {
+
25  if (!track->AddContentEncoding()) {
+
26  return Status(error::INTERNAL_ERROR,
+
27  "Could not add ContentEncoding to track.");
+
28  }
+
29 
+
30  mkvmuxer::ContentEncoding* const encoding =
+
31  track->GetContentEncodingByIndex(0);
+
32  if (!encoding) {
33  return Status(error::INTERNAL_ERROR,
-
34  "Error getting ContentEncAESSettings.");
+
34  "Could not add ContentEncoding to track.");
35  }
-
36  if (aes->cipher_mode() != mkvmuxer::ContentEncAESSettings::kCTR) {
-
37  return Status(error::INTERNAL_ERROR, "Cipher Mode is not CTR.");
-
38  }
-
39 
-
40  if (!key->key_id.empty() &&
-
41  !encoding->SetEncryptionID(
-
42  reinterpret_cast<const uint8*>(key->key_id.data()),
-
43  key->key_id.size())) {
-
44  return Status(error::INTERNAL_ERROR, "Error setting encryption ID.");
-
45  }
-
46  return Status::OK;
-
47 }
-
48 
-
49 } // namespace
-
50 
-
51 Encryptor::Encryptor() {}
-
52 
-
53 Encryptor::~Encryptor() {}
+
36 
+
37  mkvmuxer::ContentEncAESSettings* const aes = encoding->enc_aes_settings();
+
38  if (!aes) {
+
39  return Status(error::INTERNAL_ERROR,
+
40  "Error getting ContentEncAESSettings.");
+
41  }
+
42  if (aes->cipher_mode() != mkvmuxer::ContentEncAESSettings::kCTR) {
+
43  return Status(error::INTERNAL_ERROR, "Cipher Mode is not CTR.");
+
44  }
+
45 
+
46  if (!key->key_id.empty() &&
+
47  !encoding->SetEncryptionID(
+
48  reinterpret_cast<const uint8*>(key->key_id.data()),
+
49  key->key_id.size())) {
+
50  return Status(error::INTERNAL_ERROR, "Error setting encryption ID.");
+
51  }
+
52  return Status::OK;
+
53 }
54 
- -
56  KeySource::TrackType track_type,
-
57  KeySource* key_source) {
-
58  DCHECK(key_source);
-
59  return CreateEncryptor(muxer_listener, track_type, key_source);
-
60 }
-
61 
-
62 Status Encryptor::AddTrackInfo(mkvmuxer::Track* track) {
-
63  DCHECK(key_);
-
64  return CreateContentEncryption(track, key_.get());
-
65 }
-
66 
-
67 Status Encryptor::EncryptFrame(scoped_refptr<MediaSample> sample,
-
68  bool encrypt_frame) {
-
69  DCHECK(encryptor_);
+
55 } // namespace
+
56 
+
57 Encryptor::Encryptor() {}
+
58 
+
59 Encryptor::~Encryptor() {}
+
60 
+ +
62  KeySource::TrackType track_type,
+
63  Codec codec,
+
64  KeySource* key_source,
+
65  bool webm_subsample_encryption) {
+
66  DCHECK(key_source);
+
67  return CreateEncryptor(muxer_listener, track_type, codec, key_source,
+
68  webm_subsample_encryption);
+
69 }
70 
-
71  const size_t sample_size = sample->data_size();
-
72  if (encrypt_frame) {
-
73  // | 1 | iv | enc_data |
-
74  const size_t iv_size = encryptor_->iv().size();
-
75  sample->resize_data(sample_size + iv_size + 1);
-
76  uint8_t* sample_data = sample->writable_data();
-
77 
-
78  // Encrypt the data in-place.
-
79  if (!encryptor_->Crypt(sample_data, sample_size, sample_data)) {
-
80  return Status(error::MUXER_FAILURE, "Failed to encrypt the frame.");
-
81  }
-
82 
-
83  // First move the sample data to after the IV; then write the IV and signal
-
84  // byte.
-
85  memmove(sample_data + iv_size + 1, sample_data, sample_size);
-
86  sample_data[0] = 0x01;
-
87  memcpy(sample_data + 1, encryptor_->iv().data(), iv_size);
-
88 
-
89  encryptor_->UpdateIv();
-
90  } else {
-
91  // | 0 | data |
-
92  sample->resize_data(sample_size + 1);
-
93  uint8_t* sample_data = sample->writable_data();
-
94  memmove(sample_data + 1, sample_data, sample_size);
-
95  sample_data[0] = 0x00;
-
96  }
-
97 
-
98  return Status::OK;
-
99 }
+
71 Status Encryptor::AddTrackInfo(mkvmuxer::Track* track) {
+
72  DCHECK(key_);
+
73  return CreateContentEncryption(track, key_.get());
+
74 }
+
75 
+
76 Status Encryptor::EncryptFrame(scoped_refptr<MediaSample> sample,
+
77  bool encrypt_frame) {
+
78  DCHECK(encryptor_);
+
79 
+
80  const size_t sample_size = sample->data_size();
+
81  // We need to parse the frame (which also updates the vpx parser) even if the
+
82  // frame is not encrypted as the next (encrypted) frame may be dependent on
+
83  // this clear frame.
+
84  std::vector<VPxFrameInfo> vpx_frames;
+
85  if (vpx_parser_) {
+
86  if (!vpx_parser_->Parse(sample->data(), sample_size, &vpx_frames)) {
+
87  return Status(error::MUXER_FAILURE, "Failed to parse VPx frame.");
+
88  }
+
89  }
+
90 
+
91  if (encrypt_frame) {
+
92  const size_t iv_size = encryptor_->iv().size();
+
93  if (iv_size != kWebMIvSize) {
+
94  return Status(error::MUXER_FAILURE,
+
95  "Incorrect size WebM encryption IV.");
+
96  }
+
97  if (vpx_frames.size()) {
+
98  // Use partitioned subsample encryption: | signal_byte(3) | iv
+
99  // | num_partitions | partition_offset * n | enc_data |
100 
-
101 Status Encryptor::CreateEncryptor(MuxerListener* muxer_listener,
-
102  KeySource::TrackType track_type,
-
103  KeySource* key_source) {
-
104  scoped_ptr<EncryptionKey> encryption_key(new EncryptionKey());
-
105  Status status = key_source->GetKey(track_type, encryption_key.get());
-
106  if (!status.ok())
-
107  return status;
-
108  if (encryption_key->iv.empty()) {
-
109  if (!AesCryptor::GenerateRandomIv(FOURCC_cenc, &encryption_key->iv))
-
110  return Status(error::INTERNAL_ERROR, "Failed to generate random iv.");
-
111  }
-
112 
-
113  scoped_ptr<AesCtrEncryptor> encryptor(new AesCtrEncryptor());
-
114  const bool initialized =
-
115  encryptor->InitializeWithIv(encryption_key->key, encryption_key->iv);
-
116  if (!initialized)
-
117  return Status(error::INTERNAL_ERROR, "Failed to create the encryptor.");
-
118 
-
119  if (muxer_listener) {
-
120  const bool kInitialEncryptionInfo = true;
-
121  muxer_listener->OnEncryptionInfoReady(
-
122  kInitialEncryptionInfo, FOURCC_cenc, encryption_key->key_id,
-
123  encryptor->iv(), encryption_key->key_system_info);
-
124  }
-
125 
-
126  key_ = encryption_key.Pass();
-
127  encryptor_ = encryptor.Pass();
-
128  return Status::OK;
-
129 }
-
130 
-
131 } // namespace webm
-
132 } // namespace media
-
133 } // namespace shaka
+
101  if (vpx_frames.size() > kWebMMaxSubsamples) {
+
102  return Status(error::MUXER_FAILURE,
+
103  "Maximum number of VPx encryption partitions exceeded.");
+
104  }
+
105  uint8_t num_partitions =
+
106  vpx_frames.size() == 1 ? 1 : vpx_frames.size() * 2;
+
107  size_t header_size = kWebMSignalByteSize + iv_size +
+
108  kWebMNumPartitionsSize +
+
109  (kWebMPartitionOffsetSize * num_partitions);
+
110  sample->resize_data(header_size + sample_size);
+
111  uint8_t* sample_data = sample->writable_data();
+
112  memmove(sample_data + header_size, sample_data, sample_size);
+
113  sample_data[0] = kWebMEncryptedSignal | kWebMPartitionedSignal;
+
114  memcpy(sample_data + kWebMSignalByteSize, encryptor_->iv().data(),
+
115  iv_size);
+
116  sample_data[kWebMSignalByteSize + kWebMIvSize] = num_partitions;
+
117  uint32 partition_offset = 0;
+
118  BufferWriter offsets_buffer(kWebMPartitionOffsetSize * num_partitions);
+
119  for (const auto& vpx_frame : vpx_frames) {
+
120  uint32_t encrypted_size =
+
121  vpx_frame.frame_size - vpx_frame.uncompressed_header_size;
+
122  encrypted_size -= encrypted_size % kAesBlockSize;
+
123  uint32_t clear_size = vpx_frame.frame_size - encrypted_size;
+
124  partition_offset += clear_size;
+
125  offsets_buffer.AppendInt(partition_offset);
+
126  if (encrypted_size > 0) {
+
127  uint8_t* encrypted_ptr = sample_data + header_size + partition_offset;
+
128  if (!encryptor_->Crypt(encrypted_ptr, encrypted_size, encrypted_ptr)) {
+
129  return Status(error::MUXER_FAILURE, "Failed to encrypt the frame.");
+
130  }
+
131  partition_offset += encrypted_size;
+
132  }
+
133  if (num_partitions > 1) {
+
134  offsets_buffer.AppendInt(partition_offset);
+
135  }
+
136  }
+
137  DCHECK_EQ(num_partitions * kWebMPartitionOffsetSize,
+
138  offsets_buffer.Size());
+
139  memcpy(sample_data + kWebMSignalByteSize + kWebMIvSize +
+
140  kWebMNumPartitionsSize,
+
141  offsets_buffer.Buffer(), offsets_buffer.Size());
+
142  } else {
+
143  // Use whole-frame encryption: | signal_byte(1) | iv | enc_data |
+
144 
+
145  sample->resize_data(sample_size + iv_size + kWebMSignalByteSize);
+
146  uint8_t* sample_data = sample->writable_data();
+
147 
+
148  // Encrypt the data in-place.
+
149  if (!encryptor_->Crypt(sample_data, sample_size, sample_data)) {
+
150  return Status(error::MUXER_FAILURE, "Failed to encrypt the frame.");
+
151  }
+
152 
+
153  // First move the sample data to after the IV; then write the IV and
+
154  // signal byte.
+
155  memmove(sample_data + iv_size + kWebMSignalByteSize, sample_data,
+
156  sample_size);
+
157  sample_data[0] = kWebMEncryptedSignal;
+
158  memcpy(sample_data + 1, encryptor_->iv().data(), iv_size);
+
159  }
+
160  encryptor_->UpdateIv();
+
161  } else {
+
162  // Clear sample: | signal_byte(0) | data |
+
163  sample->resize_data(sample_size + 1);
+
164  uint8_t* sample_data = sample->writable_data();
+
165  memmove(sample_data + 1, sample_data, sample_size);
+
166  sample_data[0] = 0x00;
+
167  }
+
168 
+
169  return Status::OK;
+
170 }
+
171 
+
172 Status Encryptor::CreateEncryptor(MuxerListener* muxer_listener,
+
173  KeySource::TrackType track_type,
+
174  Codec codec,
+
175  KeySource* key_source,
+
176  bool webm_subsample_encryption) {
+
177  scoped_ptr<EncryptionKey> encryption_key(new EncryptionKey());
+
178  Status status = key_source->GetKey(track_type, encryption_key.get());
+
179  if (!status.ok())
+
180  return status;
+
181  if (encryption_key->iv.empty()) {
+
182  if (!AesCryptor::GenerateRandomIv(FOURCC_cenc, &encryption_key->iv))
+
183  return Status(error::INTERNAL_ERROR, "Failed to generate random iv.");
+
184  }
+
185  DCHECK_EQ(kWebMIvSize, encryption_key->iv.size());
+
186  scoped_ptr<AesCtrEncryptor> encryptor(new AesCtrEncryptor());
+
187  const bool initialized =
+
188  encryptor->InitializeWithIv(encryption_key->key, encryption_key->iv);
+
189  if (!initialized)
+
190  return Status(error::INTERNAL_ERROR, "Failed to create the encryptor.");
+
191 
+
192  if (webm_subsample_encryption && codec == kCodecVP9) {
+
193  // Allocate VP9 parser to do subsample encryption of VP9.
+
194  vpx_parser_.reset(new VP9Parser);
+
195  }
+
196 
+
197  if (muxer_listener) {
+
198  const bool kInitialEncryptionInfo = true;
+
199  muxer_listener->OnEncryptionInfoReady(
+
200  kInitialEncryptionInfo, FOURCC_cenc, encryption_key->key_id,
+
201  encryptor->iv(), encryption_key->key_system_info);
+
202  }
+
203 
+
204  key_ = encryption_key.Pass();
+
205  encryptor_ = encryptor.Pass();
+
206  return Status::OK;
+
207 }
+
208 
+
209 } // namespace webm
+
210 } // namespace media
+
211 } // namespace shaka
virtual void OnEncryptionInfoReady(bool is_initial_encryption_info, FourCC protection_scheme, const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &iv, const std::vector< ProtectionSystemSpecificInfo > &key_system_info)=0
-
Status AddTrackInfo(mkvmuxer::Track *track)
Definition: encryptor.cc:62
+
Status AddTrackInfo(mkvmuxer::Track *track)
Definition: encryptor.cc:71
+
virtual Status GetKey(TrackType track_type, EncryptionKey *key)=0
+ +
const uint8_t * Buffer() const
Definition: buffer_writer.h:59
+
Status Initialize(MuxerListener *muxer_listener, KeySource::TrackType track_type, Codec codec, KeySource *key_source, bool webm_subsample_encryption)
Definition: encryptor.cc:61
static bool GenerateRandomIv(FourCC protection_scheme, std::vector< uint8_t > *iv)
Definition: aes_cryptor.cc:109
+
Class to parse a vp9 bit stream.
Definition: vp9_parser.h:20
-
Status EncryptFrame(scoped_refptr< MediaSample > sample, bool encrypt_frame)
Definition: encryptor.cc:67
-
Status Initialize(MuxerListener *muxer_listener, KeySource::TrackType track_type, KeySource *key_source)
Definition: encryptor.cc:55
+
Status EncryptFrame(scoped_refptr< MediaSample > sample, bool encrypt_frame)
Definition: encryptor.cc:76
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:31
diff --git a/docs/d5/d9b/vp__codec__configuration__record_8h_source.html b/docs/d5/d9b/vp__codec__configuration__record_8h_source.html index f905e69900..7f34a865e0 100644 --- a/docs/d5/d9b/vp__codec__configuration__record_8h_source.html +++ b/docs/d5/d9b/vp__codec__configuration__record_8h_source.html @@ -147,7 +147,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
65 
68  void WriteWebM(std::vector<uint8_t>* data) const;
69 
-
71  std::string GetCodecString(VideoCodec codec) const;
+
71  std::string GetCodecString(Codec codec) const;
72 
73  // Merges the values from the given configuration. If there are values in
74  // both |*this| and |other|, the values in |other| take precedence.
@@ -217,14 +217,14 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
138 #endif // MEDIA_CODECS_VP_CODEC_CONFIGURATION_RECORD_H_
Class for parsing or writing VP codec configuration record.
void WriteMP4(std::vector< uint8_t > *data) const
+
void WriteWebM(std::vector< uint8_t > *data) const
bool ParseMP4(const std::vector< uint8_t > &data)
-
std::string GetCodecString(VideoCodec codec) const
bool ParseWebM(const std::vector< uint8_t > &data)
diff --git a/docs/d5/d9d/structshaka_1_1media_1_1H265ReferencePictureListModifications.html b/docs/d5/d9d/structshaka_1_1media_1_1H265ReferencePictureListModifications.html index 2b14a44c2b..f652128ae9 100644 --- a/docs/d5/d9d/structshaka_1_1media_1_1H265ReferencePictureListModifications.html +++ b/docs/d5/d9d/structshaka_1_1media_1_1H265ReferencePictureListModifications.html @@ -119,7 +119,7 @@ std::vector< int > l diff --git a/docs/d5/da4/aes__encryptor_8cc_source.html b/docs/d5/da4/aes__encryptor_8cc_source.html index 268b679720..32e6fd9261 100644 --- a/docs/d5/da4/aes__encryptor_8cc_source.html +++ b/docs/d5/da4/aes__encryptor_8cc_source.html @@ -297,7 +297,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dad/structshaka_1_1media_1_1H265ReferencePictureSet.html b/docs/d5/dad/structshaka_1_1media_1_1H265ReferencePictureSet.html index cab0990ced..6376aa7acd 100644 --- a/docs/d5/dad/structshaka_1_1media_1_1H265ReferencePictureSet.html +++ b/docs/d5/dad/structshaka_1_1media_1_1H265ReferencePictureSet.html @@ -127,7 +127,7 @@ int num_delta_pocs diff --git a/docs/d5/db1/classshaka_1_1media_1_1StreamInfo.html b/docs/d5/db1/classshaka_1_1media_1_1StreamInfo.html index c06150233e..63ec66d898 100644 --- a/docs/d5/db1/classshaka_1_1media_1_1StreamInfo.html +++ b/docs/d5/db1/classshaka_1_1media_1_1StreamInfo.html @@ -113,9 +113,9 @@ Inheritance diagram for shaka::media::StreamInfo: - - + + @@ -132,21 +132,27 @@ uint32_t  + + + + - - + + @@ -166,7 +172,7 @@ class 

Public Member Functions

StreamInfo (StreamType stream_type, int track_id, uint32_t time_scale, uint64_t duration, const std::string &codec_string, const std::string &language, const uint8_t *codec_config, size_t codec_config_size, bool is_encrypted)
 
StreamInfo (StreamType stream_type, int track_id, uint32_t time_scale, uint64_t duration, Codec codec, const std::string &codec_string, const uint8_t *codec_config, size_t codec_config_size, const std::string &language, bool is_encrypted)
 
virtual bool IsValidConfig () const =0
 
virtual std::string ToString () const
time_scale ()
uint64_t duration () const
 
+Codec codec () const
 
const std::string & codec_string () const
 
+const std::vector< uint8_t > & codec_config () const
 
const std::string & language () const
 
bool is_encrypted () const
 
-const std::vector< uint8_t > & codec_config () const
 
void set_duration (int duration)
 
+void set_codec (Codec codec)
 
void set_codec_config (const std::vector< uint8_t > &data)
 
base::RefCountedThre

Detailed Description

Abstract class holds stream information.

-

Definition at line 26 of file stream_info.h.

+

Definition at line 53 of file stream_info.h.

Member Function Documentation

@@ -190,7 +196,7 @@ class 
base::RefCountedThre
Returns
true if this object has appropriate configuration values, false otherwise.
-

Implemented in shaka::media::AudioStreamInfo, shaka::media::VideoStreamInfo, and shaka::media::TextStreamInfo.

+

Implemented in shaka::media::TextStreamInfo, shaka::media::AudioStreamInfo, and shaka::media::VideoStreamInfo.

@@ -218,7 +224,7 @@ class 
base::RefCountedThre

Reimplemented in shaka::media::AudioStreamInfo, and shaka::media::VideoStreamInfo.

-

Definition at line 40 of file stream_info.cc.

+

Definition at line 37 of file stream_info.cc.

@@ -229,7 +235,7 @@ class 
base::RefCountedThre diff --git a/docs/d5/db9/classshaka_1_1media_1_1mp2t_1_1EsParserH264.html b/docs/d5/db9/classshaka_1_1media_1_1mp2t_1_1EsParserH264.html index ed866e2245..06e4d78387 100644 --- a/docs/d5/db9/classshaka_1_1media_1_1mp2t_1_1EsParserH264.html +++ b/docs/d5/db9/classshaka_1_1media_1_1mp2t_1_1EsParserH264.html @@ -161,7 +161,7 @@ const
diff --git a/docs/d5/dba/ts__packet_8cc_source.html b/docs/d5/dba/ts__packet_8cc_source.html index 04534f0adb..96683c02af 100644 --- a/docs/d5/dba/ts__packet_8cc_source.html +++ b/docs/d5/dba/ts__packet_8cc_source.html @@ -304,7 +304,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dc1/webm__webvtt__parser_8cc_source.html b/docs/d5/dc1/webm__webvtt__parser_8cc_source.html index d98b828b04..0aeb75f281 100644 --- a/docs/d5/dc1/webm__webvtt__parser_8cc_source.html +++ b/docs/d5/dc1/webm__webvtt__parser_8cc_source.html @@ -171,7 +171,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dc8/structshaka_1_1media_1_1mp4_1_1TrackFragment-members.html b/docs/d5/dc8/structshaka_1_1media_1_1mp4_1_1TrackFragment-members.html index 9fc1bfad3e..f255491920 100644 --- a/docs/d5/dc8/structshaka_1_1media_1_1mp4_1_1TrackFragment-members.html +++ b/docs/d5/dc8/structshaka_1_1media_1_1mp4_1_1TrackFragment-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
diff --git a/docs/d5/dca/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html b/docs/d5/dca/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html index c1f8036848..a64350afb4 100644 --- a/docs/d5/dca/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html +++ b/docs/d5/dca/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d5/dcf/rsa__key_8h_source.html b/docs/d5/dcf/rsa__key_8h_source.html index 093f88b7ca..418d1e3563 100644 --- a/docs/d5/dcf/rsa__key_8h_source.html +++ b/docs/d5/dcf/rsa__key_8h_source.html @@ -165,7 +165,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dda/ts__section__psi_8h_source.html b/docs/d5/dda/ts__section__psi_8h_source.html index c04787b863..f9963a11ba 100644 --- a/docs/d5/dda/ts__section__psi_8h_source.html +++ b/docs/d5/dda/ts__section__psi_8h_source.html @@ -151,7 +151,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/de0/bit__reader_8cc_source.html b/docs/d5/de0/bit__reader_8cc_source.html index 4240a96db8..ede62643fb 100644 --- a/docs/d5/de0/bit__reader_8cc_source.html +++ b/docs/d5/de0/bit__reader_8cc_source.html @@ -199,7 +199,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/de0/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator.html b/docs/d5/de0/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator.html index f25b6fbfcd..99588c0236 100644 --- a/docs/d5/de0/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator.html +++ b/docs/d5/de0/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator.html @@ -306,7 +306,7 @@ class PesPacketGeneratorTe diff --git a/docs/d5/dec/classshaka_1_1media_1_1WebMParserClient.html b/docs/d5/dec/classshaka_1_1media_1_1WebMParserClient.html index 41da6c3a24..33fe59b93d 100644 --- a/docs/d5/dec/classshaka_1_1media_1_1WebMParserClient.html +++ b/docs/d5/dec/classshaka_1_1media_1_1WebMParserClient.html @@ -151,7 +151,7 @@ Protected Member Functions diff --git a/docs/d5/dec/decoder__configuration__record_8cc_source.html b/docs/d5/dec/decoder__configuration__record_8cc_source.html index b27e5f1bbc..f1820d943e 100644 --- a/docs/d5/dec/decoder__configuration__record_8cc_source.html +++ b/docs/d5/dec/decoder__configuration__record_8cc_source.html @@ -120,7 +120,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dec/structshaka_1_1media_1_1mp4_1_1WebVTTConfigurationBox-members.html b/docs/d5/dec/structshaka_1_1media_1_1mp4_1_1WebVTTConfigurationBox-members.html index 0ef5d08392..eb512d3938 100644 --- a/docs/d5/dec/structshaka_1_1media_1_1mp4_1_1WebVTTConfigurationBox-members.html +++ b/docs/d5/dec/structshaka_1_1media_1_1mp4_1_1WebVTTConfigurationBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/def/ts__section__pmt_8h_source.html b/docs/d5/def/ts__section__pmt_8h_source.html index 7666515964..97732f76e7 100644 --- a/docs/d5/def/ts__section__pmt_8h_source.html +++ b/docs/d5/def/ts__section__pmt_8h_source.html @@ -133,7 +133,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dfa/classshaka_1_1media_1_1HlsNotifyMuxerListener.html b/docs/d5/dfa/classshaka_1_1media_1_1HlsNotifyMuxerListener.html index 40f73860b1..d5c8395986 100644 --- a/docs/d5/dfa/classshaka_1_1media_1_1HlsNotifyMuxerListener.html +++ b/docs/d5/dfa/classshaka_1_1media_1_1HlsNotifyMuxerListener.html @@ -535,7 +535,7 @@ Additional Inherited Members diff --git a/docs/d5/dfa/classshaka_1_1media_1_1MediaParser-members.html b/docs/d5/dfa/classshaka_1_1media_1_1MediaParser-members.html index 8768eaf2bb..3f71918cd5 100644 --- a/docs/d5/dfa/classshaka_1_1media_1_1MediaParser-members.html +++ b/docs/d5/dfa/classshaka_1_1media_1_1MediaParser-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dfc/file_8cc_source.html b/docs/d5/dfc/file_8cc_source.html index 060a754fac..d1d91d12bb 100644 --- a/docs/d5/dfc/file_8cc_source.html +++ b/docs/d5/dfc/file_8cc_source.html @@ -380,7 +380,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d03/classshaka_1_1media_1_1AesCbcDecryptor-members.html b/docs/d6/d03/classshaka_1_1media_1_1AesCbcDecryptor-members.html index 9d753fb152..8be76b8682 100644 --- a/docs/d6/d03/classshaka_1_1media_1_1AesCbcDecryptor-members.html +++ b/docs/d6/d03/classshaka_1_1media_1_1AesCbcDecryptor-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d09/aes__pattern__cryptor_8h_source.html b/docs/d6/d09/aes__pattern__cryptor_8h_source.html index 578a5fb5be..bf52c7efe0 100644 --- a/docs/d6/d09/aes__pattern__cryptor_8h_source.html +++ b/docs/d6/d09/aes__pattern__cryptor_8h_source.html @@ -148,7 +148,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d16/text__stream__info_8cc_source.html b/docs/d6/d16/text__stream__info_8cc_source.html index 4401bde8a1..3cae46d121 100644 --- a/docs/d6/d16/text__stream__info_8cc_source.html +++ b/docs/d6/d16/text__stream__info_8cc_source.html @@ -98,41 +98,33 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
9 namespace shaka {
10 namespace media {
11 
- -
13  uint32_t time_scale,
-
14  uint64_t duration,
-
15  const std::string& codec_string,
-
16  const std::string& language,
-
17  const std::string& codec_config,
-
18  uint16_t width,
-
19  uint16_t height)
-
20  : StreamInfo(kStreamText,
-
21  track_id,
-
22  time_scale,
-
23  duration,
-
24  codec_string,
-
25  language,
-
26  reinterpret_cast<const uint8_t*>(codec_config.data()),
-
27  codec_config.size(),
-
28  false),
-
29  width_(width),
-
30  height_(height) {}
-
31 
-
32 TextStreamInfo::~TextStreamInfo() {}
-
33 
- -
35  return true;
-
36 }
-
37 
-
38 } // namespace media
-
39 } // namespace shaka
-
Abstract class holds stream information.
Definition: stream_info.h:26
-
TextStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, const std::string &codec_string, const std::string &language, const std::string &codec_config, uint16_t width, uint16_t height)
-
bool IsValidConfig() const override
+
12 TextStreamInfo::TextStreamInfo(int track_id, uint32_t time_scale,
+
13  uint64_t duration,
+
14  const std::string& codec_string,
+
15  const std::string& codec_config, uint16_t width,
+
16  uint16_t height, const std::string& language)
+
17  : StreamInfo(kStreamText, track_id, time_scale, duration, kCodecText,
+
18  codec_string,
+
19  reinterpret_cast<const uint8_t*>(codec_config.data()),
+
20  codec_config.size(), language, false),
+
21  width_(width),
+
22  height_(height) {}
+
23 
+
24 TextStreamInfo::~TextStreamInfo() {}
+
25 
+ +
27  return true;
+
28 }
+
29 
+
30 } // namespace media
+
31 } // namespace shaka
+
Abstract class holds stream information.
Definition: stream_info.h:53
+
TextStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, const std::string &codec_string, const std::string &codec_config, uint16_t width, uint16_t height, const std::string &language)
+
bool IsValidConfig() const override
diff --git a/docs/d6/d17/es__parser__h264_8cc_source.html b/docs/d6/d17/es__parser__h264_8cc_source.html index 612da6bf4a..1777bf338c 100644 --- a/docs/d6/d17/es__parser__h264_8cc_source.html +++ b/docs/d6/d17/es__parser__h264_8cc_source.html @@ -237,27 +237,28 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
148  AVCDecoderConfigurationRecord::GetCodecString(decoder_config_record[1],
149  decoder_config_record[2],
150  decoder_config_record[3]),
-
151  std::string(), coded_width, coded_height, pixel_width, pixel_height, 0,
-
152  H264ByteToUnitStreamConverter::kUnitStreamNaluLengthSize,
-
153  decoder_config_record.data(), decoder_config_record.size(), false));
-
154  DVLOG(1) << "Profile IDC: " << sps->profile_idc;
-
155  DVLOG(1) << "Level IDC: " << sps->level_idc;
-
156  DVLOG(1) << "log2_max_frame_num_minus4: " << sps->log2_max_frame_num_minus4;
-
157 
-
158  // Video config notification.
-
159  new_stream_info_cb_.Run(last_video_decoder_config_);
-
160 
-
161  return true;
-
162 }
-
163 
-
164 } // namespace mp2t
-
165 } // namespace media
-
166 } // namespace shaka
+
151  decoder_config_record.data(), decoder_config_record.size(), coded_width,
+
152  coded_height, pixel_width, pixel_height, 0,
+
153  H264ByteToUnitStreamConverter::kUnitStreamNaluLengthSize, std::string(),
+
154  false));
+
155  DVLOG(1) << "Profile IDC: " << sps->profile_idc;
+
156  DVLOG(1) << "Level IDC: " << sps->level_idc;
+
157  DVLOG(1) << "log2_max_frame_num_minus4: " << sps->log2_max_frame_num_minus4;
+
158 
+
159  // Video config notification.
+
160  new_stream_info_cb_.Run(last_video_decoder_config_);
+
161 
+
162  return true;
+
163 }
+
164 
+
165 } // namespace mp2t
+
166 } // namespace media
+
167 } // namespace shaka
diff --git a/docs/d6/d1a/structshaka_1_1media_1_1mp4_1_1MovieHeader.html b/docs/d6/d1a/structshaka_1_1media_1_1mp4_1_1MovieHeader.html index 27439b46f9..cb27a73c85 100644 --- a/docs/d6/d1a/structshaka_1_1media_1_1mp4_1_1MovieHeader.html +++ b/docs/d6/d1a/structshaka_1_1media_1_1mp4_1_1MovieHeader.html @@ -200,7 +200,7 @@ Additional Inherited Members diff --git a/docs/d6/d1a/ts__packet__writer__util_8cc_source.html b/docs/d6/d1a/ts__packet__writer__util_8cc_source.html index 3280a70b05..29fc25121a 100644 --- a/docs/d6/d1a/ts__packet__writer__util_8cc_source.html +++ b/docs/d6/d1a/ts__packet__writer__util_8cc_source.html @@ -255,7 +255,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d26/structshaka_1_1media_1_1VideoStreamInfoParameters.html b/docs/d6/d26/structshaka_1_1media_1_1VideoStreamInfoParameters.html index 4c1e4d6f13..e985584cb4 100644 --- a/docs/d6/d26/structshaka_1_1media_1_1VideoStreamInfoParameters.html +++ b/docs/d6/d26/structshaka_1_1media_1_1VideoStreamInfoParameters.html @@ -105,9 +105,9 @@ uint32_t time_scale uint64_t duration   - -VideoCodec codec -  + +Codec codec std::string codec_string   @@ -146,7 +146,7 @@ bool is_encrypted diff --git a/docs/d6/d2e/mpd__notifier__util_8cc_source.html b/docs/d6/d2e/mpd__notifier__util_8cc_source.html index e05886de1e..08d0cea45c 100644 --- a/docs/d6/d2e/mpd__notifier__util_8cc_source.html +++ b/docs/d6/d2e/mpd__notifier__util_8cc_source.html @@ -170,7 +170,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d32/classshaka_1_1media_1_1TextTrack-members.html b/docs/d6/d32/classshaka_1_1media_1_1TextTrack-members.html index 96f4f6e490..366d0af5f1 100644 --- a/docs/d6/d32/classshaka_1_1media_1_1TextTrack-members.html +++ b/docs/d6/d32/classshaka_1_1media_1_1TextTrack-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d35/webm__content__encodings_8cc_source.html b/docs/d6/d35/webm__content__encodings_8cc_source.html index 031367b393..9bf5cf5dd8 100644 --- a/docs/d6/d35/webm__content__encodings_8cc_source.html +++ b/docs/d6/d35/webm__content__encodings_8cc_source.html @@ -120,7 +120,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d3b/chunk__info__iterator_8cc_source.html b/docs/d6/d3b/chunk__info__iterator_8cc_source.html index 926f43583e..3024bdbf9d 100644 --- a/docs/d6/d3b/chunk__info__iterator_8cc_source.html +++ b/docs/d6/d3b/chunk__info__iterator_8cc_source.html @@ -171,7 +171,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d41/encrypting__fragmenter_8cc_source.html b/docs/d6/d41/encrypting__fragmenter_8cc_source.html index 4660f55d4e..14569698c3 100644 --- a/docs/d6/d41/encrypting__fragmenter_8cc_source.html +++ b/docs/d6/d41/encrypting__fragmenter_8cc_source.html @@ -130,362 +130,357 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
41  subsamples->push_back(SubsampleEntry(clear_bytes, cipher_bytes));
42 }
43 
-
44 VideoCodec GetVideoCodec(const StreamInfo& stream_info) {
-
45  if (stream_info.stream_type() != kStreamVideo)
-
46  return kUnknownVideoCodec;
-
47  const VideoStreamInfo& video_stream_info =
-
48  static_cast<const VideoStreamInfo&>(stream_info);
-
49  return video_stream_info.codec();
-
50 }
-
51 
-
52 uint8_t GetNaluLengthSize(const StreamInfo& stream_info) {
-
53  if (stream_info.stream_type() != kStreamVideo)
-
54  return 0;
-
55 
-
56  const VideoStreamInfo& video_stream_info =
-
57  static_cast<const VideoStreamInfo&>(stream_info);
-
58  return video_stream_info.nalu_length_size();
-
59 }
-
60 } // namespace
-
61 
- -
63  scoped_refptr<StreamInfo> info,
-
64  TrackFragment* traf,
-
65  scoped_ptr<EncryptionKey> encryption_key,
-
66  int64_t clear_time,
-
67  FourCC protection_scheme,
-
68  uint8_t crypt_byte_block,
-
69  uint8_t skip_byte_block,
-
70  MuxerListener* listener)
-
71  : Fragmenter(info, traf),
-
72  info_(info),
-
73  encryption_key_(encryption_key.Pass()),
-
74  nalu_length_size_(GetNaluLengthSize(*info)),
-
75  video_codec_(GetVideoCodec(*info)),
-
76  clear_time_(clear_time),
-
77  protection_scheme_(protection_scheme),
-
78  crypt_byte_block_(crypt_byte_block),
-
79  skip_byte_block_(skip_byte_block),
-
80  listener_(listener) {
-
81  DCHECK(encryption_key_);
-
82  switch (video_codec_) {
-
83  case kCodecVP8:
-
84  vpx_parser_.reset(new VP8Parser);
-
85  break;
-
86  case kCodecVP9:
-
87  vpx_parser_.reset(new VP9Parser);
-
88  break;
-
89  case kCodecH264:
-
90  header_parser_.reset(new H264VideoSliceHeaderParser);
+
44 Codec GetCodec(const StreamInfo& stream_info) {
+
45  if (stream_info.stream_type() != kStreamVideo) return kUnknownCodec;
+
46  const VideoStreamInfo& video_stream_info =
+
47  static_cast<const VideoStreamInfo&>(stream_info);
+
48  return video_stream_info.codec();
+
49 }
+
50 
+
51 uint8_t GetNaluLengthSize(const StreamInfo& stream_info) {
+
52  if (stream_info.stream_type() != kStreamVideo)
+
53  return 0;
+
54 
+
55  const VideoStreamInfo& video_stream_info =
+
56  static_cast<const VideoStreamInfo&>(stream_info);
+
57  return video_stream_info.nalu_length_size();
+
58 }
+
59 } // namespace
+
60 
+ +
62  scoped_refptr<StreamInfo> info, TrackFragment* traf,
+
63  scoped_ptr<EncryptionKey> encryption_key, int64_t clear_time,
+
64  FourCC protection_scheme, uint8_t crypt_byte_block, uint8_t skip_byte_block,
+
65  MuxerListener* listener)
+
66  : Fragmenter(info, traf),
+
67  info_(info),
+
68  encryption_key_(encryption_key.Pass()),
+
69  nalu_length_size_(GetNaluLengthSize(*info)),
+
70  video_codec_(GetCodec(*info)),
+
71  clear_time_(clear_time),
+
72  protection_scheme_(protection_scheme),
+
73  crypt_byte_block_(crypt_byte_block),
+
74  skip_byte_block_(skip_byte_block),
+
75  listener_(listener) {
+
76  DCHECK(encryption_key_);
+
77  switch (video_codec_) {
+
78  case kCodecVP8:
+
79  vpx_parser_.reset(new VP8Parser);
+
80  break;
+
81  case kCodecVP9:
+
82  vpx_parser_.reset(new VP9Parser);
+
83  break;
+
84  case kCodecH264:
+
85  header_parser_.reset(new H264VideoSliceHeaderParser);
+
86  break;
+
87  case kCodecHVC1:
+
88  FALLTHROUGH_INTENDED;
+
89  case kCodecHEV1:
+
90  header_parser_.reset(new H265VideoSliceHeaderParser);
91  break;
-
92  case kCodecHVC1:
-
93  FALLTHROUGH_INTENDED;
-
94  case kCodecHEV1:
-
95  header_parser_.reset(new H265VideoSliceHeaderParser);
-
96  break;
-
97  default:
-
98  if (nalu_length_size_ > 0) {
-
99  LOG(WARNING) << "Unknown video codec '" << video_codec_
-
100  << "', whole subsamples will be encrypted.";
-
101  }
-
102  }
-
103 }
-
104 
-
105 EncryptingFragmenter::~EncryptingFragmenter() {}
-
106 
-
107 Status EncryptingFragmenter::AddSample(scoped_refptr<MediaSample> sample) {
-
108  DCHECK(sample);
-
109  if (!fragment_initialized()) {
-
110  Status status = InitializeFragment(sample->dts());
+
92  default:
+
93  if (nalu_length_size_ > 0) {
+
94  LOG(WARNING) << "Unknown video codec '" << video_codec_
+
95  << "', whole subsamples will be encrypted.";
+
96  }
+
97  }
+
98 }
+
99 
+
100 EncryptingFragmenter::~EncryptingFragmenter() {}
+
101 
+
102 Status EncryptingFragmenter::AddSample(scoped_refptr<MediaSample> sample) {
+
103  DCHECK(sample);
+
104  if (!fragment_initialized()) {
+
105  Status status = InitializeFragment(sample->dts());
+
106  if (!status.ok())
+
107  return status;
+
108  }
+
109  if (encryptor_) {
+
110  Status status = EncryptSample(sample);
111  if (!status.ok())
112  return status;
113  }
-
114  if (encryptor_) {
-
115  Status status = EncryptSample(sample);
-
116  if (!status.ok())
-
117  return status;
-
118  }
-
119  return Fragmenter::AddSample(sample);
-
120 }
+
114  return Fragmenter::AddSample(sample);
+
115 }
+
116 
+ +
118  Status status = Fragmenter::InitializeFragment(first_sample_dts);
+
119  if (!status.ok())
+
120  return status;
121 
- -
123  Status status = Fragmenter::InitializeFragment(first_sample_dts);
-
124  if (!status.ok())
-
125  return status;
-
126 
-
127  if (header_parser_ && !header_parser_->Initialize(info_->codec_config()))
-
128  return Status(error::MUXER_FAILURE, "Fail to read SPS and PPS data.");
-
129 
-
130  traf()->auxiliary_size.sample_info_sizes.clear();
-
131  traf()->auxiliary_offset.offsets.clear();
-
132  if (IsSubsampleEncryptionRequired()) {
-
133  traf()->sample_encryption.flags |=
-
134  SampleEncryption::kUseSubsampleEncryption;
-
135  }
-
136  traf()->sample_encryption.sample_encryption_entries.clear();
-
137 
-
138  const bool enable_encryption = clear_time_ <= 0;
-
139  if (!enable_encryption) {
-
140  // This fragment should be in clear text.
-
141  // At most two sample description entries, an encrypted entry and a clear
-
142  // entry, are generated. The 1-based clear entry index is always 2.
-
143  const uint32_t kClearSampleDescriptionIndex = 2;
-
144 
-
145  traf()->header.flags |=
-
146  TrackFragmentHeader::kSampleDescriptionIndexPresentMask;
-
147  traf()->header.sample_description_index = kClearSampleDescriptionIndex;
-
148  } else {
-
149  if (listener_)
-
150  listener_->OnEncryptionStart();
-
151  }
-
152  return PrepareFragmentForEncryption(enable_encryption);
-
153 }
-
154 
- -
156  if (encryptor_) {
-
157  DCHECK_LE(clear_time_, 0);
- -
159  } else {
-
160  DCHECK_GT(clear_time_, 0);
-
161  clear_time_ -= fragment_duration();
-
162  }
- +
122  if (header_parser_ && !header_parser_->Initialize(info_->codec_config()))
+
123  return Status(error::MUXER_FAILURE, "Fail to read SPS and PPS data.");
+
124 
+
125  traf()->auxiliary_size.sample_info_sizes.clear();
+
126  traf()->auxiliary_offset.offsets.clear();
+
127  if (IsSubsampleEncryptionRequired()) {
+
128  traf()->sample_encryption.flags |=
+
129  SampleEncryption::kUseSubsampleEncryption;
+
130  }
+
131  traf()->sample_encryption.sample_encryption_entries.clear();
+
132 
+
133  const bool enable_encryption = clear_time_ <= 0;
+
134  if (!enable_encryption) {
+
135  // This fragment should be in clear text.
+
136  // At most two sample description entries, an encrypted entry and a clear
+
137  // entry, are generated. The 1-based clear entry index is always 2.
+
138  const uint32_t kClearSampleDescriptionIndex = 2;
+
139 
+
140  traf()->header.flags |=
+
141  TrackFragmentHeader::kSampleDescriptionIndexPresentMask;
+
142  traf()->header.sample_description_index = kClearSampleDescriptionIndex;
+
143  } else {
+
144  if (listener_)
+
145  listener_->OnEncryptionStart();
+
146  }
+
147  return PrepareFragmentForEncryption(enable_encryption);
+
148 }
+
149 
+ +
151  if (encryptor_) {
+
152  DCHECK_LE(clear_time_, 0);
+ +
154  } else {
+
155  DCHECK_GT(clear_time_, 0);
+
156  clear_time_ -= fragment_duration();
+
157  }
+ +
159 }
+
160 
+ +
162  bool enable_encryption) {
+
163  return (!enable_encryption || encryptor_) ? Status::OK : CreateEncryptor();
164 }
165 
- -
167  bool enable_encryption) {
-
168  return (!enable_encryption || encryptor_) ? Status::OK : CreateEncryptor();
-
169 }
-
170 
- -
172  // The offset will be adjusted in Segmenter after knowing moof size.
-
173  traf()->auxiliary_offset.offsets.push_back(0);
-
174 
-
175  // For 'cbcs' scheme, Constant IVs SHALL be used.
-
176  const uint8_t per_sample_iv_size =
-
177  (protection_scheme_ == FOURCC_cbcs) ? 0 :
-
178  static_cast<uint8_t>(encryptor_->iv().size());
-
179  traf()->sample_encryption.iv_size = per_sample_iv_size;
-
180 
-
181  // Optimize saiz box.
-
182  SampleAuxiliaryInformationSize& saiz = traf()->auxiliary_size;
-
183  saiz.sample_count = traf()->runs[0].sample_sizes.size();
-
184  if (!saiz.sample_info_sizes.empty()) {
-
185  if (!OptimizeSampleEntries(&saiz.sample_info_sizes,
-
186  &saiz.default_sample_info_size)) {
-
187  saiz.default_sample_info_size = 0;
-
188  }
-
189  } else {
-
190  // |sample_info_sizes| table is filled in only for subsample encryption,
-
191  // otherwise |sample_info_size| is just the IV size.
-
192  DCHECK(!IsSubsampleEncryptionRequired());
-
193  saiz.default_sample_info_size = static_cast<uint8_t>(per_sample_iv_size);
-
194  }
-
195 
-
196  // It should only happen with full sample encryption + constant iv, i.e.
-
197  // 'cbcs' applying to audio.
-
198  if (saiz.default_sample_info_size == 0 && saiz.sample_info_sizes.empty()) {
-
199  DCHECK_EQ(protection_scheme_, FOURCC_cbcs);
-
200  DCHECK(!IsSubsampleEncryptionRequired());
-
201  // ISO/IEC 23001-7:2016(E) The sample auxiliary information would then be
-
202  // empty and should be emitted. Clear saiz and saio boxes so they are not
-
203  // written.
-
204  saiz.sample_count = 0;
-
205  traf()->auxiliary_offset.offsets.clear();
-
206  }
-
207 }
-
208 
- -
210  DCHECK(encryption_key_);
-
211  scoped_ptr<AesCryptor> encryptor;
-
212  switch (protection_scheme_) {
-
213  case FOURCC_cenc:
-
214  encryptor.reset(new AesCtrEncryptor);
-
215  break;
-
216  case FOURCC_cbc1:
-
217  encryptor.reset(new AesCbcEncryptor(kNoPadding));
-
218  break;
-
219  case FOURCC_cens:
-
220  encryptor.reset(new AesPatternCryptor(
-
221  crypt_byte_block(), skip_byte_block(),
- -
223  AesCryptor::kDontUseConstantIv,
-
224  scoped_ptr<AesCryptor>(new AesCtrEncryptor())));
-
225  break;
-
226  case FOURCC_cbcs:
-
227  encryptor.reset(new AesPatternCryptor(
-
228  crypt_byte_block(), skip_byte_block(),
- -
230  AesCryptor::kUseConstantIv,
-
231  scoped_ptr<AesCryptor>(new AesCbcEncryptor(kNoPadding))));
-
232  break;
-
233  default:
-
234  return Status(error::MUXER_FAILURE, "Unsupported protection scheme.");
-
235  }
-
236 
-
237  DCHECK(!encryption_key_->iv.empty());
-
238  const bool initialized =
-
239  encryptor->InitializeWithIv(encryption_key_->key, encryption_key_->iv);
-
240  if (!initialized)
-
241  return Status(error::MUXER_FAILURE, "Failed to create the encryptor.");
-
242  encryptor_ = encryptor.Pass();
-
243  return Status::OK;
+ +
167  // The offset will be adjusted in Segmenter after knowing moof size.
+
168  traf()->auxiliary_offset.offsets.push_back(0);
+
169 
+
170  // For 'cbcs' scheme, Constant IVs SHALL be used.
+
171  const uint8_t per_sample_iv_size =
+
172  (protection_scheme_ == FOURCC_cbcs) ? 0 :
+
173  static_cast<uint8_t>(encryptor_->iv().size());
+
174  traf()->sample_encryption.iv_size = per_sample_iv_size;
+
175 
+
176  // Optimize saiz box.
+
177  SampleAuxiliaryInformationSize& saiz = traf()->auxiliary_size;
+
178  saiz.sample_count = traf()->runs[0].sample_sizes.size();
+
179  if (!saiz.sample_info_sizes.empty()) {
+
180  if (!OptimizeSampleEntries(&saiz.sample_info_sizes,
+
181  &saiz.default_sample_info_size)) {
+
182  saiz.default_sample_info_size = 0;
+
183  }
+
184  } else {
+
185  // |sample_info_sizes| table is filled in only for subsample encryption,
+
186  // otherwise |sample_info_size| is just the IV size.
+
187  DCHECK(!IsSubsampleEncryptionRequired());
+
188  saiz.default_sample_info_size = static_cast<uint8_t>(per_sample_iv_size);
+
189  }
+
190 
+
191  // It should only happen with full sample encryption + constant iv, i.e.
+
192  // 'cbcs' applying to audio.
+
193  if (saiz.default_sample_info_size == 0 && saiz.sample_info_sizes.empty()) {
+
194  DCHECK_EQ(protection_scheme_, FOURCC_cbcs);
+
195  DCHECK(!IsSubsampleEncryptionRequired());
+
196  // ISO/IEC 23001-7:2016(E) The sample auxiliary information would then be
+
197  // empty and should be emitted. Clear saiz and saio boxes so they are not
+
198  // written.
+
199  saiz.sample_count = 0;
+
200  traf()->auxiliary_offset.offsets.clear();
+
201  }
+
202 }
+
203 
+ +
205  DCHECK(encryption_key_);
+
206  scoped_ptr<AesCryptor> encryptor;
+
207  switch (protection_scheme_) {
+
208  case FOURCC_cenc:
+
209  encryptor.reset(new AesCtrEncryptor);
+
210  break;
+
211  case FOURCC_cbc1:
+
212  encryptor.reset(new AesCbcEncryptor(kNoPadding));
+
213  break;
+
214  case FOURCC_cens:
+
215  encryptor.reset(new AesPatternCryptor(
+
216  crypt_byte_block(), skip_byte_block(),
+ +
218  AesCryptor::kDontUseConstantIv,
+
219  scoped_ptr<AesCryptor>(new AesCtrEncryptor())));
+
220  break;
+
221  case FOURCC_cbcs:
+
222  encryptor.reset(new AesPatternCryptor(
+
223  crypt_byte_block(), skip_byte_block(),
+ +
225  AesCryptor::kUseConstantIv,
+
226  scoped_ptr<AesCryptor>(new AesCbcEncryptor(kNoPadding))));
+
227  break;
+
228  default:
+
229  return Status(error::MUXER_FAILURE, "Unsupported protection scheme.");
+
230  }
+
231 
+
232  DCHECK(!encryption_key_->iv.empty());
+
233  const bool initialized =
+
234  encryptor->InitializeWithIv(encryption_key_->key, encryption_key_->iv);
+
235  if (!initialized)
+
236  return Status(error::MUXER_FAILURE, "Failed to create the encryptor.");
+
237  encryptor_ = encryptor.Pass();
+
238  return Status::OK;
+
239 }
+
240 
+
241 void EncryptingFragmenter::EncryptBytes(uint8_t* data, uint32_t size) {
+
242  DCHECK(encryptor_);
+
243  CHECK(encryptor_->Crypt(data, size, data));
244 }
245 
-
246 void EncryptingFragmenter::EncryptBytes(uint8_t* data, uint32_t size) {
+
246 Status EncryptingFragmenter::EncryptSample(scoped_refptr<MediaSample> sample) {
247  DCHECK(encryptor_);
-
248  CHECK(encryptor_->Crypt(data, size, data));
-
249 }
-
250 
-
251 Status EncryptingFragmenter::EncryptSample(scoped_refptr<MediaSample> sample) {
-
252  DCHECK(encryptor_);
-
253 
-
254  SampleEncryptionEntry sample_encryption_entry;
-
255  // For 'cbcs' scheme, Constant IVs SHALL be used.
-
256  if (protection_scheme_ != FOURCC_cbcs)
-
257  sample_encryption_entry.initialization_vector = encryptor_->iv();
-
258  uint8_t* data = sample->writable_data();
-
259  if (IsSubsampleEncryptionRequired()) {
-
260  if (vpx_parser_) {
-
261  std::vector<VPxFrameInfo> vpx_frames;
-
262  if (!vpx_parser_->Parse(sample->data(), sample->data_size(),
-
263  &vpx_frames)) {
-
264  return Status(error::MUXER_FAILURE, "Failed to parse vpx frame.");
-
265  }
-
266 
-
267  const bool is_superframe = vpx_frames.size() > 1;
-
268  for (const VPxFrameInfo& frame : vpx_frames) {
-
269  SubsampleEntry subsample;
-
270  subsample.clear_bytes =
-
271  static_cast<uint16_t>(frame.uncompressed_header_size);
-
272  subsample.cipher_bytes =
-
273  frame.frame_size - frame.uncompressed_header_size;
-
274 
-
275  // "VP Codec ISO Media File Format Binding" document requires that the
-
276  // encrypted bytes of each frame within the superframe must be block
-
277  // aligned so that the counter state can be computed for each frame
-
278  // within the superframe.
-
279  // ISO/IEC 23001-7:2016 10.2 'cbc1' 10.3 'cens'
-
280  // The BytesOfProtectedData size SHALL be a multiple of 16 bytes to
-
281  // avoid partial blocks in Subsamples.
-
282  if (is_superframe || protection_scheme_ == FOURCC_cbc1 ||
-
283  protection_scheme_ == FOURCC_cens) {
-
284  const uint16_t misalign_bytes =
-
285  subsample.cipher_bytes % kCencBlockSize;
-
286  subsample.clear_bytes += misalign_bytes;
-
287  subsample.cipher_bytes -= misalign_bytes;
-
288  }
-
289 
-
290  sample_encryption_entry.subsamples.push_back(subsample);
-
291  if (subsample.cipher_bytes > 0)
-
292  EncryptBytes(data + subsample.clear_bytes, subsample.cipher_bytes);
-
293  data += frame.frame_size;
-
294  }
-
295  // Add subsample for the superframe index if exists.
-
296  if (is_superframe) {
-
297  size_t index_size = sample->data() + sample->data_size() - data;
-
298  DCHECK_LE(index_size, 2 + vpx_frames.size() * 4);
-
299  DCHECK_GE(index_size, 2 + vpx_frames.size() * 1);
-
300  SubsampleEntry subsample;
-
301  subsample.clear_bytes = static_cast<uint16_t>(index_size);
-
302  subsample.cipher_bytes = 0;
-
303  sample_encryption_entry.subsamples.push_back(subsample);
-
304  }
-
305  } else {
-
306  const Nalu::CodecType nalu_type =
-
307  (video_codec_ == kCodecHVC1 || video_codec_ == kCodecHEV1)
-
308  ? Nalu::kH265
-
309  : Nalu::kH264;
-
310  NaluReader reader(nalu_type, nalu_length_size_, data,
-
311  sample->data_size());
-
312 
-
313  // Store the current length of clear data. This is used to squash
-
314  // multiple unencrypted NAL units into fewer subsample entries.
-
315  uint64_t accumulated_clear_bytes = 0;
-
316 
-
317  Nalu nalu;
-
318  NaluReader::Result result;
-
319  while ((result = reader.Advance(&nalu)) == NaluReader::kOk) {
-
320  if (nalu.is_video_slice()) {
-
321  // For video-slice NAL units, encrypt the video slice. This skips
-
322  // the frame header. If this is an unrecognized codec (e.g. H.265),
-
323  // the whole NAL unit will be encrypted.
-
324  const int64_t video_slice_header_size =
-
325  header_parser_ ? header_parser_->GetHeaderSize(nalu) : 0;
-
326  if (video_slice_header_size < 0)
-
327  return Status(error::MUXER_FAILURE, "Failed to read slice header.");
-
328 
-
329  uint64_t current_clear_bytes =
-
330  nalu.header_size() + video_slice_header_size;
-
331  uint64_t cipher_bytes = nalu.payload_size() - video_slice_header_size;
-
332 
-
333  // ISO/IEC 23001-7:2016 10.2 'cbc1' 10.3 'cens'
-
334  // The BytesOfProtectedData size SHALL be a multiple of 16 bytes to
-
335  // avoid partial blocks in Subsamples.
-
336  if (protection_scheme_ == FOURCC_cbc1 ||
-
337  protection_scheme_ == FOURCC_cens) {
-
338  const uint16_t misalign_bytes = cipher_bytes % kCencBlockSize;
-
339  current_clear_bytes += misalign_bytes;
-
340  cipher_bytes -= misalign_bytes;
-
341  }
-
342 
-
343  const uint8_t* nalu_data = nalu.data() + current_clear_bytes;
-
344  EncryptBytes(const_cast<uint8_t*>(nalu_data), cipher_bytes);
-
345 
-
346  AddSubsamples(
-
347  accumulated_clear_bytes + nalu_length_size_ + current_clear_bytes,
-
348  cipher_bytes, &sample_encryption_entry.subsamples);
-
349  accumulated_clear_bytes = 0;
-
350  } else {
-
351  // For non-video-slice NAL units, don't encrypt.
-
352  accumulated_clear_bytes +=
-
353  nalu_length_size_ + nalu.header_size() + nalu.payload_size();
-
354  }
-
355  }
-
356  if (result != NaluReader::kEOStream)
-
357  return Status(error::MUXER_FAILURE, "Failed to parse NAL units.");
-
358  AddSubsamples(accumulated_clear_bytes, 0,
-
359  &sample_encryption_entry.subsamples);
-
360  }
-
361  DCHECK_EQ(sample_encryption_entry.GetTotalSizeOfSubsamples(),
-
362  sample->data_size());
-
363 
-
364  // The length of per-sample auxiliary datum, defined in CENC ch. 7.
-
365  traf()->auxiliary_size.sample_info_sizes.push_back(
-
366  sample_encryption_entry.ComputeSize());
-
367  } else {
-
368  DCHECK_LE(crypt_byte_block(), 1u);
-
369  DCHECK_EQ(skip_byte_block(), 0u);
-
370  EncryptBytes(data, sample->data_size());
-
371  }
-
372 
-
373  traf()->sample_encryption.sample_encryption_entries.push_back(
-
374  sample_encryption_entry);
-
375  encryptor_->UpdateIv();
-
376  return Status::OK;
-
377 }
-
378 
-
379 bool EncryptingFragmenter::IsSubsampleEncryptionRequired() {
-
380  return vpx_parser_ || nalu_length_size_ != 0;
-
381 }
-
382 
-
383 } // namespace mp4
-
384 } // namespace media
-
385 } // namespace shaka
+
248 
+
249  SampleEncryptionEntry sample_encryption_entry;
+
250  // For 'cbcs' scheme, Constant IVs SHALL be used.
+
251  if (protection_scheme_ != FOURCC_cbcs)
+
252  sample_encryption_entry.initialization_vector = encryptor_->iv();
+
253  uint8_t* data = sample->writable_data();
+
254  if (IsSubsampleEncryptionRequired()) {
+
255  if (vpx_parser_) {
+
256  std::vector<VPxFrameInfo> vpx_frames;
+
257  if (!vpx_parser_->Parse(sample->data(), sample->data_size(),
+
258  &vpx_frames)) {
+
259  return Status(error::MUXER_FAILURE, "Failed to parse vpx frame.");
+
260  }
+
261 
+
262  const bool is_superframe = vpx_frames.size() > 1;
+
263  for (const VPxFrameInfo& frame : vpx_frames) {
+
264  SubsampleEntry subsample;
+
265  subsample.clear_bytes =
+
266  static_cast<uint16_t>(frame.uncompressed_header_size);
+
267  subsample.cipher_bytes =
+
268  frame.frame_size - frame.uncompressed_header_size;
+
269 
+
270  // "VP Codec ISO Media File Format Binding" document requires that the
+
271  // encrypted bytes of each frame within the superframe must be block
+
272  // aligned so that the counter state can be computed for each frame
+
273  // within the superframe.
+
274  // ISO/IEC 23001-7:2016 10.2 'cbc1' 10.3 'cens'
+
275  // The BytesOfProtectedData size SHALL be a multiple of 16 bytes to
+
276  // avoid partial blocks in Subsamples.
+
277  if (is_superframe || protection_scheme_ == FOURCC_cbc1 ||
+
278  protection_scheme_ == FOURCC_cens) {
+
279  const uint16_t misalign_bytes =
+
280  subsample.cipher_bytes % kCencBlockSize;
+
281  subsample.clear_bytes += misalign_bytes;
+
282  subsample.cipher_bytes -= misalign_bytes;
+
283  }
+
284 
+
285  sample_encryption_entry.subsamples.push_back(subsample);
+
286  if (subsample.cipher_bytes > 0)
+
287  EncryptBytes(data + subsample.clear_bytes, subsample.cipher_bytes);
+
288  data += frame.frame_size;
+
289  }
+
290  // Add subsample for the superframe index if exists.
+
291  if (is_superframe) {
+
292  size_t index_size = sample->data() + sample->data_size() - data;
+
293  DCHECK_LE(index_size, 2 + vpx_frames.size() * 4);
+
294  DCHECK_GE(index_size, 2 + vpx_frames.size() * 1);
+
295  SubsampleEntry subsample;
+
296  subsample.clear_bytes = static_cast<uint16_t>(index_size);
+
297  subsample.cipher_bytes = 0;
+
298  sample_encryption_entry.subsamples.push_back(subsample);
+
299  }
+
300  } else {
+
301  const Nalu::CodecType nalu_type =
+
302  (video_codec_ == kCodecHVC1 || video_codec_ == kCodecHEV1)
+
303  ? Nalu::kH265
+
304  : Nalu::kH264;
+
305  NaluReader reader(nalu_type, nalu_length_size_, data,
+
306  sample->data_size());
+
307 
+
308  // Store the current length of clear data. This is used to squash
+
309  // multiple unencrypted NAL units into fewer subsample entries.
+
310  uint64_t accumulated_clear_bytes = 0;
+
311 
+
312  Nalu nalu;
+
313  NaluReader::Result result;
+
314  while ((result = reader.Advance(&nalu)) == NaluReader::kOk) {
+
315  if (nalu.is_video_slice()) {
+
316  // For video-slice NAL units, encrypt the video slice. This skips
+
317  // the frame header. If this is an unrecognized codec (e.g. H.265),
+
318  // the whole NAL unit will be encrypted.
+
319  const int64_t video_slice_header_size =
+
320  header_parser_ ? header_parser_->GetHeaderSize(nalu) : 0;
+
321  if (video_slice_header_size < 0)
+
322  return Status(error::MUXER_FAILURE, "Failed to read slice header.");
+
323 
+
324  uint64_t current_clear_bytes =
+
325  nalu.header_size() + video_slice_header_size;
+
326  uint64_t cipher_bytes = nalu.payload_size() - video_slice_header_size;
+
327 
+
328  // ISO/IEC 23001-7:2016 10.2 'cbc1' 10.3 'cens'
+
329  // The BytesOfProtectedData size SHALL be a multiple of 16 bytes to
+
330  // avoid partial blocks in Subsamples.
+
331  if (protection_scheme_ == FOURCC_cbc1 ||
+
332  protection_scheme_ == FOURCC_cens) {
+
333  const uint16_t misalign_bytes = cipher_bytes % kCencBlockSize;
+
334  current_clear_bytes += misalign_bytes;
+
335  cipher_bytes -= misalign_bytes;
+
336  }
+
337 
+
338  const uint8_t* nalu_data = nalu.data() + current_clear_bytes;
+
339  EncryptBytes(const_cast<uint8_t*>(nalu_data), cipher_bytes);
+
340 
+
341  AddSubsamples(
+
342  accumulated_clear_bytes + nalu_length_size_ + current_clear_bytes,
+
343  cipher_bytes, &sample_encryption_entry.subsamples);
+
344  accumulated_clear_bytes = 0;
+
345  } else {
+
346  // For non-video-slice NAL units, don't encrypt.
+
347  accumulated_clear_bytes +=
+
348  nalu_length_size_ + nalu.header_size() + nalu.payload_size();
+
349  }
+
350  }
+
351  if (result != NaluReader::kEOStream)
+
352  return Status(error::MUXER_FAILURE, "Failed to parse NAL units.");
+
353  AddSubsamples(accumulated_clear_bytes, 0,
+
354  &sample_encryption_entry.subsamples);
+
355  }
+
356  DCHECK_EQ(sample_encryption_entry.GetTotalSizeOfSubsamples(),
+
357  sample->data_size());
+
358 
+
359  // The length of per-sample auxiliary datum, defined in CENC ch. 7.
+
360  traf()->auxiliary_size.sample_info_sizes.push_back(
+
361  sample_encryption_entry.ComputeSize());
+
362  } else {
+
363  DCHECK_LE(crypt_byte_block(), 1u);
+
364  DCHECK_EQ(skip_byte_block(), 0u);
+
365  EncryptBytes(data, sample->data_size());
+
366  }
+
367 
+
368  traf()->sample_encryption.sample_encryption_entries.push_back(
+
369  sample_encryption_entry);
+
370  encryptor_->UpdateIv();
+
371  return Status::OK;
+
372 }
+
373 
+
374 bool EncryptingFragmenter::IsSubsampleEncryptionRequired() {
+
375  return vpx_parser_ || nalu_length_size_ != 0;
+
376 }
+
377 
+
378 } // namespace mp4
+
379 } // namespace media
+
380 } // namespace shaka
-
Status AddSample(scoped_refptr< MediaSample > sample) override
-
Status InitializeFragment(int64_t first_sample_dts) override
-
EncryptingFragmenter(scoped_refptr< StreamInfo > info, TrackFragment *traf, scoped_ptr< EncryptionKey > encryption_key, int64_t clear_time, FourCC protection_scheme, uint8_t crypt_byte_block, uint8_t skip_byte_block, MuxerListener *listener)
+
Status AddSample(scoped_refptr< MediaSample > sample) override
+
Status InitializeFragment(int64_t first_sample_dts) override
+
EncryptingFragmenter(scoped_refptr< StreamInfo > info, TrackFragment *traf, scoped_ptr< EncryptionKey > encryption_key, int64_t clear_time, FourCC protection_scheme, uint8_t crypt_byte_block, uint8_t skip_byte_block, MuxerListener *listener)
virtual Status AddSample(scoped_refptr< MediaSample > sample)
Definition: fragmenter.cc:47
virtual void OnEncryptionStart()=0
-
void FinalizeFragment() override
Finalize and optimize the fragment.
+
void FinalizeFragment() override
Finalize and optimize the fragment.
virtual Status InitializeFragment(int64_t first_sample_dts)
Definition: fragmenter.cc:92
virtual void FinalizeFragment()
Finalize and optimize the fragment.
Definition: fragmenter.cc:111
-
virtual void FinalizeFragmentForEncryption()
Finalize current fragment for encryption.
+
virtual void FinalizeFragmentForEncryption()
Finalize current fragment for encryption.
Class to parse a vp9 bit stream.
Definition: vp9_parser.h:20
@@ -493,14 +488,14 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); - -
virtual Status PrepareFragmentForEncryption(bool enable_encryption)
+ +
virtual Status PrepareFragmentForEncryption(bool enable_encryption)
bool OptimizeSampleEntries(std::vector< T > *entries, T *default_value)
Definition: fragmenter.h:102
diff --git a/docs/d6/d4e/webm_2multi__segment__segmenter_8cc_source.html b/docs/d6/d4e/webm_2multi__segment__segmenter_8cc_source.html index 14fb7f3062..59612f3c4a 100644 --- a/docs/d6/d4e/webm_2multi__segment__segmenter_8cc_source.html +++ b/docs/d6/d4e/webm_2multi__segment__segmenter_8cc_source.html @@ -188,7 +188,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d55/aes__cryptor_8cc_source.html b/docs/d6/d55/aes__cryptor_8cc_source.html index 8bd2bdea85..d917136d02 100644 --- a/docs/d6/d55/aes__cryptor_8cc_source.html +++ b/docs/d6/d55/aes__cryptor_8cc_source.html @@ -231,7 +231,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d57/classshaka_1_1media_1_1AVCDecoderConfigurationRecord.html b/docs/d6/d57/classshaka_1_1media_1_1AVCDecoderConfigurationRecord.html index 1f889c7580..009f01a98e 100644 --- a/docs/d6/d57/classshaka_1_1media_1_1AVCDecoderConfigurationRecord.html +++ b/docs/d6/d57/classshaka_1_1media_1_1AVCDecoderConfigurationRecord.html @@ -244,7 +244,7 @@ void  diff --git a/docs/d6/d59/protection__system__specific__info_8h_source.html b/docs/d6/d59/protection__system__specific__info_8h_source.html index 51d2ce1914..fc9b2a2461 100644 --- a/docs/d6/d59/protection__system__specific__info_8h_source.html +++ b/docs/d6/d59/protection__system__specific__info_8h_source.html @@ -163,7 +163,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d60/classshaka_1_1media_1_1VPCodecConfigurationRecord-members.html b/docs/d6/d60/classshaka_1_1media_1_1VPCodecConfigurationRecord-members.html index 419ae1dc49..baf7e34fc7 100644 --- a/docs/d6/d60/classshaka_1_1media_1_1VPCodecConfigurationRecord-members.html +++ b/docs/d6/d60/classshaka_1_1media_1_1VPCodecConfigurationRecord-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); COLOR_SPACE_SRGB enum value (defined in shaka::media::VPCodecConfigurationRecord)shaka::media::VPCodecConfigurationRecord COLOR_SPACE_UNSPECIFIED enum value (defined in shaka::media::VPCodecConfigurationRecord)shaka::media::VPCodecConfigurationRecord ColorSpace enum name (defined in shaka::media::VPCodecConfigurationRecord)shaka::media::VPCodecConfigurationRecord - GetCodecString(VideoCodec codec) const shaka::media::VPCodecConfigurationRecord + GetCodecString(Codec codec) const shaka::media::VPCodecConfigurationRecord level() const (defined in shaka::media::VPCodecConfigurationRecord)shaka::media::VPCodecConfigurationRecordinline MergeFrom(const VPCodecConfigurationRecord &other) (defined in shaka::media::VPCodecConfigurationRecord)shaka::media::VPCodecConfigurationRecord ParseMP4(const std::vector< uint8_t > &data)shaka::media::VPCodecConfigurationRecord @@ -134,7 +134,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d6c/h26x__bit__reader_8cc_source.html b/docs/d6/d6c/h26x__bit__reader_8cc_source.html index a6119b428d..c382d6c3b4 100644 --- a/docs/d6/d6c/h26x__bit__reader_8cc_source.html +++ b/docs/d6/d6c/h26x__bit__reader_8cc_source.html @@ -259,7 +259,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d6e/ts__section__pes_8cc_source.html b/docs/d6/d6e/ts__section__pes_8cc_source.html index 3804606ef3..6b98ad67b3 100644 --- a/docs/d6/d6e/ts__section__pes_8cc_source.html +++ b/docs/d6/d6e/ts__section__pes_8cc_source.html @@ -405,7 +405,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d71/scoped__xml__ptr_8h_source.html b/docs/d6/d71/scoped__xml__ptr_8h_source.html index 7ca68063c6..c8e04a088f 100644 --- a/docs/d6/d71/scoped__xml__ptr_8h_source.html +++ b/docs/d6/d71/scoped__xml__ptr_8h_source.html @@ -131,7 +131,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d77/dash__iop__mpd__notifier_8h_source.html b/docs/d6/d77/dash__iop__mpd__notifier_8h_source.html index 895a5d6525..a16a8a4a0b 100644 --- a/docs/d6/d77/dash__iop__mpd__notifier_8h_source.html +++ b/docs/d6/d77/dash__iop__mpd__notifier_8h_source.html @@ -210,7 +210,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d79/structshaka_1_1media_1_1mp4_1_1VTTAdditionalTextBox.html b/docs/d6/d79/structshaka_1_1media_1_1mp4_1_1VTTAdditionalTextBox.html index 50776d36d3..3802731c21 100644 --- a/docs/d6/d79/structshaka_1_1media_1_1mp4_1_1VTTAdditionalTextBox.html +++ b/docs/d6/d79/structshaka_1_1media_1_1mp4_1_1VTTAdditionalTextBox.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d6/d7b/webm__tracks__parser_8h_source.html b/docs/d6/d7b/webm__tracks__parser_8h_source.html index 6999d8c6dc..80283b2065 100644 --- a/docs/d6/d7b/webm__tracks__parser_8h_source.html +++ b/docs/d6/d7b/webm__tracks__parser_8h_source.html @@ -202,7 +202,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d7c/structshaka_1_1media_1_1mp4_1_1AC3Specific-members.html b/docs/d6/d7c/structshaka_1_1media_1_1mp4_1_1AC3Specific-members.html index 19d65e9a65..100a5cfd5e 100644 --- a/docs/d6/d7c/structshaka_1_1media_1_1mp4_1_1AC3Specific-members.html +++ b/docs/d6/d7c/structshaka_1_1media_1_1mp4_1_1AC3Specific-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d86/bandwidth__estimator_8cc_source.html b/docs/d6/d86/bandwidth__estimator_8cc_source.html index 79fb579583..400fe60924 100644 --- a/docs/d6/d86/bandwidth__estimator_8cc_source.html +++ b/docs/d6/d86/bandwidth__estimator_8cc_source.html @@ -154,7 +154,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d8a/vp9__parser_8cc_source.html b/docs/d6/d8a/vp9__parser_8cc_source.html index 8139ca3277..de8f0fa5d6 100644 --- a/docs/d6/d8a/vp9__parser_8cc_source.html +++ b/docs/d6/d8a/vp9__parser_8cc_source.html @@ -660,7 +660,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d8f/classshaka_1_1xml_1_1RepresentationBaseXmlNode-members.html b/docs/d6/d8f/classshaka_1_1xml_1_1RepresentationBaseXmlNode-members.html index c0895228fa..3846198cb1 100644 --- a/docs/d6/d8f/classshaka_1_1xml_1_1RepresentationBaseXmlNode-members.html +++ b/docs/d6/d8f/classshaka_1_1xml_1_1RepresentationBaseXmlNode-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d9b/h264__parser_8h_source.html b/docs/d6/d9b/h264__parser_8h_source.html index e23f4c6bc5..d31970585e 100644 --- a/docs/d6/d9b/h264__parser_8h_source.html +++ b/docs/d6/d9b/h264__parser_8h_source.html @@ -439,7 +439,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d9f/hls__flags_8cc_source.html b/docs/d6/d9f/hls__flags_8cc_source.html index 66115de2b2..51a39cfa9b 100644 --- a/docs/d6/d9f/hls__flags_8cc_source.html +++ b/docs/d6/d9f/hls__flags_8cc_source.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/da0/ts__section__pat_8h_source.html b/docs/d6/da0/ts__section__pat_8h_source.html index 62c795be3c..402d82b3dd 100644 --- a/docs/d6/da0/ts__section__pat_8h_source.html +++ b/docs/d6/da0/ts__section__pat_8h_source.html @@ -135,7 +135,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/da3/mpd__builder_8h_source.html b/docs/d6/da3/mpd__builder_8h_source.html index ec9c28b24a..088a638f8a 100644 --- a/docs/d6/da3/mpd__builder_8h_source.html +++ b/docs/d6/da3/mpd__builder_8h_source.html @@ -534,7 +534,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/da4/classshaka_1_1media_1_1AVCDecoderConfigurationRecord-members.html b/docs/d6/da4/classshaka_1_1media_1_1AVCDecoderConfigurationRecord-members.html index 0e2ad3b505..9f5e0c2a4b 100644 --- a/docs/d6/da4/classshaka_1_1media_1_1AVCDecoderConfigurationRecord-members.html +++ b/docs/d6/da4/classshaka_1_1media_1_1AVCDecoderConfigurationRecord-members.html @@ -119,7 +119,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/da6/structshaka_1_1media_1_1H265SliceHeader_1_1LongTermPicsInfo-members.html b/docs/d6/da6/structshaka_1_1media_1_1H265SliceHeader_1_1LongTermPicsInfo-members.html index e8a739de6c..62cd8c38fc 100644 --- a/docs/d6/da6/structshaka_1_1media_1_1H265SliceHeader_1_1LongTermPicsInfo-members.html +++ b/docs/d6/da6/structshaka_1_1media_1_1H265SliceHeader_1_1LongTermPicsInfo-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/da9/classshaka_1_1media_1_1BitReader.html b/docs/d6/da9/classshaka_1_1media_1_1BitReader.html index e689b09da6..1fcd792281 100644 --- a/docs/d6/da9/classshaka_1_1media_1_1BitReader.html +++ b/docs/d6/da9/classshaka_1_1media_1_1BitReader.html @@ -365,7 +365,7 @@ template<typename T > diff --git a/docs/d6/daa/structshaka_1_1media_1_1mp4_1_1VTTCueBox.html b/docs/d6/daa/structshaka_1_1media_1_1mp4_1_1VTTCueBox.html index 2ec5509a00..e8d1e6e737 100644 --- a/docs/d6/daa/structshaka_1_1media_1_1mp4_1_1VTTCueBox.html +++ b/docs/d6/daa/structshaka_1_1media_1_1mp4_1_1VTTCueBox.html @@ -185,7 +185,7 @@ Additional Inherited Members diff --git a/docs/d6/db1/classshaka_1_1media_1_1MediaStream-members.html b/docs/d6/db1/classshaka_1_1media_1_1MediaStream-members.html index e4aaa397b5..aae8ef56d8 100644 --- a/docs/d6/db1/classshaka_1_1media_1_1MediaStream-members.html +++ b/docs/d6/db1/classshaka_1_1media_1_1MediaStream-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/db1/classshaka_1_1media_1_1VideoStreamInfo.html b/docs/d6/db1/classshaka_1_1media_1_1VideoStreamInfo.html index 2ec260971d..b78d09175f 100644 --- a/docs/d6/db1/classshaka_1_1media_1_1VideoStreamInfo.html +++ b/docs/d6/db1/classshaka_1_1media_1_1VideoStreamInfo.html @@ -110,11 +110,8 @@ Inheritance diagram for shaka::media::VideoStreamInfo: - - - - + + @@ -131,9 +128,6 @@ uint8_t  - - @@ -152,9 +146,9 @@ void  - - + + @@ -167,21 +161,27 @@ uint32_t  + + + + - - + + @@ -195,9 +195,9 @@ void 

Public Member Functions

 VideoStreamInfo (int track_id, uint32_t time_scale, uint64_t duration, VideoCodec codec, const std::string &codec_string, const std::string &language, uint16_t width, uint16_t height, uint32_t pixel_width, uint32_t pixel_height, int16_t trick_play_rate, uint8_t nalu_length_size, const uint8_t *codec_config, size_t codec_config_size, bool is_encrypted)
 
-VideoCodec codec () const
 
 VideoStreamInfo (int track_id, uint32_t time_scale, uint64_t duration, Codec codec, const std::string &codec_string, const uint8_t *codec_config, size_t codec_config_size, uint16_t width, uint16_t height, uint32_t pixel_width, uint32_t pixel_height, int16_t trick_play_rate, uint8_t nalu_length_size, const std::string &language, bool is_encrypted)
 
uint16_t width () const
 
nalu_length_size int16_t trick_play_rate () const
 
-void set_codec (VideoCodec codec)
 
void set_width (uint32_t width)
 
set_pixel_height
std::string ToString () const override
 
- Public Member Functions inherited from shaka::media::StreamInfo
StreamInfo (StreamType stream_type, int track_id, uint32_t time_scale, uint64_t duration, const std::string &codec_string, const std::string &language, const uint8_t *codec_config, size_t codec_config_size, bool is_encrypted)
 
StreamInfo (StreamType stream_type, int track_id, uint32_t time_scale, uint64_t duration, Codec codec, const std::string &codec_string, const uint8_t *codec_config, size_t codec_config_size, const std::string &language, bool is_encrypted)
 
StreamType stream_type () const
 
time_scale ()
uint64_t duration () const
 
+Codec codec () const
 
const std::string & codec_string () const
 
+const std::vector< uint8_t > & codec_config () const
 
const std::string & language () const
 
bool is_encrypted () const
 
-const std::vector< uint8_t > & codec_config () const
 
void set_duration (int duration)
 
+void set_codec (Codec codec)
 
void set_codec_config (const std::vector< uint8_t > &data)
 
set_language (con

Detailed Description

Holds video stream information.

-

Definition at line 31 of file video_stream_info.h.

+

Definition at line 16 of file video_stream_info.h.

Constructor & Destructor Documentation

- +
@@ -222,7 +222,7 @@ void  - + @@ -234,8 +234,14 @@ void  - - + + + + + + + + @@ -276,14 +282,8 @@ void  - - - - - - - - + + @@ -336,7 +336,7 @@ void 
set_language (con
VideoCodec Codec  codec,
set_language (con
const std::string & language, const uint8_t * codec_config,
size_t codec_config_size,
set_language (con
const uint8_t * codec_config,
size_t codec_config_size, const std::string & language,
set_language (con

Implements shaka::media::StreamInfo.

-

Definition at line 85 of file video_stream_info.cc.

+

Definition at line 68 of file video_stream_info.cc.

@@ -363,7 +363,7 @@ void 
set_language (con

Returns the pixel height.

Returns
0 if unknown.
-

Definition at line 66 of file video_stream_info.h.

+

Definition at line 42 of file video_stream_info.h.

@@ -390,7 +390,7 @@ void 
set_language (con

Returns the pixel width.

Returns
0 if unknown.
-

Definition at line 63 of file video_stream_info.h.

+

Definition at line 39 of file video_stream_info.h.

@@ -418,7 +418,7 @@ void 
set_language (con

Reimplemented from shaka::media::StreamInfo.

-

Definition at line 92 of file video_stream_info.cc.

+

Definition at line 75 of file video_stream_info.cc.

@@ -429,7 +429,7 @@ void 
set_language (con diff --git a/docs/d6/db1/structshaka_1_1media_1_1VideoStreamInfoParameters-members.html b/docs/d6/db1/structshaka_1_1media_1_1VideoStreamInfoParameters-members.html index 7ac68e2552..79a04b553f 100644 --- a/docs/d6/db1/structshaka_1_1media_1_1VideoStreamInfoParameters-members.html +++ b/docs/d6/db1/structshaka_1_1media_1_1VideoStreamInfoParameters-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
diff --git a/docs/d6/dc7/classshaka_1_1media_1_1mp2t_1_1EsParserH26x-members.html b/docs/d6/dc7/classshaka_1_1media_1_1mp2t_1_1EsParserH26x-members.html index 17c342aa99..6d2a989b32 100644 --- a/docs/d6/dc7/classshaka_1_1media_1_1mp2t_1_1EsParserH26x-members.html +++ b/docs/d6/dc7/classshaka_1_1media_1_1mp2t_1_1EsParserH26x-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
diff --git a/docs/d6/dc8/mkv__writer_8cc_source.html b/docs/d6/dc8/mkv__writer_8cc_source.html index 060f0383b0..b50827574a 100644 --- a/docs/d6/dc8/mkv__writer_8cc_source.html +++ b/docs/d6/dc8/mkv__writer_8cc_source.html @@ -195,7 +195,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dcb/structshaka_1_1media_1_1mp4_1_1SampleEncryptionEntry.html b/docs/d6/dcb/structshaka_1_1media_1_1mp4_1_1SampleEncryptionEntry.html index 4e23779dfd..33d527c85b 100644 --- a/docs/d6/dcb/structshaka_1_1media_1_1mp4_1_1SampleEncryptionEntry.html +++ b/docs/d6/dcb/structshaka_1_1media_1_1mp4_1_1SampleEncryptionEntry.html @@ -250,7 +250,7 @@ std::vector< diff --git a/docs/d6/dcc/classshaka_1_1media_1_1VP9Parser-members.html b/docs/d6/dcc/classshaka_1_1media_1_1VP9Parser-members.html index 5a705b54c3..1bdc43de2c 100644 --- a/docs/d6/dcc/classshaka_1_1media_1_1VP9Parser-members.html +++ b/docs/d6/dcc/classshaka_1_1media_1_1VP9Parser-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dce/structshaka_1_1media_1_1mp4_1_1SegmentReference-members.html b/docs/d6/dce/structshaka_1_1media_1_1mp4_1_1SegmentReference-members.html index 319e16b51c..a4b0f6cfcb 100644 --- a/docs/d6/dce/structshaka_1_1media_1_1mp4_1_1SegmentReference-members.html +++ b/docs/d6/dce/structshaka_1_1media_1_1mp4_1_1SegmentReference-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dcf/classshaka_1_1media_1_1mp2t_1_1EsParserAdts.html b/docs/d6/dcf/classshaka_1_1media_1_1mp2t_1_1EsParserAdts.html index 572572176d..eb8e9458f9 100644 --- a/docs/d6/dcf/classshaka_1_1media_1_1mp2t_1_1EsParserAdts.html +++ b/docs/d6/dcf/classshaka_1_1media_1_1mp2t_1_1EsParserAdts.html @@ -148,7 +148,7 @@ const scoped_refptr
diff --git a/docs/d6/dd0/structshaka_1_1media_1_1H264SEIMessage.html b/docs/d6/dd0/structshaka_1_1media_1_1H264SEIMessage.html index 38f1cf8b49..2ea883ed56 100644 --- a/docs/d6/dd0/structshaka_1_1media_1_1H264SEIMessage.html +++ b/docs/d6/dd0/structshaka_1_1media_1_1H264SEIMessage.html @@ -127,7 +127,7 @@ union { diff --git a/docs/d6/dde/structshaka_1_1media_1_1H265VuiParameters-members.html b/docs/d6/dde/structshaka_1_1media_1_1H265VuiParameters-members.html index 9c593e9f2a..5867233292 100644 --- a/docs/d6/dde/structshaka_1_1media_1_1H265VuiParameters-members.html +++ b/docs/d6/dde/structshaka_1_1media_1_1H265VuiParameters-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/de4/structshaka_1_1media_1_1mp4_1_1CueTimeBox-members.html b/docs/d6/de4/structshaka_1_1media_1_1mp4_1_1CueTimeBox-members.html index 53cbdfc7f4..d6d37f4bac 100644 --- a/docs/d6/de4/structshaka_1_1media_1_1mp4_1_1CueTimeBox-members.html +++ b/docs/d6/de4/structshaka_1_1media_1_1mp4_1_1CueTimeBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/de7/structshaka_1_1media_1_1VPxFrameInfo-members.html b/docs/d6/de7/structshaka_1_1media_1_1VPxFrameInfo-members.html index 54e274fc97..af87a2f340 100644 --- a/docs/d6/de7/structshaka_1_1media_1_1VPxFrameInfo-members.html +++ b/docs/d6/de7/structshaka_1_1media_1_1VPxFrameInfo-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/de8/local__file_8cc_source.html b/docs/d6/de8/local__file_8cc_source.html index 2f6b8713f9..e0c0700a2e 100644 --- a/docs/d6/de8/local__file_8cc_source.html +++ b/docs/d6/de8/local__file_8cc_source.html @@ -211,7 +211,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/de8/network__util_8h_source.html b/docs/d6/de8/network__util_8h_source.html index 4e689e1921..a748cafcb2 100644 --- a/docs/d6/de8/network__util_8h_source.html +++ b/docs/d6/de8/network__util_8h_source.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/de9/ts__segmenter_8cc_source.html b/docs/d6/de9/ts__segmenter_8cc_source.html index 1f5cce71b1..a88cef7afd 100644 --- a/docs/d6/de9/ts__segmenter_8cc_source.html +++ b/docs/d6/de9/ts__segmenter_8cc_source.html @@ -289,7 +289,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
virtual void OnNewSegment(const std::string &segment_name, uint64_t start_time, uint64_t duration, uint64_t segment_file_size)=0
virtual void OnEncryptionInfoReady(bool is_initial_encryption_info, FourCC protection_scheme, const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &iv, const std::vector< ProtectionSystemSpecificInfo > &key_system_info)=0
-
Abstract class holds stream information.
Definition: stream_info.h:26
+
Abstract class holds stream information.
Definition: stream_info.h:53
Status AddSample(scoped_refptr< MediaSample > sample)
Definition: ts_segmenter.cc:88
virtual void OnEncryptionStart()=0
@@ -313,7 +313,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/ded/ts__packet_8h_source.html b/docs/d6/ded/ts__packet_8h_source.html index 6592bb8326..61cc3a5172 100644 --- a/docs/d6/ded/ts__packet_8h_source.html +++ b/docs/d6/ded/ts__packet_8h_source.html @@ -169,7 +169,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/def/sync__sample__iterator_8cc_source.html b/docs/d6/def/sync__sample__iterator_8cc_source.html index 5722e5e94b..6cf34c9528 100644 --- a/docs/d6/def/sync__sample__iterator_8cc_source.html +++ b/docs/d6/def/sync__sample__iterator_8cc_source.html @@ -140,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dff/classshaka_1_1media_1_1Nalu.html b/docs/d6/dff/classshaka_1_1media_1_1Nalu.html index ab851b7a43..69fd91c62d 100644 --- a/docs/d6/dff/classshaka_1_1media_1_1Nalu.html +++ b/docs/d6/dff/classshaka_1_1media_1_1Nalu.html @@ -240,7 +240,7 @@ bool can_start_access_unit diff --git a/docs/d7/d01/structshaka_1_1media_1_1mp4_1_1SampleGroupDescription.html b/docs/d7/d01/structshaka_1_1media_1_1mp4_1_1SampleGroupDescription.html index 948b24e215..facaa878bc 100644 --- a/docs/d7/d01/structshaka_1_1media_1_1mp4_1_1SampleGroupDescription.html +++ b/docs/d7/d01/structshaka_1_1media_1_1mp4_1_1SampleGroupDescription.html @@ -194,7 +194,7 @@ Additional Inherited Members diff --git a/docs/d7/d07/structshaka_1_1media_1_1mp4_1_1SoundMediaHeader.html b/docs/d7/d07/structshaka_1_1media_1_1mp4_1_1SoundMediaHeader.html index f6690ef662..30c1018dd7 100644 --- a/docs/d7/d07/structshaka_1_1media_1_1mp4_1_1SoundMediaHeader.html +++ b/docs/d7/d07/structshaka_1_1media_1_1mp4_1_1SoundMediaHeader.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d7/d0b/muxer__listener__test__helper_8h_source.html b/docs/d7/d0b/muxer__listener__test__helper_8h_source.html index c3d2887891..adcf6bc3b1 100644 --- a/docs/d7/d0b/muxer__listener__test__helper_8h_source.html +++ b/docs/d7/d0b/muxer__listener__test__helper_8h_source.html @@ -149,7 +149,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
60  int track_id;
61  uint32_t time_scale;
62  uint64_t duration;
-
63  VideoCodec codec;
+
63  Codec codec;
64  std::string codec_string;
65  std::string language;
66  uint16_t width;
@@ -206,7 +206,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d12/media__parser_8h_source.html b/docs/d7/d12/media__parser_8h_source.html index da2a9595ec..c25b2d0124 100644 --- a/docs/d7/d12/media__parser_8h_source.html +++ b/docs/d7/d12/media__parser_8h_source.html @@ -150,7 +150,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d15/mpd__notifier_8h_source.html b/docs/d7/d15/mpd__notifier_8h_source.html index 9378388aed..16c1a1f7b1 100644 --- a/docs/d7/d15/mpd__notifier_8h_source.html +++ b/docs/d7/d15/mpd__notifier_8h_source.html @@ -169,7 +169,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d16/structshaka_1_1media_1_1mp4_1_1VideoSampleEntry-members.html b/docs/d7/d16/structshaka_1_1media_1_1mp4_1_1VideoSampleEntry-members.html index 2a82fb0d2b..357ccaee0d 100644 --- a/docs/d7/d16/structshaka_1_1media_1_1mp4_1_1VideoSampleEntry-members.html +++ b/docs/d7/d16/structshaka_1_1media_1_1mp4_1_1VideoSampleEntry-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d22/libcrypto__threading_8h_source.html b/docs/d7/d22/libcrypto__threading_8h_source.html index e30261f8ce..618a4b24ba 100644 --- a/docs/d7/d22/libcrypto__threading_8h_source.html +++ b/docs/d7/d22/libcrypto__threading_8h_source.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d26/classshaka_1_1media_1_1mp4_1_1SyncSampleIterator.html b/docs/d7/d26/classshaka_1_1media_1_1mp4_1_1SyncSampleIterator.html index 43c4ce6677..40759b0dc5 100644 --- a/docs/d7/d26/classshaka_1_1media_1_1mp4_1_1SyncSampleIterator.html +++ b/docs/d7/d26/classshaka_1_1media_1_1mp4_1_1SyncSampleIterator.html @@ -177,7 +177,7 @@ Public Member Functions diff --git a/docs/d7/d29/structshaka_1_1media_1_1H265Sps-members.html b/docs/d7/d29/structshaka_1_1media_1_1H265Sps-members.html index 20489847de..27b7e3392d 100644 --- a/docs/d7/d29/structshaka_1_1media_1_1H265Sps-members.html +++ b/docs/d7/d29/structshaka_1_1media_1_1H265Sps-members.html @@ -146,7 +146,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d29/structshaka_1_1media_1_1mp4_1_1CompositionTimeToSample-members.html b/docs/d7/d29/structshaka_1_1media_1_1mp4_1_1CompositionTimeToSample-members.html index 1f918d7b06..411621d757 100644 --- a/docs/d7/d29/structshaka_1_1media_1_1mp4_1_1CompositionTimeToSample-members.html +++ b/docs/d7/d29/structshaka_1_1media_1_1mp4_1_1CompositionTimeToSample-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d36/classshaka_1_1media_1_1ContentEncoding-members.html b/docs/d7/d36/classshaka_1_1media_1_1ContentEncoding-members.html index 319b3574c0..8ac4622edd 100644 --- a/docs/d7/d36/classshaka_1_1media_1_1ContentEncoding-members.html +++ b/docs/d7/d36/classshaka_1_1media_1_1ContentEncoding-members.html @@ -132,7 +132,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d42/protection__system__specific__info_8cc_source.html b/docs/d7/d42/protection__system__specific__info_8cc_source.html index c6ceb44e02..7545ce9f6b 100644 --- a/docs/d7/d42/protection__system__specific__info_8cc_source.html +++ b/docs/d7/d42/protection__system__specific__info_8cc_source.html @@ -219,7 +219,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d42/structshaka_1_1media_1_1mp4_1_1SampleSize.html b/docs/d7/d42/structshaka_1_1media_1_1mp4_1_1SampleSize.html index e84f14fd7f..f1eca1fc5c 100644 --- a/docs/d7/d42/structshaka_1_1media_1_1mp4_1_1SampleSize.html +++ b/docs/d7/d42/structshaka_1_1media_1_1mp4_1_1SampleSize.html @@ -188,7 +188,7 @@ Additional Inherited Members diff --git a/docs/d7/d44/structshaka_1_1media_1_1mp4_1_1SampleEncryption-members.html b/docs/d7/d44/structshaka_1_1media_1_1mp4_1_1SampleEncryption-members.html index 8b9b870288..c35294a572 100644 --- a/docs/d7/d44/structshaka_1_1media_1_1mp4_1_1SampleEncryption-members.html +++ b/docs/d7/d44/structshaka_1_1media_1_1mp4_1_1SampleEncryption-members.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d46/classshaka_1_1media_1_1WebMListParser-members.html b/docs/d7/d46/classshaka_1_1media_1_1WebMListParser-members.html index 08ce42e8d6..3e9777d725 100644 --- a/docs/d7/d46/classshaka_1_1media_1_1WebMListParser-members.html +++ b/docs/d7/d46/classshaka_1_1media_1_1WebMListParser-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d54/classshaka_1_1media_1_1H26xByteToUnitStreamConverter-members.html b/docs/d7/d54/classshaka_1_1media_1_1H26xByteToUnitStreamConverter-members.html index 975772db99..292a30ad00 100644 --- a/docs/d7/d54/classshaka_1_1media_1_1H26xByteToUnitStreamConverter-members.html +++ b/docs/d7/d54/classshaka_1_1media_1_1H26xByteToUnitStreamConverter-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d59/classshaka_1_1media_1_1DecryptorSource.html b/docs/d7/d59/classshaka_1_1media_1_1DecryptorSource.html index 5e9c2c773f..ec0bbd29f5 100644 --- a/docs/d7/d59/classshaka_1_1media_1_1DecryptorSource.html +++ b/docs/d7/d59/classshaka_1_1media_1_1DecryptorSource.html @@ -119,7 +119,7 @@ bool DecryptSampleBuffer diff --git a/docs/d7/d6d/classshaka_1_1media_1_1MediaSample.html b/docs/d7/d6d/classshaka_1_1media_1_1MediaSample.html index f28df12785..cab5da74fd 100644 --- a/docs/d7/d6d/classshaka_1_1media_1_1MediaSample.html +++ b/docs/d7/d6d/classshaka_1_1media_1_1MediaSample.html @@ -411,7 +411,7 @@ class base::RefCountedThre diff --git a/docs/d7/d75/structshaka_1_1media_1_1mp4_1_1MediaHeader-members.html b/docs/d7/d75/structshaka_1_1media_1_1mp4_1_1MediaHeader-members.html index 50262b8b4b..ae1eb14aef 100644 --- a/docs/d7/d75/structshaka_1_1media_1_1mp4_1_1MediaHeader-members.html +++ b/docs/d7/d75/structshaka_1_1media_1_1mp4_1_1MediaHeader-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d78/structshaka_1_1media_1_1H264SEIMessage-members.html b/docs/d7/d78/structshaka_1_1media_1_1H264SEIMessage-members.html index 6027ec2033..4f97bc8cfa 100644 --- a/docs/d7/d78/structshaka_1_1media_1_1H264SEIMessage-members.html +++ b/docs/d7/d78/structshaka_1_1media_1_1H264SEIMessage-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d7a/classshaka_1_1media_1_1UdpFile.html b/docs/d7/d7a/classshaka_1_1media_1_1UdpFile.html index 29fdb50add..4d227d19b7 100644 --- a/docs/d7/d7a/classshaka_1_1media_1_1UdpFile.html +++ b/docs/d7/d7a/classshaka_1_1media_1_1UdpFile.html @@ -463,7 +463,7 @@ Additional Inherited Members diff --git a/docs/d7/d7c/vlog__flags_8h_source.html b/docs/d7/d7c/vlog__flags_8h_source.html index 0126ccf00a..31042364d6 100644 --- a/docs/d7/d7c/vlog__flags_8h_source.html +++ b/docs/d7/d7c/vlog__flags_8h_source.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d87/video__stream__info_8h_source.html b/docs/d7/d87/video__stream__info_8h_source.html index 062a00fee9..15ce411ce0 100644 --- a/docs/d7/d87/video__stream__info_8h_source.html +++ b/docs/d7/d87/video__stream__info_8h_source.html @@ -101,94 +101,68 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
12 namespace shaka {
13 namespace media {
14 
-
15 enum VideoCodec {
-
16  kUnknownVideoCodec = 0,
-
17  kCodecH264,
-
18  kCodecHEV1,
-
19  kCodecHVC1,
-
20  kCodecVC1,
-
21  kCodecMPEG2,
-
22  kCodecMPEG4,
-
23  kCodecTheora,
-
24  kCodecVP8,
-
25  kCodecVP9,
-
26  kCodecVP10,
-
27  kNumVideoCodec
-
28 };
-
29 
-
31 class VideoStreamInfo : public StreamInfo {
-
32  public:
-
36  VideoStreamInfo(int track_id,
-
37  uint32_t time_scale,
-
38  uint64_t duration,
-
39  VideoCodec codec,
-
40  const std::string& codec_string,
-
41  const std::string& language,
-
42  uint16_t width,
-
43  uint16_t height,
-
44  uint32_t pixel_width,
-
45  uint32_t pixel_height,
-
46  int16_t trick_play_rate,
-
47  uint8_t nalu_length_size,
-
48  const uint8_t* codec_config,
-
49  size_t codec_config_size,
-
50  bool is_encrypted);
-
51 
-
54  bool IsValidConfig() const override;
-
55  std::string ToString() const override;
-
57 
-
58  VideoCodec codec() const { return codec_; }
-
59  uint16_t width() const { return width_; }
-
60  uint16_t height() const { return height_; }
-
63  uint32_t pixel_width() const { return pixel_width_; }
-
66  uint32_t pixel_height() const { return pixel_height_; }
-
67  uint8_t nalu_length_size() const { return nalu_length_size_; }
-
68  int16_t trick_play_rate() const { return trick_play_rate_; }
-
69 
-
70  void set_codec(VideoCodec codec) { codec_ = codec; }
-
71  void set_width(uint32_t width) { width_ = width; }
-
72  void set_height(uint32_t height) { height_ = height; }
-
73  void set_pixel_width(uint32_t pixel_width) { pixel_width_ = pixel_width; }
-
74  void set_pixel_height(uint32_t pixel_height) { pixel_height_ = pixel_height; }
+
16 class VideoStreamInfo : public StreamInfo {
+
17  public:
+
21  VideoStreamInfo(int track_id, uint32_t time_scale, uint64_t duration,
+
22  Codec codec, const std::string& codec_string,
+
23  const uint8_t* codec_config, size_t codec_config_size,
+
24  uint16_t width, uint16_t height, uint32_t pixel_width,
+
25  uint32_t pixel_height, int16_t trick_play_rate,
+
26  uint8_t nalu_length_size, const std::string& language,
+
27  bool is_encrypted);
+
28 
+
31  bool IsValidConfig() const override;
+
32  std::string ToString() const override;
+
34 
+
35  uint16_t width() const { return width_; }
+
36  uint16_t height() const { return height_; }
+
39  uint32_t pixel_width() const { return pixel_width_; }
+
42  uint32_t pixel_height() const { return pixel_height_; }
+
43  uint8_t nalu_length_size() const { return nalu_length_size_; }
+
44  int16_t trick_play_rate() const { return trick_play_rate_; }
+
45 
+
46  void set_width(uint32_t width) { width_ = width; }
+
47  void set_height(uint32_t height) { height_ = height; }
+
48  void set_pixel_width(uint32_t pixel_width) { pixel_width_ = pixel_width; }
+
49  void set_pixel_height(uint32_t pixel_height) { pixel_height_ = pixel_height; }
+
50 
+
51  private:
+
52  ~VideoStreamInfo() override;
+
53 
+
54  uint16_t width_;
+
55  uint16_t height_;
+
56 
+
57  // pixel_width_:pixel_height_ is the sample aspect ratio.
+
58  // 0 means unknown.
+
59  uint32_t pixel_width_;
+
60  uint32_t pixel_height_;
+
61  int16_t trick_play_rate_; // Non-zero for trick-play streams.
+
62 
+
63  // Specifies the normalized size of the NAL unit length field. Can be 1, 2 or
+
64  // 4 bytes, or 0 if the size if unknown or the stream is not a AVC stream
+
65  // (H.264).
+
66  uint8_t nalu_length_size_;
+
67 
+
68  // Not using DISALLOW_COPY_AND_ASSIGN here intentionally to allow the compiler
+
69  // generated copy constructor and assignment operator. Since the extra data is
+
70  // typically small, the performance impact is minimal.
+
71 };
+
72 
+
73 } // namespace media
+
74 } // namespace shaka
75 
-
76  private:
-
77  ~VideoStreamInfo() override;
-
78 
-
79  VideoCodec codec_;
-
80  uint16_t width_;
-
81  uint16_t height_;
-
82 
-
83  // pixel_width_:pixel_height_ is the sample aspect ratio.
-
84  // 0 means unknown.
-
85  uint32_t pixel_width_;
-
86  uint32_t pixel_height_;
-
87  int16_t trick_play_rate_; // Non-zero for trick-play streams.
-
88 
-
89  // Specifies the normalized size of the NAL unit length field. Can be 1, 2 or
-
90  // 4 bytes, or 0 if the size if unknown or the stream is not a AVC stream
-
91  // (H.264).
-
92  uint8_t nalu_length_size_;
-
93 
-
94  // Not using DISALLOW_COPY_AND_ASSIGN here intentionally to allow the compiler
-
95  // generated copy constructor and assignment operator. Since the extra data is
-
96  // typically small, the performance impact is minimal.
-
97 };
-
98 
-
99 } // namespace media
-
100 } // namespace shaka
-
101 
-
102 #endif // MEDIA_BASE_VIDEO_STREAM_INFO_H_
-
Abstract class holds stream information.
Definition: stream_info.h:26
-
bool IsValidConfig() const override
-
VideoStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, VideoCodec codec, const std::string &codec_string, const std::string &language, uint16_t width, uint16_t height, uint32_t pixel_width, uint32_t pixel_height, int16_t trick_play_rate, uint8_t nalu_length_size, const uint8_t *codec_config, size_t codec_config_size, bool is_encrypted)
- - -
Holds video stream information.
-
std::string ToString() const override
+
76 #endif // MEDIA_BASE_VIDEO_STREAM_INFO_H_
+
Abstract class holds stream information.
Definition: stream_info.h:53
+
bool IsValidConfig() const override
+ + +
Holds video stream information.
+
std::string ToString() const override
+
VideoStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, Codec codec, const std::string &codec_string, const uint8_t *codec_config, size_t codec_config_size, uint16_t width, uint16_t height, uint32_t pixel_width, uint32_t pixel_height, int16_t trick_play_rate, uint8_t nalu_length_size, const std::string &language, bool is_encrypted)
diff --git a/docs/d7/d9c/structshaka_1_1media_1_1H265SliceHeader_1_1LongTermPicsInfo.html b/docs/d7/d9c/structshaka_1_1media_1_1H265SliceHeader_1_1LongTermPicsInfo.html index 3c26a24f37..68eb298ebf 100644 --- a/docs/d7/d9c/structshaka_1_1media_1_1H265SliceHeader_1_1LongTermPicsInfo.html +++ b/docs/d7/d9c/structshaka_1_1media_1_1H265SliceHeader_1_1LongTermPicsInfo.html @@ -112,7 +112,7 @@ int delta_poc_msb_cycle_lt diff --git a/docs/d7/d9d/progress__listener_8h_source.html b/docs/d7/d9d/progress__listener_8h_source.html index be9c5797a5..3a1f2cb94c 100644 --- a/docs/d7/d9d/progress__listener_8h_source.html +++ b/docs/d7/d9d/progress__listener_8h_source.html @@ -127,7 +127,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/da4/track__run__iterator_8h_source.html b/docs/d7/da4/track__run__iterator_8h_source.html index 732a4068a4..54e2215636 100644 --- a/docs/d7/da4/track__run__iterator_8h_source.html +++ b/docs/d7/da4/track__run__iterator_8h_source.html @@ -195,7 +195,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/dae/structshaka_1_1media_1_1mp4_1_1MediaData.html b/docs/d7/dae/structshaka_1_1media_1_1mp4_1_1MediaData.html index 7222af4fcc..7ec96051c3 100644 --- a/docs/d7/dae/structshaka_1_1media_1_1mp4_1_1MediaData.html +++ b/docs/d7/dae/structshaka_1_1media_1_1mp4_1_1MediaData.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d7/db0/mpd__writer_8h_source.html b/docs/d7/db0/mpd__writer_8h_source.html index c2c8aa22b5..a2bc1b6fe1 100644 --- a/docs/d7/db0/mpd__writer_8h_source.html +++ b/docs/d7/db0/mpd__writer_8h_source.html @@ -182,7 +182,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/db7/structshaka_1_1media_1_1mp4_1_1SampleToChunk-members.html b/docs/d7/db7/structshaka_1_1media_1_1mp4_1_1SampleToChunk-members.html index 111f7f6a07..d60c11326f 100644 --- a/docs/d7/db7/structshaka_1_1media_1_1mp4_1_1SampleToChunk-members.html +++ b/docs/d7/db7/structshaka_1_1media_1_1mp4_1_1SampleToChunk-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/dc3/structshaka_1_1media_1_1mp4_1_1TextSampleEntry.html b/docs/d7/dc3/structshaka_1_1media_1_1mp4_1_1TextSampleEntry.html index f109f2fc8b..e5579564d5 100644 --- a/docs/d7/dc3/structshaka_1_1media_1_1mp4_1_1TextSampleEntry.html +++ b/docs/d7/dc3/structshaka_1_1media_1_1mp4_1_1TextSampleEntry.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d7/dc6/byte__queue_8h_source.html b/docs/d7/dc6/byte__queue_8h_source.html index b642f14fa6..07fea3156c 100644 --- a/docs/d7/dc6/byte__queue_8h_source.html +++ b/docs/d7/dc6/byte__queue_8h_source.html @@ -144,7 +144,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/dd0/mpd__notifier__util_8h_source.html b/docs/d7/dd0/mpd__notifier__util_8h_source.html index 03a6da8f28..050bddcdd0 100644 --- a/docs/d7/dd0/mpd__notifier__util_8h_source.html +++ b/docs/d7/dd0/mpd__notifier__util_8h_source.html @@ -128,7 +128,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/dd4/request__signer_8h_source.html b/docs/d7/dd4/request__signer_8h_source.html index d40ea4c4b5..5d195ce533 100644 --- a/docs/d7/dd4/request__signer_8h_source.html +++ b/docs/d7/dd4/request__signer_8h_source.html @@ -178,7 +178,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/dd5/classshaka_1_1media_1_1mp4_1_1MP4MediaParser.html b/docs/d7/dd5/classshaka_1_1media_1_1mp4_1_1MP4MediaParser.html index 1c30a9d7c9..0a991d2756 100644 --- a/docs/d7/dd5/classshaka_1_1media_1_1mp4_1_1MP4MediaParser.html +++ b/docs/d7/dd5/classshaka_1_1media_1_1mp4_1_1MP4MediaParser.html @@ -156,7 +156,7 @@ track_id, const scoped_refptr

Implements shaka::media::MediaParser.

-

Definition at line 124 of file mp4_media_parser.cc.

+

Definition at line 117 of file mp4_media_parser.cc.

@@ -208,7 +208,7 @@ track_id, const scoped_refptr

Implements shaka::media::MediaParser.

-

Definition at line 101 of file mp4_media_parser.cc.

+

Definition at line 94 of file mp4_media_parser.cc.

@@ -234,7 +234,7 @@ track_id, const scoped_refptr
Returns
true if successful, false otherwise.
-

Definition at line 165 of file mp4_media_parser.cc.

+

Definition at line 158 of file mp4_media_parser.cc.

@@ -274,7 +274,7 @@ track_id, const scoped_refptr

Implements shaka::media::MediaParser.

-

Definition at line 131 of file mp4_media_parser.cc.

+

Definition at line 124 of file mp4_media_parser.cc.

@@ -285,7 +285,7 @@ track_id, const scoped_refptr
diff --git a/docs/d7/dd6/key__source_8cc_source.html b/docs/d7/dd6/key__source_8cc_source.html index 998a8721fb..544e118d81 100644 --- a/docs/d7/dd6/key__source_8cc_source.html +++ b/docs/d7/dd6/key__source_8cc_source.html @@ -142,7 +142,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/dda/classshaka_1_1media_1_1ByteQueue.html b/docs/d7/dda/classshaka_1_1media_1_1ByteQueue.html index 7218633cb3..8fcb456119 100644 --- a/docs/d7/dda/classshaka_1_1media_1_1ByteQueue.html +++ b/docs/d7/dda/classshaka_1_1media_1_1ByteQueue.html @@ -177,7 +177,7 @@ void  diff --git a/docs/d7/ddd/classshaka_1_1media_1_1RsaRequestSigner.html b/docs/d7/ddd/classshaka_1_1media_1_1RsaRequestSigner.html index 71fa1172ba..68a6af8db9 100644 --- a/docs/d7/ddd/classshaka_1_1media_1_1RsaRequestSigner.html +++ b/docs/d7/ddd/classshaka_1_1media_1_1RsaRequestSigner.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d7/de0/classshaka_1_1media_1_1HttpKeyFetcher.html b/docs/d7/de0/classshaka_1_1media_1_1HttpKeyFetcher.html index 5cee0e282e..7b2e0a3a28 100644 --- a/docs/d7/de0/classshaka_1_1media_1_1HttpKeyFetcher.html +++ b/docs/d7/de0/classshaka_1_1media_1_1HttpKeyFetcher.html @@ -311,7 +311,7 @@ KeyFetcher implementation overrides. diff --git a/docs/d7/de0/structshaka_1_1media_1_1mp4_1_1SampleToGroupEntry.html b/docs/d7/de0/structshaka_1_1media_1_1mp4_1_1SampleToGroupEntry.html index 4e12c8eb1d..21f0591dba 100644 --- a/docs/d7/de0/structshaka_1_1media_1_1mp4_1_1SampleToGroupEntry.html +++ b/docs/d7/de0/structshaka_1_1media_1_1mp4_1_1SampleToGroupEntry.html @@ -120,7 +120,7 @@ uint32_t group_description diff --git a/docs/d7/dec/h264__byte__to__unit__stream__converter_8h_source.html b/docs/d7/dec/h264__byte__to__unit__stream__converter_8h_source.html index be3dcd054a..d44c09be3e 100644 --- a/docs/d7/dec/h264__byte__to__unit__stream__converter_8h_source.html +++ b/docs/d7/dec/h264__byte__to__unit__stream__converter_8h_source.html @@ -134,7 +134,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/dee/mpd__generator_8cc_source.html b/docs/d7/dee/mpd__generator_8cc_source.html index f10ed718f9..d735856c11 100644 --- a/docs/d7/dee/mpd__generator_8cc_source.html +++ b/docs/d7/dee/mpd__generator_8cc_source.html @@ -227,7 +227,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/def/mp4__media__parser_8cc_source.html b/docs/d7/def/mp4__media__parser_8cc_source.html index 8cf7043454..6757f38588 100644 --- a/docs/d7/def/mp4__media__parser_8cc_source.html +++ b/docs/d7/def/mp4__media__parser_8cc_source.html @@ -129,7 +129,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
40  return (static_cast<double>(time_in_old_scale) / old_scale) * new_scale;
41 }
42 
-
43 VideoCodec FourCCToVideoCodec(FourCC fourcc) {
+
43 Codec FourCCToCodec(FourCC fourcc) {
44  switch (fourcc) {
45  case FOURCC_avc1:
46  return kCodecH264;
@@ -143,736 +143,719 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
54  return kCodecVP9;
55  case FOURCC_vp10:
56  return kCodecVP10;
-
57  default:
-
58  return kUnknownVideoCodec;
-
59  }
-
60 }
-
61 
-
62 AudioCodec FourCCToAudioCodec(FourCC fourcc) {
-
63  switch(fourcc) {
-
64  case FOURCC_Opus:
-
65  return kCodecOpus;
-
66  case FOURCC_dtsc:
-
67  return kCodecDTSC;
-
68  case FOURCC_dtsh:
-
69  return kCodecDTSH;
-
70  case FOURCC_dtsl:
-
71  return kCodecDTSL;
-
72  case FOURCC_dtse:
-
73  return kCodecDTSE;
-
74  case FOURCC_dtsp:
-
75  return kCodecDTSP;
-
76  case FOURCC_dtsm:
-
77  return kCodecDTSM;
-
78  case FOURCC_ac_3:
-
79  return kCodecAC3;
-
80  case FOURCC_ec_3:
-
81  return kCodecEAC3;
-
82  default:
-
83  return kUnknownAudioCodec;
-
84  }
-
85 }
-
86 
-
87 // Default DTS audio number of channels for 5.1 channel layout.
-
88 const uint8_t kDtsAudioNumChannels = 6;
-
89 const uint64_t kNanosecondsPerSecond = 1000000000ull;
-
90 
-
91 } // namespace
-
92 
-
93 MP4MediaParser::MP4MediaParser()
-
94  : state_(kWaitingForInit),
-
95  decryption_key_source_(NULL),
-
96  moof_head_(0),
-
97  mdat_tail_(0) {}
-
98 
-
99 MP4MediaParser::~MP4MediaParser() {}
-
100 
-
101 void MP4MediaParser::Init(const InitCB& init_cb,
-
102  const NewSampleCB& new_sample_cb,
-
103  KeySource* decryption_key_source) {
-
104  DCHECK_EQ(state_, kWaitingForInit);
-
105  DCHECK(init_cb_.is_null());
-
106  DCHECK(!init_cb.is_null());
-
107  DCHECK(!new_sample_cb.is_null());
-
108 
-
109  ChangeState(kParsingBoxes);
-
110  init_cb_ = init_cb;
-
111  new_sample_cb_ = new_sample_cb;
-
112  decryption_key_source_ = decryption_key_source;
-
113  if (decryption_key_source)
-
114  decryptor_source_.reset(new DecryptorSource(decryption_key_source));
+
57  case FOURCC_Opus:
+
58  return kCodecOpus;
+
59  case FOURCC_dtsc:
+
60  return kCodecDTSC;
+
61  case FOURCC_dtsh:
+
62  return kCodecDTSH;
+
63  case FOURCC_dtsl:
+
64  return kCodecDTSL;
+
65  case FOURCC_dtse:
+
66  return kCodecDTSE;
+
67  case FOURCC_dtsp:
+
68  return kCodecDTSP;
+
69  case FOURCC_dtsm:
+
70  return kCodecDTSM;
+
71  case FOURCC_ac_3:
+
72  return kCodecAC3;
+
73  case FOURCC_ec_3:
+
74  return kCodecEAC3;
+
75  default:
+
76  return kUnknownCodec;
+
77  }
+
78 }
+
79 
+
80 // Default DTS audio number of channels for 5.1 channel layout.
+
81 const uint8_t kDtsAudioNumChannels = 6;
+
82 const uint64_t kNanosecondsPerSecond = 1000000000ull;
+
83 
+
84 } // namespace
+
85 
+
86 MP4MediaParser::MP4MediaParser()
+
87  : state_(kWaitingForInit),
+
88  decryption_key_source_(NULL),
+
89  moof_head_(0),
+
90  mdat_tail_(0) {}
+
91 
+
92 MP4MediaParser::~MP4MediaParser() {}
+
93 
+
94 void MP4MediaParser::Init(const InitCB& init_cb,
+
95  const NewSampleCB& new_sample_cb,
+
96  KeySource* decryption_key_source) {
+
97  DCHECK_EQ(state_, kWaitingForInit);
+
98  DCHECK(init_cb_.is_null());
+
99  DCHECK(!init_cb.is_null());
+
100  DCHECK(!new_sample_cb.is_null());
+
101 
+
102  ChangeState(kParsingBoxes);
+
103  init_cb_ = init_cb;
+
104  new_sample_cb_ = new_sample_cb;
+
105  decryption_key_source_ = decryption_key_source;
+
106  if (decryption_key_source)
+
107  decryptor_source_.reset(new DecryptorSource(decryption_key_source));
+
108 }
+
109 
+
110 void MP4MediaParser::Reset() {
+
111  queue_.Reset();
+
112  runs_.reset();
+
113  moof_head_ = 0;
+
114  mdat_tail_ = 0;
115 }
116 
-
117 void MP4MediaParser::Reset() {
-
118  queue_.Reset();
-
119  runs_.reset();
-
120  moof_head_ = 0;
-
121  mdat_tail_ = 0;
+ +
118  DCHECK_NE(state_, kWaitingForInit);
+
119  Reset();
+
120  ChangeState(kParsingBoxes);
+
121  return true;
122 }
123 
- +
124 bool MP4MediaParser::Parse(const uint8_t* buf, int size) {
125  DCHECK_NE(state_, kWaitingForInit);
-
126  Reset();
-
127  ChangeState(kParsingBoxes);
-
128  return true;
-
129 }
-
130 
-
131 bool MP4MediaParser::Parse(const uint8_t* buf, int size) {
-
132  DCHECK_NE(state_, kWaitingForInit);
+
126 
+
127  if (state_ == kError)
+
128  return false;
+
129 
+
130  queue_.Push(buf, size);
+
131 
+
132  bool result, err = false;
133 
-
134  if (state_ == kError)
-
135  return false;
-
136 
-
137  queue_.Push(buf, size);
-
138 
-
139  bool result, err = false;
-
140 
-
141  do {
-
142  if (state_ == kParsingBoxes) {
-
143  result = ParseBox(&err);
-
144  } else {
-
145  DCHECK_EQ(kEmittingSamples, state_);
-
146  result = EnqueueSample(&err);
-
147  if (result) {
-
148  int64_t max_clear = runs_->GetMaxClearOffset() + moof_head_;
-
149  err = !ReadAndDiscardMDATsUntil(max_clear);
-
150  }
-
151  }
-
152  } while (result && !err);
-
153 
-
154  if (err) {
-
155  DLOG(ERROR) << "Error while parsing MP4";
-
156  moov_.reset();
-
157  Reset();
-
158  ChangeState(kError);
-
159  return false;
-
160  }
-
161 
-
162  return true;
-
163 }
-
164 
-
165 bool MP4MediaParser::LoadMoov(const std::string& file_path) {
-
166  scoped_ptr<File, FileCloser> file(
-
167  File::OpenWithNoBuffering(file_path.c_str(), "r"));
-
168  if (!file) {
-
169  LOG(ERROR) << "Unable to open media file '" << file_path << "'";
-
170  return false;
-
171  }
-
172  if (!file->Seek(0)) {
-
173  LOG(WARNING) << "Filesystem does not support seeking on file '" << file_path
-
174  << "'";
-
175  return false;
-
176  }
-
177 
-
178  uint64_t file_position(0);
-
179  bool mdat_seen(false);
-
180  while (true) {
-
181  const uint32_t kBoxHeaderReadSize(16);
-
182  std::vector<uint8_t> buffer(kBoxHeaderReadSize);
-
183  int64_t bytes_read = file->Read(&buffer[0], kBoxHeaderReadSize);
-
184  if (bytes_read == 0) {
-
185  LOG(ERROR) << "Could not find 'moov' box in file '" << file_path << "'";
-
186  return false;
-
187  }
-
188  if (bytes_read < kBoxHeaderReadSize) {
-
189  LOG(ERROR) << "Error reading media file '" << file_path << "'";
-
190  return false;
-
191  }
-
192  uint64_t box_size;
-
193  FourCC box_type;
-
194  bool err;
-
195  if (!BoxReader::StartBox(&buffer[0], kBoxHeaderReadSize, &box_type,
-
196  &box_size, &err)) {
-
197  LOG(ERROR) << "Could not start box from file '" << file_path << "'";
-
198  return false;
-
199  }
-
200  if (box_type == FOURCC_mdat) {
-
201  mdat_seen = true;
-
202  } else if (box_type == FOURCC_moov) {
-
203  if (!mdat_seen) {
-
204  // 'moov' is before 'mdat'. Nothing to do.
-
205  break;
-
206  }
-
207  // 'mdat' before 'moov'. Read and parse 'moov'.
-
208  if (!Parse(&buffer[0], bytes_read)) {
-
209  LOG(ERROR) << "Error parsing mp4 file '" << file_path << "'";
-
210  return false;
-
211  }
-
212  uint64_t bytes_to_read = box_size - bytes_read;
-
213  buffer.resize(bytes_to_read);
-
214  while (bytes_to_read > 0) {
-
215  bytes_read = file->Read(&buffer[0], bytes_to_read);
-
216  if (bytes_read <= 0) {
-
217  LOG(ERROR) << "Error reading 'moov' contents from file '" << file_path
-
218  << "'";
-
219  return false;
-
220  }
-
221  if (!Parse(&buffer[0], bytes_read)) {
-
222  LOG(ERROR) << "Error parsing mp4 file '" << file_path << "'";
-
223  return false;
-
224  }
-
225  bytes_to_read -= bytes_read;
-
226  }
-
227  queue_.Reset(); // So that we don't need to adjust data offsets.
-
228  mdat_tail_ = 0; // So it will skip boxes until mdat.
-
229  break; // Done.
-
230  }
-
231  file_position += box_size;
-
232  if (!file->Seek(file_position)) {
-
233  LOG(ERROR) << "Error skipping box in mp4 file '" << file_path << "'";
-
234  return false;
-
235  }
-
236  }
-
237  return true;
-
238 }
+
134  do {
+
135  if (state_ == kParsingBoxes) {
+
136  result = ParseBox(&err);
+
137  } else {
+
138  DCHECK_EQ(kEmittingSamples, state_);
+
139  result = EnqueueSample(&err);
+
140  if (result) {
+
141  int64_t max_clear = runs_->GetMaxClearOffset() + moof_head_;
+
142  err = !ReadAndDiscardMDATsUntil(max_clear);
+
143  }
+
144  }
+
145  } while (result && !err);
+
146 
+
147  if (err) {
+
148  DLOG(ERROR) << "Error while parsing MP4";
+
149  moov_.reset();
+
150  Reset();
+
151  ChangeState(kError);
+
152  return false;
+
153  }
+
154 
+
155  return true;
+
156 }
+
157 
+
158 bool MP4MediaParser::LoadMoov(const std::string& file_path) {
+
159  scoped_ptr<File, FileCloser> file(
+
160  File::OpenWithNoBuffering(file_path.c_str(), "r"));
+
161  if (!file) {
+
162  LOG(ERROR) << "Unable to open media file '" << file_path << "'";
+
163  return false;
+
164  }
+
165  if (!file->Seek(0)) {
+
166  LOG(WARNING) << "Filesystem does not support seeking on file '" << file_path
+
167  << "'";
+
168  return false;
+
169  }
+
170 
+
171  uint64_t file_position(0);
+
172  bool mdat_seen(false);
+
173  while (true) {
+
174  const uint32_t kBoxHeaderReadSize(16);
+
175  std::vector<uint8_t> buffer(kBoxHeaderReadSize);
+
176  int64_t bytes_read = file->Read(&buffer[0], kBoxHeaderReadSize);
+
177  if (bytes_read == 0) {
+
178  LOG(ERROR) << "Could not find 'moov' box in file '" << file_path << "'";
+
179  return false;
+
180  }
+
181  if (bytes_read < kBoxHeaderReadSize) {
+
182  LOG(ERROR) << "Error reading media file '" << file_path << "'";
+
183  return false;
+
184  }
+
185  uint64_t box_size;
+
186  FourCC box_type;
+
187  bool err;
+
188  if (!BoxReader::StartBox(&buffer[0], kBoxHeaderReadSize, &box_type,
+
189  &box_size, &err)) {
+
190  LOG(ERROR) << "Could not start box from file '" << file_path << "'";
+
191  return false;
+
192  }
+
193  if (box_type == FOURCC_mdat) {
+
194  mdat_seen = true;
+
195  } else if (box_type == FOURCC_moov) {
+
196  if (!mdat_seen) {
+
197  // 'moov' is before 'mdat'. Nothing to do.
+
198  break;
+
199  }
+
200  // 'mdat' before 'moov'. Read and parse 'moov'.
+
201  if (!Parse(&buffer[0], bytes_read)) {
+
202  LOG(ERROR) << "Error parsing mp4 file '" << file_path << "'";
+
203  return false;
+
204  }
+
205  uint64_t bytes_to_read = box_size - bytes_read;
+
206  buffer.resize(bytes_to_read);
+
207  while (bytes_to_read > 0) {
+
208  bytes_read = file->Read(&buffer[0], bytes_to_read);
+
209  if (bytes_read <= 0) {
+
210  LOG(ERROR) << "Error reading 'moov' contents from file '" << file_path
+
211  << "'";
+
212  return false;
+
213  }
+
214  if (!Parse(&buffer[0], bytes_read)) {
+
215  LOG(ERROR) << "Error parsing mp4 file '" << file_path << "'";
+
216  return false;
+
217  }
+
218  bytes_to_read -= bytes_read;
+
219  }
+
220  queue_.Reset(); // So that we don't need to adjust data offsets.
+
221  mdat_tail_ = 0; // So it will skip boxes until mdat.
+
222  break; // Done.
+
223  }
+
224  file_position += box_size;
+
225  if (!file->Seek(file_position)) {
+
226  LOG(ERROR) << "Error skipping box in mp4 file '" << file_path << "'";
+
227  return false;
+
228  }
+
229  }
+
230  return true;
+
231 }
+
232 
+
233 bool MP4MediaParser::ParseBox(bool* err) {
+
234  const uint8_t* buf;
+
235  int size;
+
236  queue_.Peek(&buf, &size);
+
237  if (!size)
+
238  return false;
239 
-
240 bool MP4MediaParser::ParseBox(bool* err) {
-
241  const uint8_t* buf;
-
242  int size;
-
243  queue_.Peek(&buf, &size);
-
244  if (!size)
-
245  return false;
-
246 
-
247  scoped_ptr<BoxReader> reader(BoxReader::ReadBox(buf, size, err));
-
248  if (reader.get() == NULL)
-
249  return false;
-
250 
-
251  if (reader->type() == FOURCC_mdat) {
-
252  // The code ends up here only if a MOOV box is not yet seen.
-
253  DCHECK(!moov_);
-
254 
-
255  NOTIMPLEMENTED() << " Files with MDAT before MOOV is not supported yet.";
-
256  *err = true;
-
257  return false;
-
258  }
-
259 
-
260  // Set up mdat offset for ReadMDATsUntil().
-
261  mdat_tail_ = queue_.head() + reader->size();
-
262 
-
263  if (reader->type() == FOURCC_moov) {
-
264  *err = !ParseMoov(reader.get());
-
265  } else if (reader->type() == FOURCC_moof) {
-
266  moof_head_ = queue_.head();
-
267  *err = !ParseMoof(reader.get());
-
268 
-
269  // Return early to avoid evicting 'moof' data from queue. Auxiliary info may
-
270  // be located anywhere in the file, including inside the 'moof' itself.
-
271  // (Since 'default-base-is-moof' is mandated, no data references can come
-
272  // before the head of the 'moof', so keeping this box around is sufficient.)
-
273  return !(*err);
-
274  } else {
-
275  VLOG(2) << "Skipping top-level box: " << FourCCToString(reader->type());
-
276  }
-
277 
-
278  queue_.Pop(reader->size());
-
279  return !(*err);
-
280 }
-
281 
-
282 bool MP4MediaParser::ParseMoov(BoxReader* reader) {
-
283  if (moov_)
-
284  return true; // Already parsed the 'moov' box.
-
285 
-
286  moov_.reset(new Movie);
-
287  RCHECK(moov_->Parse(reader));
-
288  runs_.reset();
-
289 
-
290  std::vector<scoped_refptr<StreamInfo> > streams;
-
291 
-
292  for (std::vector<Track>::const_iterator track = moov_->tracks.begin();
-
293  track != moov_->tracks.end(); ++track) {
-
294  const uint32_t timescale = track->media.header.timescale;
-
295 
-
296  // Calculate duration (based on timescale).
-
297  uint64_t duration = 0;
-
298  if (track->media.header.duration > 0) {
-
299  duration = track->media.header.duration;
-
300  } else if (moov_->extends.header.fragment_duration > 0) {
-
301  DCHECK(moov_->header.timescale != 0);
-
302  duration = Rescale(moov_->extends.header.fragment_duration,
-
303  moov_->header.timescale,
-
304  timescale);
-
305  } else if (moov_->header.duration > 0 &&
-
306  moov_->header.duration != std::numeric_limits<uint64_t>::max()) {
-
307  DCHECK(moov_->header.timescale != 0);
-
308  duration =
-
309  Rescale(moov_->header.duration, moov_->header.timescale, timescale);
-
310  }
-
311 
-
312  const SampleDescription& samp_descr =
-
313  track->media.information.sample_table.description;
-
314 
-
315  size_t desc_idx = 0;
-
316 
-
317  // Read sample description index from mvex if it exists otherwise read
-
318  // from the first entry in Sample To Chunk box.
-
319  if (moov_->extends.tracks.size() > 0) {
-
320  for (size_t t = 0; t < moov_->extends.tracks.size(); t++) {
-
321  const TrackExtends& trex = moov_->extends.tracks[t];
-
322  if (trex.track_id == track->header.track_id) {
-
323  desc_idx = trex.default_sample_description_index;
-
324  break;
-
325  }
-
326  }
-
327  } else {
-
328  const std::vector<ChunkInfo>& chunk_info =
-
329  track->media.information.sample_table.sample_to_chunk.chunk_info;
-
330  RCHECK(chunk_info.size() > 0);
-
331  desc_idx = chunk_info[0].sample_description_index;
-
332  }
-
333  RCHECK(desc_idx > 0);
-
334  desc_idx -= 1; // BMFF descriptor index is one-based
-
335 
-
336  if (samp_descr.type == kAudio) {
-
337  RCHECK(!samp_descr.audio_entries.empty());
-
338 
-
339  // It is not uncommon to find otherwise-valid files with incorrect sample
-
340  // description indices, so we fail gracefully in that case.
-
341  if (desc_idx >= samp_descr.audio_entries.size())
-
342  desc_idx = 0;
-
343 
-
344  const AudioSampleEntry& entry = samp_descr.audio_entries[desc_idx];
-
345  const FourCC actual_format = entry.GetActualFormat();
-
346  AudioCodec codec = FourCCToAudioCodec(actual_format);
-
347  uint8_t num_channels = 0;
-
348  uint32_t sampling_frequency = 0;
-
349  uint64_t codec_delay_ns = 0;
-
350  uint8_t audio_object_type = 0;
-
351  uint32_t max_bitrate = 0;
-
352  uint32_t avg_bitrate = 0;
-
353  std::vector<uint8_t> codec_config;
-
354 
-
355  switch (actual_format) {
-
356  case FOURCC_mp4a:
-
357  // Check if it is MPEG4 AAC defined in ISO 14496 Part 3 or
-
358  // supported MPEG2 AAC variants.
-
359  if (entry.esds.es_descriptor.IsAAC()) {
-
360  codec = kCodecAAC;
-
361  const AACAudioSpecificConfig& aac_audio_specific_config =
-
362  entry.esds.aac_audio_specific_config;
-
363  num_channels = aac_audio_specific_config.num_channels();
-
364  sampling_frequency = aac_audio_specific_config.frequency();
-
365  audio_object_type = aac_audio_specific_config.audio_object_type();
-
366  codec_config = entry.esds.es_descriptor.decoder_specific_info();
-
367  break;
-
368  } else if (entry.esds.es_descriptor.IsDTS()) {
-
369  ObjectType audio_type = entry.esds.es_descriptor.object_type();
-
370  switch (audio_type) {
-
371  case kDTSC:
-
372  codec = kCodecDTSC;
-
373  break;
-
374  case kDTSE:
-
375  codec = kCodecDTSE;
-
376  break;
-
377  case kDTSH:
-
378  codec = kCodecDTSH;
-
379  break;
-
380  case kDTSL:
-
381  codec = kCodecDTSL;
-
382  break;
-
383  default:
-
384  LOG(ERROR) << "Unsupported audio type " << audio_type
-
385  << " in stsd box.";
-
386  return false;
-
387  }
-
388  num_channels = entry.esds.aac_audio_specific_config.num_channels();
-
389  // For dts audio in esds, current supported number of channels is 6
-
390  // as the only supported channel layout is 5.1.
-
391  if (num_channels != kDtsAudioNumChannels) {
-
392  LOG(ERROR) << "Unsupported channel count " << num_channels
-
393  << " for audio type " << audio_type << ".";
-
394  return false;
-
395  }
-
396  sampling_frequency = entry.samplerate;
-
397  max_bitrate = entry.esds.es_descriptor.max_bitrate();
-
398  avg_bitrate = entry.esds.es_descriptor.avg_bitrate();
-
399  } else {
-
400  LOG(ERROR) << "Unsupported audio format 0x" << std::hex
-
401  << actual_format << " in stsd box.";
-
402  return false;
-
403  }
-
404  break;
-
405  case FOURCC_dtsc:
-
406  FALLTHROUGH_INTENDED;
-
407  case FOURCC_dtsh:
-
408  FALLTHROUGH_INTENDED;
-
409  case FOURCC_dtsl:
-
410  FALLTHROUGH_INTENDED;
-
411  case FOURCC_dtse:
-
412  FALLTHROUGH_INTENDED;
-
413  case FOURCC_dtsm:
-
414  codec_config = entry.ddts.extra_data;
-
415  max_bitrate = entry.ddts.max_bitrate;
-
416  avg_bitrate = entry.ddts.avg_bitrate;
-
417  num_channels = entry.channelcount;
-
418  sampling_frequency = entry.samplerate;
-
419  break;
-
420  case FOURCC_ac_3:
-
421  codec_config = entry.dac3.data;
-
422  num_channels = entry.channelcount;
-
423  sampling_frequency = entry.samplerate;
-
424  break;
-
425  case FOURCC_ec_3:
-
426  codec_config = entry.dec3.data;
-
427  num_channels = entry.channelcount;
-
428  sampling_frequency = entry.samplerate;
-
429  break;
-
430  case FOURCC_Opus:
-
431  codec_config = entry.dops.opus_identification_header;
-
432  num_channels = entry.channelcount;
-
433  sampling_frequency = entry.samplerate;
-
434  RCHECK(sampling_frequency != 0);
-
435  codec_delay_ns =
-
436  entry.dops.preskip * kNanosecondsPerSecond / sampling_frequency;
-
437  break;
-
438  default:
-
439  LOG(ERROR) << "Unsupported audio format 0x" << std::hex
-
440  << actual_format << " in stsd box.";
-
441  return false;
-
442  }
-
443 
-
444  // Extract possible seek preroll.
-
445  uint64_t seek_preroll_ns = 0;
-
446  for (const auto& sample_group_description :
-
447  track->media.information.sample_table.sample_group_descriptions) {
-
448  if (sample_group_description.grouping_type != FOURCC_roll)
-
449  continue;
-
450  const auto& audio_roll_recovery_entries =
-
451  sample_group_description.audio_roll_recovery_entries;
-
452  if (audio_roll_recovery_entries.size() != 1) {
-
453  LOG(WARNING) << "Unexpected number of entries in "
-
454  "SampleGroupDescription table with grouping type "
-
455  "'roll'.";
-
456  break;
-
457  }
-
458  const int16_t roll_distance_in_samples =
-
459  audio_roll_recovery_entries[0].roll_distance;
-
460  if (roll_distance_in_samples < 0) {
-
461  RCHECK(sampling_frequency != 0);
-
462  seek_preroll_ns = kNanosecondsPerSecond *
-
463  (-roll_distance_in_samples) / sampling_frequency;
-
464  } else {
-
465  LOG(WARNING)
-
466  << "Roll distance is supposed to be negative, but seeing "
-
467  << roll_distance_in_samples;
-
468  }
-
469  break;
-
470  }
-
471 
-
472  const bool is_encrypted =
-
473  entry.sinf.info.track_encryption.default_is_protected == 1;
-
474  DVLOG(1) << "is_audio_track_encrypted_: " << is_encrypted;
-
475  streams.push_back(new AudioStreamInfo(
-
476  track->header.track_id,
-
477  timescale,
-
478  duration,
-
479  codec,
-
480  AudioStreamInfo::GetCodecString(codec, audio_object_type),
-
481  track->media.header.language.code,
-
482  entry.samplesize,
-
483  num_channels,
-
484  sampling_frequency,
-
485  seek_preroll_ns,
-
486  codec_delay_ns,
-
487  max_bitrate,
-
488  avg_bitrate,
-
489  codec_config.data(),
-
490  codec_config.size(),
-
491  is_encrypted));
-
492  }
+
240  scoped_ptr<BoxReader> reader(BoxReader::ReadBox(buf, size, err));
+
241  if (reader.get() == NULL)
+
242  return false;
+
243 
+
244  if (reader->type() == FOURCC_mdat) {
+
245  // The code ends up here only if a MOOV box is not yet seen.
+
246  DCHECK(!moov_);
+
247 
+
248  NOTIMPLEMENTED() << " Files with MDAT before MOOV is not supported yet.";
+
249  *err = true;
+
250  return false;
+
251  }
+
252 
+
253  // Set up mdat offset for ReadMDATsUntil().
+
254  mdat_tail_ = queue_.head() + reader->size();
+
255 
+
256  if (reader->type() == FOURCC_moov) {
+
257  *err = !ParseMoov(reader.get());
+
258  } else if (reader->type() == FOURCC_moof) {
+
259  moof_head_ = queue_.head();
+
260  *err = !ParseMoof(reader.get());
+
261 
+
262  // Return early to avoid evicting 'moof' data from queue. Auxiliary info may
+
263  // be located anywhere in the file, including inside the 'moof' itself.
+
264  // (Since 'default-base-is-moof' is mandated, no data references can come
+
265  // before the head of the 'moof', so keeping this box around is sufficient.)
+
266  return !(*err);
+
267  } else {
+
268  VLOG(2) << "Skipping top-level box: " << FourCCToString(reader->type());
+
269  }
+
270 
+
271  queue_.Pop(reader->size());
+
272  return !(*err);
+
273 }
+
274 
+
275 bool MP4MediaParser::ParseMoov(BoxReader* reader) {
+
276  if (moov_)
+
277  return true; // Already parsed the 'moov' box.
+
278 
+
279  moov_.reset(new Movie);
+
280  RCHECK(moov_->Parse(reader));
+
281  runs_.reset();
+
282 
+
283  std::vector<scoped_refptr<StreamInfo> > streams;
+
284 
+
285  for (std::vector<Track>::const_iterator track = moov_->tracks.begin();
+
286  track != moov_->tracks.end(); ++track) {
+
287  const uint32_t timescale = track->media.header.timescale;
+
288 
+
289  // Calculate duration (based on timescale).
+
290  uint64_t duration = 0;
+
291  if (track->media.header.duration > 0) {
+
292  duration = track->media.header.duration;
+
293  } else if (moov_->extends.header.fragment_duration > 0) {
+
294  DCHECK(moov_->header.timescale != 0);
+
295  duration = Rescale(moov_->extends.header.fragment_duration,
+
296  moov_->header.timescale,
+
297  timescale);
+
298  } else if (moov_->header.duration > 0 &&
+
299  moov_->header.duration != std::numeric_limits<uint64_t>::max()) {
+
300  DCHECK(moov_->header.timescale != 0);
+
301  duration =
+
302  Rescale(moov_->header.duration, moov_->header.timescale, timescale);
+
303  }
+
304 
+
305  const SampleDescription& samp_descr =
+
306  track->media.information.sample_table.description;
+
307 
+
308  size_t desc_idx = 0;
+
309 
+
310  // Read sample description index from mvex if it exists otherwise read
+
311  // from the first entry in Sample To Chunk box.
+
312  if (moov_->extends.tracks.size() > 0) {
+
313  for (size_t t = 0; t < moov_->extends.tracks.size(); t++) {
+
314  const TrackExtends& trex = moov_->extends.tracks[t];
+
315  if (trex.track_id == track->header.track_id) {
+
316  desc_idx = trex.default_sample_description_index;
+
317  break;
+
318  }
+
319  }
+
320  } else {
+
321  const std::vector<ChunkInfo>& chunk_info =
+
322  track->media.information.sample_table.sample_to_chunk.chunk_info;
+
323  RCHECK(chunk_info.size() > 0);
+
324  desc_idx = chunk_info[0].sample_description_index;
+
325  }
+
326  RCHECK(desc_idx > 0);
+
327  desc_idx -= 1; // BMFF descriptor index is one-based
+
328 
+
329  if (samp_descr.type == kAudio) {
+
330  RCHECK(!samp_descr.audio_entries.empty());
+
331 
+
332  // It is not uncommon to find otherwise-valid files with incorrect sample
+
333  // description indices, so we fail gracefully in that case.
+
334  if (desc_idx >= samp_descr.audio_entries.size())
+
335  desc_idx = 0;
+
336 
+
337  const AudioSampleEntry& entry = samp_descr.audio_entries[desc_idx];
+
338  const FourCC actual_format = entry.GetActualFormat();
+
339  Codec codec = FourCCToCodec(actual_format);
+
340  uint8_t num_channels = 0;
+
341  uint32_t sampling_frequency = 0;
+
342  uint64_t codec_delay_ns = 0;
+
343  uint8_t audio_object_type = 0;
+
344  uint32_t max_bitrate = 0;
+
345  uint32_t avg_bitrate = 0;
+
346  std::vector<uint8_t> codec_config;
+
347 
+
348  switch (actual_format) {
+
349  case FOURCC_mp4a:
+
350  // Check if it is MPEG4 AAC defined in ISO 14496 Part 3 or
+
351  // supported MPEG2 AAC variants.
+
352  if (entry.esds.es_descriptor.IsAAC()) {
+
353  codec = kCodecAAC;
+
354  const AACAudioSpecificConfig& aac_audio_specific_config =
+
355  entry.esds.aac_audio_specific_config;
+
356  num_channels = aac_audio_specific_config.num_channels();
+
357  sampling_frequency = aac_audio_specific_config.frequency();
+
358  audio_object_type = aac_audio_specific_config.audio_object_type();
+
359  codec_config = entry.esds.es_descriptor.decoder_specific_info();
+
360  break;
+
361  } else if (entry.esds.es_descriptor.IsDTS()) {
+
362  ObjectType audio_type = entry.esds.es_descriptor.object_type();
+
363  switch (audio_type) {
+
364  case kDTSC:
+
365  codec = kCodecDTSC;
+
366  break;
+
367  case kDTSE:
+
368  codec = kCodecDTSE;
+
369  break;
+
370  case kDTSH:
+
371  codec = kCodecDTSH;
+
372  break;
+
373  case kDTSL:
+
374  codec = kCodecDTSL;
+
375  break;
+
376  default:
+
377  LOG(ERROR) << "Unsupported audio type " << audio_type
+
378  << " in stsd box.";
+
379  return false;
+
380  }
+
381  num_channels = entry.esds.aac_audio_specific_config.num_channels();
+
382  // For dts audio in esds, current supported number of channels is 6
+
383  // as the only supported channel layout is 5.1.
+
384  if (num_channels != kDtsAudioNumChannels) {
+
385  LOG(ERROR) << "Unsupported channel count " << num_channels
+
386  << " for audio type " << audio_type << ".";
+
387  return false;
+
388  }
+
389  sampling_frequency = entry.samplerate;
+
390  max_bitrate = entry.esds.es_descriptor.max_bitrate();
+
391  avg_bitrate = entry.esds.es_descriptor.avg_bitrate();
+
392  } else {
+
393  LOG(ERROR) << "Unsupported audio format 0x" << std::hex
+
394  << actual_format << " in stsd box.";
+
395  return false;
+
396  }
+
397  break;
+
398  case FOURCC_dtsc:
+
399  FALLTHROUGH_INTENDED;
+
400  case FOURCC_dtsh:
+
401  FALLTHROUGH_INTENDED;
+
402  case FOURCC_dtsl:
+
403  FALLTHROUGH_INTENDED;
+
404  case FOURCC_dtse:
+
405  FALLTHROUGH_INTENDED;
+
406  case FOURCC_dtsm:
+
407  codec_config = entry.ddts.extra_data;
+
408  max_bitrate = entry.ddts.max_bitrate;
+
409  avg_bitrate = entry.ddts.avg_bitrate;
+
410  num_channels = entry.channelcount;
+
411  sampling_frequency = entry.samplerate;
+
412  break;
+
413  case FOURCC_ac_3:
+
414  codec_config = entry.dac3.data;
+
415  num_channels = entry.channelcount;
+
416  sampling_frequency = entry.samplerate;
+
417  break;
+
418  case FOURCC_ec_3:
+
419  codec_config = entry.dec3.data;
+
420  num_channels = entry.channelcount;
+
421  sampling_frequency = entry.samplerate;
+
422  break;
+
423  case FOURCC_Opus:
+
424  codec_config = entry.dops.opus_identification_header;
+
425  num_channels = entry.channelcount;
+
426  sampling_frequency = entry.samplerate;
+
427  RCHECK(sampling_frequency != 0);
+
428  codec_delay_ns =
+
429  entry.dops.preskip * kNanosecondsPerSecond / sampling_frequency;
+
430  break;
+
431  default:
+
432  LOG(ERROR) << "Unsupported audio format 0x" << std::hex
+
433  << actual_format << " in stsd box.";
+
434  return false;
+
435  }
+
436 
+
437  // Extract possible seek preroll.
+
438  uint64_t seek_preroll_ns = 0;
+
439  for (const auto& sample_group_description :
+
440  track->media.information.sample_table.sample_group_descriptions) {
+
441  if (sample_group_description.grouping_type != FOURCC_roll)
+
442  continue;
+
443  const auto& audio_roll_recovery_entries =
+
444  sample_group_description.audio_roll_recovery_entries;
+
445  if (audio_roll_recovery_entries.size() != 1) {
+
446  LOG(WARNING) << "Unexpected number of entries in "
+
447  "SampleGroupDescription table with grouping type "
+
448  "'roll'.";
+
449  break;
+
450  }
+
451  const int16_t roll_distance_in_samples =
+
452  audio_roll_recovery_entries[0].roll_distance;
+
453  if (roll_distance_in_samples < 0) {
+
454  RCHECK(sampling_frequency != 0);
+
455  seek_preroll_ns = kNanosecondsPerSecond *
+
456  (-roll_distance_in_samples) / sampling_frequency;
+
457  } else {
+
458  LOG(WARNING)
+
459  << "Roll distance is supposed to be negative, but seeing "
+
460  << roll_distance_in_samples;
+
461  }
+
462  break;
+
463  }
+
464 
+
465  const bool is_encrypted =
+
466  entry.sinf.info.track_encryption.default_is_protected == 1;
+
467  DVLOG(1) << "is_audio_track_encrypted_: " << is_encrypted;
+
468  streams.push_back(new AudioStreamInfo(
+
469  track->header.track_id, timescale, duration, codec,
+
470  AudioStreamInfo::GetCodecString(codec, audio_object_type),
+
471  codec_config.data(), codec_config.size(), entry.samplesize,
+
472  num_channels, sampling_frequency, seek_preroll_ns, codec_delay_ns,
+
473  max_bitrate, avg_bitrate, track->media.header.language.code,
+
474  is_encrypted));
+
475  }
+
476 
+
477  if (samp_descr.type == kVideo) {
+
478  RCHECK(!samp_descr.video_entries.empty());
+
479  if (desc_idx >= samp_descr.video_entries.size())
+
480  desc_idx = 0;
+
481  const VideoSampleEntry& entry = samp_descr.video_entries[desc_idx];
+
482 
+
483  uint32_t coded_width = entry.width;
+
484  uint32_t coded_height = entry.height;
+
485  uint32_t pixel_width = entry.pixel_aspect.h_spacing;
+
486  uint32_t pixel_height = entry.pixel_aspect.v_spacing;
+
487  if (pixel_width == 0 && pixel_height == 0) {
+
488  pixel_width = 1;
+
489  pixel_height = 1;
+
490  }
+
491  std::string codec_string;
+
492  uint8_t nalu_length_size = 0;
493 
-
494  if (samp_descr.type == kVideo) {
-
495  RCHECK(!samp_descr.video_entries.empty());
-
496  if (desc_idx >= samp_descr.video_entries.size())
-
497  desc_idx = 0;
-
498  const VideoSampleEntry& entry = samp_descr.video_entries[desc_idx];
-
499 
-
500  uint32_t coded_width = entry.width;
-
501  uint32_t coded_height = entry.height;
-
502  uint32_t pixel_width = entry.pixel_aspect.h_spacing;
-
503  uint32_t pixel_height = entry.pixel_aspect.v_spacing;
-
504  if (pixel_width == 0 && pixel_height == 0) {
-
505  pixel_width = 1;
-
506  pixel_height = 1;
-
507  }
-
508  std::string codec_string;
-
509  uint8_t nalu_length_size = 0;
-
510 
-
511  const FourCC actual_format = entry.GetActualFormat();
-
512  const VideoCodec video_codec = FourCCToVideoCodec(actual_format);
-
513  switch (actual_format) {
-
514  case FOURCC_avc1: {
-
515  AVCDecoderConfigurationRecord avc_config;
-
516  if (!avc_config.Parse(entry.codec_configuration.data)) {
-
517  LOG(ERROR) << "Failed to parse avcc.";
-
518  return false;
-
519  }
-
520  codec_string = avc_config.GetCodecString();
-
521  nalu_length_size = avc_config.nalu_length_size();
-
522 
-
523  if (coded_width != avc_config.coded_width() ||
-
524  coded_height != avc_config.coded_height()) {
-
525  LOG(WARNING) << "Resolution in VisualSampleEntry (" << coded_width
-
526  << "," << coded_height
-
527  << ") does not match with resolution in "
-
528  "AVCDecoderConfigurationRecord ("
-
529  << avc_config.coded_width() << ","
-
530  << avc_config.coded_height()
-
531  << "). Use AVCDecoderConfigurationRecord.";
-
532  coded_width = avc_config.coded_width();
-
533  coded_height = avc_config.coded_height();
-
534  }
-
535 
-
536  if (pixel_width != avc_config.pixel_width() ||
-
537  pixel_height != avc_config.pixel_height()) {
-
538  LOG_IF(WARNING, pixel_width != 1 || pixel_height != 1)
-
539  << "Pixel aspect ratio in PASP box (" << pixel_width << ","
-
540  << pixel_height
-
541  << ") does not match with SAR in AVCDecoderConfigurationRecord "
-
542  "("
-
543  << avc_config.pixel_width() << "," << avc_config.pixel_height()
-
544  << "). Use AVCDecoderConfigurationRecord.";
-
545  pixel_width = avc_config.pixel_width();
-
546  pixel_height = avc_config.pixel_height();
-
547  }
-
548  break;
-
549  }
-
550  case FOURCC_hev1:
-
551  case FOURCC_hvc1: {
-
552  HEVCDecoderConfigurationRecord hevc_config;
-
553  if (!hevc_config.Parse(entry.codec_configuration.data)) {
-
554  LOG(ERROR) << "Failed to parse hevc.";
-
555  return false;
-
556  }
-
557  codec_string = hevc_config.GetCodecString(video_codec);
-
558  nalu_length_size = hevc_config.nalu_length_size();
-
559  break;
-
560  }
-
561  case FOURCC_vp08:
-
562  case FOURCC_vp09:
-
563  case FOURCC_vp10: {
-
564  VPCodecConfigurationRecord vp_config;
-
565  if (!vp_config.ParseMP4(entry.codec_configuration.data)) {
-
566  LOG(ERROR) << "Failed to parse vpcc.";
-
567  return false;
-
568  }
-
569  codec_string = vp_config.GetCodecString(video_codec);
-
570  break;
-
571  }
-
572  default:
-
573  LOG(ERROR) << "Unsupported video format "
-
574  << FourCCToString(actual_format) << " in stsd box.";
-
575  return false;
-
576  }
-
577 
-
578  const bool is_encrypted =
-
579  entry.sinf.info.track_encryption.default_is_protected == 1;
-
580  DVLOG(1) << "is_video_track_encrypted_: " << is_encrypted;
-
581  streams.push_back(new VideoStreamInfo(
-
582  track->header.track_id, timescale, duration, video_codec,
-
583  codec_string, track->media.header.language.code, coded_width,
-
584  coded_height, pixel_width, pixel_height,
-
585  0, // trick_play_rate
-
586  nalu_length_size, entry.codec_configuration.data.data(),
-
587  entry.codec_configuration.data.size(), is_encrypted));
-
588  }
-
589  }
-
590 
-
591  init_cb_.Run(streams);
-
592  if (!FetchKeysIfNecessary(moov_->pssh))
-
593  return false;
-
594  runs_.reset(new TrackRunIterator(moov_.get()));
-
595  RCHECK(runs_->Init());
-
596  ChangeState(kEmittingSamples);
-
597  return true;
-
598 }
-
599 
-
600 bool MP4MediaParser::ParseMoof(BoxReader* reader) {
-
601  // Must already have initialization segment.
-
602  RCHECK(moov_.get());
-
603  MovieFragment moof;
-
604  RCHECK(moof.Parse(reader));
-
605  if (!runs_)
-
606  runs_.reset(new TrackRunIterator(moov_.get()));
-
607  RCHECK(runs_->Init(moof));
-
608  if (!FetchKeysIfNecessary(moof.pssh))
-
609  return false;
-
610  ChangeState(kEmittingSamples);
-
611  return true;
-
612 }
-
613 
-
614 bool MP4MediaParser::FetchKeysIfNecessary(
-
615  const std::vector<ProtectionSystemSpecificHeader>& headers) {
-
616  if (headers.empty())
+
494  const FourCC actual_format = entry.GetActualFormat();
+
495  const Codec video_codec = FourCCToCodec(actual_format);
+
496  switch (actual_format) {
+
497  case FOURCC_avc1: {
+
498  AVCDecoderConfigurationRecord avc_config;
+
499  if (!avc_config.Parse(entry.codec_configuration.data)) {
+
500  LOG(ERROR) << "Failed to parse avcc.";
+
501  return false;
+
502  }
+
503  codec_string = avc_config.GetCodecString();
+
504  nalu_length_size = avc_config.nalu_length_size();
+
505 
+
506  if (coded_width != avc_config.coded_width() ||
+
507  coded_height != avc_config.coded_height()) {
+
508  LOG(WARNING) << "Resolution in VisualSampleEntry (" << coded_width
+
509  << "," << coded_height
+
510  << ") does not match with resolution in "
+
511  "AVCDecoderConfigurationRecord ("
+
512  << avc_config.coded_width() << ","
+
513  << avc_config.coded_height()
+
514  << "). Use AVCDecoderConfigurationRecord.";
+
515  coded_width = avc_config.coded_width();
+
516  coded_height = avc_config.coded_height();
+
517  }
+
518 
+
519  if (pixel_width != avc_config.pixel_width() ||
+
520  pixel_height != avc_config.pixel_height()) {
+
521  LOG_IF(WARNING, pixel_width != 1 || pixel_height != 1)
+
522  << "Pixel aspect ratio in PASP box (" << pixel_width << ","
+
523  << pixel_height
+
524  << ") does not match with SAR in AVCDecoderConfigurationRecord "
+
525  "("
+
526  << avc_config.pixel_width() << "," << avc_config.pixel_height()
+
527  << "). Use AVCDecoderConfigurationRecord.";
+
528  pixel_width = avc_config.pixel_width();
+
529  pixel_height = avc_config.pixel_height();
+
530  }
+
531  break;
+
532  }
+
533  case FOURCC_hev1:
+
534  case FOURCC_hvc1: {
+
535  HEVCDecoderConfigurationRecord hevc_config;
+
536  if (!hevc_config.Parse(entry.codec_configuration.data)) {
+
537  LOG(ERROR) << "Failed to parse hevc.";
+
538  return false;
+
539  }
+
540  codec_string = hevc_config.GetCodecString(video_codec);
+
541  nalu_length_size = hevc_config.nalu_length_size();
+
542  break;
+
543  }
+
544  case FOURCC_vp08:
+
545  case FOURCC_vp09:
+
546  case FOURCC_vp10: {
+
547  VPCodecConfigurationRecord vp_config;
+
548  if (!vp_config.ParseMP4(entry.codec_configuration.data)) {
+
549  LOG(ERROR) << "Failed to parse vpcc.";
+
550  return false;
+
551  }
+
552  codec_string = vp_config.GetCodecString(video_codec);
+
553  break;
+
554  }
+
555  default:
+
556  LOG(ERROR) << "Unsupported video format "
+
557  << FourCCToString(actual_format) << " in stsd box.";
+
558  return false;
+
559  }
+
560 
+
561  const bool is_encrypted =
+
562  entry.sinf.info.track_encryption.default_is_protected == 1;
+
563  DVLOG(1) << "is_video_track_encrypted_: " << is_encrypted;
+
564  streams.push_back(new VideoStreamInfo(
+
565  track->header.track_id, timescale, duration, video_codec,
+
566  codec_string, entry.codec_configuration.data.data(),
+
567  entry.codec_configuration.data.size(), coded_width, coded_height,
+
568  pixel_width, pixel_height,
+
569  0, // trick_play_rate
+
570  nalu_length_size, track->media.header.language.code, is_encrypted));
+
571  }
+
572  }
+
573 
+
574  init_cb_.Run(streams);
+
575  if (!FetchKeysIfNecessary(moov_->pssh))
+
576  return false;
+
577  runs_.reset(new TrackRunIterator(moov_.get()));
+
578  RCHECK(runs_->Init());
+
579  ChangeState(kEmittingSamples);
+
580  return true;
+
581 }
+
582 
+
583 bool MP4MediaParser::ParseMoof(BoxReader* reader) {
+
584  // Must already have initialization segment.
+
585  RCHECK(moov_.get());
+
586  MovieFragment moof;
+
587  RCHECK(moof.Parse(reader));
+
588  if (!runs_)
+
589  runs_.reset(new TrackRunIterator(moov_.get()));
+
590  RCHECK(runs_->Init(moof));
+
591  if (!FetchKeysIfNecessary(moof.pssh))
+
592  return false;
+
593  ChangeState(kEmittingSamples);
+
594  return true;
+
595 }
+
596 
+
597 bool MP4MediaParser::FetchKeysIfNecessary(
+
598  const std::vector<ProtectionSystemSpecificHeader>& headers) {
+
599  if (headers.empty())
+
600  return true;
+
601 
+
602  // An error will be returned later if the samples need to be decrypted.
+
603  if (!decryption_key_source_)
+
604  return true;
+
605 
+
606  Status status;
+
607  for (std::vector<ProtectionSystemSpecificHeader>::const_iterator iter =
+
608  headers.begin(); iter != headers.end(); ++iter) {
+
609  status = decryption_key_source_->FetchKeys(iter->raw_box);
+
610  if (!status.ok()) {
+
611  // If there is an error, try using the next PSSH box and report if none
+
612  // work.
+
613  VLOG(1) << "Unable to fetch decryption keys: " << status
+
614  << ", trying the next PSSH box";
+
615  continue;
+
616  }
617  return true;
-
618 
-
619  // An error will be returned later if the samples need to be decrypted.
-
620  if (!decryption_key_source_)
-
621  return true;
-
622 
-
623  Status status;
-
624  for (std::vector<ProtectionSystemSpecificHeader>::const_iterator iter =
-
625  headers.begin(); iter != headers.end(); ++iter) {
-
626  status = decryption_key_source_->FetchKeys(iter->raw_box);
-
627  if (!status.ok()) {
-
628  // If there is an error, try using the next PSSH box and report if none
-
629  // work.
-
630  VLOG(1) << "Unable to fetch decryption keys: " << status
-
631  << ", trying the next PSSH box";
-
632  continue;
-
633  }
-
634  return true;
-
635  }
-
636 
-
637  if (!status.ok()) {
-
638  LOG(ERROR) << "Error fetching decryption keys: " << status;
-
639  return false;
-
640  }
-
641 
-
642  LOG(ERROR) << "No viable 'pssh' box found for content decryption.";
-
643  return false;
-
644 }
-
645 
-
646 bool MP4MediaParser::EnqueueSample(bool* err) {
-
647  if (!runs_->IsRunValid()) {
-
648  // Remain in kEnqueueingSamples state, discarding data, until the end of
-
649  // the current 'mdat' box has been appended to the queue.
-
650  if (!queue_.Trim(mdat_tail_))
-
651  return false;
+
618  }
+
619 
+
620  if (!status.ok()) {
+
621  LOG(ERROR) << "Error fetching decryption keys: " << status;
+
622  return false;
+
623  }
+
624 
+
625  LOG(ERROR) << "No viable 'pssh' box found for content decryption.";
+
626  return false;
+
627 }
+
628 
+
629 bool MP4MediaParser::EnqueueSample(bool* err) {
+
630  if (!runs_->IsRunValid()) {
+
631  // Remain in kEnqueueingSamples state, discarding data, until the end of
+
632  // the current 'mdat' box has been appended to the queue.
+
633  if (!queue_.Trim(mdat_tail_))
+
634  return false;
+
635 
+
636  ChangeState(kParsingBoxes);
+
637  return true;
+
638  }
+
639 
+
640  if (!runs_->IsSampleValid()) {
+
641  runs_->AdvanceRun();
+
642  return true;
+
643  }
+
644 
+
645  DCHECK(!(*err));
+
646 
+
647  const uint8_t* buf;
+
648  int buf_size;
+
649  queue_.Peek(&buf, &buf_size);
+
650  if (!buf_size)
+
651  return false;
652 
-
653  ChangeState(kParsingBoxes);
-
654  return true;
-
655  }
+
653  // Skip this entire track if it is not audio nor video.
+
654  if (!runs_->is_audio() && !runs_->is_video())
+
655  runs_->AdvanceRun();
656 
-
657  if (!runs_->IsSampleValid()) {
-
658  runs_->AdvanceRun();
-
659  return true;
-
660  }
-
661 
-
662  DCHECK(!(*err));
-
663 
-
664  const uint8_t* buf;
-
665  int buf_size;
-
666  queue_.Peek(&buf, &buf_size);
-
667  if (!buf_size)
-
668  return false;
-
669 
-
670  // Skip this entire track if it is not audio nor video.
-
671  if (!runs_->is_audio() && !runs_->is_video())
-
672  runs_->AdvanceRun();
-
673 
-
674  // Attempt to cache the auxiliary information first. Aux info is usually
-
675  // placed in a contiguous block before the sample data, rather than being
-
676  // interleaved. If we didn't cache it, this would require that we retain the
-
677  // start of the segment buffer while reading samples. Aux info is typically
-
678  // quite small compared to sample data, so this pattern is useful on
-
679  // memory-constrained devices where the source buffer consumes a substantial
-
680  // portion of the total system memory.
-
681  if (runs_->AuxInfoNeedsToBeCached()) {
-
682  queue_.PeekAt(runs_->aux_info_offset() + moof_head_, &buf, &buf_size);
-
683  if (buf_size < runs_->aux_info_size())
-
684  return false;
-
685  *err = !runs_->CacheAuxInfo(buf, buf_size);
-
686  return !*err;
-
687  }
-
688 
-
689  int64_t sample_offset = runs_->sample_offset() + moof_head_;
-
690  queue_.PeekAt(sample_offset, &buf, &buf_size);
-
691  if (buf_size < runs_->sample_size()) {
-
692  if (sample_offset < queue_.head()) {
-
693  LOG(ERROR) << "Incorrect sample offset " << sample_offset
-
694  << " < " << queue_.head();
-
695  *err = true;
-
696  }
-
697  return false;
-
698  }
-
699 
-
700  scoped_refptr<MediaSample> stream_sample(MediaSample::CopyFrom(
-
701  buf, runs_->sample_size(), runs_->is_keyframe()));
-
702  if (runs_->is_encrypted()) {
-
703  if (!decryptor_source_) {
-
704  *err = true;
-
705  LOG(ERROR) << "Encrypted media sample encountered, but decryption is not "
-
706  "enabled";
-
707  return false;
-
708  }
-
709 
-
710  scoped_ptr<DecryptConfig> decrypt_config = runs_->GetDecryptConfig();
-
711  if (!decrypt_config ||
-
712  !decryptor_source_->DecryptSampleBuffer(decrypt_config.get(),
-
713  stream_sample->writable_data(),
-
714  stream_sample->data_size())) {
-
715  *err = true;
-
716  LOG(ERROR) << "Cannot decrypt samples.";
-
717  return false;
-
718  }
+
657  // Attempt to cache the auxiliary information first. Aux info is usually
+
658  // placed in a contiguous block before the sample data, rather than being
+
659  // interleaved. If we didn't cache it, this would require that we retain the
+
660  // start of the segment buffer while reading samples. Aux info is typically
+
661  // quite small compared to sample data, so this pattern is useful on
+
662  // memory-constrained devices where the source buffer consumes a substantial
+
663  // portion of the total system memory.
+
664  if (runs_->AuxInfoNeedsToBeCached()) {
+
665  queue_.PeekAt(runs_->aux_info_offset() + moof_head_, &buf, &buf_size);
+
666  if (buf_size < runs_->aux_info_size())
+
667  return false;
+
668  *err = !runs_->CacheAuxInfo(buf, buf_size);
+
669  return !*err;
+
670  }
+
671 
+
672  int64_t sample_offset = runs_->sample_offset() + moof_head_;
+
673  queue_.PeekAt(sample_offset, &buf, &buf_size);
+
674  if (buf_size < runs_->sample_size()) {
+
675  if (sample_offset < queue_.head()) {
+
676  LOG(ERROR) << "Incorrect sample offset " << sample_offset
+
677  << " < " << queue_.head();
+
678  *err = true;
+
679  }
+
680  return false;
+
681  }
+
682 
+
683  scoped_refptr<MediaSample> stream_sample(MediaSample::CopyFrom(
+
684  buf, runs_->sample_size(), runs_->is_keyframe()));
+
685  if (runs_->is_encrypted()) {
+
686  if (!decryptor_source_) {
+
687  *err = true;
+
688  LOG(ERROR) << "Encrypted media sample encountered, but decryption is not "
+
689  "enabled";
+
690  return false;
+
691  }
+
692 
+
693  scoped_ptr<DecryptConfig> decrypt_config = runs_->GetDecryptConfig();
+
694  if (!decrypt_config ||
+
695  !decryptor_source_->DecryptSampleBuffer(decrypt_config.get(),
+
696  stream_sample->writable_data(),
+
697  stream_sample->data_size())) {
+
698  *err = true;
+
699  LOG(ERROR) << "Cannot decrypt samples.";
+
700  return false;
+
701  }
+
702  }
+
703 
+
704  stream_sample->set_dts(runs_->dts());
+
705  stream_sample->set_pts(runs_->cts());
+
706  stream_sample->set_duration(runs_->duration());
+
707 
+
708  DVLOG(3) << "Pushing frame: "
+
709  << ", key=" << runs_->is_keyframe()
+
710  << ", dur=" << runs_->duration()
+
711  << ", dts=" << runs_->dts()
+
712  << ", cts=" << runs_->cts()
+
713  << ", size=" << runs_->sample_size();
+
714 
+
715  if (!new_sample_cb_.Run(runs_->track_id(), stream_sample)) {
+
716  *err = true;
+
717  LOG(ERROR) << "Failed to process the sample.";
+
718  return false;
719  }
720 
-
721  stream_sample->set_dts(runs_->dts());
-
722  stream_sample->set_pts(runs_->cts());
-
723  stream_sample->set_duration(runs_->duration());
+
721  runs_->AdvanceSample();
+
722  return true;
+
723 }
724 
-
725  DVLOG(3) << "Pushing frame: "
-
726  << ", key=" << runs_->is_keyframe()
-
727  << ", dur=" << runs_->duration()
-
728  << ", dts=" << runs_->dts()
-
729  << ", cts=" << runs_->cts()
-
730  << ", size=" << runs_->sample_size();
+
725 bool MP4MediaParser::ReadAndDiscardMDATsUntil(const int64_t offset) {
+
726  bool err = false;
+
727  while (mdat_tail_ < offset) {
+
728  const uint8_t* buf;
+
729  int size;
+
730  queue_.PeekAt(mdat_tail_, &buf, &size);
731 
-
732  if (!new_sample_cb_.Run(runs_->track_id(), stream_sample)) {
-
733  *err = true;
-
734  LOG(ERROR) << "Failed to process the sample.";
-
735  return false;
-
736  }
-
737 
-
738  runs_->AdvanceSample();
-
739  return true;
-
740 }
-
741 
-
742 bool MP4MediaParser::ReadAndDiscardMDATsUntil(const int64_t offset) {
-
743  bool err = false;
-
744  while (mdat_tail_ < offset) {
-
745  const uint8_t* buf;
-
746  int size;
-
747  queue_.PeekAt(mdat_tail_, &buf, &size);
-
748 
-
749  FourCC type;
-
750  uint64_t box_sz;
-
751  if (!BoxReader::StartBox(buf, size, &type, &box_sz, &err))
-
752  break;
-
753 
-
754  mdat_tail_ += box_sz;
-
755  }
-
756  queue_.Trim(std::min(mdat_tail_, offset));
-
757  return !err;
-
758 }
-
759 
-
760 void MP4MediaParser::ChangeState(State new_state) {
-
761  DVLOG(2) << "Changing state: " << new_state;
-
762  state_ = new_state;
-
763 }
-
764 
-
765 } // namespace mp4
-
766 } // namespace media
-
767 } // namespace shaka
-
static std::string GetCodecString(AudioCodec codec, uint8_t audio_object_type)
+
732  FourCC type;
+
733  uint64_t box_sz;
+
734  if (!BoxReader::StartBox(buf, size, &type, &box_sz, &err))
+
735  break;
+
736 
+
737  mdat_tail_ += box_sz;
+
738  }
+
739  queue_.Trim(std::min(mdat_tail_, offset));
+
740  return !err;
+
741 }
+
742 
+
743 void MP4MediaParser::ChangeState(State new_state) {
+
744  DVLOG(2) << "Changing state: " << new_state;
+
745  state_ = new_state;
+
746 }
+
747 
+
748 } // namespace mp4
+
749 } // namespace media
+
750 } // namespace shaka
void PeekAt(int64_t offset, const uint8_t **buf, int *size)
static File * OpenWithNoBuffering(const char *file_name, const char *mode)
Definition: file.cc:156
-
bool Flush() override WARN_UNUSED_RESULT
+
bool Flush() override WARN_UNUSED_RESULT
bool Trim(int64_t max_offset)
-
bool Parse(const uint8_t *buf, int size) override WARN_UNUSED_RESULT
+
bool Parse(const uint8_t *buf, int size) override WARN_UNUSED_RESULT
virtual Status FetchKeys(const std::vector< uint8_t > &pssh_box)=0
-
bool LoadMoov(const std::string &file_path)
+
static std::string GetCodecString(Codec codec, uint8_t audio_object_type)
+
bool LoadMoov(const std::string &file_path)
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:31
static scoped_refptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
Definition: media_sample.cc:45
-
void Init(const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source) override
+
void Init(const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source) override
DecryptorSource wraps KeySource and is responsible for decryptor management.
static bool StartBox(const uint8_t *buf, const size_t buf_size, FourCC *type, uint64_t *box_size, bool *err) WARN_UNUSED_RESULT
Definition: box_reader.cc:55
static BoxReader * ReadBox(const uint8_t *buf, const size_t buf_size, bool *err)
Definition: box_reader.cc:37
diff --git a/docs/d7/df9/byte__queue_8cc_source.html b/docs/d7/df9/byte__queue_8cc_source.html index 8e5048ae2a..6dd2c9e624 100644 --- a/docs/d7/df9/byte__queue_8cc_source.html +++ b/docs/d7/df9/byte__queue_8cc_source.html @@ -182,7 +182,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d08/classshaka_1_1media_1_1H264ByteToUnitStreamConverter.html b/docs/d8/d08/classshaka_1_1media_1_1H264ByteToUnitStreamConverter.html index 17462c5234..90a95c9fd9 100644 --- a/docs/d8/d08/classshaka_1_1media_1_1H264ByteToUnitStreamConverter.html +++ b/docs/d8/d08/classshaka_1_1media_1_1H264ByteToUnitStreamConverter.html @@ -171,7 +171,7 @@ static const size_t kUnitS diff --git a/docs/d8/d08/classshaka_1_1media_1_1WebMClusterParser-members.html b/docs/d8/d08/classshaka_1_1media_1_1WebMClusterParser-members.html index 11f1334c34..b1e1228039 100644 --- a/docs/d8/d08/classshaka_1_1media_1_1WebMClusterParser-members.html +++ b/docs/d8/d08/classshaka_1_1media_1_1WebMClusterParser-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d08/classshaka_1_1media_1_1mp2t_1_1TsWriter-members.html b/docs/d8/d08/classshaka_1_1media_1_1mp2t_1_1TsWriter-members.html index 5ab168a5e9..dcf635edb1 100644 --- a/docs/d8/d08/classshaka_1_1media_1_1mp2t_1_1TsWriter-members.html +++ b/docs/d8/d08/classshaka_1_1media_1_1mp2t_1_1TsWriter-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d08/structshaka_1_1media_1_1mp4_1_1MovieHeader-members.html b/docs/d8/d08/structshaka_1_1media_1_1mp4_1_1MovieHeader-members.html index 334de5edd1..e204fab4db 100644 --- a/docs/d8/d08/structshaka_1_1media_1_1mp4_1_1MovieHeader-members.html +++ b/docs/d8/d08/structshaka_1_1media_1_1mp4_1_1MovieHeader-members.html @@ -119,7 +119,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d0d/media__sample_8cc_source.html b/docs/d8/d0d/media__sample_8cc_source.html index 0d783713f8..96ea81edb8 100644 --- a/docs/d8/d0d/media__sample_8cc_source.html +++ b/docs/d8/d0d/media__sample_8cc_source.html @@ -195,7 +195,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d12/structshaka_1_1media_1_1mp4_1_1DecodingTime.html b/docs/d8/d12/structshaka_1_1media_1_1mp4_1_1DecodingTime.html index 9830d3666a..8a7ee05e6d 100644 --- a/docs/d8/d12/structshaka_1_1media_1_1mp4_1_1DecodingTime.html +++ b/docs/d8/d12/structshaka_1_1media_1_1mp4_1_1DecodingTime.html @@ -112,7 +112,7 @@ uint32_t sample_delta< diff --git a/docs/d8/d12/structshaka_1_1media_1_1mp4_1_1PrivFrame-members.html b/docs/d8/d12/structshaka_1_1media_1_1mp4_1_1PrivFrame-members.html index b0582a0b47..d1d5fe0534 100644 --- a/docs/d8/d12/structshaka_1_1media_1_1mp4_1_1PrivFrame-members.html +++ b/docs/d8/d12/structshaka_1_1media_1_1mp4_1_1PrivFrame-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d13/classshaka_1_1media_1_1BitReader-members.html b/docs/d8/d13/classshaka_1_1media_1_1BitReader-members.html index ac92678a28..d711c40601 100644 --- a/docs/d8/d13/classshaka_1_1media_1_1BitReader-members.html +++ b/docs/d8/d13/classshaka_1_1media_1_1BitReader-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d14/classshaka_1_1media_1_1VP8Parser.html b/docs/d8/d14/classshaka_1_1media_1_1VP8Parser.html index 045cf0a0e3..f1920e24fc 100644 --- a/docs/d8/d14/classshaka_1_1media_1_1VP8Parser.html +++ b/docs/d8/d14/classshaka_1_1media_1_1VP8Parser.html @@ -235,7 +235,7 @@ Additional Inherited Members diff --git a/docs/d8/d16/structshaka_1_1media_1_1MuxerOptions-members.html b/docs/d8/d16/structshaka_1_1media_1_1MuxerOptions-members.html index 0cabfd7970..435d4be45a 100644 --- a/docs/d8/d16/structshaka_1_1media_1_1MuxerOptions-members.html +++ b/docs/d8/d16/structshaka_1_1media_1_1MuxerOptions-members.html @@ -105,11 +105,12 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); segment_templateshaka::media::MuxerOptions single_segmentshaka::media::MuxerOptions temp_dirshaka::media::MuxerOptions - ~MuxerOptions() (defined in shaka::media::MuxerOptions)shaka::media::MuxerOptions + webm_subsample_encryption (defined in shaka::media::MuxerOptions)shaka::media::MuxerOptions + ~MuxerOptions() (defined in shaka::media::MuxerOptions)shaka::media::MuxerOptions diff --git a/docs/d8/d19/bandwidth__estimator_8h_source.html b/docs/d8/d19/bandwidth__estimator_8h_source.html index 6166541854..5a5e6dcf3d 100644 --- a/docs/d8/d19/bandwidth__estimator_8h_source.html +++ b/docs/d8/d19/bandwidth__estimator_8h_source.html @@ -133,7 +133,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d20/structshaka_1_1media_1_1mp4_1_1WebVTTConfigurationBox.html b/docs/d8/d20/structshaka_1_1media_1_1mp4_1_1WebVTTConfigurationBox.html index 922eb620a9..993d4843cb 100644 --- a/docs/d8/d20/structshaka_1_1media_1_1mp4_1_1WebVTTConfigurationBox.html +++ b/docs/d8/d20/structshaka_1_1media_1_1mp4_1_1WebVTTConfigurationBox.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d8/d23/structshaka_1_1media_1_1SubsampleEntry-members.html b/docs/d8/d23/structshaka_1_1media_1_1SubsampleEntry-members.html index 1480faf0a5..4b370db413 100644 --- a/docs/d8/d23/structshaka_1_1media_1_1SubsampleEntry-members.html +++ b/docs/d8/d23/structshaka_1_1media_1_1SubsampleEntry-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d28/es__parser__h265_8h_source.html b/docs/d8/d28/es__parser__h265_8h_source.html index 46708d0e02..902f49ce8c 100644 --- a/docs/d8/d28/es__parser__h265_8h_source.html +++ b/docs/d8/d28/es__parser__h265_8h_source.html @@ -155,7 +155,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d33/webm__content__encodings__client_8h_source.html b/docs/d8/d33/webm__content__encodings__client_8h_source.html index cdebdbef88..4b4bad0de7 100644 --- a/docs/d8/d33/webm__content__encodings__client_8h_source.html +++ b/docs/d8/d33/webm__content__encodings__client_8h_source.html @@ -140,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d3e/classshaka_1_1media_1_1StreamDescriptorCompareFn.html b/docs/d8/d3e/classshaka_1_1media_1_1StreamDescriptorCompareFn.html index 3088808df0..882a36ee33 100644 --- a/docs/d8/d3e/classshaka_1_1media_1_1StreamDescriptorCompareFn.html +++ b/docs/d8/d3e/classshaka_1_1media_1_1StreamDescriptorCompareFn.html @@ -109,7 +109,7 @@ bool operator() (const diff --git a/docs/d8/d4d/aes__decryptor_8h_source.html b/docs/d8/d4d/aes__decryptor_8h_source.html index 16d8408856..c2dc99d7ea 100644 --- a/docs/d8/d4d/aes__decryptor_8h_source.html +++ b/docs/d8/d4d/aes__decryptor_8h_source.html @@ -147,7 +147,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d5b/structshaka_1_1media_1_1mp4_1_1AudioSampleEntry.html b/docs/d8/d5b/structshaka_1_1media_1_1mp4_1_1AudioSampleEntry.html index 6293f30582..74f5b9c535 100644 --- a/docs/d8/d5b/structshaka_1_1media_1_1mp4_1_1AudioSampleEntry.html +++ b/docs/d8/d5b/structshaka_1_1media_1_1mp4_1_1AudioSampleEntry.html @@ -206,7 +206,7 @@ Additional Inherited Members diff --git a/docs/d8/d5c/classshaka_1_1media_1_1MediaStream.html b/docs/d8/d5c/classshaka_1_1media_1_1MediaStream.html index e8f8404455..b1bfeaa3a7 100644 --- a/docs/d8/d5c/classshaka_1_1media_1_1MediaStream.html +++ b/docs/d8/d5c/classshaka_1_1media_1_1MediaStream.html @@ -225,7 +225,7 @@ const scoped_refptr< diff --git a/docs/d8/d6a/classshaka_1_1media_1_1ClusterBuilder-members.html b/docs/d8/d6a/classshaka_1_1media_1_1ClusterBuilder-members.html index 2b36e66cfc..337330f566 100644 --- a/docs/d8/d6a/classshaka_1_1media_1_1ClusterBuilder-members.html +++ b/docs/d8/d6a/classshaka_1_1media_1_1ClusterBuilder-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d6d/structshaka_1_1media_1_1mp4_1_1DataInformation.html b/docs/d8/d6d/structshaka_1_1media_1_1mp4_1_1DataInformation.html index 6f28bdf808..7be9e88354 100644 --- a/docs/d8/d6d/structshaka_1_1media_1_1mp4_1_1DataInformation.html +++ b/docs/d8/d6d/structshaka_1_1media_1_1mp4_1_1DataInformation.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d8/d70/structshaka_1_1media_1_1mp4_1_1Metadata-members.html b/docs/d8/d70/structshaka_1_1media_1_1mp4_1_1Metadata-members.html index e489d8b057..9585519d2e 100644 --- a/docs/d8/d70/structshaka_1_1media_1_1mp4_1_1Metadata-members.html +++ b/docs/d8/d70/structshaka_1_1media_1_1mp4_1_1Metadata-members.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d74/classshaka_1_1media_1_1TracksBuilder.html b/docs/d8/d74/classshaka_1_1media_1_1TracksBuilder.html index 2fd2382436..732307f0f1 100644 --- a/docs/d8/d74/classshaka_1_1media_1_1TracksBuilder.html +++ b/docs/d8/d74/classshaka_1_1media_1_1TracksBuilder.html @@ -123,7 +123,7 @@ std::vector< uint8_t >  diff --git a/docs/d8/d86/classshaka_1_1media_1_1WebMTracksParser.html b/docs/d8/d86/classshaka_1_1media_1_1WebMTracksParser.html index 9d44cf2d8a..1830f18cd5 100644 --- a/docs/d8/d86/classshaka_1_1media_1_1WebMTracksParser.html +++ b/docs/d8/d86/classshaka_1_1media_1_1WebMTracksParser.html @@ -225,7 +225,7 @@ The number of bytes parsed on success. diff --git a/docs/d8/d88/structshaka_1_1media_1_1mp4_1_1MovieExtends-members.html b/docs/d8/d88/structshaka_1_1media_1_1mp4_1_1MovieExtends-members.html index 20bb9837a0..4e002d2933 100644 --- a/docs/d8/d88/structshaka_1_1media_1_1mp4_1_1MovieExtends-members.html +++ b/docs/d8/d88/structshaka_1_1media_1_1mp4_1_1MovieExtends-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d8e/classshaka_1_1AdaptationSet.html b/docs/d8/d8e/classshaka_1_1AdaptationSet.html index 81822cf40b..7e1731d2f5 100644 --- a/docs/d8/d8e/classshaka_1_1AdaptationSet.html +++ b/docs/d8/d8e/classshaka_1_1AdaptationSet.html @@ -582,7 +582,7 @@ template<MpdBuilder::MpdType type> diff --git a/docs/d8/d91/classshaka_1_1media_1_1AesCtrEncryptor-members.html b/docs/d8/d91/classshaka_1_1media_1_1AesCtrEncryptor-members.html index 66f83b554d..fcec43e584 100644 --- a/docs/d8/d91/classshaka_1_1media_1_1AesCtrEncryptor-members.html +++ b/docs/d8/d91/classshaka_1_1media_1_1AesCtrEncryptor-members.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d92/classshaka_1_1media_1_1AesRequestSigner-members.html b/docs/d8/d92/classshaka_1_1media_1_1AesRequestSigner-members.html index f72baa0e84..d2a38a7737 100644 --- a/docs/d8/d92/classshaka_1_1media_1_1AesRequestSigner-members.html +++ b/docs/d8/d92/classshaka_1_1media_1_1AesRequestSigner-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d92/structshaka_1_1media_1_1H264DecRefPicMarking-members.html b/docs/d8/d92/structshaka_1_1media_1_1H264DecRefPicMarking-members.html index 75e02d9a63..815f0638f2 100644 --- a/docs/d8/d92/structshaka_1_1media_1_1H264DecRefPicMarking-members.html +++ b/docs/d8/d92/structshaka_1_1media_1_1H264DecRefPicMarking-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d93/structshaka_1_1media_1_1mp4_1_1SubtitleMediaHeader-members.html b/docs/d8/d93/structshaka_1_1media_1_1mp4_1_1SubtitleMediaHeader-members.html index 40a55ad471..9d1afc3437 100644 --- a/docs/d8/d93/structshaka_1_1media_1_1mp4_1_1SubtitleMediaHeader-members.html +++ b/docs/d8/d93/structshaka_1_1media_1_1mp4_1_1SubtitleMediaHeader-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d94/adts__constants_8cc_source.html b/docs/d8/d94/adts__constants_8cc_source.html index bc674e44ff..4fe8b1dc3c 100644 --- a/docs/d8/d94/adts__constants_8cc_source.html +++ b/docs/d8/d94/adts__constants_8cc_source.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d94/pes__packet_8h_source.html b/docs/d8/d94/pes__packet_8h_source.html index 557ffbfdda..afc1db5800 100644 --- a/docs/d8/d94/pes__packet_8h_source.html +++ b/docs/d8/d94/pes__packet_8h_source.html @@ -159,7 +159,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d99/structshaka_1_1media_1_1mp4_1_1VTTAdditionalTextBox-members.html b/docs/d8/d99/structshaka_1_1media_1_1mp4_1_1VTTAdditionalTextBox-members.html index 26f726f4e0..c54a114498 100644 --- a/docs/d8/d99/structshaka_1_1media_1_1mp4_1_1VTTAdditionalTextBox-members.html +++ b/docs/d8/d99/structshaka_1_1media_1_1mp4_1_1VTTAdditionalTextBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d9a/fragmenter_8cc_source.html b/docs/d8/d9a/fragmenter_8cc_source.html index bb32657659..24cfcf75ee 100644 --- a/docs/d8/d9a/fragmenter_8cc_source.html +++ b/docs/d8/d9a/fragmenter_8cc_source.html @@ -301,7 +301,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d9c/webm__tracks__parser_8cc_source.html b/docs/d8/d9c/webm__tracks__parser_8cc_source.html index f3fbc768eb..9b6ed9bd63 100644 --- a/docs/d8/d9c/webm__tracks__parser_8cc_source.html +++ b/docs/d8/d9c/webm__tracks__parser_8cc_source.html @@ -440,7 +440,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d9f/udp__file_8h_source.html b/docs/d8/d9f/udp__file_8h_source.html index 349b6337d8..48bd8443bc 100644 --- a/docs/d8/d9f/udp__file_8h_source.html +++ b/docs/d8/d9f/udp__file_8h_source.html @@ -147,7 +147,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/da3/classshaka_1_1media_1_1DecryptorSource-members.html b/docs/d8/da3/classshaka_1_1media_1_1DecryptorSource-members.html index bc056243ea..4d94dfe1a9 100644 --- a/docs/d8/da3/classshaka_1_1media_1_1DecryptorSource-members.html +++ b/docs/d8/da3/classshaka_1_1media_1_1DecryptorSource-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/da5/structshaka_1_1media_1_1mp4_1_1SampleSize-members.html b/docs/d8/da5/structshaka_1_1media_1_1mp4_1_1SampleSize-members.html index 913408a171..57d9666fe3 100644 --- a/docs/d8/da5/structshaka_1_1media_1_1mp4_1_1SampleSize-members.html +++ b/docs/d8/da5/structshaka_1_1media_1_1mp4_1_1SampleSize-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/da6/classshaka_1_1media_1_1NaluReader-members.html b/docs/d8/da6/classshaka_1_1media_1_1NaluReader-members.html index b5e3684130..77cae31b8c 100644 --- a/docs/d8/da6/classshaka_1_1media_1_1NaluReader-members.html +++ b/docs/d8/da6/classshaka_1_1media_1_1NaluReader-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/daa/stream__info_8h_source.html b/docs/d8/daa/stream__info_8h_source.html index 097aafd508..8cce34d108 100644 --- a/docs/d8/daa/stream__info_8h_source.html +++ b/docs/d8/daa/stream__info_8h_source.html @@ -111,81 +111,101 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
22  kStreamText,
23 };
24 
-
26 class StreamInfo : public base::RefCountedThreadSafe<StreamInfo> {
-
27  public:
-
28  StreamInfo(StreamType stream_type,
-
29  int track_id,
-
30  uint32_t time_scale,
-
31  uint64_t duration,
-
32  const std::string& codec_string,
-
33  const std::string& language,
-
34  const uint8_t* codec_config,
-
35  size_t codec_config_size,
-
36  bool is_encrypted);
-
37 
-
40  virtual bool IsValidConfig() const = 0;
-
41 
-
43  virtual std::string ToString() const;
-
44 
-
45  StreamType stream_type() const { return stream_type_; }
-
46  uint32_t track_id() const { return track_id_; }
-
47  uint32_t time_scale() const { return time_scale_; }
-
48  uint64_t duration() const { return duration_; }
-
49  const std::string& codec_string() const { return codec_string_; }
-
50  const std::string& language() const { return language_; }
+
25 enum Codec {
+
26  kUnknownCodec = 0,
+
27  kCodecH264,
+
28  kCodecHEV1,
+
29  kCodecHVC1,
+
30  kCodecVC1,
+
31  kCodecMPEG2,
+
32  kCodecMPEG4,
+
33  kCodecTheora,
+
34  kCodecVP8,
+
35  kCodecVP9,
+
36  kCodecVP10,
+
37  kCodecAAC,
+
38  kCodecAC3,
+
39  kCodecDTSC,
+
40  kCodecDTSE,
+
41  kCodecDTSH,
+
42  kCodecDTSL,
+
43  kCodecDTSM,
+
44  kCodecDTSP,
+
45  kCodecEAC3,
+
46  kCodecOpus,
+
47  kCodecVorbis,
+
48  kCodecText,
+
49  kNumCodec
+
50 };
51 
-
52  bool is_encrypted() const { return is_encrypted_; }
-
53 
-
54  const std::vector<uint8_t>& codec_config() const { return codec_config_; }
-
55 
-
56  void set_duration(int duration) { duration_ = duration; }
-
57 
-
58  void set_codec_config(const std::vector<uint8_t>& data) { codec_config_ = data; }
+
53 class StreamInfo : public base::RefCountedThreadSafe<StreamInfo> {
+
54  public:
+
55  StreamInfo(StreamType stream_type, int track_id, uint32_t time_scale,
+
56  uint64_t duration, Codec codec, const std::string& codec_string,
+
57  const uint8_t* codec_config, size_t codec_config_size,
+
58  const std::string& language, bool is_encrypted);
59 
-
60  void set_codec_string(const std::string& codec_string) {
-
61  codec_string_ = codec_string;
-
62  }
+
62  virtual bool IsValidConfig() const = 0;
63 
-
64  void set_language(const std::string& language) { language_ = language; }
-
65 
-
66  protected:
-
67  friend class base::RefCountedThreadSafe<StreamInfo>;
-
68  virtual ~StreamInfo();
-
69 
-
70  private:
-
71  // Whether the stream is Audio or Video.
-
72  StreamType stream_type_;
-
73  uint32_t track_id_;
-
74  // The actual time is calculated as time / time_scale_ in seconds.
-
75  uint32_t time_scale_;
-
76  // Duration base on time_scale.
-
77  uint64_t duration_;
-
78  std::string codec_string_;
-
79  std::string language_;
-
80  // Whether the stream is potentially encrypted.
-
81  // Note that in a potentially encrypted stream, individual buffers
-
82  // can be encrypted or not encrypted.
-
83  bool is_encrypted_;
-
84  // Optional byte data required for some audio/video decoders such as Vorbis
-
85  // codebooks.
-
86  std::vector<uint8_t> codec_config_;
-
87 
-
88  // Not using DISALLOW_COPY_AND_ASSIGN here intentionally to allow the compiler
-
89  // generated copy constructor and assignment operator. Since the extra data is
-
90  // typically small, the performance impact is minimal.
-
91 };
-
92 
-
93 } // namespace media
-
94 } // namespace shaka
-
95 
-
96 #endif // MEDIA_BASE_STREAM_INFO_H_
-
Abstract class holds stream information.
Definition: stream_info.h:26
+
65  virtual std::string ToString() const;
+
66 
+
67  StreamType stream_type() const { return stream_type_; }
+
68  uint32_t track_id() const { return track_id_; }
+
69  uint32_t time_scale() const { return time_scale_; }
+
70  uint64_t duration() const { return duration_; }
+
71  Codec codec() const { return codec_; }
+
72  const std::string& codec_string() const { return codec_string_; }
+
73  const std::vector<uint8_t>& codec_config() const { return codec_config_; }
+
74  const std::string& language() const { return language_; }
+
75  bool is_encrypted() const { return is_encrypted_; }
+
76 
+
77  void set_duration(int duration) { duration_ = duration; }
+
78  void set_codec(Codec codec) { codec_ = codec; }
+
79  void set_codec_config(const std::vector<uint8_t>& data) { codec_config_ = data; }
+
80  void set_codec_string(const std::string& codec_string) {
+
81  codec_string_ = codec_string;
+
82  }
+
83  void set_language(const std::string& language) { language_ = language; }
+
84 
+
85  protected:
+
86  friend class base::RefCountedThreadSafe<StreamInfo>;
+
87  virtual ~StreamInfo();
+
88 
+
89  private:
+
90  // Whether the stream is Audio or Video.
+
91  StreamType stream_type_;
+
92  uint32_t track_id_;
+
93  // The actual time is calculated as time / time_scale_ in seconds.
+
94  uint32_t time_scale_;
+
95  // Duration base on time_scale.
+
96  uint64_t duration_;
+
97  Codec codec_;
+
98  std::string codec_string_;
+
99  std::string language_;
+
100  // Whether the stream is potentially encrypted.
+
101  // Note that in a potentially encrypted stream, individual buffers
+
102  // can be encrypted or not encrypted.
+
103  bool is_encrypted_;
+
104  // Optional byte data required for some audio/video decoders such as Vorbis
+
105  // codebooks.
+
106  std::vector<uint8_t> codec_config_;
+
107 
+
108  // Not using DISALLOW_COPY_AND_ASSIGN here intentionally to allow the compiler
+
109  // generated copy constructor and assignment operator. Since the extra data is
+
110  // typically small, the performance impact is minimal.
+
111 };
+
112 
+
113 } // namespace media
+
114 } // namespace shaka
+
115 
+
116 #endif // MEDIA_BASE_STREAM_INFO_H_
+
Abstract class holds stream information.
Definition: stream_info.h:53
virtual bool IsValidConfig() const =0
-
virtual std::string ToString() const
Definition: stream_info.cc:40
+
virtual std::string ToString() const
Definition: stream_info.cc:37
diff --git a/docs/d8/daf/namespaceshaka.html b/docs/d8/daf/namespaceshaka.html index 846eafd09b..b44f623403 100644 --- a/docs/d8/daf/namespaceshaka.html +++ b/docs/d8/daf/namespaceshaka.html @@ -566,7 +566,7 @@ const char kPsshElementNam diff --git a/docs/d8/db7/classshaka_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html b/docs/d8/db7/classshaka_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html index 7cd3ef038e..9efca923a8 100644 --- a/docs/d8/db7/classshaka_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html +++ b/docs/d8/db7/classshaka_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html @@ -259,7 +259,7 @@ void set_progress_target diff --git a/docs/d8/db9/classshaka_1_1media_1_1WebMContentEncodingsClient-members.html b/docs/d8/db9/classshaka_1_1media_1_1WebMContentEncodingsClient-members.html index df1111e34b..3912102c8a 100644 --- a/docs/d8/db9/classshaka_1_1media_1_1WebMContentEncodingsClient-members.html +++ b/docs/d8/db9/classshaka_1_1media_1_1WebMContentEncodingsClient-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/dc3/structshaka_1_1media_1_1mp4_1_1CueTimeBox.html b/docs/d8/dc3/structshaka_1_1media_1_1mp4_1_1CueTimeBox.html index 9b2400f808..5db2a9f6f6 100644 --- a/docs/d8/dc3/structshaka_1_1media_1_1mp4_1_1CueTimeBox.html +++ b/docs/d8/dc3/structshaka_1_1media_1_1mp4_1_1CueTimeBox.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d8/dca/ts__writer_8h_source.html b/docs/d8/dca/ts__writer_8h_source.html index fdca16082e..8280d7e5f6 100644 --- a/docs/d8/dca/ts__writer_8h_source.html +++ b/docs/d8/dca/ts__writer_8h_source.html @@ -150,7 +150,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
79 } // namespace shaka
80 
81 #endif // PACKAGER_MEDIA_FORMATS_MP2T_TS_WRITER_H_
-
Abstract class holds stream information.
Definition: stream_info.h:26
+
Abstract class holds stream information.
Definition: stream_info.h:53
virtual bool NewSegment(const std::string &file_name)
Definition: ts_writer.cc:199
void SetProgramMapTableWriterForTesting(scoped_ptr< ProgramMapTableWriter > table_writer)
Only for testing.
Definition: ts_writer.cc:250
@@ -162,7 +162,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/dcd/structshaka_1_1media_1_1mp4_1_1DecodingTime-members.html b/docs/d8/dcd/structshaka_1_1media_1_1mp4_1_1DecodingTime-members.html index 16f8a7f2b6..48da9db165 100644 --- a/docs/d8/dcd/structshaka_1_1media_1_1mp4_1_1DecodingTime-members.html +++ b/docs/d8/dcd/structshaka_1_1media_1_1mp4_1_1DecodingTime-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/dcd/structshaka_1_1media_1_1mp4_1_1TrackExtends-members.html b/docs/d8/dcd/structshaka_1_1media_1_1mp4_1_1TrackExtends-members.html index 3d62743cf0..02ea0d7ee6 100644 --- a/docs/d8/dcd/structshaka_1_1media_1_1mp4_1_1TrackExtends-members.html +++ b/docs/d8/dcd/structshaka_1_1media_1_1mp4_1_1TrackExtends-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/dd6/classshaka_1_1media_1_1mp2t_1_1ContinuityCounter.html b/docs/d8/dd6/classshaka_1_1media_1_1mp2t_1_1ContinuityCounter.html index 7dd40a6d3e..84b16ed153 100644 --- a/docs/d8/dd6/classshaka_1_1media_1_1mp2t_1_1ContinuityCounter.html +++ b/docs/d8/dd6/classshaka_1_1media_1_1mp2t_1_1ContinuityCounter.html @@ -129,7 +129,7 @@ Public Member Functions diff --git a/docs/d8/dd6/structshaka_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry.html b/docs/d8/dd6/structshaka_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry.html index 481ae06fa2..32dac627d8 100644 --- a/docs/d8/dd6/structshaka_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry.html +++ b/docs/d8/dd6/structshaka_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry.html @@ -135,7 +135,7 @@ std::vector< uint8_t >  diff --git a/docs/d8/de1/classshaka_1_1SimpleMpdNotifier.html b/docs/d8/de1/classshaka_1_1SimpleMpdNotifier.html index 61adb2226a..63c385a19c 100644 --- a/docs/d8/de1/classshaka_1_1SimpleMpdNotifier.html +++ b/docs/d8/de1/classshaka_1_1SimpleMpdNotifier.html @@ -471,7 +471,7 @@ class SimpleMpdNotifierTes diff --git a/docs/d8/de6/webm__crypto__helpers_8h_source.html b/docs/d8/de6/webm__crypto__helpers_8h_source.html index ce1d60d93d..ca4f3760c7 100644 --- a/docs/d8/de6/webm__crypto__helpers_8h_source.html +++ b/docs/d8/de6/webm__crypto__helpers_8h_source.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/deb/classshaka_1_1media_1_1mp2t_1_1EsParser-members.html b/docs/d8/deb/classshaka_1_1media_1_1mp2t_1_1EsParser-members.html index 156f93ff5b..aaf6fd416a 100644 --- a/docs/d8/deb/classshaka_1_1media_1_1mp2t_1_1EsParser-members.html +++ b/docs/d8/deb/classshaka_1_1media_1_1mp2t_1_1EsParser-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/dee/classshaka_1_1media_1_1AudioTimestampHelper-members.html b/docs/d8/dee/classshaka_1_1media_1_1AudioTimestampHelper-members.html index 4a571fad09..dcc30f8b18 100644 --- a/docs/d8/dee/classshaka_1_1media_1_1AudioTimestampHelper-members.html +++ b/docs/d8/dee/classshaka_1_1media_1_1AudioTimestampHelper-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/dee/classshaka_1_1media_1_1VPxParser-members.html b/docs/d8/dee/classshaka_1_1media_1_1VPxParser-members.html index 80603182c4..ae62020645 100644 --- a/docs/d8/dee/classshaka_1_1media_1_1VPxParser-members.html +++ b/docs/d8/dee/classshaka_1_1media_1_1VPxParser-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/df0/webm_2single__segment__segmenter_8cc_source.html b/docs/d8/df0/webm_2single__segment__segmenter_8cc_source.html index 84da4de0ff..15c9794b32 100644 --- a/docs/d8/df0/webm_2single__segment__segmenter_8cc_source.html +++ b/docs/d8/df0/webm_2single__segment__segmenter_8cc_source.html @@ -181,7 +181,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/df7/classshaka_1_1media_1_1SegmentTestBase-members.html b/docs/d8/df7/classshaka_1_1media_1_1SegmentTestBase-members.html index 2bcdd0ca17..5adb84b02d 100644 --- a/docs/d8/df7/classshaka_1_1media_1_1SegmentTestBase-members.html +++ b/docs/d8/df7/classshaka_1_1media_1_1SegmentTestBase-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/dfa/nal__unit__to__byte__stream__converter_8h_source.html b/docs/d8/dfa/nal__unit__to__byte__stream__converter_8h_source.html index 58b9926f25..adece578d8 100644 --- a/docs/d8/dfa/nal__unit__to__byte__stream__converter_8h_source.html +++ b/docs/d8/dfa/nal__unit__to__byte__stream__converter_8h_source.html @@ -147,7 +147,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d00/structshaka_1_1media_1_1OnMediaEndParameters-members.html b/docs/d9/d00/structshaka_1_1media_1_1OnMediaEndParameters-members.html index 9712b88b41..f2152a34a4 100644 --- a/docs/d9/d00/structshaka_1_1media_1_1OnMediaEndParameters-members.html +++ b/docs/d9/d00/structshaka_1_1media_1_1OnMediaEndParameters-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d01/mp4_2single__segment__segmenter_8h_source.html b/docs/d9/d01/mp4_2single__segment__segmenter_8h_source.html index 31e3936dd2..5b108f99bf 100644 --- a/docs/d9/d01/mp4_2single__segment__segmenter_8h_source.html +++ b/docs/d9/d01/mp4_2single__segment__segmenter_8h_source.html @@ -140,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d08/mock__mpd__builder_8h_source.html b/docs/d9/d08/mock__mpd__builder_8h_source.html index 0c2dae8526..168d405ad5 100644 --- a/docs/d9/d08/mock__mpd__builder_8h_source.html +++ b/docs/d9/d08/mock__mpd__builder_8h_source.html @@ -180,7 +180,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d0b/classshaka_1_1media_1_1HlsNotifyMuxerListener-members.html b/docs/d9/d0b/classshaka_1_1media_1_1HlsNotifyMuxerListener-members.html index 39cb5768b6..1ec79d8950 100644 --- a/docs/d9/d0b/classshaka_1_1media_1_1HlsNotifyMuxerListener-members.html +++ b/docs/d9/d0b/classshaka_1_1media_1_1HlsNotifyMuxerListener-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d0c/classshaka_1_1media_1_1RsaPublicKey.html b/docs/d9/d0c/classshaka_1_1media_1_1RsaPublicKey.html index a77ece8c99..777a60d51c 100644 --- a/docs/d9/d0c/classshaka_1_1media_1_1RsaPublicKey.html +++ b/docs/d9/d0c/classshaka_1_1media_1_1RsaPublicKey.html @@ -218,7 +218,7 @@ Static Public Member Functions diff --git a/docs/d9/d13/classshaka_1_1media_1_1BufferReader.html b/docs/d9/d13/classshaka_1_1media_1_1BufferReader.html index 3e2a03597e..7169fcae3c 100644 --- a/docs/d9/d13/classshaka_1_1media_1_1BufferReader.html +++ b/docs/d9/d13/classshaka_1_1media_1_1BufferReader.html @@ -276,7 +276,7 @@ bool ReadNBytesInto8s diff --git a/docs/d9/d15/key__rotation__fragmenter_8cc_source.html b/docs/d9/d15/key__rotation__fragmenter_8cc_source.html index de0572b1a6..711b89b253 100644 --- a/docs/d9/d15/key__rotation__fragmenter_8cc_source.html +++ b/docs/d9/d15/key__rotation__fragmenter_8cc_source.html @@ -236,7 +236,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
EncryptingFragmenter generates MP4 fragments with sample encrypted.
- +
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:31
Status PrepareFragmentForEncryption(bool enable_encryption) override
@@ -244,7 +244,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d1f/structshaka_1_1media_1_1mp4_1_1MovieFragment.html b/docs/d9/d1f/structshaka_1_1media_1_1mp4_1_1MovieFragment.html index 6b0922830f..344a5139a0 100644 --- a/docs/d9/d1f/structshaka_1_1media_1_1mp4_1_1MovieFragment.html +++ b/docs/d9/d1f/structshaka_1_1media_1_1mp4_1_1MovieFragment.html @@ -180,7 +180,7 @@ Additional Inherited Members diff --git a/docs/d9/d26/classshaka_1_1media_1_1AesEncryptor-members.html b/docs/d9/d26/classshaka_1_1media_1_1AesEncryptor-members.html index e91d8acdec..0831a1cfd2 100644 --- a/docs/d9/d26/classshaka_1_1media_1_1AesEncryptor-members.html +++ b/docs/d9/d26/classshaka_1_1media_1_1AesEncryptor-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html b/docs/d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html index fe64f5b643..7003178dbd 100644 --- a/docs/d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html +++ b/docs/d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html @@ -430,7 +430,7 @@ void set_progress_target diff --git a/docs/d9/d36/classshaka_1_1media_1_1TracksBuilder-members.html b/docs/d9/d36/classshaka_1_1media_1_1TracksBuilder-members.html index 3fce5c6227..72558d88ab 100644 --- a/docs/d9/d36/classshaka_1_1media_1_1TracksBuilder-members.html +++ b/docs/d9/d36/classshaka_1_1media_1_1TracksBuilder-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d3a/classshaka_1_1media_1_1File-members.html b/docs/d9/d3a/classshaka_1_1media_1_1File-members.html index 85c1c692c3..0061178c3c 100644 --- a/docs/d9/d3a/classshaka_1_1media_1_1File-members.html +++ b/docs/d9/d3a/classshaka_1_1media_1_1File-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d3b/webm__content__encodings_8h_source.html b/docs/d9/d3b/webm__content__encodings_8h_source.html index 24e20457fa..0a53359e9f 100644 --- a/docs/d9/d3b/webm__content__encodings_8h_source.html +++ b/docs/d9/d3b/webm__content__encodings_8h_source.html @@ -179,7 +179,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d3c/structshaka_1_1media_1_1mp4_1_1VTTEmptyCueBox.html b/docs/d9/d3c/structshaka_1_1media_1_1mp4_1_1VTTEmptyCueBox.html index 2065a5b834..df161ff4b5 100644 --- a/docs/d9/d3c/structshaka_1_1media_1_1mp4_1_1VTTEmptyCueBox.html +++ b/docs/d9/d3c/structshaka_1_1media_1_1mp4_1_1VTTEmptyCueBox.html @@ -166,7 +166,7 @@ Additional Inherited Members diff --git a/docs/d9/d3e/structshaka_1_1media_1_1mp4_1_1CueSourceIDBox.html b/docs/d9/d3e/structshaka_1_1media_1_1mp4_1_1CueSourceIDBox.html index 8e27e869ca..7b1da21cf8 100644 --- a/docs/d9/d3e/structshaka_1_1media_1_1mp4_1_1CueSourceIDBox.html +++ b/docs/d9/d3e/structshaka_1_1media_1_1mp4_1_1CueSourceIDBox.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/d9/d57/classshaka_1_1media_1_1mp4_1_1ChunkInfoIterator.html b/docs/d9/d57/classshaka_1_1media_1_1mp4_1_1ChunkInfoIterator.html index ed6aec90e1..254ea58a70 100644 --- a/docs/d9/d57/classshaka_1_1media_1_1mp4_1_1ChunkInfoIterator.html +++ b/docs/d9/d57/classshaka_1_1media_1_1mp4_1_1ChunkInfoIterator.html @@ -320,7 +320,7 @@ Public Member Functions diff --git a/docs/d9/d66/classshaka_1_1media_1_1mp2t_1_1EsParserAdts-members.html b/docs/d9/d66/classshaka_1_1media_1_1mp2t_1_1EsParserAdts-members.html index 7fe80d38de..219ef91336 100644 --- a/docs/d9/d66/classshaka_1_1media_1_1mp2t_1_1EsParserAdts-members.html +++ b/docs/d9/d66/classshaka_1_1media_1_1mp2t_1_1EsParserAdts-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d67/structshaka_1_1media_1_1H265VuiParameters.html b/docs/d9/d67/structshaka_1_1media_1_1H265VuiParameters.html index aff2269d8b..62f7206e4e 100644 --- a/docs/d9/d67/structshaka_1_1media_1_1H265VuiParameters.html +++ b/docs/d9/d67/structshaka_1_1media_1_1H265VuiParameters.html @@ -131,7 +131,7 @@ int min_spatial_segmentati diff --git a/docs/d9/d6a/structshaka_1_1media_1_1H264SliceHeader-members.html b/docs/d9/d6a/structshaka_1_1media_1_1H264SliceHeader-members.html index ea4d0396ae..706be362c6 100644 --- a/docs/d9/d6a/structshaka_1_1media_1_1H264SliceHeader-members.html +++ b/docs/d9/d6a/structshaka_1_1media_1_1H264SliceHeader-members.html @@ -154,7 +154,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d76/ts__muxer_8cc_source.html b/docs/d9/d76/ts__muxer_8cc_source.html index fed5bb134a..0ce5b25b68 100644 --- a/docs/d9/d76/ts__muxer_8cc_source.html +++ b/docs/d9/d76/ts__muxer_8cc_source.html @@ -155,7 +155,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d81/classshaka_1_1media_1_1ClosureThread-members.html b/docs/d9/d81/classshaka_1_1media_1_1ClosureThread-members.html index 773ec49691..20b597507d 100644 --- a/docs/d9/d81/classshaka_1_1media_1_1ClosureThread-members.html +++ b/docs/d9/d81/classshaka_1_1media_1_1ClosureThread-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d86/limits_8h_source.html b/docs/d9/d86/limits_8h_source.html index 9896f9f83d..db10d71e78 100644 --- a/docs/d9/d86/limits_8h_source.html +++ b/docs/d9/d86/limits_8h_source.html @@ -141,7 +141,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d87/classshaka_1_1media_1_1WebMContentEncodingsClient.html b/docs/d9/d87/classshaka_1_1media_1_1WebMContentEncodingsClient.html index bb468a5c1a..3339d27491 100644 --- a/docs/d9/d87/classshaka_1_1media_1_1WebMContentEncodingsClient.html +++ b/docs/d9/d87/classshaka_1_1media_1_1WebMContentEncodingsClient.html @@ -152,7 +152,7 @@ Additional Inherited Members diff --git a/docs/d9/d8c/classshaka_1_1media_1_1AesRequestSigner.html b/docs/d9/d8c/classshaka_1_1media_1_1AesRequestSigner.html index 5b3e593723..3263c26d6f 100644 --- a/docs/d9/d8c/classshaka_1_1media_1_1AesRequestSigner.html +++ b/docs/d9/d8c/classshaka_1_1media_1_1AesRequestSigner.html @@ -188,7 +188,7 @@ Additional Inherited Members diff --git a/docs/d9/d90/classshaka_1_1media_1_1ProtectionSystemSpecificInfo-members.html b/docs/d9/d90/classshaka_1_1media_1_1ProtectionSystemSpecificInfo-members.html index 69545c1292..7b70efdc64 100644 --- a/docs/d9/d90/classshaka_1_1media_1_1ProtectionSystemSpecificInfo-members.html +++ b/docs/d9/d90/classshaka_1_1media_1_1ProtectionSystemSpecificInfo-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d90/text__track_8h_source.html b/docs/d9/d90/text__track_8h_source.html index ba53145c24..d5dfd6f398 100644 --- a/docs/d9/d90/text__track_8h_source.html +++ b/docs/d9/d90/text__track_8h_source.html @@ -134,7 +134,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d93/media__stream_8h_source.html b/docs/d9/d93/media__stream_8h_source.html index b860dc1b03..69c6202d3c 100644 --- a/docs/d9/d93/media__stream_8h_source.html +++ b/docs/d9/d93/media__stream_8h_source.html @@ -170,7 +170,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/da4/stream__descriptor_8h_source.html b/docs/d9/da4/stream__descriptor_8h_source.html index 420830d523..69d063f0d0 100644 --- a/docs/d9/da4/stream__descriptor_8h_source.html +++ b/docs/d9/da4/stream__descriptor_8h_source.html @@ -144,7 +144,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/da5/classshaka_1_1media_1_1MpdNotifyMuxerListener.html b/docs/d9/da5/classshaka_1_1media_1_1MpdNotifyMuxerListener.html index 96b4d23fd7..0cc0eb1f8f 100644 --- a/docs/d9/da5/classshaka_1_1media_1_1MpdNotifyMuxerListener.html +++ b/docs/d9/da5/classshaka_1_1media_1_1MpdNotifyMuxerListener.html @@ -513,7 +513,7 @@ Additional Inherited Members diff --git a/docs/d9/da6/structshaka_1_1media_1_1Cue-members.html b/docs/d9/da6/structshaka_1_1media_1_1Cue-members.html index f2f415a5df..72be9b4b09 100644 --- a/docs/d9/da6/structshaka_1_1media_1_1Cue-members.html +++ b/docs/d9/da6/structshaka_1_1media_1_1Cue-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/da7/classshaka_1_1media_1_1mp4_1_1Segmenter-members.html b/docs/d9/da7/classshaka_1_1media_1_1mp4_1_1Segmenter-members.html index 9ae7044996..f9ce24488d 100644 --- a/docs/d9/da7/classshaka_1_1media_1_1mp4_1_1Segmenter-members.html +++ b/docs/d9/da7/classshaka_1_1media_1_1mp4_1_1Segmenter-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/db2/classshaka_1_1media_1_1mp4_1_1CompositionOffsetIterator-members.html b/docs/d9/db2/classshaka_1_1media_1_1mp4_1_1CompositionOffsetIterator-members.html index c3c831f35e..867dbd9717 100644 --- a/docs/d9/db2/classshaka_1_1media_1_1mp4_1_1CompositionOffsetIterator-members.html +++ b/docs/d9/db2/classshaka_1_1media_1_1mp4_1_1CompositionOffsetIterator-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/db9/content__protection__element_8cc_source.html b/docs/d9/db9/content__protection__element_8cc_source.html index 8718ffb07a..db4216d936 100644 --- a/docs/d9/db9/content__protection__element_8cc_source.html +++ b/docs/d9/db9/content__protection__element_8cc_source.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/db9/muxer_8cc_source.html b/docs/d9/db9/muxer_8cc_source.html index 947e242f27..c4a1c10b6a 100644 --- a/docs/d9/db9/muxer_8cc_source.html +++ b/docs/d9/db9/muxer_8cc_source.html @@ -218,7 +218,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/dbd/classshaka_1_1media_1_1MemoryFile.html b/docs/d9/dbd/classshaka_1_1media_1_1MemoryFile.html index 388b4253c0..00b3d0d0b4 100644 --- a/docs/d9/dbd/classshaka_1_1media_1_1MemoryFile.html +++ b/docs/d9/dbd/classshaka_1_1media_1_1MemoryFile.html @@ -485,7 +485,7 @@ bool  diff --git a/docs/d9/dc4/classshaka_1_1media_1_1BufferReader-members.html b/docs/d9/dc4/classshaka_1_1media_1_1BufferReader-members.html index 654f011c68..de4e9900f4 100644 --- a/docs/d9/dc4/classshaka_1_1media_1_1BufferReader-members.html +++ b/docs/d9/dc4/classshaka_1_1media_1_1BufferReader-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/dc4/structshaka_1_1media_1_1mp4_1_1SampleEncryptionEntry-members.html b/docs/d9/dc4/structshaka_1_1media_1_1mp4_1_1SampleEncryptionEntry-members.html index 938e3c96a6..4f149ff5a5 100644 --- a/docs/d9/dc4/structshaka_1_1media_1_1mp4_1_1SampleEncryptionEntry-members.html +++ b/docs/d9/dc4/structshaka_1_1media_1_1mp4_1_1SampleEncryptionEntry-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/dc8/webm__constants_8cc_source.html b/docs/d9/dc8/webm__constants_8cc_source.html index 79ba02d57f..afeccc303f 100644 --- a/docs/d9/dc8/webm__constants_8cc_source.html +++ b/docs/d9/dc8/webm__constants_8cc_source.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/dcc/webm__video__client_8h_source.html b/docs/d9/dcc/webm__video__client_8h_source.html index a190c88ba8..b5ae6920e8 100644 --- a/docs/d9/dcc/webm__video__client_8h_source.html +++ b/docs/d9/dcc/webm__video__client_8h_source.html @@ -149,7 +149,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/de3/muxer__listener__internal_8cc_source.html b/docs/d9/de3/muxer__listener__internal_8cc_source.html index 33b7b33db2..20bca73445 100644 --- a/docs/d9/de3/muxer__listener__internal_8cc_source.html +++ b/docs/d9/de3/muxer__listener__internal_8cc_source.html @@ -348,7 +348,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/de6/classshaka_1_1media_1_1LocalFile.html b/docs/d9/de6/classshaka_1_1media_1_1LocalFile.html index cdb9166e68..dfc1579a1f 100644 --- a/docs/d9/de6/classshaka_1_1media_1_1LocalFile.html +++ b/docs/d9/de6/classshaka_1_1media_1_1LocalFile.html @@ -502,7 +502,7 @@ bool  diff --git a/docs/d9/dea/classshaka_1_1media_1_1FixedKeySource-members.html b/docs/d9/dea/classshaka_1_1media_1_1FixedKeySource-members.html index 43110cf1cb..0b679dd29f 100644 --- a/docs/d9/dea/classshaka_1_1media_1_1FixedKeySource-members.html +++ b/docs/d9/dea/classshaka_1_1media_1_1FixedKeySource-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/ded/aac__audio__specific__config_8cc_source.html b/docs/d9/ded/aac__audio__specific__config_8cc_source.html index fd2af0256c..5b669ddaa7 100644 --- a/docs/d9/ded/aac__audio__specific__config_8cc_source.html +++ b/docs/d9/ded/aac__audio__specific__config_8cc_source.html @@ -358,7 +358,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/df8/structshaka_1_1media_1_1mp4_1_1TrackFragmentDecodeTime-members.html b/docs/d9/df8/structshaka_1_1media_1_1mp4_1_1TrackFragmentDecodeTime-members.html index b1e741a488..350100419a 100644 --- a/docs/d9/df8/structshaka_1_1media_1_1mp4_1_1TrackFragmentDecodeTime-members.html +++ b/docs/d9/df8/structshaka_1_1media_1_1mp4_1_1TrackFragmentDecodeTime-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/df9/classshaka_1_1media_1_1OffsetByteQueue.html b/docs/d9/df9/classshaka_1_1media_1_1OffsetByteQueue.html index 4b5f78d93b..30aae18d3c 100644 --- a/docs/d9/df9/classshaka_1_1media_1_1OffsetByteQueue.html +++ b/docs/d9/df9/classshaka_1_1media_1_1OffsetByteQueue.html @@ -242,7 +242,7 @@ false if max_offset > diff --git a/docs/d9/dff/structshaka_1_1media_1_1H264ModificationOfPicNum.html b/docs/d9/dff/structshaka_1_1media_1_1H264ModificationOfPicNum.html index 8306ce3ebb..f9f757cca7 100644 --- a/docs/d9/dff/structshaka_1_1media_1_1H264ModificationOfPicNum.html +++ b/docs/d9/dff/structshaka_1_1media_1_1H264ModificationOfPicNum.html @@ -119,7 +119,7 @@ union { diff --git a/docs/da/d04/audio__stream__info_8cc_source.html b/docs/da/d04/audio__stream__info_8cc_source.html index f070c9523a..758f393de5 100644 --- a/docs/da/d04/audio__stream__info_8cc_source.html +++ b/docs/da/d04/audio__stream__info_8cc_source.html @@ -106,8 +106,8 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
17 namespace media {
18 
19 namespace {
-
20 std::string AudioCodecToString(AudioCodec audio_codec) {
-
21  switch (audio_codec) {
+
20 std::string AudioCodecToString(Codec codec) {
+
21  switch (codec) {
22  case kCodecAAC:
23  return "AAC";
24  case kCodecAC3:
@@ -131,116 +131,99 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
42  case kCodecVorbis:
43  return "Vorbis";
44  default:
-
45  NOTIMPLEMENTED() << "Unknown Audio Codec: " << audio_codec;
-
46  return "UnknownAudioCodec";
+
45  NOTIMPLEMENTED() << "Unknown Audio Codec: " << codec;
+
46  return "UnknownCodec";
47  }
48 }
49 } // namespace
50 
- -
52  uint32_t time_scale,
-
53  uint64_t duration,
-
54  AudioCodec codec,
-
55  const std::string& codec_string,
-
56  const std::string& language,
-
57  uint8_t sample_bits,
-
58  uint8_t num_channels,
-
59  uint32_t sampling_frequency,
-
60  uint64_t seek_preroll_ns,
-
61  uint64_t codec_delay_ns,
-
62  uint32_t max_bitrate,
-
63  uint32_t avg_bitrate,
-
64  const uint8_t* codec_config,
-
65  size_t codec_config_size,
-
66  bool is_encrypted)
-
67  : StreamInfo(kStreamAudio,
-
68  track_id,
-
69  time_scale,
-
70  duration,
-
71  codec_string,
-
72  language,
-
73  codec_config,
-
74  codec_config_size,
-
75  is_encrypted),
-
76  codec_(codec),
-
77  sample_bits_(sample_bits),
-
78  num_channels_(num_channels),
-
79  sampling_frequency_(sampling_frequency),
-
80  seek_preroll_ns_(seek_preroll_ns),
-
81  codec_delay_ns_(codec_delay_ns),
-
82  max_bitrate_(max_bitrate),
-
83  avg_bitrate_(avg_bitrate) {}
-
84 
-
85 AudioStreamInfo::~AudioStreamInfo() {}
-
86 
- -
88  return codec_ != kUnknownAudioCodec && num_channels_ != 0 &&
-
89  num_channels_ <= limits::kMaxChannels && sample_bits_ > 0 &&
-
90  sample_bits_ <= limits::kMaxBitsPerSample &&
-
91  sampling_frequency_ > 0 &&
-
92  sampling_frequency_ <= limits::kMaxSampleRate;
+ +
52  int track_id, uint32_t time_scale, uint64_t duration, Codec codec,
+
53  const std::string& codec_string, const uint8_t* codec_config,
+
54  size_t codec_config_size, uint8_t sample_bits, uint8_t num_channels,
+
55  uint32_t sampling_frequency, uint64_t seek_preroll_ns,
+
56  uint64_t codec_delay_ns, uint32_t max_bitrate, uint32_t avg_bitrate,
+
57  const std::string& language, bool is_encrypted)
+
58  : StreamInfo(kStreamAudio, track_id, time_scale, duration, codec,
+
59  codec_string, codec_config, codec_config_size, language,
+
60  is_encrypted),
+
61  sample_bits_(sample_bits),
+
62  num_channels_(num_channels),
+
63  sampling_frequency_(sampling_frequency),
+
64  seek_preroll_ns_(seek_preroll_ns),
+
65  codec_delay_ns_(codec_delay_ns),
+
66  max_bitrate_(max_bitrate),
+
67  avg_bitrate_(avg_bitrate) {}
+
68 
+
69 AudioStreamInfo::~AudioStreamInfo() {}
+
70 
+ +
72  return codec() != kUnknownCodec && num_channels_ != 0 &&
+
73  num_channels_ <= limits::kMaxChannels && sample_bits_ > 0 &&
+
74  sample_bits_ <= limits::kMaxBitsPerSample && sampling_frequency_ > 0 &&
+
75  sampling_frequency_ <= limits::kMaxSampleRate;
+
76 }
+
77 
+
78 std::string AudioStreamInfo::ToString() const {
+
79  std::string str = base::StringPrintf(
+
80  "%s codec: %s\n sample_bits: %d\n num_channels: %d\n "
+
81  "sampling_frequency: %d\n language: %s\n",
+
82  StreamInfo::ToString().c_str(), AudioCodecToString(codec()).c_str(),
+
83  sample_bits_, num_channels_, sampling_frequency_, language().c_str());
+
84  if (seek_preroll_ns_ != 0) {
+
85  base::StringAppendF(&str, " seek_preroll_ns: %" PRIu64 "\n",
+
86  seek_preroll_ns_);
+
87  }
+
88  if (codec_delay_ns_ != 0) {
+
89  base::StringAppendF(&str, " codec_delay_ns: %" PRIu64 "\n",
+
90  codec_delay_ns_);
+
91  }
+
92  return str;
93 }
94 
-
95 std::string AudioStreamInfo::ToString() const {
-
96  std::string str = base::StringPrintf(
-
97  "%s codec: %s\n sample_bits: %d\n num_channels: %d\n "
-
98  "sampling_frequency: %d\n language: %s\n",
-
99  StreamInfo::ToString().c_str(), AudioCodecToString(codec_).c_str(),
-
100  sample_bits_, num_channels_, sampling_frequency_, language().c_str());
-
101  if (seek_preroll_ns_ != 0) {
-
102  base::StringAppendF(&str, " seek_preroll_ns: %" PRIu64 "\n",
-
103  seek_preroll_ns_);
-
104  }
-
105  if (codec_delay_ns_ != 0) {
-
106  base::StringAppendF(&str, " codec_delay_ns: %" PRIu64 "\n",
-
107  codec_delay_ns_);
-
108  }
-
109  return str;
-
110 }
-
111 
-
112 std::string AudioStreamInfo::GetCodecString(AudioCodec codec,
-
113  uint8_t audio_object_type) {
-
114  switch (codec) {
-
115  case kCodecVorbis:
-
116  return "vorbis";
-
117  case kCodecOpus:
-
118  return "opus";
-
119  case kCodecAAC:
-
120  return "mp4a.40." + base::UintToString(audio_object_type);
-
121  case kCodecDTSC:
-
122  return "dtsc";
-
123  case kCodecDTSH:
-
124  return "dtsh";
-
125  case kCodecDTSL:
-
126  return "dtsl";
-
127  case kCodecDTSE:
-
128  return "dtse";
-
129  case kCodecDTSP:
-
130  return "dts+";
-
131  case kCodecDTSM:
-
132  return "dts-";
-
133  case kCodecAC3:
-
134  return "ac-3";
-
135  case kCodecEAC3:
-
136  return "ec-3";
-
137  default:
-
138  NOTIMPLEMENTED() << "Codec: " << codec;
-
139  return "unknown";
-
140  }
-
141 }
-
142 
-
143 } // namespace media
-
144 } // namespace shaka
-
static std::string GetCodecString(AudioCodec codec, uint8_t audio_object_type)
-
Abstract class holds stream information.
Definition: stream_info.h:26
-
AudioStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, AudioCodec codec, const std::string &codec_string, const std::string &language, uint8_t sample_bits, uint8_t num_channels, uint32_t sampling_frequency, uint64_t seek_preroll_ns, uint64_t codec_delay_ns, uint32_t max_bitrate, uint32_t avg_bitrate, const uint8_t *codec_config, size_t codec_config_size, bool is_encrypted)
Construct an initialized audio stream info object.
-
std::string ToString() const override
-
bool IsValidConfig() const override
-
virtual std::string ToString() const
Definition: stream_info.cc:40
+
95 std::string AudioStreamInfo::GetCodecString(Codec codec,
+
96  uint8_t audio_object_type) {
+
97  switch (codec) {
+
98  case kCodecVorbis:
+
99  return "vorbis";
+
100  case kCodecOpus:
+
101  return "opus";
+
102  case kCodecAAC:
+
103  return "mp4a.40." + base::UintToString(audio_object_type);
+
104  case kCodecDTSC:
+
105  return "dtsc";
+
106  case kCodecDTSH:
+
107  return "dtsh";
+
108  case kCodecDTSL:
+
109  return "dtsl";
+
110  case kCodecDTSE:
+
111  return "dtse";
+
112  case kCodecDTSP:
+
113  return "dts+";
+
114  case kCodecDTSM:
+
115  return "dts-";
+
116  case kCodecAC3:
+
117  return "ac-3";
+
118  case kCodecEAC3:
+
119  return "ec-3";
+
120  default:
+
121  NOTIMPLEMENTED() << "Codec: " << codec;
+
122  return "unknown";
+
123  }
+
124 }
+
125 
+
126 } // namespace media
+
127 } // namespace shaka
+
Abstract class holds stream information.
Definition: stream_info.h:53
+
std::string ToString() const override
+
bool IsValidConfig() const override
+
static std::string GetCodecString(Codec codec, uint8_t audio_object_type)
+
AudioStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, Codec codec, const std::string &codec_string, const uint8_t *codec_config, size_t codec_config_size, uint8_t sample_bits, uint8_t num_channels, uint32_t sampling_frequency, uint64_t seek_preroll_ns, uint64_t codec_delay_ns, uint32_t max_bitrate, uint32_t avg_bitrate, const std::string &language, bool is_encrypted)
Construct an initialized audio stream info object.
+
virtual std::string ToString() const
Definition: stream_info.cc:37
diff --git a/docs/da/d10/classshaka_1_1media_1_1mp2t_1_1EsParser.html b/docs/da/d10/classshaka_1_1media_1_1mp2t_1_1EsParser.html index 15b80e0d24..381de68852 100644 --- a/docs/da/d10/classshaka_1_1media_1_1mp2t_1_1EsParser.html +++ b/docs/da/d10/classshaka_1_1media_1_1mp2t_1_1EsParser.html @@ -146,7 +146,7 @@ uint32_t pid () diff --git a/docs/da/d1a/structshaka_1_1media_1_1mp4_1_1Language.html b/docs/da/d1a/structshaka_1_1media_1_1mp4_1_1Language.html index 5a58429450..3dc4b57d84 100644 --- a/docs/da/d1a/structshaka_1_1media_1_1mp4_1_1Language.html +++ b/docs/da/d1a/structshaka_1_1media_1_1mp4_1_1Language.html @@ -120,7 +120,7 @@ std::string code< diff --git a/docs/da/d1c/classshaka_1_1media_1_1mp2t_1_1TsSection.html b/docs/da/d1c/classshaka_1_1media_1_1mp2t_1_1TsSection.html index 6b3322af02..fd16f4fe9d 100644 --- a/docs/da/d1c/classshaka_1_1media_1_1mp2t_1_1TsSection.html +++ b/docs/da/d1c/classshaka_1_1media_1_1mp2t_1_1TsSection.html @@ -141,7 +141,7 @@ virtual void Reset ()= diff --git a/docs/da/d22/key__rotation__fragmenter_8h_source.html b/docs/da/d22/key__rotation__fragmenter_8h_source.html index a50c0be8d2..29bd1e2fbc 100644 --- a/docs/da/d22/key__rotation__fragmenter_8h_source.html +++ b/docs/da/d22/key__rotation__fragmenter_8h_source.html @@ -156,7 +156,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d23/classshaka_1_1media_1_1mp2t_1_1EsParserH26x.html b/docs/da/d23/classshaka_1_1media_1_1mp2t_1_1EsParserH26x.html index abad9d883c..de4fa73e82 100644 --- a/docs/da/d23/classshaka_1_1media_1_1mp2t_1_1EsParserH26x.html +++ b/docs/da/d23/classshaka_1_1media_1_1mp2t_1_1EsParserH26x.html @@ -159,7 +159,7 @@ const scoped_refptr
diff --git a/docs/da/d23/ts__muxer_8h_source.html b/docs/da/d23/ts__muxer_8h_source.html index d3ace34c17..8ff407e49f 100644 --- a/docs/da/d23/ts__muxer_8h_source.html +++ b/docs/da/d23/ts__muxer_8h_source.html @@ -137,7 +137,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d24/h265__parser_8h_source.html b/docs/da/d24/h265__parser_8h_source.html index e8283f663f..8ccfc258b0 100644 --- a/docs/da/d24/h265__parser_8h_source.html +++ b/docs/da/d24/h265__parser_8h_source.html @@ -450,7 +450,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d2a/text__stream__info_8h_source.html b/docs/da/d2a/text__stream__info_8h_source.html index 4dd810c5bb..0a4944ffa4 100644 --- a/docs/da/d2a/text__stream__info_8h_source.html +++ b/docs/da/d2a/text__stream__info_8h_source.html @@ -105,42 +105,38 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
16 
17 class TextStreamInfo : public StreamInfo {
18  public:
-
30  TextStreamInfo(int track_id,
-
31  uint32_t time_scale,
-
32  uint64_t duration,
-
33  const std::string& codec_string,
-
34  const std::string& language,
-
35  const std::string& codec_config,
-
36  uint16_t width,
-
37  uint16_t height);
-
38 
-
39  bool IsValidConfig() const override;
-
40 
-
41  uint16_t width() const { return width_; }
-
42  uint16_t height() const { return height_; }
-
43 
-
44  protected:
-
45  ~TextStreamInfo() override;
+
30  TextStreamInfo(int track_id, uint32_t time_scale, uint64_t duration,
+
31  const std::string& codec_string,
+
32  const std::string& codec_config, uint16_t width,
+
33  uint16_t height, const std::string& language);
+
34 
+
35  bool IsValidConfig() const override;
+
36 
+
37  uint16_t width() const { return width_; }
+
38  uint16_t height() const { return height_; }
+
39 
+
40  protected:
+
41  ~TextStreamInfo() override;
+
42 
+
43  private:
+
44  uint16_t width_;
+
45  uint16_t height_;
46 
-
47  private:
-
48  uint16_t width_;
-
49  uint16_t height_;
-
50 
-
51  // Allow copying. This is very light weight.
-
52 };
-
53 
-
54 } // namespace media
-
55 } // namespace shaka
-
56 
-
57 #endif // PACKAGER_MEDIA_BASE_TEXT_STREAM_INFO_H_
-
Abstract class holds stream information.
Definition: stream_info.h:26
-
TextStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, const std::string &codec_string, const std::string &language, const std::string &codec_config, uint16_t width, uint16_t height)
-
bool IsValidConfig() const override
+
47  // Allow copying. This is very light weight.
+
48 };
+
49 
+
50 } // namespace media
+
51 } // namespace shaka
+
52 
+
53 #endif // PACKAGER_MEDIA_BASE_TEXT_STREAM_INFO_H_
+
Abstract class holds stream information.
Definition: stream_info.h:53
+
TextStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, const std::string &codec_string, const std::string &codec_config, uint16_t width, uint16_t height, const std::string &language)
+
bool IsValidConfig() const override
diff --git a/docs/da/d2d/classshaka_1_1media_1_1webm_1_1WebMMuxer-members.html b/docs/da/d2d/classshaka_1_1media_1_1webm_1_1WebMMuxer-members.html index eba8eec768..9e6db16920 100644 --- a/docs/da/d2d/classshaka_1_1media_1_1webm_1_1WebMMuxer-members.html +++ b/docs/da/d2d/classshaka_1_1media_1_1webm_1_1WebMMuxer-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d3e/structshaka_1_1media_1_1mp4_1_1PixelAspectRatio-members.html b/docs/da/d3e/structshaka_1_1media_1_1mp4_1_1PixelAspectRatio-members.html index ad7830420f..c1d876a64e 100644 --- a/docs/da/d3e/structshaka_1_1media_1_1mp4_1_1PixelAspectRatio-members.html +++ b/docs/da/d3e/structshaka_1_1media_1_1mp4_1_1PixelAspectRatio-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d41/mp4_2multi__segment__segmenter_8h_source.html b/docs/da/d41/mp4_2multi__segment__segmenter_8h_source.html index 91e374f175..635181f14f 100644 --- a/docs/da/d41/mp4_2multi__segment__segmenter_8h_source.html +++ b/docs/da/d41/mp4_2multi__segment__segmenter_8h_source.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d43/structshaka_1_1ContentProtectionElement.html b/docs/da/d43/structshaka_1_1ContentProtectionElement.html index 3eb0fd3e12..8e1812ab74 100644 --- a/docs/da/d43/structshaka_1_1ContentProtectionElement.html +++ b/docs/da/d43/structshaka_1_1ContentProtectionElement.html @@ -123,7 +123,7 @@ std::vector< El diff --git a/docs/da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html b/docs/da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html index 01a3622894..d93a1af4f7 100644 --- a/docs/da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html +++ b/docs/da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html @@ -111,13 +111,10 @@ Inheritance diagram for shaka::media::AudioStreamInfo: - - - - - + + + @@ -145,9 +142,6 @@ uint32_t  - - @@ -157,9 +151,9 @@ void  - - + + @@ -172,21 +166,27 @@ uint32_t  + + + + - - + + @@ -199,15 +199,15 @@ void 

Public Member Functions

AudioStreamInfo (int track_id, uint32_t time_scale, uint64_t duration, AudioCodec codec, const std::string &codec_string, const std::string &language, uint8_t sample_bits, uint8_t num_channels, uint32_t sampling_frequency, uint64_t seek_preroll_ns, uint64_t codec_delay_ns, uint32_t max_bitrate, uint32_t avg_bitrate, const uint8_t *codec_config, size_t codec_config_size, bool is_encrypted)
 Construct an initialized audio stream info object.
 
-AudioCodec codec () const
 
AudioStreamInfo (int track_id, uint32_t time_scale, uint64_t duration, Codec codec, const std::string &codec_string, const uint8_t *codec_config, size_t codec_config_size, uint8_t sample_bits, uint8_t num_channels, uint32_t sampling_frequency, uint64_t seek_preroll_ns, uint64_t codec_delay_ns, uint32_t max_bitrate, uint32_t avg_bitrate, const std::string &language, bool is_encrypted)
 Construct an initialized audio stream info object.
 
uint8_t sample_bits () const
 
max_bitrate (
uint32_t avg_bitrate () const
 
-void set_codec (AudioCodec codec)
 
void set_sampling_frequency (const uint32_t sampling_frequency)
 
set_sampling_frequenc
std::string ToString () const override
 
- Public Member Functions inherited from shaka::media::StreamInfo
StreamInfo (StreamType stream_type, int track_id, uint32_t time_scale, uint64_t duration, const std::string &codec_string, const std::string &language, const uint8_t *codec_config, size_t codec_config_size, bool is_encrypted)
 
StreamInfo (StreamType stream_type, int track_id, uint32_t time_scale, uint64_t duration, Codec codec, const std::string &codec_string, const uint8_t *codec_config, size_t codec_config_size, const std::string &language, bool is_encrypted)
 
StreamType stream_type () const
 
time_scale ()
uint64_t duration () const
 
+Codec codec () const
 
const std::string & codec_string () const
 
+const std::vector< uint8_t > & codec_config () const
 
const std::string & language () const
 
bool is_encrypted () const
 
-const std::vector< uint8_t > & codec_config () const
 
void set_duration (int duration)
 
+void set_codec (Codec codec)
 
void set_codec_config (const std::vector< uint8_t > &data)
 
set_language (con
- - + +

Static Public Member Functions

static std::string GetCodecString (AudioCodec codec, uint8_t audio_object_type)
 
static std::string GetCodecString (Codec codec, uint8_t audio_object_type)
 

Detailed Description

Holds audio stream information.

-

Definition at line 35 of file audio_stream_info.h.

+

Definition at line 18 of file audio_stream_info.h.

Member Function Documentation

- +
@@ -217,7 +217,7 @@ Static Public Member Functions - + @@ -246,7 +246,7 @@ Static Public Member Functions
Returns
The codec string.
-

Definition at line 112 of file audio_stream_info.cc.

+

Definition at line 95 of file audio_stream_info.cc.

@@ -274,7 +274,7 @@ Static Public Member Functions

Implements shaka::media::StreamInfo.

-

Definition at line 87 of file audio_stream_info.cc.

+

Definition at line 71 of file audio_stream_info.cc.

@@ -302,7 +302,7 @@ Static Public Member Functions

Reimplemented from shaka::media::StreamInfo.

-

Definition at line 95 of file audio_stream_info.cc.

+

Definition at line 78 of file audio_stream_info.cc.

@@ -313,7 +313,7 @@ Static Public Member Functions diff --git a/docs/da/d50/structshaka_1_1media_1_1mp4_1_1MovieExtendsHeader.html b/docs/da/d50/structshaka_1_1media_1_1mp4_1_1MovieExtendsHeader.html index 117d8b37b2..c11fa33316 100644 --- a/docs/da/d50/structshaka_1_1media_1_1mp4_1_1MovieExtendsHeader.html +++ b/docs/da/d50/structshaka_1_1media_1_1mp4_1_1MovieExtendsHeader.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/da/d53/es__parser__h265_8cc_source.html b/docs/da/d53/es__parser__h265_8cc_source.html index ee72b09cbc..87a97df5bb 100644 --- a/docs/da/d53/es__parser__h265_8cc_source.html +++ b/docs/da/d53/es__parser__h265_8cc_source.html @@ -237,37 +237,26 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
148  return false;
149  }
150 
-
151  last_video_decoder_config_ = scoped_refptr<StreamInfo>(
-
152  new VideoStreamInfo(
-
153  pid(),
-
154  kMpeg2Timescale,
-
155  kInfiniteDuration,
-
156  kCodecHVC1,
-
157  decoder_config.GetCodecString(kCodecHVC1),
-
158  std::string(),
-
159  coded_width,
-
160  coded_height,
-
161  pixel_width,
-
162  pixel_height,
-
163  0,
-
164  H26xByteToUnitStreamConverter::kUnitStreamNaluLengthSize,
-
165  decoder_config_record.data(),
-
166  decoder_config_record.size(),
-
167  false));
-
168 
-
169  // Video config notification.
-
170  new_stream_info_cb_.Run(last_video_decoder_config_);
-
171 
-
172  return true;
-
173 }
-
174 
-
175 } // namespace mp2t
-
176 } // namespace media
-
177 } // namespace shaka
+
151  last_video_decoder_config_ = scoped_refptr<StreamInfo>(new VideoStreamInfo(
+
152  pid(), kMpeg2Timescale, kInfiniteDuration, kCodecHVC1,
+
153  decoder_config.GetCodecString(kCodecHVC1), decoder_config_record.data(),
+
154  decoder_config_record.size(), coded_width, coded_height, pixel_width,
+
155  pixel_height, 0, H26xByteToUnitStreamConverter::kUnitStreamNaluLengthSize,
+
156  std::string(), false));
+
157 
+
158  // Video config notification.
+
159  new_stream_info_cb_.Run(last_video_decoder_config_);
+
160 
+
161  return true;
+
162 }
+
163 
+
164 } // namespace mp2t
+
165 } // namespace media
+
166 } // namespace shaka
diff --git a/docs/da/d59/structshaka_1_1media_1_1mp4_1_1CompactSampleSize.html b/docs/da/d59/structshaka_1_1media_1_1mp4_1_1CompactSampleSize.html index 5df72659f8..b1b8c9f820 100644 --- a/docs/da/d59/structshaka_1_1media_1_1mp4_1_1CompactSampleSize.html +++ b/docs/da/d59/structshaka_1_1media_1_1mp4_1_1CompactSampleSize.html @@ -185,7 +185,7 @@ Additional Inherited Members diff --git a/docs/da/d5c/widevine__key__source_8h_source.html b/docs/da/d5c/widevine__key__source_8h_source.html index 1cf924fcbd..216a8fcd24 100644 --- a/docs/da/d5c/widevine__key__source_8h_source.html +++ b/docs/da/d5c/widevine__key__source_8h_source.html @@ -223,7 +223,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d5e/classshaka_1_1media_1_1H264VideoSliceHeaderParser-members.html b/docs/da/d5e/classshaka_1_1media_1_1H264VideoSliceHeaderParser-members.html index 78f1bbf444..c7bd4c7da2 100644 --- a/docs/da/d5e/classshaka_1_1media_1_1H264VideoSliceHeaderParser-members.html +++ b/docs/da/d5e/classshaka_1_1media_1_1H264VideoSliceHeaderParser-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
std::string shaka::media::AudioStreamInfo::GetCodecString (AudioCodec Codec  codec,
diff --git a/docs/da/d60/classshaka_1_1media_1_1mp4_1_1SingleSegmentSegmenter-members.html b/docs/da/d60/classshaka_1_1media_1_1mp4_1_1SingleSegmentSegmenter-members.html index f1ea3da6ea..6502fcf6b4 100644 --- a/docs/da/d60/classshaka_1_1media_1_1mp4_1_1SingleSegmentSegmenter-members.html +++ b/docs/da/d60/classshaka_1_1media_1_1mp4_1_1SingleSegmentSegmenter-members.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
diff --git a/docs/da/d64/classshaka_1_1media_1_1mp2t_1_1H264ProgramMapTableWriter-members.html b/docs/da/d64/classshaka_1_1media_1_1mp2t_1_1H264ProgramMapTableWriter-members.html index 7790f818be..878911ca7a 100644 --- a/docs/da/d64/classshaka_1_1media_1_1mp2t_1_1H264ProgramMapTableWriter-members.html +++ b/docs/da/d64/classshaka_1_1media_1_1mp2t_1_1H264ProgramMapTableWriter-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d6e/structshaka_1_1media_1_1mp4_1_1AudioRollRecoveryEntry.html b/docs/da/d6e/structshaka_1_1media_1_1mp4_1_1AudioRollRecoveryEntry.html index 18f5f6637b..a8931f8ddc 100644 --- a/docs/da/d6e/structshaka_1_1media_1_1mp4_1_1AudioRollRecoveryEntry.html +++ b/docs/da/d6e/structshaka_1_1media_1_1mp4_1_1AudioRollRecoveryEntry.html @@ -120,7 +120,7 @@ int16_t roll_distance< diff --git a/docs/da/d7a/fixed__key__encryption__flags_8h_source.html b/docs/da/d7a/fixed__key__encryption__flags_8h_source.html index d29a1f63e5..c05775251f 100644 --- a/docs/da/d7a/fixed__key__encryption__flags_8h_source.html +++ b/docs/da/d7a/fixed__key__encryption__flags_8h_source.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d85/classshaka_1_1media_1_1mp2t_1_1TsSegmenter-members.html b/docs/da/d85/classshaka_1_1media_1_1mp2t_1_1TsSegmenter-members.html index 678183035f..f55eaf3497 100644 --- a/docs/da/d85/classshaka_1_1media_1_1mp2t_1_1TsSegmenter-members.html +++ b/docs/da/d85/classshaka_1_1media_1_1mp2t_1_1TsSegmenter-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d88/mp4__muxer_8cc_source.html b/docs/da/d88/mp4__muxer_8cc_source.html index fa9584b16c..7d5d40c6cb 100644 --- a/docs/da/d88/mp4__muxer_8cc_source.html +++ b/docs/da/d88/mp4__muxer_8cc_source.html @@ -129,7 +129,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
40  *end = *start + static_cast<uint32_t>(size) - 1;
41 }
42 
-
43 FourCC VideoCodecToFourCC(VideoCodec codec) {
+
43 FourCC CodecToFourCC(Codec codec) {
44  switch (codec) {
45  case kCodecH264:
46  return FOURCC_avc1;
@@ -143,365 +143,358 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
54  return FOURCC_vp09;
55  case kCodecVP10:
56  return FOURCC_vp10;
-
57  default:
-
58  return FOURCC_NULL;
-
59  }
-
60 }
-
61 
-
62 FourCC AudioCodecToFourCC(AudioCodec codec) {
-
63  switch (codec) {
-
64  case kCodecAAC:
-
65  return FOURCC_mp4a;
-
66  case kCodecAC3:
-
67  return FOURCC_ac_3;
-
68  case kCodecDTSC:
-
69  return FOURCC_dtsc;
-
70  case kCodecDTSH:
-
71  return FOURCC_dtsh;
-
72  case kCodecDTSL:
-
73  return FOURCC_dtsl;
-
74  case kCodecDTSE:
-
75  return FOURCC_dtse;
-
76  case kCodecDTSM:
-
77  return FOURCC_dtsm;
-
78  case kCodecEAC3:
-
79  return FOURCC_ec_3;
-
80  case kCodecOpus:
-
81  return FOURCC_Opus;
-
82  default:
-
83  return FOURCC_NULL;
-
84  }
-
85 }
-
86 
-
87 } // namespace
-
88 
-
89 MP4Muxer::MP4Muxer(const MuxerOptions& options) : Muxer(options) {}
-
90 MP4Muxer::~MP4Muxer() {}
-
91 
-
92 Status MP4Muxer::Initialize() {
-
93  DCHECK(!streams().empty());
-
94 
-
95  scoped_ptr<FileType> ftyp(new FileType);
-
96  scoped_ptr<Movie> moov(new Movie);
-
97 
-
98  ftyp->major_brand = FOURCC_dash;
-
99  ftyp->compatible_brands.push_back(FOURCC_iso6);
-
100  ftyp->compatible_brands.push_back(FOURCC_mp41);
-
101  if (streams().size() == 1 &&
-
102  streams()[0]->info()->stream_type() == kStreamVideo) {
-
103  const FourCC codec_fourcc = VideoCodecToFourCC(
-
104  static_cast<VideoStreamInfo*>(streams()[0]->info().get())->codec());
-
105  if (codec_fourcc != FOURCC_NULL)
-
106  ftyp->compatible_brands.push_back(codec_fourcc);
-
107  }
+
57  case kCodecAAC:
+
58  return FOURCC_mp4a;
+
59  case kCodecAC3:
+
60  return FOURCC_ac_3;
+
61  case kCodecDTSC:
+
62  return FOURCC_dtsc;
+
63  case kCodecDTSH:
+
64  return FOURCC_dtsh;
+
65  case kCodecDTSL:
+
66  return FOURCC_dtsl;
+
67  case kCodecDTSE:
+
68  return FOURCC_dtse;
+
69  case kCodecDTSM:
+
70  return FOURCC_dtsm;
+
71  case kCodecEAC3:
+
72  return FOURCC_ec_3;
+
73  case kCodecOpus:
+
74  return FOURCC_Opus;
+
75  default:
+
76  return FOURCC_NULL;
+
77  }
+
78 }
+
79 
+
80 } // namespace
+
81 
+
82 MP4Muxer::MP4Muxer(const MuxerOptions& options) : Muxer(options) {}
+
83 MP4Muxer::~MP4Muxer() {}
+
84 
+
85 Status MP4Muxer::Initialize() {
+
86  DCHECK(!streams().empty());
+
87 
+
88  scoped_ptr<FileType> ftyp(new FileType);
+
89  scoped_ptr<Movie> moov(new Movie);
+
90 
+
91  ftyp->major_brand = FOURCC_dash;
+
92  ftyp->compatible_brands.push_back(FOURCC_iso6);
+
93  ftyp->compatible_brands.push_back(FOURCC_mp41);
+
94  if (streams().size() == 1 &&
+
95  streams()[0]->info()->stream_type() == kStreamVideo) {
+
96  const FourCC codec_fourcc = CodecToFourCC(
+
97  static_cast<VideoStreamInfo*>(streams()[0]->info().get())->codec());
+
98  if (codec_fourcc != FOURCC_NULL)
+
99  ftyp->compatible_brands.push_back(codec_fourcc);
+
100  }
+
101 
+
102  moov->header.creation_time = IsoTimeNow();
+
103  moov->header.modification_time = IsoTimeNow();
+
104  moov->header.next_track_id = streams().size() + 1;
+
105 
+
106  moov->tracks.resize(streams().size());
+
107  moov->extends.tracks.resize(streams().size());
108 
-
109  moov->header.creation_time = IsoTimeNow();
-
110  moov->header.modification_time = IsoTimeNow();
-
111  moov->header.next_track_id = streams().size() + 1;
-
112 
-
113  moov->tracks.resize(streams().size());
-
114  moov->extends.tracks.resize(streams().size());
-
115 
-
116  // Initialize tracks.
-
117  for (uint32_t i = 0; i < streams().size(); ++i) {
-
118  Track& trak = moov->tracks[i];
-
119  trak.header.track_id = i + 1;
-
120 
-
121  TrackExtends& trex = moov->extends.tracks[i];
-
122  trex.track_id = trak.header.track_id;
-
123  trex.default_sample_description_index = 1;
-
124 
-
125  switch (streams()[i]->info()->stream_type()) {
-
126  case kStreamVideo:
-
127  GenerateVideoTrak(
-
128  static_cast<VideoStreamInfo*>(streams()[i]->info().get()),
-
129  &trak,
-
130  i + 1);
-
131  break;
-
132  case kStreamAudio:
-
133  GenerateAudioTrak(
-
134  static_cast<AudioStreamInfo*>(streams()[i]->info().get()),
-
135  &trak,
-
136  i + 1);
-
137  break;
-
138  default:
-
139  NOTIMPLEMENTED() << "Not implemented for stream type: "
-
140  << streams()[i]->info()->stream_type();
-
141  }
-
142  }
-
143 
-
144  if (options().single_segment) {
-
145  segmenter_.reset(
-
146  new SingleSegmentSegmenter(options(), ftyp.Pass(), moov.Pass()));
-
147  } else {
-
148  segmenter_.reset(
-
149  new MultiSegmentSegmenter(options(), ftyp.Pass(), moov.Pass()));
-
150  }
-
151 
-
152  const Status segmenter_initialized = segmenter_->Initialize(
-
153  streams(), muxer_listener(), progress_listener(), encryption_key_source(),
-
154  max_sd_pixels(), clear_lead_in_seconds(),
-
155  crypto_period_duration_in_seconds(), protection_scheme());
+
109  // Initialize tracks.
+
110  for (uint32_t i = 0; i < streams().size(); ++i) {
+
111  Track& trak = moov->tracks[i];
+
112  trak.header.track_id = i + 1;
+
113 
+
114  TrackExtends& trex = moov->extends.tracks[i];
+
115  trex.track_id = trak.header.track_id;
+
116  trex.default_sample_description_index = 1;
+
117 
+
118  switch (streams()[i]->info()->stream_type()) {
+
119  case kStreamVideo:
+
120  GenerateVideoTrak(
+
121  static_cast<VideoStreamInfo*>(streams()[i]->info().get()),
+
122  &trak,
+
123  i + 1);
+
124  break;
+
125  case kStreamAudio:
+
126  GenerateAudioTrak(
+
127  static_cast<AudioStreamInfo*>(streams()[i]->info().get()),
+
128  &trak,
+
129  i + 1);
+
130  break;
+
131  default:
+
132  NOTIMPLEMENTED() << "Not implemented for stream type: "
+
133  << streams()[i]->info()->stream_type();
+
134  }
+
135  }
+
136 
+
137  if (options().single_segment) {
+
138  segmenter_.reset(
+
139  new SingleSegmentSegmenter(options(), ftyp.Pass(), moov.Pass()));
+
140  } else {
+
141  segmenter_.reset(
+
142  new MultiSegmentSegmenter(options(), ftyp.Pass(), moov.Pass()));
+
143  }
+
144 
+
145  const Status segmenter_initialized = segmenter_->Initialize(
+
146  streams(), muxer_listener(), progress_listener(), encryption_key_source(),
+
147  max_sd_pixels(), clear_lead_in_seconds(),
+
148  crypto_period_duration_in_seconds(), protection_scheme());
+
149 
+
150  if (!segmenter_initialized.ok())
+
151  return segmenter_initialized;
+
152 
+
153  FireOnMediaStartEvent();
+
154  return Status::OK;
+
155 }
156 
-
157  if (!segmenter_initialized.ok())
-
158  return segmenter_initialized;
-
159 
-
160  FireOnMediaStartEvent();
-
161  return Status::OK;
-
162 }
+
157 Status MP4Muxer::Finalize() {
+
158  DCHECK(segmenter_);
+
159  Status segmenter_finalized = segmenter_->Finalize();
+
160 
+
161  if (!segmenter_finalized.ok())
+
162  return segmenter_finalized;
163 
-
164 Status MP4Muxer::Finalize() {
-
165  DCHECK(segmenter_);
-
166  Status segmenter_finalized = segmenter_->Finalize();
-
167 
-
168  if (!segmenter_finalized.ok())
-
169  return segmenter_finalized;
-
170 
-
171  FireOnMediaEndEvent();
-
172  LOG(INFO) << "MP4 file '" << options().output_file_name << "' finalized.";
-
173  return Status::OK;
-
174 }
-
175 
-
176 Status MP4Muxer::DoAddSample(const MediaStream* stream,
-
177  scoped_refptr<MediaSample> sample) {
-
178  DCHECK(segmenter_);
-
179  return segmenter_->AddSample(stream, sample);
-
180 }
-
181 
-
182 void MP4Muxer::InitializeTrak(const StreamInfo* info, Track* trak) {
-
183  int64_t now = IsoTimeNow();
-
184  trak->header.creation_time = now;
-
185  trak->header.modification_time = now;
-
186  trak->header.duration = 0;
-
187  trak->media.header.creation_time = now;
-
188  trak->media.header.modification_time = now;
-
189  trak->media.header.timescale = info->time_scale();
-
190  trak->media.header.duration = 0;
-
191  if (!info->language().empty()) {
-
192  // Strip off the subtag, if any.
-
193  std::string main_language = info->language();
-
194  size_t dash = main_language.find('-');
-
195  if (dash != std::string::npos) {
-
196  main_language.erase(dash);
-
197  }
-
198 
-
199  // ISO-639-2/T main language code should be 3 characters.
-
200  if (main_language.size() != 3) {
-
201  LOG(WARNING) << "'" << main_language << "' is not a valid ISO-639-2 "
-
202  << "language code, ignoring.";
-
203  } else {
-
204  trak->media.header.language.code = main_language;
-
205  }
-
206  }
-
207 }
-
208 
-
209 void MP4Muxer::GenerateVideoTrak(const VideoStreamInfo* video_info,
-
210  Track* trak,
-
211  uint32_t track_id) {
-
212  InitializeTrak(video_info, trak);
-
213 
-
214  // width and height specify the track's visual presentation size as
-
215  // fixed-point 16.16 values.
-
216  uint32_t pixel_width = video_info->pixel_width();
-
217  uint32_t pixel_height = video_info->pixel_height();
-
218  if (pixel_width == 0 || pixel_height == 0) {
-
219  LOG(WARNING) << "pixel width/height are not set. Assuming 1:1.";
-
220  pixel_width = 1;
-
221  pixel_height = 1;
-
222  }
-
223  const double sample_aspect_ratio =
-
224  static_cast<double>(pixel_width) / pixel_height;
-
225  trak->header.width = video_info->width() * sample_aspect_ratio * 0x10000;
-
226  trak->header.height = video_info->height() * 0x10000;
-
227 
-
228  VideoSampleEntry video;
-
229  video.format = VideoCodecToFourCC(video_info->codec());
-
230  video.width = video_info->width();
-
231  video.height = video_info->height();
-
232  video.codec_configuration.data = video_info->codec_config();
-
233  if (pixel_width != 1 || pixel_height != 1) {
-
234  video.pixel_aspect.h_spacing = pixel_width;
-
235  video.pixel_aspect.v_spacing = pixel_height;
-
236  }
-
237 
-
238  SampleDescription& sample_description =
-
239  trak->media.information.sample_table.description;
-
240  sample_description.type = kVideo;
-
241  sample_description.video_entries.push_back(video);
-
242 }
+
164  FireOnMediaEndEvent();
+
165  LOG(INFO) << "MP4 file '" << options().output_file_name << "' finalized.";
+
166  return Status::OK;
+
167 }
+
168 
+
169 Status MP4Muxer::DoAddSample(const MediaStream* stream,
+
170  scoped_refptr<MediaSample> sample) {
+
171  DCHECK(segmenter_);
+
172  return segmenter_->AddSample(stream, sample);
+
173 }
+
174 
+
175 void MP4Muxer::InitializeTrak(const StreamInfo* info, Track* trak) {
+
176  int64_t now = IsoTimeNow();
+
177  trak->header.creation_time = now;
+
178  trak->header.modification_time = now;
+
179  trak->header.duration = 0;
+
180  trak->media.header.creation_time = now;
+
181  trak->media.header.modification_time = now;
+
182  trak->media.header.timescale = info->time_scale();
+
183  trak->media.header.duration = 0;
+
184  if (!info->language().empty()) {
+
185  // Strip off the subtag, if any.
+
186  std::string main_language = info->language();
+
187  size_t dash = main_language.find('-');
+
188  if (dash != std::string::npos) {
+
189  main_language.erase(dash);
+
190  }
+
191 
+
192  // ISO-639-2/T main language code should be 3 characters.
+
193  if (main_language.size() != 3) {
+
194  LOG(WARNING) << "'" << main_language << "' is not a valid ISO-639-2 "
+
195  << "language code, ignoring.";
+
196  } else {
+
197  trak->media.header.language.code = main_language;
+
198  }
+
199  }
+
200 }
+
201 
+
202 void MP4Muxer::GenerateVideoTrak(const VideoStreamInfo* video_info,
+
203  Track* trak,
+
204  uint32_t track_id) {
+
205  InitializeTrak(video_info, trak);
+
206 
+
207  // width and height specify the track's visual presentation size as
+
208  // fixed-point 16.16 values.
+
209  uint32_t pixel_width = video_info->pixel_width();
+
210  uint32_t pixel_height = video_info->pixel_height();
+
211  if (pixel_width == 0 || pixel_height == 0) {
+
212  LOG(WARNING) << "pixel width/height are not set. Assuming 1:1.";
+
213  pixel_width = 1;
+
214  pixel_height = 1;
+
215  }
+
216  const double sample_aspect_ratio =
+
217  static_cast<double>(pixel_width) / pixel_height;
+
218  trak->header.width = video_info->width() * sample_aspect_ratio * 0x10000;
+
219  trak->header.height = video_info->height() * 0x10000;
+
220 
+
221  VideoSampleEntry video;
+
222  video.format = CodecToFourCC(video_info->codec());
+
223  video.width = video_info->width();
+
224  video.height = video_info->height();
+
225  video.codec_configuration.data = video_info->codec_config();
+
226  if (pixel_width != 1 || pixel_height != 1) {
+
227  video.pixel_aspect.h_spacing = pixel_width;
+
228  video.pixel_aspect.v_spacing = pixel_height;
+
229  }
+
230 
+
231  SampleDescription& sample_description =
+
232  trak->media.information.sample_table.description;
+
233  sample_description.type = kVideo;
+
234  sample_description.video_entries.push_back(video);
+
235 }
+
236 
+
237 void MP4Muxer::GenerateAudioTrak(const AudioStreamInfo* audio_info,
+
238  Track* trak,
+
239  uint32_t track_id) {
+
240  InitializeTrak(audio_info, trak);
+
241 
+
242  trak->header.volume = 0x100;
243 
-
244 void MP4Muxer::GenerateAudioTrak(const AudioStreamInfo* audio_info,
-
245  Track* trak,
-
246  uint32_t track_id) {
-
247  InitializeTrak(audio_info, trak);
-
248 
-
249  trak->header.volume = 0x100;
-
250 
-
251  AudioSampleEntry audio;
-
252  audio.format = AudioCodecToFourCC(audio_info->codec());
-
253  switch(audio_info->codec()){
-
254  case kCodecAAC:
-
255  audio.esds.es_descriptor.set_object_type(kISO_14496_3); // MPEG4 AAC.
-
256  audio.esds.es_descriptor.set_esid(track_id);
-
257  audio.esds.es_descriptor.set_decoder_specific_info(
-
258  audio_info->codec_config());
-
259  audio.esds.es_descriptor.set_max_bitrate(audio_info->max_bitrate());
-
260  audio.esds.es_descriptor.set_avg_bitrate(audio_info->avg_bitrate());
-
261  break;
-
262  case kCodecDTSC:
-
263  case kCodecDTSH:
-
264  case kCodecDTSL:
-
265  case kCodecDTSE:
-
266  case kCodecDTSM:
-
267  audio.ddts.extra_data = audio_info->codec_config();
-
268  audio.ddts.max_bitrate = audio_info->max_bitrate();
-
269  audio.ddts.avg_bitrate = audio_info->avg_bitrate();
-
270  audio.ddts.sampling_frequency = audio_info->sampling_frequency();
-
271  audio.ddts.pcm_sample_depth = audio_info->sample_bits();
-
272  break;
-
273  case kCodecAC3:
-
274  audio.dac3.data = audio_info->codec_config();
-
275  break;
-
276  case kCodecEAC3:
-
277  audio.dec3.data = audio_info->codec_config();
-
278  break;
-
279  case kCodecOpus:
-
280  audio.dops.opus_identification_header = audio_info->codec_config();
-
281  break;
-
282  default:
-
283  NOTIMPLEMENTED();
-
284  break;
-
285  }
-
286 
-
287  audio.channelcount = audio_info->num_channels();
-
288  audio.samplesize = audio_info->sample_bits();
-
289  audio.samplerate = audio_info->sampling_frequency();
-
290  SampleTable& sample_table = trak->media.information.sample_table;
-
291  SampleDescription& sample_description = sample_table.description;
-
292  sample_description.type = kAudio;
-
293  sample_description.audio_entries.push_back(audio);
-
294 
-
295  // Opus requires at least one sample group description box and at least one
-
296  // sample to group box with grouping type 'roll' within sample table box.
-
297  if (audio_info->codec() == kCodecOpus) {
-
298  sample_table.sample_group_descriptions.resize(1);
-
299  SampleGroupDescription& sample_group_description =
-
300  sample_table.sample_group_descriptions.back();
-
301  sample_group_description.grouping_type = FOURCC_roll;
-
302  sample_group_description.audio_roll_recovery_entries.resize(1);
-
303  // The roll distance is expressed in sample units and always takes negative
-
304  // values.
-
305  const uint64_t kNanosecondsPerSecond = 1000000000ull;
-
306  sample_group_description.audio_roll_recovery_entries[0].roll_distance =
-
307  (0 - (audio_info->seek_preroll_ns() * audio.samplerate +
-
308  kNanosecondsPerSecond / 2)) /
-
309  kNanosecondsPerSecond;
-
310 
-
311  sample_table.sample_to_groups.resize(1);
-
312  SampleToGroup& sample_to_group = sample_table.sample_to_groups.back();
-
313  sample_to_group.grouping_type = FOURCC_roll;
-
314 
-
315  sample_to_group.entries.resize(1);
-
316  SampleToGroupEntry& sample_to_group_entry = sample_to_group.entries.back();
-
317  // All samples are in track fragments.
-
318  sample_to_group_entry.sample_count = 0;
-
319  sample_to_group_entry.group_description_index =
-
320  SampleToGroupEntry::kTrackGroupDescriptionIndexBase + 1;
-
321  } else if (audio_info->seek_preroll_ns() != 0) {
-
322  LOG(WARNING) << "Unexpected seek preroll for codec " << audio_info->codec();
-
323  return;
-
324  }
-
325 }
-
326 
-
327 bool MP4Muxer::GetInitRangeStartAndEnd(uint32_t* start, uint32_t* end) {
-
328  DCHECK(start && end);
-
329  size_t range_offset = 0;
-
330  size_t range_size = 0;
-
331  const bool has_range = segmenter_->GetInitRange(&range_offset, &range_size);
+
244  AudioSampleEntry audio;
+
245  audio.format = CodecToFourCC(audio_info->codec());
+
246  switch(audio_info->codec()){
+
247  case kCodecAAC:
+
248  audio.esds.es_descriptor.set_object_type(kISO_14496_3); // MPEG4 AAC.
+
249  audio.esds.es_descriptor.set_esid(track_id);
+
250  audio.esds.es_descriptor.set_decoder_specific_info(
+
251  audio_info->codec_config());
+
252  audio.esds.es_descriptor.set_max_bitrate(audio_info->max_bitrate());
+
253  audio.esds.es_descriptor.set_avg_bitrate(audio_info->avg_bitrate());
+
254  break;
+
255  case kCodecDTSC:
+
256  case kCodecDTSH:
+
257  case kCodecDTSL:
+
258  case kCodecDTSE:
+
259  case kCodecDTSM:
+
260  audio.ddts.extra_data = audio_info->codec_config();
+
261  audio.ddts.max_bitrate = audio_info->max_bitrate();
+
262  audio.ddts.avg_bitrate = audio_info->avg_bitrate();
+
263  audio.ddts.sampling_frequency = audio_info->sampling_frequency();
+
264  audio.ddts.pcm_sample_depth = audio_info->sample_bits();
+
265  break;
+
266  case kCodecAC3:
+
267  audio.dac3.data = audio_info->codec_config();
+
268  break;
+
269  case kCodecEAC3:
+
270  audio.dec3.data = audio_info->codec_config();
+
271  break;
+
272  case kCodecOpus:
+
273  audio.dops.opus_identification_header = audio_info->codec_config();
+
274  break;
+
275  default:
+
276  NOTIMPLEMENTED();
+
277  break;
+
278  }
+
279 
+
280  audio.channelcount = audio_info->num_channels();
+
281  audio.samplesize = audio_info->sample_bits();
+
282  audio.samplerate = audio_info->sampling_frequency();
+
283  SampleTable& sample_table = trak->media.information.sample_table;
+
284  SampleDescription& sample_description = sample_table.description;
+
285  sample_description.type = kAudio;
+
286  sample_description.audio_entries.push_back(audio);
+
287 
+
288  // Opus requires at least one sample group description box and at least one
+
289  // sample to group box with grouping type 'roll' within sample table box.
+
290  if (audio_info->codec() == kCodecOpus) {
+
291  sample_table.sample_group_descriptions.resize(1);
+
292  SampleGroupDescription& sample_group_description =
+
293  sample_table.sample_group_descriptions.back();
+
294  sample_group_description.grouping_type = FOURCC_roll;
+
295  sample_group_description.audio_roll_recovery_entries.resize(1);
+
296  // The roll distance is expressed in sample units and always takes negative
+
297  // values.
+
298  const uint64_t kNanosecondsPerSecond = 1000000000ull;
+
299  sample_group_description.audio_roll_recovery_entries[0].roll_distance =
+
300  (0 - (audio_info->seek_preroll_ns() * audio.samplerate +
+
301  kNanosecondsPerSecond / 2)) /
+
302  kNanosecondsPerSecond;
+
303 
+
304  sample_table.sample_to_groups.resize(1);
+
305  SampleToGroup& sample_to_group = sample_table.sample_to_groups.back();
+
306  sample_to_group.grouping_type = FOURCC_roll;
+
307 
+
308  sample_to_group.entries.resize(1);
+
309  SampleToGroupEntry& sample_to_group_entry = sample_to_group.entries.back();
+
310  // All samples are in track fragments.
+
311  sample_to_group_entry.sample_count = 0;
+
312  sample_to_group_entry.group_description_index =
+
313  SampleToGroupEntry::kTrackGroupDescriptionIndexBase + 1;
+
314  } else if (audio_info->seek_preroll_ns() != 0) {
+
315  LOG(WARNING) << "Unexpected seek preroll for codec " << audio_info->codec();
+
316  return;
+
317  }
+
318 }
+
319 
+
320 bool MP4Muxer::GetInitRangeStartAndEnd(uint32_t* start, uint32_t* end) {
+
321  DCHECK(start && end);
+
322  size_t range_offset = 0;
+
323  size_t range_size = 0;
+
324  const bool has_range = segmenter_->GetInitRange(&range_offset, &range_size);
+
325 
+
326  if (!has_range)
+
327  return false;
+
328 
+
329  SetStartAndEndFromOffsetAndSize(range_offset, range_size, start, end);
+
330  return true;
+
331 }
332 
-
333  if (!has_range)
-
334  return false;
-
335 
-
336  SetStartAndEndFromOffsetAndSize(range_offset, range_size, start, end);
-
337  return true;
-
338 }
-
339 
-
340 bool MP4Muxer::GetIndexRangeStartAndEnd(uint32_t* start, uint32_t* end) {
-
341  DCHECK(start && end);
-
342  size_t range_offset = 0;
-
343  size_t range_size = 0;
-
344  const bool has_range = segmenter_->GetIndexRange(&range_offset, &range_size);
+
333 bool MP4Muxer::GetIndexRangeStartAndEnd(uint32_t* start, uint32_t* end) {
+
334  DCHECK(start && end);
+
335  size_t range_offset = 0;
+
336  size_t range_size = 0;
+
337  const bool has_range = segmenter_->GetIndexRange(&range_offset, &range_size);
+
338 
+
339  if (!has_range)
+
340  return false;
+
341 
+
342  SetStartAndEndFromOffsetAndSize(range_offset, range_size, start, end);
+
343  return true;
+
344 }
345 
-
346  if (!has_range)
-
347  return false;
-
348 
-
349  SetStartAndEndFromOffsetAndSize(range_offset, range_size, start, end);
-
350  return true;
-
351 }
-
352 
-
353 void MP4Muxer::FireOnMediaStartEvent() {
-
354  if (!muxer_listener())
-
355  return;
-
356 
-
357  if (streams().size() > 1) {
-
358  LOG(ERROR) << "MuxerListener cannot take more than 1 stream.";
-
359  return;
-
360  }
-
361  DCHECK(!streams().empty()) << "Media started without a stream.";
+
346 void MP4Muxer::FireOnMediaStartEvent() {
+
347  if (!muxer_listener())
+
348  return;
+
349 
+
350  if (streams().size() > 1) {
+
351  LOG(ERROR) << "MuxerListener cannot take more than 1 stream.";
+
352  return;
+
353  }
+
354  DCHECK(!streams().empty()) << "Media started without a stream.";
+
355 
+
356  const uint32_t timescale = segmenter_->GetReferenceTimeScale();
+
357  muxer_listener()->OnMediaStart(options(),
+
358  *streams().front()->info(),
+
359  timescale,
+
360  MuxerListener::kContainerMp4);
+
361 }
362 
-
363  const uint32_t timescale = segmenter_->GetReferenceTimeScale();
-
364  muxer_listener()->OnMediaStart(options(),
-
365  *streams().front()->info(),
-
366  timescale,
-
367  MuxerListener::kContainerMp4);
-
368 }
-
369 
-
370 void MP4Muxer::FireOnMediaEndEvent() {
-
371  if (!muxer_listener())
-
372  return;
-
373 
-
374  uint32_t init_range_start = 0;
-
375  uint32_t init_range_end = 0;
-
376  const bool has_init_range =
-
377  GetInitRangeStartAndEnd(&init_range_start, &init_range_end);
+
363 void MP4Muxer::FireOnMediaEndEvent() {
+
364  if (!muxer_listener())
+
365  return;
+
366 
+
367  uint32_t init_range_start = 0;
+
368  uint32_t init_range_end = 0;
+
369  const bool has_init_range =
+
370  GetInitRangeStartAndEnd(&init_range_start, &init_range_end);
+
371 
+
372  uint32_t index_range_start = 0;
+
373  uint32_t index_range_end = 0;
+
374  const bool has_index_range =
+
375  GetIndexRangeStartAndEnd(&index_range_start, &index_range_end);
+
376 
+
377  const float duration_seconds = static_cast<float>(segmenter_->GetDuration());
378 
-
379  uint32_t index_range_start = 0;
-
380  uint32_t index_range_end = 0;
-
381  const bool has_index_range =
-
382  GetIndexRangeStartAndEnd(&index_range_start, &index_range_end);
-
383 
-
384  const float duration_seconds = static_cast<float>(segmenter_->GetDuration());
+
379  const int64_t file_size =
+
380  File::GetFileSize(options().output_file_name.c_str());
+
381  if (file_size <= 0) {
+
382  LOG(ERROR) << "Invalid file size: " << file_size;
+
383  return;
+
384  }
385 
-
386  const int64_t file_size =
-
387  File::GetFileSize(options().output_file_name.c_str());
-
388  if (file_size <= 0) {
-
389  LOG(ERROR) << "Invalid file size: " << file_size;
-
390  return;
-
391  }
-
392 
-
393  muxer_listener()->OnMediaEnd(has_init_range,
-
394  init_range_start,
-
395  init_range_end,
-
396  has_index_range,
-
397  index_range_start,
-
398  index_range_end,
-
399  duration_seconds,
-
400  file_size);
+
386  muxer_listener()->OnMediaEnd(has_init_range,
+
387  init_range_start,
+
388  init_range_end,
+
389  has_index_range,
+
390  index_range_start,
+
391  index_range_end,
+
392  duration_seconds,
+
393  file_size);
+
394 }
+
395 
+
396 uint64_t MP4Muxer::IsoTimeNow() {
+
397  // Time in seconds from Jan. 1, 1904 to epoch time, i.e. Jan. 1, 1970.
+
398  const uint64_t kIsomTimeOffset = 2082844800l;
+
399  return kIsomTimeOffset +
+
400  (clock() ? clock()->Now() : base::Time::Now()).ToDoubleT();
401 }
402 
-
403 uint64_t MP4Muxer::IsoTimeNow() {
-
404  // Time in seconds from Jan. 1, 1904 to epoch time, i.e. Jan. 1, 1970.
-
405  const uint64_t kIsomTimeOffset = 2082844800l;
-
406  return kIsomTimeOffset +
-
407  (clock() ? clock()->Now() : base::Time::Now()).ToDoubleT();
-
408 }
-
409 
-
410 } // namespace mp4
-
411 } // namespace media
-
412 } // namespace shaka
+
403 } // namespace mp4
+
404 } // namespace media
+
405 } // namespace shaka
virtual void OnMediaEnd(bool has_init_range, uint64_t init_range_start, uint64_t init_range_end, bool has_index_range, uint64_t index_range_start, uint64_t index_range_end, float duration_seconds, uint64_t file_size)=0
-
MP4Muxer(const MuxerOptions &options)
Create a MP4Muxer object from MuxerOptions.
Definition: mp4_muxer.cc:89
+
MP4Muxer(const MuxerOptions &options)
Create a MP4Muxer object from MuxerOptions.
Definition: mp4_muxer.cc:82
This structure contains the list of configuration options for Muxer.
Definition: muxer_options.h:18
static int64_t GetFileSize(const char *file_name)
Definition: file.cc:180
@@ -510,7 +503,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d8b/classshaka_1_1media_1_1WebMMediaParser-members.html b/docs/da/d8b/classshaka_1_1media_1_1WebMMediaParser-members.html index 311f990cb3..91590b9124 100644 --- a/docs/da/d8b/classshaka_1_1media_1_1WebMMediaParser-members.html +++ b/docs/da/d8b/classshaka_1_1media_1_1WebMMediaParser-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d8e/container__names_8cc_source.html b/docs/da/d8e/container__names_8cc_source.html index c18fa1da9f..64fbc1143d 100644 --- a/docs/da/d8e/container__names_8cc_source.html +++ b/docs/da/d8e/container__names_8cc_source.html @@ -1863,7 +1863,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d9b/structshaka_1_1media_1_1mp4_1_1CompositionOffset-members.html b/docs/da/d9b/structshaka_1_1media_1_1mp4_1_1CompositionOffset-members.html index 2c23111d38..f82b1c7831 100644 --- a/docs/da/d9b/structshaka_1_1media_1_1mp4_1_1CompositionOffset-members.html +++ b/docs/da/d9b/structshaka_1_1media_1_1mp4_1_1CompositionOffset-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d9d/structshaka_1_1media_1_1mp4_1_1EC3Specific-members.html b/docs/da/d9d/structshaka_1_1media_1_1mp4_1_1EC3Specific-members.html index 8aca78c12f..f7d97c3d83 100644 --- a/docs/da/d9d/structshaka_1_1media_1_1mp4_1_1EC3Specific-members.html +++ b/docs/da/d9d/structshaka_1_1media_1_1mp4_1_1EC3Specific-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d9f/classshaka_1_1MpdNotifierFactory-members.html b/docs/da/d9f/classshaka_1_1MpdNotifierFactory-members.html index acadea551f..dccda2ef2e 100644 --- a/docs/da/d9f/classshaka_1_1MpdNotifierFactory-members.html +++ b/docs/da/d9f/classshaka_1_1MpdNotifierFactory-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d9f/classshaka_1_1media_1_1MockMuxerListener-members.html b/docs/da/d9f/classshaka_1_1media_1_1MockMuxerListener-members.html index 05c774cc3b..95b7e3bf59 100644 --- a/docs/da/d9f/classshaka_1_1media_1_1MockMuxerListener-members.html +++ b/docs/da/d9f/classshaka_1_1media_1_1MockMuxerListener-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/da1/classshaka_1_1media_1_1mp2t_1_1TsPacket.html b/docs/da/da1/classshaka_1_1media_1_1mp2t_1_1TsPacket.html index f435d47dd5..0b43761518 100644 --- a/docs/da/da1/classshaka_1_1media_1_1mp2t_1_1TsPacket.html +++ b/docs/da/da1/classshaka_1_1media_1_1mp2t_1_1TsPacket.html @@ -145,7 +145,7 @@ static const int kPacketSi diff --git a/docs/da/db2/classshaka_1_1Representation-members.html b/docs/da/db2/classshaka_1_1Representation-members.html index e4b33b6882..c74dbd2bd8 100644 --- a/docs/da/db2/classshaka_1_1Representation-members.html +++ b/docs/da/db2/classshaka_1_1Representation-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/dbb/structshaka_1_1media_1_1mp4_1_1HandlerReference.html b/docs/da/dbb/structshaka_1_1media_1_1mp4_1_1HandlerReference.html index a43d218250..8042b4bced 100644 --- a/docs/da/dbb/structshaka_1_1media_1_1mp4_1_1HandlerReference.html +++ b/docs/da/dbb/structshaka_1_1media_1_1mp4_1_1HandlerReference.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/da/dc3/status_8cc_source.html b/docs/da/dc3/status_8cc_source.html index a5b755d7bd..9a662c9792 100644 --- a/docs/da/dc3/status_8cc_source.html +++ b/docs/da/dc3/status_8cc_source.html @@ -168,7 +168,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/dc4/structshaka_1_1media_1_1mp4_1_1TrackHeader.html b/docs/da/dc4/structshaka_1_1media_1_1mp4_1_1TrackHeader.html index 336c96d702..2602b1f40f 100644 --- a/docs/da/dc4/structshaka_1_1media_1_1mp4_1_1TrackHeader.html +++ b/docs/da/dc4/structshaka_1_1media_1_1mp4_1_1TrackHeader.html @@ -215,7 +215,7 @@ Additional Inherited Members diff --git a/docs/da/dcb/es__descriptor_8h_source.html b/docs/da/dcb/es__descriptor_8h_source.html index fd747436d1..cab752d058 100644 --- a/docs/da/dcb/es__descriptor_8h_source.html +++ b/docs/da/dcb/es__descriptor_8h_source.html @@ -183,7 +183,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/dd0/structshaka_1_1media_1_1mp4_1_1Edit.html b/docs/da/dd0/structshaka_1_1media_1_1mp4_1_1Edit.html index c3d86a65dd..b70dc0009f 100644 --- a/docs/da/dd0/structshaka_1_1media_1_1mp4_1_1Edit.html +++ b/docs/da/dd0/structshaka_1_1media_1_1mp4_1_1Edit.html @@ -173,7 +173,7 @@ Additional Inherited Members diff --git a/docs/da/dd0/webm__info__parser_8h_source.html b/docs/da/dd0/webm__info__parser_8h_source.html index 9ccaefa63a..7ba4df588b 100644 --- a/docs/da/dd0/webm__info__parser_8h_source.html +++ b/docs/da/dd0/webm__info__parser_8h_source.html @@ -138,7 +138,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/dd1/fragmenter_8h_source.html b/docs/da/dd1/fragmenter_8h_source.html index 5976647656..8991508f0b 100644 --- a/docs/da/dd1/fragmenter_8h_source.html +++ b/docs/da/dd1/fragmenter_8h_source.html @@ -206,7 +206,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/dd2/classshaka_1_1media_1_1mp2t_1_1TsPacket-members.html b/docs/da/dd2/classshaka_1_1media_1_1mp2t_1_1TsPacket-members.html index bd1cf32442..23437d033a 100644 --- a/docs/da/dd2/classshaka_1_1media_1_1mp2t_1_1TsPacket-members.html +++ b/docs/da/dd2/classshaka_1_1media_1_1mp2t_1_1TsPacket-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/dd6/classshaka_1_1media_1_1H264ByteToUnitStreamConverter-members.html b/docs/da/dd6/classshaka_1_1media_1_1H264ByteToUnitStreamConverter-members.html index 5d98426a83..137f065f98 100644 --- a/docs/da/dd6/classshaka_1_1media_1_1H264ByteToUnitStreamConverter-members.html +++ b/docs/da/dd6/classshaka_1_1media_1_1H264ByteToUnitStreamConverter-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/dd8/classshaka_1_1media_1_1mp2t_1_1Mp2tMediaParser-members.html b/docs/da/dd8/classshaka_1_1media_1_1mp2t_1_1Mp2tMediaParser-members.html index e0d98b87f6..ccc0976e45 100644 --- a/docs/da/dd8/classshaka_1_1media_1_1mp2t_1_1Mp2tMediaParser-members.html +++ b/docs/da/dd8/classshaka_1_1media_1_1mp2t_1_1Mp2tMediaParser-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/dda/structshaka_1_1media_1_1H264SEIRecoveryPoint-members.html b/docs/da/dda/structshaka_1_1media_1_1H264SEIRecoveryPoint-members.html index 7b4cfe8810..f867030bd5 100644 --- a/docs/da/dda/structshaka_1_1media_1_1H264SEIRecoveryPoint-members.html +++ b/docs/da/dda/structshaka_1_1media_1_1H264SEIRecoveryPoint-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/ddd/classshaka_1_1media_1_1WidevineKeySource.html b/docs/da/ddd/classshaka_1_1media_1_1WidevineKeySource.html index 614d635385..4b75ddc876 100644 --- a/docs/da/ddd/classshaka_1_1media_1_1WidevineKeySource.html +++ b/docs/da/ddd/classshaka_1_1media_1_1WidevineKeySource.html @@ -550,7 +550,7 @@ static std::string  diff --git a/docs/da/ddf/structshaka_1_1media_1_1mp4_1_1SampleDescription-members.html b/docs/da/ddf/structshaka_1_1media_1_1mp4_1_1SampleDescription-members.html index 742428b67a..fb085a2300 100644 --- a/docs/da/ddf/structshaka_1_1media_1_1mp4_1_1SampleDescription-members.html +++ b/docs/da/ddf/structshaka_1_1media_1_1mp4_1_1SampleDescription-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/de2/mock__mpd__builder_8cc_source.html b/docs/da/de2/mock__mpd__builder_8cc_source.html index 7c775ec733..1feae8204b 100644 --- a/docs/da/de2/mock__mpd__builder_8cc_source.html +++ b/docs/da/de2/mock__mpd__builder_8cc_source.html @@ -123,7 +123,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/de4/classshaka_1_1media_1_1WebMClusterParser.html b/docs/da/de4/classshaka_1_1media_1_1WebMClusterParser.html index beb12377ef..a7bd768c80 100644 --- a/docs/da/de4/classshaka_1_1media_1_1WebMClusterParser.html +++ b/docs/da/de4/classshaka_1_1media_1_1WebMClusterParser.html @@ -274,7 +274,7 @@ Additional Inherited Members -

Definition at line 52 of file webm_cluster_parser.cc.

+

Definition at line 49 of file webm_cluster_parser.cc.

@@ -320,7 +320,7 @@ Additional Inherited Members

Flush data currently in the parser and reset the parser so it can accept a new cluster.

Returns
true on success, false otherwise.
-

Definition at line 106 of file webm_cluster_parser.cc.

+

Definition at line 103 of file webm_cluster_parser.cc.

@@ -354,7 +354,7 @@ Additional Inherited Members
The number of bytes parsed on success.
-

Definition at line 114 of file webm_cluster_parser.cc.

+

Definition at line 111 of file webm_cluster_parser.cc.

@@ -365,7 +365,7 @@ The number of bytes parsed on success. diff --git a/docs/da/de6/structshaka_1_1media_1_1mp4_1_1SchemeType-members.html b/docs/da/de6/structshaka_1_1media_1_1mp4_1_1SchemeType-members.html index 8a2e04f0c3..c8cbc573ed 100644 --- a/docs/da/de6/structshaka_1_1media_1_1mp4_1_1SchemeType-members.html +++ b/docs/da/de6/structshaka_1_1media_1_1mp4_1_1SchemeType-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/de8/classshaka_1_1media_1_1AudioStreamInfo-members.html b/docs/da/de8/classshaka_1_1media_1_1AudioStreamInfo-members.html index 50d6e1c815..0e8fad5dc5 100644 --- a/docs/da/de8/classshaka_1_1media_1_1AudioStreamInfo-members.html +++ b/docs/da/de8/classshaka_1_1media_1_1AudioStreamInfo-members.html @@ -93,15 +93,15 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');

This is the complete list of members for shaka::media::AudioStreamInfo, including all inherited members.

- + - + - + @@ -111,14 +111,14 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); - + - + @@ -126,7 +126,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
AudioStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, AudioCodec codec, const std::string &codec_string, const std::string &language, uint8_t sample_bits, uint8_t num_channels, uint32_t sampling_frequency, uint64_t seek_preroll_ns, uint64_t codec_delay_ns, uint32_t max_bitrate, uint32_t avg_bitrate, const uint8_t *codec_config, size_t codec_config_size, bool is_encrypted)shaka::media::AudioStreamInfo
AudioStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, Codec codec, const std::string &codec_string, const uint8_t *codec_config, size_t codec_config_size, uint8_t sample_bits, uint8_t num_channels, uint32_t sampling_frequency, uint64_t seek_preroll_ns, uint64_t codec_delay_ns, uint32_t max_bitrate, uint32_t avg_bitrate, const std::string &language, bool is_encrypted)shaka::media::AudioStreamInfo
avg_bitrate() const (defined in shaka::media::AudioStreamInfo)shaka::media::AudioStreamInfoinline
bytes_per_frame() const (defined in shaka::media::AudioStreamInfo)shaka::media::AudioStreamInfoinline
codec() const (defined in shaka::media::AudioStreamInfo)shaka::media::AudioStreamInfoinline
codec() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
codec_config() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
codec_delay_ns() const (defined in shaka::media::AudioStreamInfo)shaka::media::AudioStreamInfoinline
codec_string() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
duration() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
GetCodecString(AudioCodec codec, uint8_t audio_object_type)shaka::media::AudioStreamInfostatic
GetCodecString(Codec codec, uint8_t audio_object_type)shaka::media::AudioStreamInfostatic
is_encrypted() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
IsValidConfig() const overrideshaka::media::AudioStreamInfovirtual
language() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
sample_bytes() const (defined in shaka::media::AudioStreamInfo)shaka::media::AudioStreamInfoinline
sampling_frequency() const (defined in shaka::media::AudioStreamInfo)shaka::media::AudioStreamInfoinline
seek_preroll_ns() const (defined in shaka::media::AudioStreamInfo)shaka::media::AudioStreamInfoinline
set_codec(AudioCodec codec) (defined in shaka::media::AudioStreamInfo)shaka::media::AudioStreamInfoinline
set_codec(Codec codec) (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
set_codec_config(const std::vector< uint8_t > &data) (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
set_codec_string(const std::string &codec_string) (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
set_duration(int duration) (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
set_language(const std::string &language) (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
set_sampling_frequency(const uint32_t sampling_frequency) (defined in shaka::media::AudioStreamInfo)shaka::media::AudioStreamInfoinline
stream_type() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
StreamInfo(StreamType stream_type, int track_id, uint32_t time_scale, uint64_t duration, const std::string &codec_string, const std::string &language, const uint8_t *codec_config, size_t codec_config_size, bool is_encrypted) (defined in shaka::media::StreamInfo)shaka::media::StreamInfo
StreamInfo(StreamType stream_type, int track_id, uint32_t time_scale, uint64_t duration, Codec codec, const std::string &codec_string, const uint8_t *codec_config, size_t codec_config_size, const std::string &language, bool is_encrypted) (defined in shaka::media::StreamInfo)shaka::media::StreamInfo
time_scale() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
ToString() const overrideshaka::media::AudioStreamInfovirtual
track_id() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
diff --git a/docs/da/de9/structshaka_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html b/docs/da/de9/structshaka_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html index 00583cdef4..92ead2fb4f 100644 --- a/docs/da/de9/structshaka_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html +++ b/docs/da/de9/structshaka_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html @@ -179,7 +179,7 @@ Additional Inherited Members diff --git a/docs/da/df0/classshaka_1_1media_1_1H264VideoSliceHeaderParser.html b/docs/da/df0/classshaka_1_1media_1_1H264VideoSliceHeaderParser.html index 2743b270a3..203f315fb7 100644 --- a/docs/da/df0/classshaka_1_1media_1_1H264VideoSliceHeaderParser.html +++ b/docs/da/df0/classshaka_1_1media_1_1H264VideoSliceHeaderParser.html @@ -152,7 +152,7 @@ int64_t  diff --git a/docs/da/df4/aes__decryptor_8cc_source.html b/docs/da/df4/aes__decryptor_8cc_source.html index 8f514fa12d..ad57b637ab 100644 --- a/docs/da/df4/aes__decryptor_8cc_source.html +++ b/docs/da/df4/aes__decryptor_8cc_source.html @@ -258,7 +258,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/df5/structshaka_1_1media_1_1mp4_1_1SampleDescription.html b/docs/da/df5/structshaka_1_1media_1_1mp4_1_1SampleDescription.html index 355e00a9c7..f37b113e2d 100644 --- a/docs/da/df5/structshaka_1_1media_1_1mp4_1_1SampleDescription.html +++ b/docs/da/df5/structshaka_1_1media_1_1mp4_1_1SampleDescription.html @@ -191,7 +191,7 @@ Additional Inherited Members diff --git a/docs/da/df9/classshaka_1_1media_1_1AesPatternCryptor-members.html b/docs/da/df9/classshaka_1_1media_1_1AesPatternCryptor-members.html index 80eccf3bcc..e2d2d52b24 100644 --- a/docs/da/df9/classshaka_1_1media_1_1AesPatternCryptor-members.html +++ b/docs/da/df9/classshaka_1_1media_1_1AesPatternCryptor-members.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d05/structshaka_1_1media_1_1H265SliceHeader.html b/docs/db/d05/structshaka_1_1media_1_1H265SliceHeader.html index d10c089e85..0b98c94ac1 100644 --- a/docs/db/d05/structshaka_1_1media_1_1H265SliceHeader.html +++ b/docs/db/d05/structshaka_1_1media_1_1H265SliceHeader.html @@ -236,7 +236,7 @@ std::vector< int > e diff --git a/docs/db/d11/structshaka_1_1media_1_1mp4_1_1CodecConfiguration.html b/docs/db/d11/structshaka_1_1media_1_1mp4_1_1CodecConfiguration.html index 98bd7cd921..9dc78cb5bc 100644 --- a/docs/db/d11/structshaka_1_1media_1_1mp4_1_1CodecConfiguration.html +++ b/docs/db/d11/structshaka_1_1media_1_1mp4_1_1CodecConfiguration.html @@ -176,7 +176,7 @@ Additional Inherited Members diff --git a/docs/db/d14/classshaka_1_1media_1_1H265Parser-members.html b/docs/db/d14/classshaka_1_1media_1_1H265Parser-members.html index 72c157fc54..3de9b7c714 100644 --- a/docs/db/d14/classshaka_1_1media_1_1H265Parser-members.html +++ b/docs/db/d14/classshaka_1_1media_1_1H265Parser-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d14/structshaka_1_1media_1_1H264WeightingFactors-members.html b/docs/db/d14/structshaka_1_1media_1_1H264WeightingFactors-members.html index 12dc8f7693..f174715e99 100644 --- a/docs/db/d14/structshaka_1_1media_1_1H264WeightingFactors-members.html +++ b/docs/db/d14/structshaka_1_1media_1_1H264WeightingFactors-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d21/structshaka_1_1media_1_1mp4_1_1SubtitleMediaHeader.html b/docs/db/d21/structshaka_1_1media_1_1mp4_1_1SubtitleMediaHeader.html index dc8d8b37e5..3950294283 100644 --- a/docs/db/d21/structshaka_1_1media_1_1mp4_1_1SubtitleMediaHeader.html +++ b/docs/db/d21/structshaka_1_1media_1_1mp4_1_1SubtitleMediaHeader.html @@ -175,7 +175,7 @@ uint32_t flags diff --git a/docs/db/d30/classshaka_1_1media_1_1mp4_1_1MP4Muxer.html b/docs/db/d30/classshaka_1_1media_1_1mp4_1_1MP4Muxer.html index c33eee362d..10df775c78 100644 --- a/docs/db/d30/classshaka_1_1media_1_1mp4_1_1MP4Muxer.html +++ b/docs/db/d30/classshaka_1_1media_1_1mp4_1_1MP4Muxer.html @@ -179,7 +179,7 @@ FourCC protection_scheme diff --git a/docs/db/d31/h26x__byte__to__unit__stream__converter_8h_source.html b/docs/db/d31/h26x__byte__to__unit__stream__converter_8h_source.html index 2431fe50a6..fcd0f125df 100644 --- a/docs/db/d31/h26x__byte__to__unit__stream__converter_8h_source.html +++ b/docs/db/d31/h26x__byte__to__unit__stream__converter_8h_source.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d31/track__run__iterator_8cc_source.html b/docs/db/d31/track__run__iterator_8cc_source.html index f59791c0c0..b60be72a5f 100644 --- a/docs/db/d31/track__run__iterator_8cc_source.html +++ b/docs/db/d31/track__run__iterator_8cc_source.html @@ -767,7 +767,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d38/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator-members.html b/docs/db/d38/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator-members.html index 9db5ec5374..bc84563710 100644 --- a/docs/db/d38/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator-members.html +++ b/docs/db/d38/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d3b/classshaka_1_1media_1_1VideoSliceHeaderParser-members.html b/docs/db/d3b/classshaka_1_1media_1_1VideoSliceHeaderParser-members.html index 0d3ab2bf5a..4e5fab3ba3 100644 --- a/docs/db/d3b/classshaka_1_1media_1_1VideoSliceHeaderParser-members.html +++ b/docs/db/d3b/classshaka_1_1media_1_1VideoSliceHeaderParser-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d45/mpd__notify__muxer__listener_8h_source.html b/docs/db/d45/mpd__notify__muxer__listener_8h_source.html index b7e3403ba5..67bd159e7e 100644 --- a/docs/db/d45/mpd__notify__muxer__listener_8h_source.html +++ b/docs/db/d45/mpd__notify__muxer__listener_8h_source.html @@ -175,7 +175,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
91 
92 #endif // MEDIA_EVENT_MPD_NOTIFY_MUXER_LISTENER_H_
void OnNewSegment(const std::string &file_name, uint64_t start_time, uint64_t duration, uint64_t segment_file_size) override
-
Abstract class holds stream information.
Definition: stream_info.h:26
+
Abstract class holds stream information.
Definition: stream_info.h:53
void OnMediaEnd(bool has_init_range, uint64_t init_range_start, uint64_t init_range_end, bool has_index_range, uint64_t index_range_start, uint64_t index_range_end, float duration_seconds, uint64_t file_size) override
This structure contains the list of configuration options for Muxer.
Definition: muxer_options.h:18
@@ -189,7 +189,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d4b/classshaka_1_1MockAdaptationSet.html b/docs/db/d4b/classshaka_1_1MockAdaptationSet.html index 2efbadc928..af512a2a60 100644 --- a/docs/db/d4b/classshaka_1_1MockAdaptationSet.html +++ b/docs/db/d4b/classshaka_1_1MockAdaptationSet.html @@ -183,7 +183,7 @@ Additional Inherited Members diff --git a/docs/db/d4e/classshaka_1_1media_1_1mp4_1_1CompositionOffsetIterator.html b/docs/db/d4e/classshaka_1_1media_1_1mp4_1_1CompositionOffsetIterator.html index 1c3fbe86c0..a2157c9a24 100644 --- a/docs/db/d4e/classshaka_1_1media_1_1mp4_1_1CompositionOffsetIterator.html +++ b/docs/db/d4e/classshaka_1_1media_1_1mp4_1_1CompositionOffsetIterator.html @@ -225,7 +225,7 @@ Public Member Functions diff --git a/docs/db/d51/mp2t__media__parser_8h_source.html b/docs/db/d51/mp2t__media__parser_8h_source.html index fb23418e26..f91109006c 100644 --- a/docs/db/d51/mp2t__media__parser_8h_source.html +++ b/docs/db/d51/mp2t__media__parser_8h_source.html @@ -193,7 +193,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d51/two__pass__single__segment__segmenter_8h_source.html b/docs/db/d51/two__pass__single__segment__segmenter_8h_source.html index 80df89d7d8..b332e44104 100644 --- a/docs/db/d51/two__pass__single__segment__segmenter_8h_source.html +++ b/docs/db/d51/two__pass__single__segment__segmenter_8h_source.html @@ -145,7 +145,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d5a/classshaka_1_1media_1_1VP9Parser.html b/docs/db/d5a/classshaka_1_1media_1_1VP9Parser.html index b06d350db9..5f7af93339 100644 --- a/docs/db/d5a/classshaka_1_1media_1_1VP9Parser.html +++ b/docs/db/d5a/classshaka_1_1media_1_1VP9Parser.html @@ -238,7 +238,7 @@ Additional Inherited Members diff --git a/docs/db/d60/mpd__options_8h_source.html b/docs/db/d60/mpd__options_8h_source.html index a1fac06d04..6b6e6a984f 100644 --- a/docs/db/d60/mpd__options_8h_source.html +++ b/docs/db/d60/mpd__options_8h_source.html @@ -126,7 +126,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d64/webvtt__media__parser_8h_source.html b/docs/db/d64/webvtt__media__parser_8h_source.html index e84970e69a..88b6711e15 100644 --- a/docs/db/d64/webvtt__media__parser_8h_source.html +++ b/docs/db/d64/webvtt__media__parser_8h_source.html @@ -181,7 +181,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d66/structshaka_1_1media_1_1mp4_1_1SegmentType-members.html b/docs/db/d66/structshaka_1_1media_1_1mp4_1_1SegmentType-members.html index a96a53ffc2..4e8060a532 100644 --- a/docs/db/d66/structshaka_1_1media_1_1mp4_1_1SegmentType-members.html +++ b/docs/db/d66/structshaka_1_1media_1_1mp4_1_1SegmentType-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d71/http__key__fetcher_8h_source.html b/docs/db/d71/http__key__fetcher_8h_source.html index a73211f93c..cfe5cb7dd6 100644 --- a/docs/db/d71/http__key__fetcher_8h_source.html +++ b/docs/db/d71/http__key__fetcher_8h_source.html @@ -150,7 +150,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d74/classshaka_1_1media_1_1HEVCDecoderConfigurationRecord-members.html b/docs/db/d74/classshaka_1_1media_1_1HEVCDecoderConfigurationRecord-members.html index 44857eb873..96578758d5 100644 --- a/docs/db/d74/classshaka_1_1media_1_1HEVCDecoderConfigurationRecord-members.html +++ b/docs/db/d74/classshaka_1_1media_1_1HEVCDecoderConfigurationRecord-members.html @@ -97,7 +97,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); data() const shaka::media::DecoderConfigurationRecordinlineprotected data_size() const shaka::media::DecoderConfigurationRecordinlineprotected DecoderConfigurationRecord() (defined in shaka::media::DecoderConfigurationRecord)shaka::media::DecoderConfigurationRecordprotected - GetCodecString(VideoCodec codec) const shaka::media::HEVCDecoderConfigurationRecord + GetCodecString(Codec codec) const shaka::media::HEVCDecoderConfigurationRecord HEVCDecoderConfigurationRecord() (defined in shaka::media::HEVCDecoderConfigurationRecord)shaka::media::HEVCDecoderConfigurationRecord nalu(size_t i) const shaka::media::DecoderConfigurationRecordinline nalu_count() const shaka::media::DecoderConfigurationRecordinline @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d75/classshaka_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter-members.html b/docs/db/d75/classshaka_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter-members.html index f84aa77797..a144fc0f32 100644 --- a/docs/db/d75/classshaka_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter-members.html +++ b/docs/db/d75/classshaka_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter-members.html @@ -130,7 +130,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d78/classshaka_1_1media_1_1mp2t_1_1ContinuityCounter-members.html b/docs/db/d78/classshaka_1_1media_1_1mp2t_1_1ContinuityCounter-members.html index 2dd2792687..73cbc7c8a6 100644 --- a/docs/db/d78/classshaka_1_1media_1_1mp2t_1_1ContinuityCounter-members.html +++ b/docs/db/d78/classshaka_1_1media_1_1mp2t_1_1ContinuityCounter-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d7e/muxer__options_8cc_source.html b/docs/db/d7e/muxer__options_8cc_source.html index 698306b2a4..eff674fdc2 100644 --- a/docs/db/d7e/muxer__options_8cc_source.html +++ b/docs/db/d7e/muxer__options_8cc_source.html @@ -106,15 +106,16 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
17  fragment_sap_aligned(false),
18  num_subsegments_per_sidx(0),
19  mp4_use_decoding_timestamp_in_timeline(false),
-
20  bandwidth(0) {}
-
21 MuxerOptions::~MuxerOptions() {}
-
22 
-
23 } // namespace media
-
24 } // namespace shaka
+
20  bandwidth(0),
+
21  webm_subsample_encryption(true) {}
+
22 MuxerOptions::~MuxerOptions() {}
+
23 
+
24 } // namespace media
+
25 } // namespace shaka
diff --git a/docs/db/d84/classshaka_1_1media_1_1AACAudioSpecificConfig-members.html b/docs/db/d84/classshaka_1_1media_1_1AACAudioSpecificConfig-members.html index d860df3baf..6acde4e835 100644 --- a/docs/db/d84/classshaka_1_1media_1_1AACAudioSpecificConfig-members.html +++ b/docs/db/d84/classshaka_1_1media_1_1AACAudioSpecificConfig-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d86/classshaka_1_1media_1_1NaluReader.html b/docs/db/d86/classshaka_1_1media_1_1NaluReader.html index a9c15185f4..3cc6895cc3 100644 --- a/docs/db/d86/classshaka_1_1media_1_1NaluReader.html +++ b/docs/db/d86/classshaka_1_1media_1_1NaluReader.html @@ -228,7 +228,7 @@ static bool FindStartCode< diff --git a/docs/db/d8f/mp4__muxer_8h_source.html b/docs/db/d8f/mp4__muxer_8h_source.html index cdcce37865..57bf6b55f8 100644 --- a/docs/db/d8f/mp4__muxer_8h_source.html +++ b/docs/db/d8f/mp4__muxer_8h_source.html @@ -160,20 +160,20 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
74 } // namespace shaka
75 
76 #endif // MEDIA_FORMATS_MP4_MP4_MUXER_H_
-
Abstract class holds stream information.
Definition: stream_info.h:26
-
MP4Muxer(const MuxerOptions &options)
Create a MP4Muxer object from MuxerOptions.
Definition: mp4_muxer.cc:89
+
Abstract class holds stream information.
Definition: stream_info.h:53
+
MP4Muxer(const MuxerOptions &options)
Create a MP4Muxer object from MuxerOptions.
Definition: mp4_muxer.cc:82
This structure contains the list of configuration options for Muxer.
Definition: muxer_options.h:18
-
Holds video stream information.
-
Holds audio stream information.
+
Holds video stream information.
+
Holds audio stream information.
diff --git a/docs/db/d94/classshaka_1_1media_1_1ClusterBuilder.html b/docs/db/d94/classshaka_1_1media_1_1ClusterBuilder.html index b6f2132e97..8c3d58768a 100644 --- a/docs/db/d94/classshaka_1_1media_1_1ClusterBuilder.html +++ b/docs/db/d94/classshaka_1_1media_1_1ClusterBuilder.html @@ -125,7 +125,7 @@ scoped_ptr< diff --git a/docs/db/d95/classshaka_1_1media_1_1mp4_1_1Fragmenter.html b/docs/db/d95/classshaka_1_1media_1_1mp4_1_1Fragmenter.html index 5675c93412..f5c7396644 100644 --- a/docs/db/d95/classshaka_1_1media_1_1mp4_1_1Fragmenter.html +++ b/docs/db/d95/classshaka_1_1media_1_1mp4_1_1Fragmenter.html @@ -339,7 +339,7 @@ template<typename T > diff --git a/docs/db/d95/structshaka_1_1media_1_1mp4_1_1ChunkLargeOffset.html b/docs/db/d95/structshaka_1_1media_1_1mp4_1_1ChunkLargeOffset.html index 83aafcf06f..1db6542367 100644 --- a/docs/db/d95/structshaka_1_1media_1_1mp4_1_1ChunkLargeOffset.html +++ b/docs/db/d95/structshaka_1_1media_1_1mp4_1_1ChunkLargeOffset.html @@ -185,7 +185,7 @@ Additional Inherited Members diff --git a/docs/db/d96/wvm__media__parser_8h_source.html b/docs/db/d96/wvm__media__parser_8h_source.html index 8af7c28221..7302594353 100644 --- a/docs/db/d96/wvm__media__parser_8h_source.html +++ b/docs/db/d96/wvm__media__parser_8h_source.html @@ -363,7 +363,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/da4/classBandwidthEstimator-members.html b/docs/db/da4/classBandwidthEstimator-members.html index 8aba30bd68..e639cce1a8 100644 --- a/docs/db/da4/classBandwidthEstimator-members.html +++ b/docs/db/da4/classBandwidthEstimator-members.html @@ -97,7 +97,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/da6/memory__file_8h_source.html b/docs/db/da6/memory__file_8h_source.html index 16215cc303..019cc42d59 100644 --- a/docs/db/da6/memory__file_8h_source.html +++ b/docs/db/da6/memory__file_8h_source.html @@ -154,7 +154,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dab/classshaka_1_1media_1_1TextStreamInfo.html b/docs/db/dab/classshaka_1_1media_1_1TextStreamInfo.html index cc6801d018..74ea911da2 100644 --- a/docs/db/dab/classshaka_1_1media_1_1TextStreamInfo.html +++ b/docs/db/dab/classshaka_1_1media_1_1TextStreamInfo.html @@ -105,8 +105,8 @@ Inheritance diagram for shaka::media::TextStreamInfo: - - + + - - + + + + + + - - + + @@ -162,7 +168,7 @@ void 

Public Member Functions

 TextStreamInfo (int track_id, uint32_t time_scale, uint64_t duration, const std::string &codec_string, const std::string &language, const std::string &codec_config, uint16_t width, uint16_t height)
 
 TextStreamInfo (int track_id, uint32_t time_scale, uint64_t duration, const std::string &codec_string, const std::string &codec_config, uint16_t width, uint16_t height, const std::string &language)
 
bool IsValidConfig () const override
 
@@ -116,9 +116,9 @@ uint16_t width () cons uint16_t height () const
 
- Public Member Functions inherited from shaka::media::StreamInfo
StreamInfo (StreamType stream_type, int track_id, uint32_t time_scale, uint64_t duration, const std::string &codec_string, const std::string &language, const uint8_t *codec_config, size_t codec_config_size, bool is_encrypted)
 
StreamInfo (StreamType stream_type, int track_id, uint32_t time_scale, uint64_t duration, Codec codec, const std::string &codec_string, const uint8_t *codec_config, size_t codec_config_size, const std::string &language, bool is_encrypted)
 
virtual std::string ToString () const
 
@@ -133,21 +133,27 @@ uint32_t time_scale ()
uint64_t duration () const
 
+Codec codec () const
 
const std::string & codec_string () const
 
+const std::vector< uint8_t > & codec_config () const
 
const std::string & language () const
 
bool is_encrypted () const
 
-const std::vector< uint8_t > & codec_config () const
 
void set_duration (int duration)
 
+void set_codec (Codec codec)
 
void set_codec_config (const std::vector< uint8_t > &data)
 
set_language (con

Definition at line 17 of file text_stream_info.h.

Constructor & Destructor Documentation

- +
@@ -190,12 +196,6 @@ void  - - - - - - @@ -212,7 +212,13 @@ void  - + + + + + + + @@ -228,10 +234,10 @@ void  - +
set_language (con const std::string &  codec_string,
const std::string & language,
set_language (con uint16_t height height,
const std::string & language 
set_language (con
time_scaleis the time scale of this stream.
durationis the duration of this stream.
codec_stringis the codec.
languageis the language of this stream. This may be empty.
codec_configis configuration for this text stream. This could be the metadata that applies to all the samples of this stream. This may be empty.
widthof the text. This may be 0.
heightof the text. This may be 0.
languageis the language of this stream. This may be empty.
@@ -265,7 +271,7 @@ void 
set_language (con

Implements shaka::media::StreamInfo.

-

Definition at line 34 of file text_stream_info.cc.

+

Definition at line 26 of file text_stream_info.cc.

@@ -276,7 +282,7 @@ void 
set_language (con diff --git a/docs/db/dae/classshaka_1_1media_1_1WebMInfoParser.html b/docs/db/dae/classshaka_1_1media_1_1WebMInfoParser.html index f9513ccac8..cca605d0a8 100644 --- a/docs/db/dae/classshaka_1_1media_1_1WebMInfoParser.html +++ b/docs/db/dae/classshaka_1_1media_1_1WebMInfoParser.html @@ -175,7 +175,7 @@ The number of bytes parsed on success. diff --git a/docs/db/dae/structshaka_1_1media_1_1mp4_1_1SoundMediaHeader-members.html b/docs/db/dae/structshaka_1_1media_1_1mp4_1_1SoundMediaHeader-members.html index 969c03156d..f91a557528 100644 --- a/docs/db/dae/structshaka_1_1media_1_1mp4_1_1SoundMediaHeader-members.html +++ b/docs/db/dae/structshaka_1_1media_1_1mp4_1_1SoundMediaHeader-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
diff --git a/docs/db/db1/structshaka_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry-members.html b/docs/db/db1/structshaka_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry-members.html index fb61b75fac..effef3516b 100644 --- a/docs/db/db1/structshaka_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry-members.html +++ b/docs/db/db1/structshaka_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/db8/structshaka_1_1media_1_1OnMediaEndParameters.html b/docs/db/db8/structshaka_1_1media_1_1OnMediaEndParameters.html index c60473d89e..eaf1ce5f41 100644 --- a/docs/db/db8/structshaka_1_1media_1_1OnMediaEndParameters.html +++ b/docs/db/db8/structshaka_1_1media_1_1OnMediaEndParameters.html @@ -130,7 +130,7 @@ uint64_t file_size diff --git a/docs/db/db8/structshaka_1_1media_1_1mp4_1_1TrackEncryption.html b/docs/db/db8/structshaka_1_1media_1_1mp4_1_1TrackEncryption.html index 77bd1f3130..99cd814bb6 100644 --- a/docs/db/db8/structshaka_1_1media_1_1mp4_1_1TrackEncryption.html +++ b/docs/db/db8/structshaka_1_1media_1_1mp4_1_1TrackEncryption.html @@ -197,7 +197,7 @@ Additional Inherited Members diff --git a/docs/db/dcb/classshaka_1_1media_1_1VPxParser.html b/docs/db/dcb/classshaka_1_1media_1_1VPxParser.html index 14292da861..951401d9b8 100644 --- a/docs/db/dcb/classshaka_1_1media_1_1VPxParser.html +++ b/docs/db/dcb/classshaka_1_1media_1_1VPxParser.html @@ -205,7 +205,7 @@ Protected Member Functions diff --git a/docs/db/dcc/classshaka_1_1media_1_1webm_1_1Encryptor-members.html b/docs/db/dcc/classshaka_1_1media_1_1webm_1_1Encryptor-members.html index 5873bd250a..4755af232e 100644 --- a/docs/db/dcc/classshaka_1_1media_1_1webm_1_1Encryptor-members.html +++ b/docs/db/dcc/classshaka_1_1media_1_1webm_1_1Encryptor-members.html @@ -96,12 +96,12 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); AddTrackInfo(mkvmuxer::Track *track)shaka::media::webm::Encryptor EncryptFrame(scoped_refptr< MediaSample > sample, bool encrypt_frame)shaka::media::webm::Encryptor Encryptor() (defined in shaka::media::webm::Encryptor)shaka::media::webm::Encryptor - Initialize(MuxerListener *muxer_listener, KeySource::TrackType track_type, KeySource *key_source)shaka::media::webm::Encryptor + Initialize(MuxerListener *muxer_listener, KeySource::TrackType track_type, Codec codec, KeySource *key_source, bool webm_subsample_encryption)shaka::media::webm::Encryptor ~Encryptor() (defined in shaka::media::webm::Encryptor)shaka::media::webm::Encryptor diff --git a/docs/db/dcd/classshaka_1_1MpdWriter.html b/docs/db/dcd/classshaka_1_1MpdWriter.html index 91e0e6fca1..30bb78f741 100644 --- a/docs/db/dcd/classshaka_1_1MpdWriter.html +++ b/docs/db/dcd/classshaka_1_1MpdWriter.html @@ -123,7 +123,7 @@ class MpdWriterTest diff --git a/docs/db/dcd/structshaka_1_1media_1_1mp4_1_1DTSSpecific-members.html b/docs/db/dcd/structshaka_1_1media_1_1mp4_1_1DTSSpecific-members.html index d28d064036..3263f2e097 100644 --- a/docs/db/dcd/structshaka_1_1media_1_1mp4_1_1DTSSpecific-members.html +++ b/docs/db/dcd/structshaka_1_1media_1_1mp4_1_1DTSSpecific-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dd0/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener.html b/docs/db/dd0/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener.html index f858fdb4f2..378f757453 100644 --- a/docs/db/dd0/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener.html +++ b/docs/db/dd0/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener.html @@ -531,7 +531,7 @@ Additional Inherited Members diff --git a/docs/db/dd2/chunk__info__iterator_8h_source.html b/docs/db/dd2/chunk__info__iterator_8h_source.html index ce326685af..51625a0298 100644 --- a/docs/db/dd2/chunk__info__iterator_8h_source.html +++ b/docs/db/dd2/chunk__info__iterator_8h_source.html @@ -161,7 +161,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dd9/sync__sample__iterator_8h_source.html b/docs/db/dd9/sync__sample__iterator_8h_source.html index 364298ee5a..e324c152d7 100644 --- a/docs/db/dd9/sync__sample__iterator_8h_source.html +++ b/docs/db/dd9/sync__sample__iterator_8h_source.html @@ -140,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dde/h265__parser_8cc_source.html b/docs/db/dde/h265__parser_8cc_source.html index 0756acfd9a..2e09348c46 100644 --- a/docs/db/dde/h265__parser_8cc_source.html +++ b/docs/db/dde/h265__parser_8cc_source.html @@ -1221,7 +1221,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dec/audio__timestamp__helper_8cc_source.html b/docs/db/dec/audio__timestamp__helper_8cc_source.html index a84a7360f2..c568e5d2e9 100644 --- a/docs/db/dec/audio__timestamp__helper_8cc_source.html +++ b/docs/db/dec/audio__timestamp__helper_8cc_source.html @@ -165,7 +165,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dee/pes__packet_8cc_source.html b/docs/db/dee/pes__packet_8cc_source.html index b96359744e..ff1347dc2d 100644 --- a/docs/db/dee/pes__packet_8cc_source.html +++ b/docs/db/dee/pes__packet_8cc_source.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/df2/structshaka_1_1media_1_1H265SliceHeader-members.html b/docs/db/df2/structshaka_1_1media_1_1H265SliceHeader-members.html index 3e257ba37f..5290a5f229 100644 --- a/docs/db/df2/structshaka_1_1media_1_1H265SliceHeader-members.html +++ b/docs/db/df2/structshaka_1_1media_1_1H265SliceHeader-members.html @@ -139,7 +139,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/df6/classshaka_1_1media_1_1Cluster-members.html b/docs/db/df6/classshaka_1_1media_1_1Cluster-members.html index 1b963f3728..5cead28292 100644 --- a/docs/db/df6/classshaka_1_1media_1_1Cluster-members.html +++ b/docs/db/df6/classshaka_1_1media_1_1Cluster-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/df6/muxer_8h_source.html b/docs/db/df6/muxer_8h_source.html index 5757b8bb89..ebd7ccf5cb 100644 --- a/docs/db/df6/muxer_8h_source.html +++ b/docs/db/df6/muxer_8h_source.html @@ -212,7 +212,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/df8/classshaka_1_1media_1_1H265ByteToUnitStreamConverter.html b/docs/db/df8/classshaka_1_1media_1_1H265ByteToUnitStreamConverter.html index 71c1b516ec..3b98d3a591 100644 --- a/docs/db/df8/classshaka_1_1media_1_1H265ByteToUnitStreamConverter.html +++ b/docs/db/df8/classshaka_1_1media_1_1H265ByteToUnitStreamConverter.html @@ -171,7 +171,7 @@ static const size_t kUnitS diff --git a/docs/db/dfb/mpd__utils_8cc_source.html b/docs/db/dfb/mpd__utils_8cc_source.html index ebb02dfd69..8b53b61752 100644 --- a/docs/db/dfb/mpd__utils_8cc_source.html +++ b/docs/db/dfb/mpd__utils_8cc_source.html @@ -444,7 +444,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dfc/mpd__notify__muxer__listener_8cc_source.html b/docs/db/dfc/mpd__notify__muxer__listener_8cc_source.html index 2f7960ba3b..879762c09c 100644 --- a/docs/db/dfc/mpd__notify__muxer__listener_8cc_source.html +++ b/docs/db/dfc/mpd__notify__muxer__listener_8cc_source.html @@ -256,7 +256,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
167 } // namespace shaka
void OnNewSegment(const std::string &file_name, uint64_t start_time, uint64_t duration, uint64_t segment_file_size) override
virtual bool Flush()=0
-
Abstract class holds stream information.
Definition: stream_info.h:26
+
Abstract class holds stream information.
Definition: stream_info.h:53
virtual bool NotifyNewSegment(uint32_t container_id, uint64_t start_time, uint64_t duration, uint64_t size)=0
void OnMediaEnd(bool has_init_range, uint64_t init_range_start, uint64_t init_range_end, bool has_index_range, uint64_t index_range_start, uint64_t index_range_end, float duration_seconds, uint64_t file_size) override
virtual bool NotifySampleDuration(uint32_t container_id, uint32_t sample_duration)=0
@@ -274,7 +274,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dff/structshaka_1_1media_1_1mp4_1_1ChunkInfo-members.html b/docs/db/dff/structshaka_1_1media_1_1mp4_1_1ChunkInfo-members.html index feeb3f3465..5d0b2086fb 100644 --- a/docs/db/dff/structshaka_1_1media_1_1mp4_1_1ChunkInfo-members.html +++ b/docs/db/dff/structshaka_1_1media_1_1mp4_1_1ChunkInfo-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d02/classshaka_1_1media_1_1IoCache-members.html b/docs/dc/d02/classshaka_1_1media_1_1IoCache-members.html index ffd10e3b18..4fae849c07 100644 --- a/docs/dc/d02/classshaka_1_1media_1_1IoCache-members.html +++ b/docs/dc/d02/classshaka_1_1media_1_1IoCache-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d03/classshaka_1_1media_1_1mp2t_1_1ProgramMapTableWriter.html b/docs/dc/d03/classshaka_1_1media_1_1mp2t_1_1ProgramMapTableWriter.html index e6f229f5e3..6cc4c29a85 100644 --- a/docs/dc/d03/classshaka_1_1media_1_1mp2t_1_1ProgramMapTableWriter.html +++ b/docs/dc/d03/classshaka_1_1media_1_1mp2t_1_1ProgramMapTableWriter.html @@ -138,7 +138,7 @@ static const uint8_t kElem diff --git a/docs/dc/d06/classshaka_1_1media_1_1StreamInfo-members.html b/docs/dc/d06/classshaka_1_1media_1_1StreamInfo-members.html index 35628fbf6f..0d6ce65b9e 100644 --- a/docs/dc/d06/classshaka_1_1media_1_1StreamInfo-members.html +++ b/docs/dc/d06/classshaka_1_1media_1_1StreamInfo-members.html @@ -94,18 +94,20 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');

This is the complete list of members for shaka::media::StreamInfo, including all inherited members.

- - - - - - + + + + + + + + - + @@ -113,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
base::RefCountedThreadSafe< StreamInfo > (defined in shaka::media::StreamInfo)shaka::media::StreamInfofriend
codec_config() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
codec_string() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
duration() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
is_encrypted() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
IsValidConfig() const =0shaka::media::StreamInfopure virtual
language() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
codec() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
codec_config() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
codec_string() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
duration() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
is_encrypted() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
IsValidConfig() const =0shaka::media::StreamInfopure virtual
language() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
set_codec(Codec codec) (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
set_codec_config(const std::vector< uint8_t > &data) (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
set_codec_string(const std::string &codec_string) (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
set_duration(int duration) (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
set_language(const std::string &language) (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
stream_type() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
StreamInfo(StreamType stream_type, int track_id, uint32_t time_scale, uint64_t duration, const std::string &codec_string, const std::string &language, const uint8_t *codec_config, size_t codec_config_size, bool is_encrypted) (defined in shaka::media::StreamInfo)shaka::media::StreamInfo
StreamInfo(StreamType stream_type, int track_id, uint32_t time_scale, uint64_t duration, Codec codec, const std::string &codec_string, const uint8_t *codec_config, size_t codec_config_size, const std::string &language, bool is_encrypted) (defined in shaka::media::StreamInfo)shaka::media::StreamInfo
time_scale() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
ToString() const shaka::media::StreamInfovirtual
track_id() const (defined in shaka::media::StreamInfo)shaka::media::StreamInfoinline
diff --git a/docs/dc/d0b/classshaka_1_1media_1_1ESDescriptor-members.html b/docs/dc/d0b/classshaka_1_1media_1_1ESDescriptor-members.html index a6a68bfe50..794c94b6e3 100644 --- a/docs/dc/d0b/classshaka_1_1media_1_1ESDescriptor-members.html +++ b/docs/dc/d0b/classshaka_1_1media_1_1ESDescriptor-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d16/classshaka_1_1media_1_1SeekHead.html b/docs/dc/d16/classshaka_1_1media_1_1SeekHead.html index e09329da12..4c9103aa8e 100644 --- a/docs/dc/d16/classshaka_1_1media_1_1SeekHead.html +++ b/docs/dc/d16/classshaka_1_1media_1_1SeekHead.html @@ -148,7 +148,7 @@ void set_tracks_pos (u diff --git a/docs/dc/d18/classshaka_1_1media_1_1wvm_1_1WvmMediaParser.html b/docs/dc/d18/classshaka_1_1media_1_1wvm_1_1WvmMediaParser.html index dd59b44159..c2a143ef6f 100644 --- a/docs/dc/d18/classshaka_1_1media_1_1wvm_1_1WvmMediaParser.html +++ b/docs/dc/d18/classshaka_1_1media_1_1wvm_1_1WvmMediaParser.html @@ -256,7 +256,7 @@ track_id, const scoped_refptr
diff --git a/docs/dc/d18/structshaka_1_1media_1_1mp4_1_1ProtectionSchemeInfo-members.html b/docs/dc/d18/structshaka_1_1media_1_1mp4_1_1ProtectionSchemeInfo-members.html index d98d6cba48..8c302d99c7 100644 --- a/docs/dc/d18/structshaka_1_1media_1_1mp4_1_1ProtectionSchemeInfo-members.html +++ b/docs/dc/d18/structshaka_1_1media_1_1mp4_1_1ProtectionSchemeInfo-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d19/box_8h_source.html b/docs/dc/d19/box_8h_source.html index b0d2fbf8ff..95a080ff60 100644 --- a/docs/dc/d19/box_8h_source.html +++ b/docs/dc/d19/box_8h_source.html @@ -184,7 +184,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d22/dash__iop__mpd__notifier_8cc_source.html b/docs/dc/d22/dash__iop__mpd__notifier_8cc_source.html index cc00142d3c..a7dee6ea5a 100644 --- a/docs/dc/d22/dash__iop__mpd__notifier_8cc_source.html +++ b/docs/dc/d22/dash__iop__mpd__notifier_8cc_source.html @@ -394,7 +394,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d3b/fixed__key__encryption__flags_8cc_source.html b/docs/dc/d3b/fixed__key__encryption__flags_8cc_source.html index 3034fbfb7a..ed4bd940b2 100644 --- a/docs/dc/d3b/fixed__key__encryption__flags_8cc_source.html +++ b/docs/dc/d3b/fixed__key__encryption__flags_8cc_source.html @@ -166,7 +166,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d3c/webm__cluster__parser_8h_source.html b/docs/dc/d3c/webm__cluster__parser_8h_source.html index 03b662ee96..4cdb4d09d7 100644 --- a/docs/dc/d3c/webm__cluster__parser_8h_source.html +++ b/docs/dc/d3c/webm__cluster__parser_8h_source.html @@ -287,18 +287,18 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
base::Callback< void(const std::vector< scoped_refptr< StreamInfo > > &stream_info)> InitCB
Definition: media_parser.h:35
-
int Parse(const uint8_t *buf, int size)
-
bool Flush() WARN_UNUSED_RESULT
+
int Parse(const uint8_t *buf, int size)
+
bool Flush() WARN_UNUSED_RESULT
base::Callback< bool(uint32_t track_id, const scoped_refptr< MediaSample > &media_sample)> NewSampleCB
Definition: media_parser.h:44
-
WebMClusterParser(int64_t timecode_scale, scoped_refptr< AudioStreamInfo > audio_stream_info, scoped_refptr< VideoStreamInfo > video_stream_info, int64_t audio_default_duration, int64_t video_default_duration, const WebMTracksParser::TextTracks &text_tracks, const std::set< int64_t > &ignored_tracks, const std::string &audio_encryption_key_id, const std::string &video_encryption_key_id, const MediaParser::NewSampleCB &new_sample_cb, const MediaParser::InitCB &init_cb, KeySource *decryption_key_source)
+
WebMClusterParser(int64_t timecode_scale, scoped_refptr< AudioStreamInfo > audio_stream_info, scoped_refptr< VideoStreamInfo > video_stream_info, int64_t audio_default_duration, int64_t video_default_duration, const WebMTracksParser::TextTracks &text_tracks, const std::set< int64_t > &ignored_tracks, const std::string &audio_encryption_key_id, const std::string &video_encryption_key_id, const MediaParser::NewSampleCB &new_sample_cb, const MediaParser::InitCB &init_cb, KeySource *decryption_key_source)
-
void Reset()
Resets the parser state so it can accept a new cluster.
+
void Reset()
Resets the parser state so it can accept a new cluster.
diff --git a/docs/dc/d3f/key__source_8h_source.html b/docs/dc/d3f/key__source_8h_source.html index 0229eba9a9..705fe11046 100644 --- a/docs/dc/d3f/key__source_8h_source.html +++ b/docs/dc/d3f/key__source_8h_source.html @@ -169,7 +169,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d40/classshaka_1_1xml_1_1XmlNode-members.html b/docs/dc/d40/classshaka_1_1xml_1_1XmlNode-members.html index 3c101a74ac..40726747dc 100644 --- a/docs/dc/d40/classshaka_1_1xml_1_1XmlNode-members.html +++ b/docs/dc/d40/classshaka_1_1xml_1_1XmlNode-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d41/classshaka_1_1media_1_1BufferWriter.html b/docs/dc/d41/classshaka_1_1media_1_1BufferWriter.html index 6ea0ef31ee..a9dd868e4e 100644 --- a/docs/dc/d41/classshaka_1_1media_1_1BufferWriter.html +++ b/docs/dc/d41/classshaka_1_1media_1_1BufferWriter.html @@ -301,7 +301,7 @@ void AppendInt (int64_ diff --git a/docs/dc/d4a/structshaka_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader-members.html b/docs/dc/d4a/structshaka_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader-members.html index ee0c6ffcba..48b36f29bd 100644 --- a/docs/dc/d4a/structshaka_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader-members.html +++ b/docs/dc/d4a/structshaka_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d4f/structshaka_1_1media_1_1mp4_1_1TrackHeader-members.html b/docs/dc/d4f/structshaka_1_1media_1_1mp4_1_1TrackHeader-members.html index 04e15cb868..3edc418bba 100644 --- a/docs/dc/d4f/structshaka_1_1media_1_1mp4_1_1TrackHeader-members.html +++ b/docs/dc/d4f/structshaka_1_1media_1_1mp4_1_1TrackHeader-members.html @@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d51/h265__byte__to__unit__stream__converter_8cc_source.html b/docs/dc/d51/h265__byte__to__unit__stream__converter_8cc_source.html index 4c026fb109..d09dc67880 100644 --- a/docs/dc/d51/h265__byte__to__unit__stream__converter_8cc_source.html +++ b/docs/dc/d51/h265__byte__to__unit__stream__converter_8cc_source.html @@ -226,7 +226,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d52/decoding__time__iterator_8h_source.html b/docs/dc/d52/decoding__time__iterator_8h_source.html index 1873960237..c6d8641e9d 100644 --- a/docs/dc/d52/decoding__time__iterator_8h_source.html +++ b/docs/dc/d52/decoding__time__iterator_8h_source.html @@ -147,7 +147,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d53/webm_2segmenter_8cc_source.html b/docs/dc/d53/webm_2segmenter_8cc_source.html index beb04ebb27..530bb6879f 100644 --- a/docs/dc/d53/webm_2segmenter_8cc_source.html +++ b/docs/dc/d53/webm_2segmenter_8cc_source.html @@ -168,362 +168,364 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
79 
80  Status status;
81  if (encryption_key_source) {
-
82  status = InitializeEncryptor(encryption_key_source, max_sd_pixels);
-
83  if (!status.ok())
-
84  return status;
-
85  }
-
86 
-
87  // Create the track info.
-
88  switch (info_->stream_type()) {
-
89  case kStreamVideo:
-
90  status = CreateVideoTrack(static_cast<VideoStreamInfo*>(info_));
-
91  break;
-
92  case kStreamAudio:
-
93  status = CreateAudioTrack(static_cast<AudioStreamInfo*>(info_));
-
94  break;
-
95  default:
-
96  NOTIMPLEMENTED() << "Not implemented for stream type: "
-
97  << info_->stream_type();
-
98  status = Status(error::UNIMPLEMENTED, "Not implemented for stream type");
-
99  }
-
100  if (!status.ok())
-
101  return status;
-
102 
-
103  return DoInitialize(writer.Pass());
-
104 }
-
105 
- -
107  Status status = WriteFrame(true /* write_duration */);
-
108  if (!status.ok())
-
109  return status;
-
110 
-
111  uint64_t duration =
-
112  prev_sample_->pts() - first_timestamp_ + prev_sample_->duration();
-
113  segment_info_.set_duration(FromBMFFTimescale(duration));
-
114  return DoFinalize();
-
115 }
-
116 
-
117 Status Segmenter::AddSample(scoped_refptr<MediaSample> sample) {
-
118  if (sample_duration_ == 0) {
-
119  first_timestamp_ = sample->pts();
-
120  sample_duration_ = sample->duration();
-
121  if (muxer_listener_)
-
122  muxer_listener_->OnSampleDurationReady(sample_duration_);
-
123  }
-
124 
-
125  UpdateProgress(sample->duration());
-
126 
-
127  // This writes frames in a delay. Meaning that the previous frame is written
-
128  // on this call to AddSample. The current frame is stored until the next
-
129  // call. This is done to determine which frame is the last in a Cluster.
-
130  // This first block determines if this is a new Cluster and writes the
-
131  // previous frame first before creating the new Cluster.
-
132 
-
133  Status status;
-
134  bool wrote_frame = false;
-
135  if (!cluster_) {
-
136  status = NewSegment(sample->pts());
-
137  // First frame, so no previous frame to write.
-
138  wrote_frame = true;
-
139  } else if (segment_length_sec_ >= options_.segment_duration) {
-
140  if (sample->is_key_frame() || !options_.segment_sap_aligned) {
-
141  status = WriteFrame(true /* write_duration */);
-
142  status.Update(NewSegment(sample->pts()));
-
143  segment_length_sec_ = 0;
-
144  cluster_length_sec_ = 0;
-
145  wrote_frame = true;
-
146  }
-
147  } else if (cluster_length_sec_ >= options_.fragment_duration) {
-
148  if (sample->is_key_frame() || !options_.fragment_sap_aligned) {
-
149  status = WriteFrame(true /* write_duration */);
-
150  status.Update(NewSubsegment(sample->pts()));
-
151  cluster_length_sec_ = 0;
-
152  wrote_frame = true;
-
153  }
-
154  }
-
155  if (!wrote_frame) {
-
156  status = WriteFrame(false /* write_duration */);
-
157  }
-
158  if (!status.ok())
-
159  return status;
-
160 
-
161  // Encrypt the frame.
-
162  if (encryptor_) {
-
163  const bool encrypt_frame =
-
164  static_cast<double>(sample->pts() - first_timestamp_) /
-
165  info_->time_scale() >=
-
166  clear_lead_;
-
167  status = encryptor_->EncryptFrame(sample, encrypt_frame);
-
168  if (!status.ok()) {
-
169  LOG(ERROR) << "Error encrypting frame.";
-
170  return status;
-
171  }
-
172  if (encrypt_frame && muxer_listener_)
-
173  muxer_listener_->OnEncryptionStart();
-
174  }
-
175 
+
82  status = InitializeEncryptor(encryption_key_source,
+
83  max_sd_pixels);
+
84  if (!status.ok())
+
85  return status;
+
86  }
+
87 
+
88  // Create the track info.
+
89  switch (info_->stream_type()) {
+
90  case kStreamVideo:
+
91  status = CreateVideoTrack(static_cast<VideoStreamInfo*>(info_));
+
92  break;
+
93  case kStreamAudio:
+
94  status = CreateAudioTrack(static_cast<AudioStreamInfo*>(info_));
+
95  break;
+
96  default:
+
97  NOTIMPLEMENTED() << "Not implemented for stream type: "
+
98  << info_->stream_type();
+
99  status = Status(error::UNIMPLEMENTED, "Not implemented for stream type");
+
100  }
+
101  if (!status.ok())
+
102  return status;
+
103 
+
104  return DoInitialize(writer.Pass());
+
105 }
+
106 
+ +
108  Status status = WriteFrame(true /* write_duration */);
+
109  if (!status.ok())
+
110  return status;
+
111 
+
112  uint64_t duration =
+
113  prev_sample_->pts() - first_timestamp_ + prev_sample_->duration();
+
114  segment_info_.set_duration(FromBMFFTimescale(duration));
+
115  return DoFinalize();
+
116 }
+
117 
+
118 Status Segmenter::AddSample(scoped_refptr<MediaSample> sample) {
+
119  if (sample_duration_ == 0) {
+
120  first_timestamp_ = sample->pts();
+
121  sample_duration_ = sample->duration();
+
122  if (muxer_listener_)
+
123  muxer_listener_->OnSampleDurationReady(sample_duration_);
+
124  }
+
125 
+
126  UpdateProgress(sample->duration());
+
127 
+
128  // This writes frames in a delay. Meaning that the previous frame is written
+
129  // on this call to AddSample. The current frame is stored until the next
+
130  // call. This is done to determine which frame is the last in a Cluster.
+
131  // This first block determines if this is a new Cluster and writes the
+
132  // previous frame first before creating the new Cluster.
+
133 
+
134  Status status;
+
135  bool wrote_frame = false;
+
136  if (!cluster_) {
+
137  status = NewSegment(sample->pts());
+
138  // First frame, so no previous frame to write.
+
139  wrote_frame = true;
+
140  } else if (segment_length_sec_ >= options_.segment_duration) {
+
141  if (sample->is_key_frame() || !options_.segment_sap_aligned) {
+
142  status = WriteFrame(true /* write_duration */);
+
143  status.Update(NewSegment(sample->pts()));
+
144  segment_length_sec_ = 0;
+
145  cluster_length_sec_ = 0;
+
146  wrote_frame = true;
+
147  }
+
148  } else if (cluster_length_sec_ >= options_.fragment_duration) {
+
149  if (sample->is_key_frame() || !options_.fragment_sap_aligned) {
+
150  status = WriteFrame(true /* write_duration */);
+
151  status.Update(NewSubsegment(sample->pts()));
+
152  cluster_length_sec_ = 0;
+
153  wrote_frame = true;
+
154  }
+
155  }
+
156  if (!wrote_frame) {
+
157  status = WriteFrame(false /* write_duration */);
+
158  }
+
159  if (!status.ok())
+
160  return status;
+
161 
+
162  // Encrypt the frame.
+
163  if (encryptor_) {
+
164  const bool encrypt_frame =
+
165  static_cast<double>(sample->pts() - first_timestamp_) /
+
166  info_->time_scale() >=
+
167  clear_lead_;
+
168  status = encryptor_->EncryptFrame(sample, encrypt_frame);
+
169  if (!status.ok()) {
+
170  LOG(ERROR) << "Error encrypting frame.";
+
171  return status;
+
172  }
+
173  if (encrypt_frame && muxer_listener_)
+
174  muxer_listener_->OnEncryptionStart();
+
175  }
176 
-
177  // Add the sample to the durations even though we have not written the frame
-
178  // yet. This is needed to make sure we split Clusters at the correct point.
-
179  // These are only used in this method.
-
180  const double duration_sec =
-
181  static_cast<double>(sample->duration()) / info_->time_scale();
-
182  cluster_length_sec_ += duration_sec;
-
183  segment_length_sec_ += duration_sec;
-
184 
-
185  prev_sample_ = sample;
-
186  return Status::OK;
-
187 }
-
188 
-
189 float Segmenter::GetDuration() const {
-
190  return static_cast<float>(segment_info_.duration()) *
-
191  segment_info_.timecode_scale() / kSecondsToNs;
-
192 }
-
193 
-
194 uint64_t Segmenter::FromBMFFTimescale(uint64_t time_timescale) {
-
195  // Convert the time from BMFF time_code to WebM timecode scale.
-
196  const int64_t time_ns =
-
197  kSecondsToNs * time_timescale / info_->time_scale();
-
198  return time_ns / segment_info_.timecode_scale();
-
199 }
-
200 
-
201 uint64_t Segmenter::FromWebMTimecode(uint64_t time_webm_timecode) {
-
202  // Convert the time to BMFF time_code from WebM timecode scale.
-
203  const int64_t time_ns = time_webm_timecode * segment_info_.timecode_scale();
-
204  return time_ns * info_->time_scale() / kSecondsToNs;
-
205 }
-
206 
-
207 Status Segmenter::WriteSegmentHeader(uint64_t file_size, MkvWriter* writer) {
-
208  Status error_status(error::FILE_FAILURE, "Error writing segment header.");
-
209 
-
210  if (!WriteEbmlHeader(writer))
-
211  return error_status;
-
212 
-
213  if (WriteID(writer, mkvmuxer::kMkvSegment) != 0)
-
214  return error_status;
-
215 
-
216  const uint64_t segment_size_size = 8;
-
217  segment_payload_pos_ = writer->Position() + segment_size_size;
-
218  if (file_size > 0) {
-
219  // We want the size of the segment element, so subtract the header.
-
220  if (WriteUIntSize(writer, file_size - segment_payload_pos_,
-
221  segment_size_size) != 0)
-
222  return error_status;
-
223  if (!seek_head_.Write(writer))
-
224  return error_status;
-
225  } else {
-
226  if (SerializeInt(writer, mkvmuxer::kEbmlUnknownValue, segment_size_size) !=
-
227  0)
-
228  return error_status;
-
229  // We don't know the header size, so write a placeholder.
-
230  if (!seek_head_.WriteVoid(writer))
-
231  return error_status;
-
232  }
-
233 
-
234  seek_head_.set_info_pos(writer->Position() - segment_payload_pos_);
-
235  if (!segment_info_.Write(writer))
-
236  return error_status;
-
237 
-
238  seek_head_.set_tracks_pos(writer->Position() - segment_payload_pos_);
-
239  if (!tracks_.Write(writer))
-
240  return error_status;
-
241 
-
242  return Status::OK;
-
243 }
-
244 
-
245 Status Segmenter::SetCluster(uint64_t start_webm_timecode,
-
246  uint64_t position,
-
247  MkvWriter* writer) {
-
248  const uint64_t scale = segment_info_.timecode_scale();
-
249  cluster_.reset(new mkvmuxer::Cluster(start_webm_timecode, position, scale));
-
250  cluster_->Init(writer);
-
251  return Status::OK;
-
252 }
-
253 
-
254 void Segmenter::UpdateProgress(uint64_t progress) {
-
255  accumulated_progress_ += progress;
-
256  if (!progress_listener_ || progress_target_ == 0)
-
257  return;
-
258  // It might happen that accumulated progress exceeds progress_target due to
-
259  // computation errors, e.g. rounding error. Cap it so it never reports > 100%
-
260  // progress.
-
261  if (accumulated_progress_ >= progress_target_) {
-
262  progress_listener_->OnProgress(1.0);
-
263  } else {
-
264  progress_listener_->OnProgress(static_cast<double>(accumulated_progress_) /
-
265  progress_target_);
-
266  }
-
267 }
-
268 
-
269 Status Segmenter::CreateVideoTrack(VideoStreamInfo* info) {
-
270  // The seed is only used to create a UID which we overwrite later.
-
271  unsigned int seed = 0;
-
272  mkvmuxer::VideoTrack* track = new mkvmuxer::VideoTrack(&seed);
-
273  if (!track)
-
274  return Status(error::INTERNAL_ERROR, "Failed to create video track.");
-
275 
-
276  if (info->codec() == kCodecVP8) {
-
277  track->set_codec_id(mkvmuxer::Tracks::kVp8CodecId);
-
278  } else if (info->codec() == kCodecVP9) {
-
279  track->set_codec_id(mkvmuxer::Tracks::kVp9CodecId);
-
280 
-
281  // The |StreamInfo::codec_config| field is stored using the MP4 format; we
-
282  // need to convert it to the WebM format.
-
283  VPCodecConfigurationRecord vp_config;
-
284  if (!vp_config.ParseMP4(info->codec_config())) {
-
285  return Status(error::INTERNAL_ERROR,
-
286  "Unable to parse VP9 codec configuration");
-
287  }
-
288 
-
289  std::vector<uint8_t> codec_config;
-
290  vp_config.WriteWebM(&codec_config);
-
291  if (!track->SetCodecPrivate(codec_config.data(), codec_config.size())) {
-
292  return Status(error::INTERNAL_ERROR,
-
293  "Private codec data required for VP9 streams");
-
294  }
-
295  } else {
-
296  LOG(ERROR) << "Only VP8 and VP9 video codecs are supported.";
-
297  return Status(error::UNIMPLEMENTED,
-
298  "Only VP8 and VP9 video codecs are supported.");
-
299  }
-
300 
-
301  track->set_uid(info->track_id());
-
302  if (!info->language().empty())
-
303  track->set_language(info->language().c_str());
-
304  track->set_type(mkvmuxer::Tracks::kVideo);
-
305  track->set_width(info->width());
-
306  track->set_height(info->height());
-
307  track->set_display_height(info->height());
-
308  track->set_display_width(info->width() * info->pixel_width() /
-
309  info->pixel_height());
-
310 
-
311  if (encryptor_)
-
312  encryptor_->AddTrackInfo(track);
-
313 
-
314  tracks_.AddTrack(track, info->track_id());
-
315  track_id_ = track->number();
-
316  return Status::OK;
-
317 }
-
318 
-
319 Status Segmenter::CreateAudioTrack(AudioStreamInfo* info) {
-
320  // The seed is only used to create a UID which we overwrite later.
-
321  unsigned int seed = 0;
-
322  mkvmuxer::AudioTrack* track = new mkvmuxer::AudioTrack(&seed);
-
323  if (!track)
-
324  return Status(error::INTERNAL_ERROR, "Failed to create audio track.");
-
325 
-
326  if (info->codec() == kCodecOpus) {
-
327  track->set_codec_id(mkvmuxer::Tracks::kOpusCodecId);
-
328  } else if (info->codec() == kCodecVorbis) {
-
329  track->set_codec_id(mkvmuxer::Tracks::kVorbisCodecId);
-
330  } else {
-
331  LOG(ERROR) << "Only Vorbis and Opus audio codec is supported.";
-
332  return Status(error::UNIMPLEMENTED,
-
333  "Only Vorbis and Opus audio codecs are supported.");
-
334  }
-
335  if (!track->SetCodecPrivate(info->codec_config().data(),
-
336  info->codec_config().size())) {
-
337  return Status(error::INTERNAL_ERROR,
-
338  "Private codec data required for audio streams");
-
339  }
-
340 
-
341  track->set_uid(info->track_id());
-
342  if (!info->language().empty())
-
343  track->set_language(info->language().c_str());
-
344  track->set_type(mkvmuxer::Tracks::kAudio);
-
345  track->set_sample_rate(info->sampling_frequency());
-
346  track->set_channels(info->num_channels());
-
347  track->set_seek_pre_roll(info->seek_preroll_ns());
-
348  track->set_codec_delay(info->codec_delay_ns());
-
349 
-
350  if (encryptor_)
-
351  encryptor_->AddTrackInfo(track);
-
352 
-
353  tracks_.AddTrack(track, info->track_id());
-
354  track_id_ = track->number();
-
355  return Status::OK;
-
356 }
-
357 
-
358 Status Segmenter::InitializeEncryptor(KeySource* key_source,
-
359  uint32_t max_sd_pixels) {
-
360  encryptor_.reset(new Encryptor());
-
361  const KeySource::TrackType track_type =
-
362  GetTrackTypeForEncryption(*info_, max_sd_pixels);
-
363  if (track_type == KeySource::TrackType::TRACK_TYPE_UNKNOWN)
-
364  return Status::OK;
-
365  return encryptor_->Initialize(muxer_listener_, track_type, key_source);
-
366 }
-
367 
-
368 Status Segmenter::WriteFrame(bool write_duration) {
-
369  // Create a frame manually so we can create non-SimpleBlock frames. This
-
370  // is required to allow the frame duration to be added. If the duration
-
371  // is not set, then a SimpleBlock will still be written.
-
372  mkvmuxer::Frame frame;
-
373 
-
374  if (!frame.Init(prev_sample_->data(), prev_sample_->data_size())) {
-
375  return Status(error::MUXER_FAILURE,
-
376  "Error adding sample to segment: Frame::Init failed");
-
377  }
-
378 
-
379  if (write_duration) {
-
380  const uint64_t duration_ns =
-
381  prev_sample_->duration() * kSecondsToNs / info_->time_scale();
-
382  frame.set_duration(duration_ns);
-
383  }
-
384  frame.set_is_key(prev_sample_->is_key_frame());
-
385  frame.set_timestamp(prev_sample_->pts() * kSecondsToNs / info_->time_scale());
-
386  frame.set_track_number(track_id_);
-
387 
-
388  if (prev_sample_->side_data_size() > 0) {
-
389  uint64_t block_add_id;
-
390  // First 8 bytes of side_data is the BlockAddID element's value, which is
-
391  // done to mimic ffmpeg behavior. See webm_cluster_parser.cc for details.
-
392  CHECK_GT(prev_sample_->side_data_size(), sizeof(block_add_id));
-
393  memcpy(&block_add_id, prev_sample_->side_data(), sizeof(block_add_id));
-
394  if (!frame.AddAdditionalData(
-
395  prev_sample_->side_data() + sizeof(block_add_id),
-
396  prev_sample_->side_data_size() - sizeof(block_add_id),
-
397  block_add_id)) {
-
398  return Status(
-
399  error::MUXER_FAILURE,
-
400  "Error adding sample to segment: Frame::AddAditionalData Failed");
-
401  }
-
402  }
-
403 
-
404  if (!prev_sample_->is_key_frame() && !frame.CanBeSimpleBlock()) {
-
405  const int64_t timestamp_ns =
-
406  reference_frame_timestamp_ * kSecondsToNs / info_->time_scale();
-
407  frame.set_reference_block_timestamp(timestamp_ns);
-
408  }
-
409 
-
410  // GetRelativeTimecode will return -1 if the relative timecode is too large
-
411  // to fit in the frame.
-
412  if (cluster_->GetRelativeTimecode(frame.timestamp() /
-
413  cluster_->timecode_scale()) < 0) {
-
414  const double segment_duration =
-
415  static_cast<double>(frame.timestamp()) / kSecondsToNs;
-
416  LOG(ERROR) << "Error adding sample to segment: segment too large, "
-
417  << segment_duration << " seconds.";
-
418  return Status(error::MUXER_FAILURE,
-
419  "Error adding sample to segment: segment too large");
-
420  }
-
421 
-
422  if (!cluster_->AddFrame(&frame)) {
-
423  return Status(error::MUXER_FAILURE,
-
424  "Error adding sample to segment: Cluster::AddFrame failed");
-
425  }
-
426 
-
427  // A reference frame is needed for non-keyframes. Having a reference to the
-
428  // previous block is good enough.
-
429  // See libwebm Segment::AddGenericFrame
-
430  reference_frame_timestamp_ = prev_sample_->pts();
-
431  return Status::OK;
-
432 }
-
433 
-
434 } // namespace webm
-
435 } // namespace media
-
436 } // namespace shaka
-
Abstract class holds stream information.
Definition: stream_info.h:26
+
177 
+
178  // Add the sample to the durations even though we have not written the frame
+
179  // yet. This is needed to make sure we split Clusters at the correct point.
+
180  // These are only used in this method.
+
181  const double duration_sec =
+
182  static_cast<double>(sample->duration()) / info_->time_scale();
+
183  cluster_length_sec_ += duration_sec;
+
184  segment_length_sec_ += duration_sec;
+
185 
+
186  prev_sample_ = sample;
+
187  return Status::OK;
+
188 }
+
189 
+
190 float Segmenter::GetDuration() const {
+
191  return static_cast<float>(segment_info_.duration()) *
+
192  segment_info_.timecode_scale() / kSecondsToNs;
+
193 }
+
194 
+
195 uint64_t Segmenter::FromBMFFTimescale(uint64_t time_timescale) {
+
196  // Convert the time from BMFF time_code to WebM timecode scale.
+
197  const int64_t time_ns =
+
198  kSecondsToNs * time_timescale / info_->time_scale();
+
199  return time_ns / segment_info_.timecode_scale();
+
200 }
+
201 
+
202 uint64_t Segmenter::FromWebMTimecode(uint64_t time_webm_timecode) {
+
203  // Convert the time to BMFF time_code from WebM timecode scale.
+
204  const int64_t time_ns = time_webm_timecode * segment_info_.timecode_scale();
+
205  return time_ns * info_->time_scale() / kSecondsToNs;
+
206 }
+
207 
+
208 Status Segmenter::WriteSegmentHeader(uint64_t file_size, MkvWriter* writer) {
+
209  Status error_status(error::FILE_FAILURE, "Error writing segment header.");
+
210 
+
211  if (!WriteEbmlHeader(writer))
+
212  return error_status;
+
213 
+
214  if (WriteID(writer, mkvmuxer::kMkvSegment) != 0)
+
215  return error_status;
+
216 
+
217  const uint64_t segment_size_size = 8;
+
218  segment_payload_pos_ = writer->Position() + segment_size_size;
+
219  if (file_size > 0) {
+
220  // We want the size of the segment element, so subtract the header.
+
221  if (WriteUIntSize(writer, file_size - segment_payload_pos_,
+
222  segment_size_size) != 0)
+
223  return error_status;
+
224  if (!seek_head_.Write(writer))
+
225  return error_status;
+
226  } else {
+
227  if (SerializeInt(writer, mkvmuxer::kEbmlUnknownValue, segment_size_size) !=
+
228  0)
+
229  return error_status;
+
230  // We don't know the header size, so write a placeholder.
+
231  if (!seek_head_.WriteVoid(writer))
+
232  return error_status;
+
233  }
+
234 
+
235  seek_head_.set_info_pos(writer->Position() - segment_payload_pos_);
+
236  if (!segment_info_.Write(writer))
+
237  return error_status;
+
238 
+
239  seek_head_.set_tracks_pos(writer->Position() - segment_payload_pos_);
+
240  if (!tracks_.Write(writer))
+
241  return error_status;
+
242 
+
243  return Status::OK;
+
244 }
+
245 
+
246 Status Segmenter::SetCluster(uint64_t start_webm_timecode,
+
247  uint64_t position,
+
248  MkvWriter* writer) {
+
249  const uint64_t scale = segment_info_.timecode_scale();
+
250  cluster_.reset(new mkvmuxer::Cluster(start_webm_timecode, position, scale));
+
251  cluster_->Init(writer);
+
252  return Status::OK;
+
253 }
+
254 
+
255 void Segmenter::UpdateProgress(uint64_t progress) {
+
256  accumulated_progress_ += progress;
+
257  if (!progress_listener_ || progress_target_ == 0)
+
258  return;
+
259  // It might happen that accumulated progress exceeds progress_target due to
+
260  // computation errors, e.g. rounding error. Cap it so it never reports > 100%
+
261  // progress.
+
262  if (accumulated_progress_ >= progress_target_) {
+
263  progress_listener_->OnProgress(1.0);
+
264  } else {
+
265  progress_listener_->OnProgress(static_cast<double>(accumulated_progress_) /
+
266  progress_target_);
+
267  }
+
268 }
+
269 
+
270 Status Segmenter::CreateVideoTrack(VideoStreamInfo* info) {
+
271  // The seed is only used to create a UID which we overwrite later.
+
272  unsigned int seed = 0;
+
273  mkvmuxer::VideoTrack* track = new mkvmuxer::VideoTrack(&seed);
+
274  if (!track)
+
275  return Status(error::INTERNAL_ERROR, "Failed to create video track.");
+
276 
+
277  if (info->codec() == kCodecVP8) {
+
278  track->set_codec_id(mkvmuxer::Tracks::kVp8CodecId);
+
279  } else if (info->codec() == kCodecVP9) {
+
280  track->set_codec_id(mkvmuxer::Tracks::kVp9CodecId);
+
281 
+
282  // The |StreamInfo::codec_config| field is stored using the MP4 format; we
+
283  // need to convert it to the WebM format.
+
284  VPCodecConfigurationRecord vp_config;
+
285  if (!vp_config.ParseMP4(info->codec_config())) {
+
286  return Status(error::INTERNAL_ERROR,
+
287  "Unable to parse VP9 codec configuration");
+
288  }
+
289 
+
290  std::vector<uint8_t> codec_config;
+
291  vp_config.WriteWebM(&codec_config);
+
292  if (!track->SetCodecPrivate(codec_config.data(), codec_config.size())) {
+
293  return Status(error::INTERNAL_ERROR,
+
294  "Private codec data required for VP9 streams");
+
295  }
+
296  } else {
+
297  LOG(ERROR) << "Only VP8 and VP9 video codecs are supported.";
+
298  return Status(error::UNIMPLEMENTED,
+
299  "Only VP8 and VP9 video codecs are supported.");
+
300  }
+
301 
+
302  track->set_uid(info->track_id());
+
303  if (!info->language().empty())
+
304  track->set_language(info->language().c_str());
+
305  track->set_type(mkvmuxer::Tracks::kVideo);
+
306  track->set_width(info->width());
+
307  track->set_height(info->height());
+
308  track->set_display_height(info->height());
+
309  track->set_display_width(info->width() * info->pixel_width() /
+
310  info->pixel_height());
+
311 
+
312  if (encryptor_)
+
313  encryptor_->AddTrackInfo(track);
+
314 
+
315  tracks_.AddTrack(track, info->track_id());
+
316  track_id_ = track->number();
+
317  return Status::OK;
+
318 }
+
319 
+
320 Status Segmenter::CreateAudioTrack(AudioStreamInfo* info) {
+
321  // The seed is only used to create a UID which we overwrite later.
+
322  unsigned int seed = 0;
+
323  mkvmuxer::AudioTrack* track = new mkvmuxer::AudioTrack(&seed);
+
324  if (!track)
+
325  return Status(error::INTERNAL_ERROR, "Failed to create audio track.");
+
326 
+
327  if (info->codec() == kCodecOpus) {
+
328  track->set_codec_id(mkvmuxer::Tracks::kOpusCodecId);
+
329  } else if (info->codec() == kCodecVorbis) {
+
330  track->set_codec_id(mkvmuxer::Tracks::kVorbisCodecId);
+
331  } else {
+
332  LOG(ERROR) << "Only Vorbis and Opus audio codec is supported.";
+
333  return Status(error::UNIMPLEMENTED,
+
334  "Only Vorbis and Opus audio codecs are supported.");
+
335  }
+
336  if (!track->SetCodecPrivate(info->codec_config().data(),
+
337  info->codec_config().size())) {
+
338  return Status(error::INTERNAL_ERROR,
+
339  "Private codec data required for audio streams");
+
340  }
+
341 
+
342  track->set_uid(info->track_id());
+
343  if (!info->language().empty())
+
344  track->set_language(info->language().c_str());
+
345  track->set_type(mkvmuxer::Tracks::kAudio);
+
346  track->set_sample_rate(info->sampling_frequency());
+
347  track->set_channels(info->num_channels());
+
348  track->set_seek_pre_roll(info->seek_preroll_ns());
+
349  track->set_codec_delay(info->codec_delay_ns());
+
350 
+
351  if (encryptor_)
+
352  encryptor_->AddTrackInfo(track);
+
353 
+
354  tracks_.AddTrack(track, info->track_id());
+
355  track_id_ = track->number();
+
356  return Status::OK;
+
357 }
+
358 
+
359 Status Segmenter::InitializeEncryptor(KeySource* key_source,
+
360  uint32_t max_sd_pixels) {
+
361  encryptor_.reset(new Encryptor());
+
362  const KeySource::TrackType track_type =
+
363  GetTrackTypeForEncryption(*info_, max_sd_pixels);
+
364  if (track_type == KeySource::TrackType::TRACK_TYPE_UNKNOWN)
+
365  return Status::OK;
+
366  return encryptor_->Initialize(muxer_listener_, track_type, info_->codec(),
+
367  key_source, options_.webm_subsample_encryption);
+
368 }
+
369 
+
370 Status Segmenter::WriteFrame(bool write_duration) {
+
371  // Create a frame manually so we can create non-SimpleBlock frames. This
+
372  // is required to allow the frame duration to be added. If the duration
+
373  // is not set, then a SimpleBlock will still be written.
+
374  mkvmuxer::Frame frame;
+
375 
+
376  if (!frame.Init(prev_sample_->data(), prev_sample_->data_size())) {
+
377  return Status(error::MUXER_FAILURE,
+
378  "Error adding sample to segment: Frame::Init failed");
+
379  }
+
380 
+
381  if (write_duration) {
+
382  const uint64_t duration_ns =
+
383  prev_sample_->duration() * kSecondsToNs / info_->time_scale();
+
384  frame.set_duration(duration_ns);
+
385  }
+
386  frame.set_is_key(prev_sample_->is_key_frame());
+
387  frame.set_timestamp(prev_sample_->pts() * kSecondsToNs / info_->time_scale());
+
388  frame.set_track_number(track_id_);
+
389 
+
390  if (prev_sample_->side_data_size() > 0) {
+
391  uint64_t block_add_id;
+
392  // First 8 bytes of side_data is the BlockAddID element's value, which is
+
393  // done to mimic ffmpeg behavior. See webm_cluster_parser.cc for details.
+
394  CHECK_GT(prev_sample_->side_data_size(), sizeof(block_add_id));
+
395  memcpy(&block_add_id, prev_sample_->side_data(), sizeof(block_add_id));
+
396  if (!frame.AddAdditionalData(
+
397  prev_sample_->side_data() + sizeof(block_add_id),
+
398  prev_sample_->side_data_size() - sizeof(block_add_id),
+
399  block_add_id)) {
+
400  return Status(
+
401  error::MUXER_FAILURE,
+
402  "Error adding sample to segment: Frame::AddAditionalData Failed");
+
403  }
+
404  }
+
405 
+
406  if (!prev_sample_->is_key_frame() && !frame.CanBeSimpleBlock()) {
+
407  const int64_t timestamp_ns =
+
408  reference_frame_timestamp_ * kSecondsToNs / info_->time_scale();
+
409  frame.set_reference_block_timestamp(timestamp_ns);
+
410  }
+
411 
+
412  // GetRelativeTimecode will return -1 if the relative timecode is too large
+
413  // to fit in the frame.
+
414  if (cluster_->GetRelativeTimecode(frame.timestamp() /
+
415  cluster_->timecode_scale()) < 0) {
+
416  const double segment_duration =
+
417  static_cast<double>(frame.timestamp()) / kSecondsToNs;
+
418  LOG(ERROR) << "Error adding sample to segment: segment too large, "
+
419  << segment_duration << " seconds.";
+
420  return Status(error::MUXER_FAILURE,
+
421  "Error adding sample to segment: segment too large");
+
422  }
+
423 
+
424  if (!cluster_->AddFrame(&frame)) {
+
425  return Status(error::MUXER_FAILURE,
+
426  "Error adding sample to segment: Cluster::AddFrame failed");
+
427  }
+
428 
+
429  // A reference frame is needed for non-keyframes. Having a reference to the
+
430  // previous block is good enough.
+
431  // See libwebm Segment::AddGenericFrame
+
432  reference_frame_timestamp_ = prev_sample_->pts();
+
433  return Status::OK;
+
434 }
+
435 
+
436 } // namespace webm
+
437 } // namespace media
+
438 } // namespace shaka
+
Abstract class holds stream information.
Definition: stream_info.h:53
Status Initialize(const std::vector< MediaStream * > &streams, MuxerListener *muxer_listener, ProgressListener *progress_listener, KeySource *encryption_key_source, uint32_t max_sd_pixels, double clear_lead_in_seconds, double crypto_period_duration_in_seconds, FourCC protection_scheme)
Definition: segmenter.cc:166
void UpdateProgress(uint64_t progress)
Update segmentation progress using ProgressListener.
Definition: segmenter.cc:389
@@ -532,7 +534,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
virtual void OnEncryptionStart()=0
Status AddSample(const MediaStream *stream, scoped_refptr< MediaSample > sample)
Definition: segmenter.cc:322
- +
This class listens to progress updates events.
mkvmuxer::int64 Position() const override
Definition: mkv_writer.cc:71
void WriteWebM(std::vector< uint8_t > *data) const
@@ -541,17 +543,17 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
virtual void OnProgress(double progress)=0
- +
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:31
double GetDuration() const
Definition: segmenter.cc:380
-
Holds video stream information.
+
Holds video stream information.
diff --git a/docs/dc/d54/structshaka_1_1media_1_1H264DecRefPicMarking.html b/docs/dc/d54/structshaka_1_1media_1_1H264DecRefPicMarking.html index 636b60e451..2e3f4ed524 100644 --- a/docs/dc/d54/structshaka_1_1media_1_1H264DecRefPicMarking.html +++ b/docs/dc/d54/structshaka_1_1media_1_1H264DecRefPicMarking.html @@ -121,7 +121,7 @@ int max_long_term_frame_id diff --git a/docs/dc/d58/webm__media__parser_8h_source.html b/docs/dc/d58/webm__media__parser_8h_source.html index fcb3a25c7d..4a570795fc 100644 --- a/docs/dc/d58/webm__media__parser_8h_source.html +++ b/docs/dc/d58/webm__media__parser_8h_source.html @@ -179,7 +179,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d5c/classshaka_1_1MockMpdNotifier.html b/docs/dc/d5c/classshaka_1_1MockMpdNotifier.html index 8bd4a284b6..e2f1ce1ef4 100644 --- a/docs/dc/d5c/classshaka_1_1MockMpdNotifier.html +++ b/docs/dc/d5c/classshaka_1_1MockMpdNotifier.html @@ -160,7 +160,7 @@ Public Member Functions diff --git a/docs/dc/d69/structshaka_1_1media_1_1mp4_1_1CueSettingsBox-members.html b/docs/dc/d69/structshaka_1_1media_1_1mp4_1_1CueSettingsBox-members.html index 56d24b1b3b..b44b1e276a 100644 --- a/docs/dc/d69/structshaka_1_1media_1_1mp4_1_1CueSettingsBox-members.html +++ b/docs/dc/d69/structshaka_1_1media_1_1mp4_1_1CueSettingsBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d6f/classshaka_1_1media_1_1webm_1_1Segmenter-members.html b/docs/dc/d6f/classshaka_1_1media_1_1webm_1_1Segmenter-members.html index 76455fa158..cccfc40dc1 100644 --- a/docs/dc/d6f/classshaka_1_1media_1_1webm_1_1Segmenter-members.html +++ b/docs/dc/d6f/classshaka_1_1media_1_1webm_1_1Segmenter-members.html @@ -121,7 +121,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d71/classshaka_1_1media_1_1mp2t_1_1TsSection-members.html b/docs/dc/d71/classshaka_1_1media_1_1mp2t_1_1TsSection-members.html index d4131c72ae..9a50d529bc 100644 --- a/docs/dc/d71/classshaka_1_1media_1_1mp2t_1_1TsSection-members.html +++ b/docs/dc/d71/classshaka_1_1media_1_1mp2t_1_1TsSection-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d73/classshaka_1_1media_1_1MockMuxerListener.html b/docs/dc/d73/classshaka_1_1media_1_1MockMuxerListener.html index 0cfbadc9ee..af6fccc964 100644 --- a/docs/dc/d73/classshaka_1_1media_1_1MockMuxerListener.html +++ b/docs/dc/d73/classshaka_1_1media_1_1MockMuxerListener.html @@ -157,7 +157,7 @@ Additional Inherited Members diff --git a/docs/dc/d7b/closure__thread_8cc_source.html b/docs/dc/d7b/closure__thread_8cc_source.html index ce76d27d2c..5432ba7414 100644 --- a/docs/dc/d7b/closure__thread_8cc_source.html +++ b/docs/dc/d7b/closure__thread_8cc_source.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d7b/h264__parser_8cc_source.html b/docs/dc/d7b/h264__parser_8cc_source.html index b7371d5a42..845b221f12 100644 --- a/docs/dc/d7b/h264__parser_8cc_source.html +++ b/docs/dc/d7b/h264__parser_8cc_source.html @@ -1264,7 +1264,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d86/structshaka_1_1media_1_1mp4_1_1ElementaryStreamDescriptor-members.html b/docs/dc/d86/structshaka_1_1media_1_1mp4_1_1ElementaryStreamDescriptor-members.html index 6f85c99438..fc5530cb8e 100644 --- a/docs/dc/d86/structshaka_1_1media_1_1mp4_1_1ElementaryStreamDescriptor-members.html +++ b/docs/dc/d86/structshaka_1_1media_1_1mp4_1_1ElementaryStreamDescriptor-members.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d8f/structshaka_1_1media_1_1mp4_1_1MovieFragmentHeader.html b/docs/dc/d8f/structshaka_1_1media_1_1mp4_1_1MovieFragmentHeader.html index 41cacc9f5f..0e10d17e01 100644 --- a/docs/dc/d8f/structshaka_1_1media_1_1mp4_1_1MovieFragmentHeader.html +++ b/docs/dc/d8f/structshaka_1_1media_1_1mp4_1_1MovieFragmentHeader.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/dc/da0/structshaka_1_1media_1_1mp4_1_1DTSSpecific.html b/docs/dc/da0/structshaka_1_1media_1_1mp4_1_1DTSSpecific.html index 130c948dd8..f552e2fe3e 100644 --- a/docs/dc/da0/structshaka_1_1media_1_1mp4_1_1DTSSpecific.html +++ b/docs/dc/da0/structshaka_1_1media_1_1mp4_1_1DTSSpecific.html @@ -185,7 +185,7 @@ Additional Inherited Members diff --git a/docs/dc/da1/classshaka_1_1MpdBuilder.html b/docs/dc/da1/classshaka_1_1MpdBuilder.html index f391726225..afc7ecd0d3 100644 --- a/docs/dc/da1/classshaka_1_1MpdBuilder.html +++ b/docs/dc/da1/classshaka_1_1MpdBuilder.html @@ -385,7 +385,7 @@ class DynamicMpdBuilderTes diff --git a/docs/dc/da6/classshaka_1_1media_1_1ContentEncoding.html b/docs/dc/da6/classshaka_1_1media_1_1ContentEncoding.html index 01a3900b51..92a4ece680 100644 --- a/docs/dc/da6/classshaka_1_1media_1_1ContentEncoding.html +++ b/docs/dc/da6/classshaka_1_1media_1_1ContentEncoding.html @@ -208,7 +208,7 @@ Static Public Attributes diff --git a/docs/dc/dbd/structshaka_1_1media_1_1FileCloser-members.html b/docs/dc/dbd/structshaka_1_1media_1_1FileCloser-members.html index 7ab5cd6e1f..ecf64507d3 100644 --- a/docs/dc/dbd/structshaka_1_1media_1_1FileCloser-members.html +++ b/docs/dc/dbd/structshaka_1_1media_1_1FileCloser-members.html @@ -97,7 +97,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/dbf/box__buffer_8h_source.html b/docs/dc/dbf/box__buffer_8h_source.html index dbe9797d2c..1f9b67b3fe 100644 --- a/docs/dc/dbf/box__buffer_8h_source.html +++ b/docs/dc/dbf/box__buffer_8h_source.html @@ -294,7 +294,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/dc1/classshaka_1_1xml_1_1RepresentationXmlNode-members.html b/docs/dc/dc1/classshaka_1_1xml_1_1RepresentationXmlNode-members.html index aeec3b41bd..7acb71ea81 100644 --- a/docs/dc/dc1/classshaka_1_1xml_1_1RepresentationXmlNode-members.html +++ b/docs/dc/dc1/classshaka_1_1xml_1_1RepresentationXmlNode-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/dca/classshaka_1_1media_1_1WebMListParser.html b/docs/dc/dca/classshaka_1_1media_1_1WebMListParser.html index 1ae972da67..cb030d05b5 100644 --- a/docs/dc/dca/classshaka_1_1media_1_1WebMListParser.html +++ b/docs/dc/dca/classshaka_1_1media_1_1WebMListParser.html @@ -210,7 +210,7 @@ void  diff --git a/docs/dc/dd9/rsa__key_8cc_source.html b/docs/dc/dd9/rsa__key_8cc_source.html index 8adb9b04ae..a7abb3d03a 100644 --- a/docs/dc/dd9/rsa__key_8cc_source.html +++ b/docs/dc/dd9/rsa__key_8cc_source.html @@ -350,7 +350,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/ddf/structshaka_1_1media_1_1mp4_1_1Media.html b/docs/dc/ddf/structshaka_1_1media_1_1mp4_1_1Media.html index e341a30f20..909fb112f7 100644 --- a/docs/dc/ddf/structshaka_1_1media_1_1mp4_1_1Media.html +++ b/docs/dc/ddf/structshaka_1_1media_1_1mp4_1_1Media.html @@ -179,7 +179,7 @@ Additional Inherited Members diff --git a/docs/dc/ddf/udp__file__posix_8cc_source.html b/docs/dc/ddf/udp__file__posix_8cc_source.html index 093c578984..85b7570dbd 100644 --- a/docs/dc/ddf/udp__file__posix_8cc_source.html +++ b/docs/dc/ddf/udp__file__posix_8cc_source.html @@ -322,7 +322,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/de1/structshaka_1_1SegmentInfo.html b/docs/dc/de1/structshaka_1_1SegmentInfo.html index 7469f7a819..89455c41a6 100644 --- a/docs/dc/de1/structshaka_1_1SegmentInfo.html +++ b/docs/dc/de1/structshaka_1_1SegmentInfo.html @@ -118,7 +118,7 @@ uint64_t repeat diff --git a/docs/dc/deb/classshaka_1_1media_1_1mp4_1_1Fragmenter-members.html b/docs/dc/deb/classshaka_1_1media_1_1mp4_1_1Fragmenter-members.html index d6bf23b5e1..522d0b2a26 100644 --- a/docs/dc/deb/classshaka_1_1media_1_1mp4_1_1Fragmenter-members.html +++ b/docs/dc/deb/classshaka_1_1media_1_1mp4_1_1Fragmenter-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/deb/h265__byte__to__unit__stream__converter_8h_source.html b/docs/dc/deb/h265__byte__to__unit__stream__converter_8h_source.html index 07a9f9cdb3..e4731d7484 100644 --- a/docs/dc/deb/h265__byte__to__unit__stream__converter_8h_source.html +++ b/docs/dc/deb/h265__byte__to__unit__stream__converter_8h_source.html @@ -135,7 +135,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/dec/ts__section__pmt_8cc_source.html b/docs/dc/dec/ts__section__pmt_8cc_source.html index 9780ead7ae..ee271c1c2b 100644 --- a/docs/dc/dec/ts__section__pmt_8cc_source.html +++ b/docs/dc/dec/ts__section__pmt_8cc_source.html @@ -207,7 +207,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/df0/classshaka_1_1media_1_1ClosureThread.html b/docs/dc/df0/classshaka_1_1media_1_1ClosureThread.html index 7d6b47ff82..886683d16c 100644 --- a/docs/dc/df0/classshaka_1_1media_1_1ClosureThread.html +++ b/docs/dc/df0/classshaka_1_1media_1_1ClosureThread.html @@ -179,7 +179,7 @@ void  diff --git a/docs/dc/df2/classshaka_1_1media_1_1WebVttMediaParser.html b/docs/dc/df2/classshaka_1_1media_1_1WebVttMediaParser.html index 88eb567d60..33a6da0d82 100644 --- a/docs/dc/df2/classshaka_1_1media_1_1WebVttMediaParser.html +++ b/docs/dc/df2/classshaka_1_1media_1_1WebVttMediaParser.html @@ -256,7 +256,7 @@ track_id, const scoped_refptr
diff --git a/docs/dc/df3/classshaka_1_1media_1_1mp4_1_1EncryptingFragmenter.html b/docs/dc/df3/classshaka_1_1media_1_1mp4_1_1EncryptingFragmenter.html index 20013884e8..99223fce9f 100644 --- a/docs/dc/df3/classshaka_1_1media_1_1mp4_1_1EncryptingFragmenter.html +++ b/docs/dc/df3/classshaka_1_1media_1_1mp4_1_1EncryptingFragmenter.html @@ -264,7 +264,7 @@ void set_encryption_key -

Definition at line 62 of file encrypting_fragmenter.cc.

+

Definition at line 61 of file encrypting_fragmenter.cc.

@@ -301,7 +301,7 @@ void set_encryption_keyReimplemented from shaka::media::mp4::Fragmenter.

-

Definition at line 107 of file encrypting_fragmenter.cc.

+

Definition at line 102 of file encrypting_fragmenter.cc.

@@ -328,7 +328,7 @@ void set_encryption_keyCreate the encryptor for the internal encryption key. The existing encryptor will be reset if it is not NULL.

Returns
OK on success, an error status otherwise.
-

Definition at line 209 of file encrypting_fragmenter.cc.

+

Definition at line 204 of file encrypting_fragmenter.cc.

@@ -364,7 +364,7 @@ void set_encryption_keyReimplemented from shaka::media::mp4::Fragmenter.

-

Definition at line 122 of file encrypting_fragmenter.cc.

+

Definition at line 117 of file encrypting_fragmenter.cc.

@@ -394,7 +394,7 @@ void set_encryption_keyReimplemented in shaka::media::mp4::KeyRotationFragmenter.

-

Definition at line 166 of file encrypting_fragmenter.cc.

+

Definition at line 161 of file encrypting_fragmenter.cc.

@@ -405,7 +405,7 @@ void set_encryption_key diff --git a/docs/dc/df4/classshaka_1_1media_1_1webm_1_1SingleSegmentSegmenter-members.html b/docs/dc/df4/classshaka_1_1media_1_1webm_1_1SingleSegmentSegmenter-members.html index 7a1cab4a6d..5c23ba611d 100644 --- a/docs/dc/df4/classshaka_1_1media_1_1webm_1_1SingleSegmentSegmenter-members.html +++ b/docs/dc/df4/classshaka_1_1media_1_1webm_1_1SingleSegmentSegmenter-members.html @@ -128,7 +128,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/df7/structshaka_1_1media_1_1mp4_1_1TrackFragmentRun-members.html b/docs/dc/df7/structshaka_1_1media_1_1mp4_1_1TrackFragmentRun-members.html index 21c4cb7bff..98c50ddea1 100644 --- a/docs/dc/df7/structshaka_1_1media_1_1mp4_1_1TrackFragmentRun-members.html +++ b/docs/dc/df7/structshaka_1_1media_1_1mp4_1_1TrackFragmentRun-members.html @@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/df8/closure__thread_8h_source.html b/docs/dc/df8/closure__thread_8h_source.html index c07fd8a0db..df2c324ab0 100644 --- a/docs/dc/df8/closure__thread_8h_source.html +++ b/docs/dc/df8/closure__thread_8h_source.html @@ -127,7 +127,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d06/structshaka_1_1media_1_1mp4_1_1ChunkOffset.html b/docs/dd/d06/structshaka_1_1media_1_1mp4_1_1ChunkOffset.html index a980ac8f16..10029a905d 100644 --- a/docs/dd/d06/structshaka_1_1media_1_1mp4_1_1ChunkOffset.html +++ b/docs/dd/d06/structshaka_1_1media_1_1mp4_1_1ChunkOffset.html @@ -180,7 +180,7 @@ uint32_t flags diff --git a/docs/dd/d11/mpd__builder_8cc_source.html b/docs/dd/d11/mpd__builder_8cc_source.html index 10472d5748..656ee60eba 100644 --- a/docs/dd/d11/mpd__builder_8cc_source.html +++ b/docs/dd/d11/mpd__builder_8cc_source.html @@ -1508,7 +1508,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d12/mpd__writer_8cc_source.html b/docs/dd/d12/mpd__writer_8cc_source.html index d63c8ffab3..dffd1e45f7 100644 --- a/docs/dd/d12/mpd__writer_8cc_source.html +++ b/docs/dd/d12/mpd__writer_8cc_source.html @@ -221,7 +221,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d13/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html b/docs/dd/d13/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html index 20406fd881..ca83d7444d 100644 --- a/docs/dd/d13/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html +++ b/docs/dd/d13/structshaka_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html @@ -188,7 +188,7 @@ Additional Inherited Members diff --git a/docs/dd/d17/classshaka_1_1media_1_1Demuxer.html b/docs/dd/d17/classshaka_1_1media_1_1Demuxer.html index 3937c88004..63048017b7 100644 --- a/docs/dd/d17/classshaka_1_1media_1_1Demuxer.html +++ b/docs/dd/d17/classshaka_1_1media_1_1Demuxer.html @@ -295,7 +295,7 @@ Public Member Functions diff --git a/docs/dd/d18/es__parser__adts_8h_source.html b/docs/dd/d18/es__parser__adts_8h_source.html index 912c046806..fed50efd47 100644 --- a/docs/dd/d18/es__parser__adts_8h_source.html +++ b/docs/dd/d18/es__parser__adts_8h_source.html @@ -172,7 +172,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d19/video__stream__info_8cc_source.html b/docs/dd/d19/video__stream__info_8cc_source.html index 45555790dc..44ee8c441d 100644 --- a/docs/dd/d19/video__stream__info_8cc_source.html +++ b/docs/dd/d19/video__stream__info_8cc_source.html @@ -106,8 +106,8 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
17 namespace media {
18 
19 namespace {
-
20 std::string VideoCodecToString(VideoCodec video_codec) {
-
21  switch (video_codec) {
+
20 std::string VideoCodecToString(Codec codec) {
+
21  switch (codec) {
22  case kCodecH264:
23  return "H264";
24  case kCodecHEV1:
@@ -129,75 +129,58 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
40  case kCodecVP10:
41  return "VP10";
42  default:
-
43  NOTIMPLEMENTED() << "Unknown Video Codec: " << video_codec;
-
44  return "UnknownVideoCodec";
+
43  NOTIMPLEMENTED() << "Unknown Video Codec: " << codec;
+
44  return "UnknownCodec";
45  }
46 }
47 
48 } // namespace
49 
- -
51  uint32_t time_scale,
-
52  uint64_t duration,
-
53  VideoCodec codec,
-
54  const std::string& codec_string,
-
55  const std::string& language,
-
56  uint16_t width,
-
57  uint16_t height,
-
58  uint32_t pixel_width,
-
59  uint32_t pixel_height,
-
60  int16_t trick_play_rate,
-
61  uint8_t nalu_length_size,
-
62  const uint8_t* codec_config,
-
63  size_t codec_config_size,
-
64  bool is_encrypted)
-
65  : StreamInfo(kStreamVideo,
-
66  track_id,
-
67  time_scale,
-
68  duration,
-
69  codec_string,
-
70  language,
-
71  codec_config,
-
72  codec_config_size,
-
73  is_encrypted),
-
74  codec_(codec),
-
75  width_(width),
-
76  height_(height),
-
77  pixel_width_(pixel_width),
-
78  pixel_height_(pixel_height),
-
79  trick_play_rate_(trick_play_rate),
-
80  nalu_length_size_(nalu_length_size) {
-
81 }
-
82 
-
83 VideoStreamInfo::~VideoStreamInfo() {}
-
84 
- -
86  return codec_ != kUnknownVideoCodec &&
-
87  width_ > 0 && width_ <= limits::kMaxDimension &&
-
88  height_ > 0 && height_ <= limits::kMaxDimension &&
-
89  (nalu_length_size_ <= 2 || nalu_length_size_ == 4);
-
90 }
-
91 
-
92 std::string VideoStreamInfo::ToString() const {
-
93  return base::StringPrintf(
-
94  "%s codec: %s\n width: %d\n height: %d\n pixel_aspect_ratio: %d:%d\n "
-
95  "trick_play_rate: %d\n nalu_length_size: %d\n",
-
96  StreamInfo::ToString().c_str(), VideoCodecToString(codec_).c_str(),
-
97  width_, height_, pixel_width_, pixel_height_, trick_play_rate_,
-
98  nalu_length_size_);
-
99 }
-
100 
-
101 } // namespace media
-
102 } // namespace shaka
-
Abstract class holds stream information.
Definition: stream_info.h:26
-
bool IsValidConfig() const override
-
VideoStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, VideoCodec codec, const std::string &codec_string, const std::string &language, uint16_t width, uint16_t height, uint32_t pixel_width, uint32_t pixel_height, int16_t trick_play_rate, uint8_t nalu_length_size, const uint8_t *codec_config, size_t codec_config_size, bool is_encrypted)
-
virtual std::string ToString() const
Definition: stream_info.cc:40
-
std::string ToString() const override
+ +
51  int track_id, uint32_t time_scale, uint64_t duration, Codec codec,
+
52  const std::string& codec_string, const uint8_t* codec_config,
+
53  size_t codec_config_size, uint16_t width, uint16_t height,
+
54  uint32_t pixel_width, uint32_t pixel_height, int16_t trick_play_rate,
+
55  uint8_t nalu_length_size, const std::string& language, bool is_encrypted)
+
56  : StreamInfo(kStreamVideo, track_id, time_scale, duration, codec,
+
57  codec_string, codec_config, codec_config_size, language,
+
58  is_encrypted),
+
59  width_(width),
+
60  height_(height),
+
61  pixel_width_(pixel_width),
+
62  pixel_height_(pixel_height),
+
63  trick_play_rate_(trick_play_rate),
+
64  nalu_length_size_(nalu_length_size) {}
+
65 
+
66 VideoStreamInfo::~VideoStreamInfo() {}
+
67 
+ +
69  return codec() != kUnknownCodec && width_ > 0 &&
+
70  width_ <= limits::kMaxDimension && height_ > 0 &&
+
71  height_ <= limits::kMaxDimension &&
+
72  (nalu_length_size_ <= 2 || nalu_length_size_ == 4);
+
73 }
+
74 
+
75 std::string VideoStreamInfo::ToString() const {
+
76  return base::StringPrintf(
+
77  "%s codec: %s\n width: %d\n height: %d\n pixel_aspect_ratio: %d:%d\n "
+
78  "trick_play_rate: %d\n nalu_length_size: %d\n",
+
79  StreamInfo::ToString().c_str(), VideoCodecToString(codec()).c_str(),
+
80  width_, height_, pixel_width_, pixel_height_, trick_play_rate_,
+
81  nalu_length_size_);
+
82 }
+
83 
+
84 } // namespace media
+
85 } // namespace shaka
+
Abstract class holds stream information.
Definition: stream_info.h:53
+
bool IsValidConfig() const override
+
virtual std::string ToString() const
Definition: stream_info.cc:37
+
std::string ToString() const override
+
VideoStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, Codec codec, const std::string &codec_string, const uint8_t *codec_config, size_t codec_config_size, uint16_t width, uint16_t height, uint32_t pixel_width, uint32_t pixel_height, int16_t trick_play_rate, uint8_t nalu_length_size, const std::string &language, bool is_encrypted)
diff --git a/docs/dd/d30/wvm__media__parser_8cc_source.html b/docs/dd/d30/wvm__media__parser_8cc_source.html index 5e01d4222b..b10a92cda0 100644 --- a/docs/dd/d30/wvm__media__parser_8cc_source.html +++ b/docs/dd/d30/wvm__media__parser_8cc_source.html @@ -828,443 +828,445 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
739  index_size = read_ptr - index_data_.data();
740 
741  if (has_video) {
-
742  VideoCodec video_codec = kCodecH264;
+
742  Codec video_codec = kCodecH264;
743  stream_infos_.push_back(new VideoStreamInfo(
744  stream_id_count_, time_scale, track_duration, video_codec,
-
745  std::string(), std::string(), video_width, video_height, pixel_width,
-
746  pixel_height, trick_play_rate, nalu_length_size,
-
747  video_codec_config.data(), video_codec_config.size(), true));
+
745  std::string(), video_codec_config.data(), video_codec_config.size(),
+
746  video_width, video_height, pixel_width, pixel_height, trick_play_rate,
+
747  nalu_length_size, std::string(), true));
748  program_demux_stream_map_[base::UintToString(index_program_id_) + ":" +
-
749  base::UintToString(video_pes_stream_id ?
-
750  video_pes_stream_id :
-
751  kDefaultVideoStreamId)] =
-
752  stream_id_count_++;
-
753  }
-
754  if (has_audio) {
-
755  const AudioCodec audio_codec = kCodecAAC;
-
756  // TODO(beil): Pass in max and average bitrate in wvm container.
-
757  stream_infos_.push_back(new AudioStreamInfo(
-
758  stream_id_count_, time_scale, track_duration, audio_codec,
-
759  std::string(), std::string(), kAacSampleSizeBits, num_channels,
-
760  sampling_frequency, 0 /* seek preroll */, 0 /* codec delay */,
-
761  0 /* max bitrate */, 0 /* avg bitrate */, audio_codec_config.data(),
-
762  audio_codec_config.size(), true));
-
763  program_demux_stream_map_[base::UintToString(index_program_id_) + ":" +
-
764  base::UintToString(audio_pes_stream_id ?
-
765  audio_pes_stream_id :
-
766  kDefaultAudioStreamId)] =
-
767  stream_id_count_++;
-
768  }
-
769  }
-
770 
-
771  index_program_id_++;
-
772  index_data_.clear();
-
773  return true;
-
774 }
-
775 
-
776 bool WvmMediaParser::DemuxNextPes(bool is_program_end) {
-
777  bool output_encrypted_sample = false;
-
778  if (!sample_data_.empty() && (prev_pes_flags_1_ & kScramblingBitsMask)) {
-
779  // Decrypt crypto unit.
-
780  if (!content_decryptor_) {
-
781  output_encrypted_sample = true;
-
782  } else {
-
783  content_decryptor_->Crypt(&sample_data_[crypto_unit_start_pos_],
-
784  sample_data_.size() - crypto_unit_start_pos_,
-
785  &sample_data_[crypto_unit_start_pos_]);
-
786  }
-
787  }
-
788  // Demux media sample if we are at program end or if we are not at a
-
789  // continuation PES.
-
790  if ((pes_flags_2_ & kPesOptPts) || is_program_end) {
-
791  if (!sample_data_.empty()) {
-
792  if (!Output(output_encrypted_sample)) {
-
793  return false;
-
794  }
-
795  }
-
796  StartMediaSampleDemux();
-
797  }
-
798 
-
799  crypto_unit_start_pos_ = sample_data_.size();
-
800  return true;
-
801 }
-
802 
-
803 void WvmMediaParser::StartMediaSampleDemux() {
-
804  bool is_key_frame = ((pes_flags_1_ & kPesOptAlign) != 0);
-
805  media_sample_ = MediaSample::CreateEmptyMediaSample();
-
806  media_sample_->set_dts(dts_);
-
807  media_sample_->set_pts(pts_);
-
808  media_sample_->set_is_key_frame(is_key_frame);
-
809 
-
810  sample_data_.clear();
-
811 }
-
812 
-
813 bool WvmMediaParser::Output(bool output_encrypted_sample) {
-
814  if (output_encrypted_sample) {
-
815  media_sample_->set_data(sample_data_.data(), sample_data_.size());
-
816  media_sample_->set_is_encrypted(true);
-
817  } else {
-
818  if ((prev_pes_stream_id_ & kPesStreamIdVideoMask) == kPesStreamIdVideo) {
-
819  // Convert video stream to unit stream and get config.
-
820  std::vector<uint8_t> nal_unit_stream;
-
821  if (!byte_to_unit_stream_converter_.ConvertByteStreamToNalUnitStream(
-
822  sample_data_.data(), sample_data_.size(), &nal_unit_stream)) {
-
823  LOG(ERROR) << "Could not convert h.264 byte stream sample";
-
824  return false;
-
825  }
-
826  media_sample_->set_data(nal_unit_stream.data(), nal_unit_stream.size());
-
827  if (!is_initialized_) {
-
828  // Set extra data for video stream from AVC Decoder Config Record.
-
829  // Also, set codec string from the AVC Decoder Config Record.
-
830  std::vector<uint8_t> decoder_config_record;
-
831  byte_to_unit_stream_converter_.GetDecoderConfigurationRecord(
-
832  &decoder_config_record);
-
833  for (uint32_t i = 0; i < stream_infos_.size(); i++) {
-
834  if (stream_infos_[i]->stream_type() == kStreamVideo &&
-
835  stream_infos_[i]->codec_string().empty()) {
-
836  const std::vector<uint8_t>* stream_config;
-
837  if (stream_infos_[i]->codec_config().empty()) {
-
838  // Decoder config record not available for stream. Use the one
-
839  // computed from the first video stream.
-
840  stream_infos_[i]->set_codec_config(decoder_config_record);
-
841  stream_config = &decoder_config_record;
-
842  } else {
-
843  // Use stream-specific config record.
-
844  stream_config = &stream_infos_[i]->codec_config();
-
845  }
-
846  DCHECK(stream_config);
-
847 
-
848  VideoStreamInfo* video_stream_info =
-
849  reinterpret_cast<VideoStreamInfo*>(stream_infos_[i].get());
-
850  AVCDecoderConfigurationRecord avc_config;
-
851  if (!avc_config.Parse(*stream_config)) {
-
852  LOG(WARNING) << "Failed to parse AVCDecoderConfigurationRecord. "
-
853  "Using computed configuration record instead.";
-
854  video_stream_info->set_codec_config(decoder_config_record);
-
855  if (!avc_config.Parse(decoder_config_record)) {
-
856  LOG(ERROR) << "Failed to parse AVCDecoderConfigurationRecord.";
-
857  return false;
-
858  }
-
859  }
-
860  video_stream_info->set_codec_string(avc_config.GetCodecString());
-
861 
-
862  if (avc_config.pixel_width() != video_stream_info->pixel_width() ||
-
863  avc_config.pixel_height() !=
-
864  video_stream_info->pixel_height()) {
-
865  LOG_IF(WARNING, video_stream_info->pixel_width() != 0 ||
-
866  video_stream_info->pixel_height() != 0)
-
867  << "Pixel aspect ratio in WVM metadata ("
-
868  << video_stream_info->pixel_width() << ","
-
869  << video_stream_info->pixel_height()
-
870  << ") does not match with SAR in "
-
871  "AVCDecoderConfigurationRecord ("
-
872  << avc_config.pixel_width() << ","
-
873  << avc_config.pixel_height()
-
874  << "). Use AVCDecoderConfigurationRecord.";
-
875  video_stream_info->set_pixel_width(avc_config.pixel_width());
-
876  video_stream_info->set_pixel_height(avc_config.pixel_height());
-
877  }
-
878  if (avc_config.coded_width() != video_stream_info->width() ||
-
879  avc_config.coded_height() != video_stream_info->height()) {
-
880  LOG(WARNING) << "Resolution in WVM metadata ("
-
881  << video_stream_info->width() << ","
-
882  << video_stream_info->height()
-
883  << ") does not match with resolution in "
-
884  "AVCDecoderConfigurationRecord ("
-
885  << avc_config.coded_width() << ","
-
886  << avc_config.coded_height()
-
887  << "). Use AVCDecoderConfigurationRecord.";
-
888  video_stream_info->set_width(avc_config.coded_width());
-
889  video_stream_info->set_height(avc_config.coded_height());
-
890  }
-
891  }
-
892  }
-
893  }
-
894  } else if ((prev_pes_stream_id_ & kPesStreamIdAudioMask) ==
-
895  kPesStreamIdAudio) {
-
896  // Set data on the audio stream.
-
897  int frame_size = mp2t::AdtsHeader::GetAdtsFrameSize(sample_data_.data(),
-
898  kAdtsHeaderMinSize);
-
899  mp2t::AdtsHeader adts_header;
-
900  const uint8_t* frame_ptr = sample_data_.data();
-
901  if (!adts_header.Parse(frame_ptr, frame_size)) {
-
902  LOG(ERROR) << "Could not parse ADTS header";
-
903  return false;
-
904  }
-
905  size_t header_size = adts_header.GetAdtsHeaderSize(frame_ptr,
-
906  frame_size);
-
907  media_sample_->set_data(frame_ptr + header_size,
-
908  frame_size - header_size);
-
909  if (!is_initialized_) {
-
910  for (uint32_t i = 0; i < stream_infos_.size(); i++) {
-
911  if (stream_infos_[i]->stream_type() == kStreamAudio &&
-
912  stream_infos_[i]->codec_string().empty()) {
-
913  AudioStreamInfo* audio_stream_info =
-
914  reinterpret_cast<AudioStreamInfo*>(stream_infos_[i].get());
-
915  if (audio_stream_info->codec_config().empty()) {
-
916  // Set AudioStreamInfo fields using information from the ADTS
-
917  // header.
-
918  audio_stream_info->set_sampling_frequency(
-
919  adts_header.GetSamplingFrequency());
-
920  std::vector<uint8_t> audio_specific_config;
-
921  if (!adts_header.GetAudioSpecificConfig(&audio_specific_config)) {
-
922  LOG(ERROR) << "Could not compute AACaudiospecificconfig";
-
923  return false;
-
924  }
-
925  audio_stream_info->set_codec_config(audio_specific_config);
-
926  audio_stream_info->set_codec_string(
- -
928  kCodecAAC, adts_header.GetObjectType()));
-
929  } else {
-
930  // Set AudioStreamInfo fields using information from the
-
931  // AACAudioSpecificConfig record.
-
932  AACAudioSpecificConfig aac_config;
-
933  if (!aac_config.Parse(stream_infos_[i]->codec_config())) {
-
934  LOG(ERROR) << "Could not parse AACAudioSpecificconfig";
-
935  return false;
-
936  }
-
937  audio_stream_info->set_sampling_frequency(aac_config.frequency());
-
938  audio_stream_info->set_codec_string(
- -
940  kCodecAAC, aac_config.audio_object_type()));
-
941  }
-
942  }
-
943  }
-
944  }
-
945  }
-
946  }
-
947 
-
948  if (!is_initialized_) {
-
949  bool all_streams_have_config = true;
-
950  // Check if all collected stream infos have codec_config set.
-
951  for (uint32_t i = 0; i < stream_infos_.size(); i++) {
-
952  if (stream_infos_[i]->codec_string().empty()) {
-
953  all_streams_have_config = false;
-
954  break;
-
955  }
-
956  }
-
957  if (all_streams_have_config) {
-
958  init_cb_.Run(stream_infos_);
-
959  is_initialized_ = true;
-
960  }
-
961  }
-
962 
-
963  DCHECK_GT(media_sample_->data_size(), 0UL);
-
964  std::string key = base::UintToString(current_program_id_).append(":")
-
965  .append(base::UintToString(prev_pes_stream_id_));
-
966  std::map<std::string, uint32_t>::iterator it =
-
967  program_demux_stream_map_.find(key);
-
968  if (it == program_demux_stream_map_.end()) {
-
969  // TODO(ramjic): Log error message here and in other error cases through
-
970  // this method.
-
971  return false;
-
972  }
-
973  DemuxStreamIdMediaSample demux_stream_media_sample;
-
974  demux_stream_media_sample.parsed_audio_or_video_stream_id =
-
975  prev_pes_stream_id_;
-
976  demux_stream_media_sample.demux_stream_id = (*it).second;
-
977  demux_stream_media_sample.media_sample = media_sample_;
-
978  // Check if sample can be emitted.
-
979  if (!is_initialized_) {
-
980  media_sample_queue_.push_back(demux_stream_media_sample);
-
981  } else {
-
982  // flush the sample queue and emit all queued samples.
-
983  while (!media_sample_queue_.empty()) {
-
984  if (!EmitPendingSamples())
-
985  return false;
-
986  }
-
987  // Emit current sample.
-
988  if (!EmitSample(prev_pes_stream_id_, (*it).second, media_sample_, false))
-
989  return false;
-
990  }
-
991  return true;
-
992 }
-
993 
-
994 bool WvmMediaParser::EmitSample(uint32_t parsed_audio_or_video_stream_id,
-
995  uint32_t stream_id,
-
996  scoped_refptr<MediaSample>& new_sample,
-
997  bool isLastSample) {
-
998  DCHECK(new_sample);
-
999  if (isLastSample) {
-
1000  if ((parsed_audio_or_video_stream_id & kPesStreamIdVideoMask) ==
-
1001  kPesStreamIdVideo) {
-
1002  new_sample->set_duration(prev_media_sample_data_.video_sample_duration);
-
1003  } else if ((parsed_audio_or_video_stream_id & kPesStreamIdAudioMask) ==
-
1004  kPesStreamIdAudio) {
-
1005  new_sample->set_duration(prev_media_sample_data_.audio_sample_duration);
-
1006  }
-
1007  if (!new_sample_cb_.Run(stream_id, new_sample)) {
-
1008  LOG(ERROR) << "Failed to process the last sample.";
-
1009  return false;
-
1010  }
-
1011  return true;
-
1012  }
-
1013 
-
1014  // Cannot emit current sample. Compute duration first and then,
-
1015  // emit previous sample.
-
1016  if ((parsed_audio_or_video_stream_id & kPesStreamIdVideoMask) ==
-
1017  kPesStreamIdVideo) {
-
1018  if (prev_media_sample_data_.video_sample == NULL) {
-
1019  prev_media_sample_data_.video_sample = new_sample;
-
1020  prev_media_sample_data_.video_stream_id = stream_id;
-
1021  return true;
-
1022  }
-
1023  prev_media_sample_data_.video_sample->set_duration(
-
1024  new_sample->dts() - prev_media_sample_data_.video_sample->dts());
-
1025  prev_media_sample_data_.video_sample_duration =
-
1026  prev_media_sample_data_.video_sample->duration();
-
1027  if (!new_sample_cb_.Run(prev_media_sample_data_.video_stream_id,
-
1028  prev_media_sample_data_.video_sample)) {
-
1029  LOG(ERROR) << "Failed to process the video sample.";
-
1030  return false;
-
1031  }
-
1032  prev_media_sample_data_.video_sample = new_sample;
-
1033  prev_media_sample_data_.video_stream_id = stream_id;
-
1034  } else if ((parsed_audio_or_video_stream_id & kPesStreamIdAudioMask) ==
-
1035  kPesStreamIdAudio) {
-
1036  if (prev_media_sample_data_.audio_sample == NULL) {
-
1037  prev_media_sample_data_.audio_sample = new_sample;
-
1038  prev_media_sample_data_.audio_stream_id = stream_id;
-
1039  return true;
-
1040  }
-
1041  prev_media_sample_data_.audio_sample->set_duration(
-
1042  new_sample->dts() - prev_media_sample_data_.audio_sample->dts());
-
1043  prev_media_sample_data_.audio_sample_duration =
-
1044  prev_media_sample_data_.audio_sample->duration();
-
1045  if (!new_sample_cb_.Run(prev_media_sample_data_.audio_stream_id,
-
1046  prev_media_sample_data_.audio_sample)) {
-
1047  LOG(ERROR) << "Failed to process the audio sample.";
-
1048  return false;
-
1049  }
-
1050  prev_media_sample_data_.audio_sample = new_sample;
-
1051  prev_media_sample_data_.audio_stream_id = stream_id;
-
1052  }
-
1053  return true;
-
1054 }
-
1055 
-
1056 bool WvmMediaParser::GetAssetKey(const uint32_t asset_id,
-
1057  EncryptionKey* encryption_key) {
-
1058  DCHECK(decryption_key_source_);
-
1059  Status status = decryption_key_source_->FetchKeys(asset_id);
-
1060  if (!status.ok()) {
-
1061  LOG(ERROR) << "Fetch Key(s) failed for AssetID = " << asset_id
-
1062  << ", error = " << status;
-
1063  return false;
-
1064  }
-
1065 
-
1066  status = decryption_key_source_->GetKey(KeySource::TRACK_TYPE_HD,
-
1067  encryption_key);
-
1068  if (!status.ok()) {
-
1069  LOG(ERROR) << "Fetch Key(s) failed for AssetID = " << asset_id
-
1070  << ", error = " << status;
-
1071  return false;
-
1072  }
-
1073 
-
1074  return true;
-
1075 }
-
1076 
-
1077 bool WvmMediaParser::ProcessEcm() {
-
1078  // An error will be returned later if the samples need to be decrypted.
-
1079  if (!decryption_key_source_)
-
1080  return true;
-
1081 
-
1082  if (current_program_id_ > 0) {
-
1083  return true;
-
1084  }
-
1085  if (ecm_.size() != kEcmSizeBytes) {
-
1086  LOG(ERROR) << "Unexpected ECM size = " << ecm_.size()
-
1087  << ", expected size = " << kEcmSizeBytes;
-
1088  return false;
-
1089  }
-
1090  const uint8_t* ecm_data = ecm_.data();
-
1091  DCHECK(ecm_data);
-
1092  ecm_data += sizeof(uint32_t); // old version field - skip.
-
1093  ecm_data += sizeof(uint32_t); // clear lead - skip.
-
1094  ecm_data += sizeof(uint32_t); // system id(includes ECM version) - skip.
-
1095  uint32_t asset_id = ntohlFromBuffer(ecm_data);
-
1096  if (asset_id == 0) {
-
1097  LOG(ERROR) << "AssetID in ECM is not valid.";
-
1098  return false;
-
1099  }
-
1100  ecm_data += sizeof(uint32_t); // asset_id.
-
1101  EncryptionKey encryption_key;
-
1102  if (!GetAssetKey(asset_id, &encryption_key)) {
-
1103  return false;
-
1104  }
-
1105  if (encryption_key.key.size() < kAssetKeySizeBytes) {
-
1106  LOG(ERROR) << "Asset Key size of " << encryption_key.key.size()
-
1107  << " for AssetID = " << asset_id
-
1108  << " is less than minimum asset key size.";
-
1109  return false;
-
1110  }
-
1111  // Legacy WVM content may have asset keys > 16 bytes.
-
1112  // Use only the first 16 bytes of the asset key to get
-
1113  // the content key.
-
1114  std::vector<uint8_t> asset_key(
-
1115  encryption_key.key.begin(),
-
1116  encryption_key.key.begin() + kAssetKeySizeBytes);
-
1117  // WVM format always uses all zero IV.
-
1118  std::vector<uint8_t> zero_iv(kInitializationVectorSizeBytes, 0);
-
1119  AesCbcDecryptor asset_decryptor(kCtsPadding, AesCryptor::kUseConstantIv);
-
1120  if (!asset_decryptor.InitializeWithIv(asset_key, zero_iv)) {
-
1121  LOG(ERROR) << "Failed to initialize asset_decryptor.";
-
1122  return false;
-
1123  }
-
1124 
-
1125  const size_t content_key_buffer_size =
-
1126  kEcmFlagsSizeBytes + kEcmContentKeySizeBytes +
-
1127  kEcmPaddingSizeBytes; // flags + contentKey + padding.
-
1128  std::vector<uint8_t> content_key_buffer(content_key_buffer_size);
-
1129  CHECK(asset_decryptor.Crypt(ecm_data, content_key_buffer_size,
-
1130  content_key_buffer.data()));
-
1131 
-
1132  std::vector<uint8_t> decrypted_content_key_vec(
-
1133  content_key_buffer.begin() + 4,
-
1134  content_key_buffer.begin() + 20);
-
1135  scoped_ptr<AesCbcDecryptor> content_decryptor(
-
1136  new AesCbcDecryptor(kCtsPadding, AesCryptor::kUseConstantIv));
-
1137  if (!content_decryptor->InitializeWithIv(decrypted_content_key_vec,
-
1138  zero_iv)) {
-
1139  LOG(ERROR) << "Failed to initialize content decryptor.";
-
1140  return false;
-
1141  }
-
1142 
-
1143  content_decryptor_ = content_decryptor.Pass();
-
1144  return true;
-
1145 }
-
1146 
-
1147 DemuxStreamIdMediaSample::DemuxStreamIdMediaSample() :
-
1148  demux_stream_id(0),
-
1149  parsed_audio_or_video_stream_id(0) {}
-
1150 
-
1151 DemuxStreamIdMediaSample::~DemuxStreamIdMediaSample() {}
+
749  base::UintToString(
+
750  video_pes_stream_id
+
751  ? video_pes_stream_id
+
752  : kDefaultVideoStreamId)] =
+
753  stream_id_count_++;
+
754  }
+
755  if (has_audio) {
+
756  const Codec audio_codec = kCodecAAC;
+
757  // TODO(beil): Pass in max and average bitrate in wvm container.
+
758  stream_infos_.push_back(new AudioStreamInfo(
+
759  stream_id_count_, time_scale, track_duration, audio_codec,
+
760  std::string(), audio_codec_config.data(), audio_codec_config.size(),
+
761  kAacSampleSizeBits, num_channels, sampling_frequency,
+
762  0 /* seek preroll */, 0 /* codec delay */, 0 /* max bitrate */,
+
763  0 /* avg bitrate */, std::string(), true));
+
764  program_demux_stream_map_[base::UintToString(index_program_id_) + ":" +
+
765  base::UintToString(
+
766  audio_pes_stream_id
+
767  ? audio_pes_stream_id
+
768  : kDefaultAudioStreamId)] =
+
769  stream_id_count_++;
+
770  }
+
771  }
+
772 
+
773  index_program_id_++;
+
774  index_data_.clear();
+
775  return true;
+
776 }
+
777 
+
778 bool WvmMediaParser::DemuxNextPes(bool is_program_end) {
+
779  bool output_encrypted_sample = false;
+
780  if (!sample_data_.empty() && (prev_pes_flags_1_ & kScramblingBitsMask)) {
+
781  // Decrypt crypto unit.
+
782  if (!content_decryptor_) {
+
783  output_encrypted_sample = true;
+
784  } else {
+
785  content_decryptor_->Crypt(&sample_data_[crypto_unit_start_pos_],
+
786  sample_data_.size() - crypto_unit_start_pos_,
+
787  &sample_data_[crypto_unit_start_pos_]);
+
788  }
+
789  }
+
790  // Demux media sample if we are at program end or if we are not at a
+
791  // continuation PES.
+
792  if ((pes_flags_2_ & kPesOptPts) || is_program_end) {
+
793  if (!sample_data_.empty()) {
+
794  if (!Output(output_encrypted_sample)) {
+
795  return false;
+
796  }
+
797  }
+
798  StartMediaSampleDemux();
+
799  }
+
800 
+
801  crypto_unit_start_pos_ = sample_data_.size();
+
802  return true;
+
803 }
+
804 
+
805 void WvmMediaParser::StartMediaSampleDemux() {
+
806  bool is_key_frame = ((pes_flags_1_ & kPesOptAlign) != 0);
+
807  media_sample_ = MediaSample::CreateEmptyMediaSample();
+
808  media_sample_->set_dts(dts_);
+
809  media_sample_->set_pts(pts_);
+
810  media_sample_->set_is_key_frame(is_key_frame);
+
811 
+
812  sample_data_.clear();
+
813 }
+
814 
+
815 bool WvmMediaParser::Output(bool output_encrypted_sample) {
+
816  if (output_encrypted_sample) {
+
817  media_sample_->set_data(sample_data_.data(), sample_data_.size());
+
818  media_sample_->set_is_encrypted(true);
+
819  } else {
+
820  if ((prev_pes_stream_id_ & kPesStreamIdVideoMask) == kPesStreamIdVideo) {
+
821  // Convert video stream to unit stream and get config.
+
822  std::vector<uint8_t> nal_unit_stream;
+
823  if (!byte_to_unit_stream_converter_.ConvertByteStreamToNalUnitStream(
+
824  sample_data_.data(), sample_data_.size(), &nal_unit_stream)) {
+
825  LOG(ERROR) << "Could not convert h.264 byte stream sample";
+
826  return false;
+
827  }
+
828  media_sample_->set_data(nal_unit_stream.data(), nal_unit_stream.size());
+
829  if (!is_initialized_) {
+
830  // Set extra data for video stream from AVC Decoder Config Record.
+
831  // Also, set codec string from the AVC Decoder Config Record.
+
832  std::vector<uint8_t> decoder_config_record;
+
833  byte_to_unit_stream_converter_.GetDecoderConfigurationRecord(
+
834  &decoder_config_record);
+
835  for (uint32_t i = 0; i < stream_infos_.size(); i++) {
+
836  if (stream_infos_[i]->stream_type() == kStreamVideo &&
+
837  stream_infos_[i]->codec_string().empty()) {
+
838  const std::vector<uint8_t>* stream_config;
+
839  if (stream_infos_[i]->codec_config().empty()) {
+
840  // Decoder config record not available for stream. Use the one
+
841  // computed from the first video stream.
+
842  stream_infos_[i]->set_codec_config(decoder_config_record);
+
843  stream_config = &decoder_config_record;
+
844  } else {
+
845  // Use stream-specific config record.
+
846  stream_config = &stream_infos_[i]->codec_config();
+
847  }
+
848  DCHECK(stream_config);
+
849 
+
850  VideoStreamInfo* video_stream_info =
+
851  reinterpret_cast<VideoStreamInfo*>(stream_infos_[i].get());
+
852  AVCDecoderConfigurationRecord avc_config;
+
853  if (!avc_config.Parse(*stream_config)) {
+
854  LOG(WARNING) << "Failed to parse AVCDecoderConfigurationRecord. "
+
855  "Using computed configuration record instead.";
+
856  video_stream_info->set_codec_config(decoder_config_record);
+
857  if (!avc_config.Parse(decoder_config_record)) {
+
858  LOG(ERROR) << "Failed to parse AVCDecoderConfigurationRecord.";
+
859  return false;
+
860  }
+
861  }
+
862  video_stream_info->set_codec_string(avc_config.GetCodecString());
+
863 
+
864  if (avc_config.pixel_width() != video_stream_info->pixel_width() ||
+
865  avc_config.pixel_height() !=
+
866  video_stream_info->pixel_height()) {
+
867  LOG_IF(WARNING, video_stream_info->pixel_width() != 0 ||
+
868  video_stream_info->pixel_height() != 0)
+
869  << "Pixel aspect ratio in WVM metadata ("
+
870  << video_stream_info->pixel_width() << ","
+
871  << video_stream_info->pixel_height()
+
872  << ") does not match with SAR in "
+
873  "AVCDecoderConfigurationRecord ("
+
874  << avc_config.pixel_width() << ","
+
875  << avc_config.pixel_height()
+
876  << "). Use AVCDecoderConfigurationRecord.";
+
877  video_stream_info->set_pixel_width(avc_config.pixel_width());
+
878  video_stream_info->set_pixel_height(avc_config.pixel_height());
+
879  }
+
880  if (avc_config.coded_width() != video_stream_info->width() ||
+
881  avc_config.coded_height() != video_stream_info->height()) {
+
882  LOG(WARNING) << "Resolution in WVM metadata ("
+
883  << video_stream_info->width() << ","
+
884  << video_stream_info->height()
+
885  << ") does not match with resolution in "
+
886  "AVCDecoderConfigurationRecord ("
+
887  << avc_config.coded_width() << ","
+
888  << avc_config.coded_height()
+
889  << "). Use AVCDecoderConfigurationRecord.";
+
890  video_stream_info->set_width(avc_config.coded_width());
+
891  video_stream_info->set_height(avc_config.coded_height());
+
892  }
+
893  }
+
894  }
+
895  }
+
896  } else if ((prev_pes_stream_id_ & kPesStreamIdAudioMask) ==
+
897  kPesStreamIdAudio) {
+
898  // Set data on the audio stream.
+
899  int frame_size = mp2t::AdtsHeader::GetAdtsFrameSize(sample_data_.data(),
+
900  kAdtsHeaderMinSize);
+
901  mp2t::AdtsHeader adts_header;
+
902  const uint8_t* frame_ptr = sample_data_.data();
+
903  if (!adts_header.Parse(frame_ptr, frame_size)) {
+
904  LOG(ERROR) << "Could not parse ADTS header";
+
905  return false;
+
906  }
+
907  size_t header_size = adts_header.GetAdtsHeaderSize(frame_ptr,
+
908  frame_size);
+
909  media_sample_->set_data(frame_ptr + header_size,
+
910  frame_size - header_size);
+
911  if (!is_initialized_) {
+
912  for (uint32_t i = 0; i < stream_infos_.size(); i++) {
+
913  if (stream_infos_[i]->stream_type() == kStreamAudio &&
+
914  stream_infos_[i]->codec_string().empty()) {
+
915  AudioStreamInfo* audio_stream_info =
+
916  reinterpret_cast<AudioStreamInfo*>(stream_infos_[i].get());
+
917  if (audio_stream_info->codec_config().empty()) {
+
918  // Set AudioStreamInfo fields using information from the ADTS
+
919  // header.
+
920  audio_stream_info->set_sampling_frequency(
+
921  adts_header.GetSamplingFrequency());
+
922  std::vector<uint8_t> audio_specific_config;
+
923  if (!adts_header.GetAudioSpecificConfig(&audio_specific_config)) {
+
924  LOG(ERROR) << "Could not compute AACaudiospecificconfig";
+
925  return false;
+
926  }
+
927  audio_stream_info->set_codec_config(audio_specific_config);
+
928  audio_stream_info->set_codec_string(
+ +
930  kCodecAAC, adts_header.GetObjectType()));
+
931  } else {
+
932  // Set AudioStreamInfo fields using information from the
+
933  // AACAudioSpecificConfig record.
+
934  AACAudioSpecificConfig aac_config;
+
935  if (!aac_config.Parse(stream_infos_[i]->codec_config())) {
+
936  LOG(ERROR) << "Could not parse AACAudioSpecificconfig";
+
937  return false;
+
938  }
+
939  audio_stream_info->set_sampling_frequency(aac_config.frequency());
+
940  audio_stream_info->set_codec_string(
+ +
942  kCodecAAC, aac_config.audio_object_type()));
+
943  }
+
944  }
+
945  }
+
946  }
+
947  }
+
948  }
+
949 
+
950  if (!is_initialized_) {
+
951  bool all_streams_have_config = true;
+
952  // Check if all collected stream infos have codec_config set.
+
953  for (uint32_t i = 0; i < stream_infos_.size(); i++) {
+
954  if (stream_infos_[i]->codec_string().empty()) {
+
955  all_streams_have_config = false;
+
956  break;
+
957  }
+
958  }
+
959  if (all_streams_have_config) {
+
960  init_cb_.Run(stream_infos_);
+
961  is_initialized_ = true;
+
962  }
+
963  }
+
964 
+
965  DCHECK_GT(media_sample_->data_size(), 0UL);
+
966  std::string key = base::UintToString(current_program_id_).append(":")
+
967  .append(base::UintToString(prev_pes_stream_id_));
+
968  std::map<std::string, uint32_t>::iterator it =
+
969  program_demux_stream_map_.find(key);
+
970  if (it == program_demux_stream_map_.end()) {
+
971  // TODO(ramjic): Log error message here and in other error cases through
+
972  // this method.
+
973  return false;
+
974  }
+
975  DemuxStreamIdMediaSample demux_stream_media_sample;
+
976  demux_stream_media_sample.parsed_audio_or_video_stream_id =
+
977  prev_pes_stream_id_;
+
978  demux_stream_media_sample.demux_stream_id = (*it).second;
+
979  demux_stream_media_sample.media_sample = media_sample_;
+
980  // Check if sample can be emitted.
+
981  if (!is_initialized_) {
+
982  media_sample_queue_.push_back(demux_stream_media_sample);
+
983  } else {
+
984  // flush the sample queue and emit all queued samples.
+
985  while (!media_sample_queue_.empty()) {
+
986  if (!EmitPendingSamples())
+
987  return false;
+
988  }
+
989  // Emit current sample.
+
990  if (!EmitSample(prev_pes_stream_id_, (*it).second, media_sample_, false))
+
991  return false;
+
992  }
+
993  return true;
+
994 }
+
995 
+
996 bool WvmMediaParser::EmitSample(uint32_t parsed_audio_or_video_stream_id,
+
997  uint32_t stream_id,
+
998  scoped_refptr<MediaSample>& new_sample,
+
999  bool isLastSample) {
+
1000  DCHECK(new_sample);
+
1001  if (isLastSample) {
+
1002  if ((parsed_audio_or_video_stream_id & kPesStreamIdVideoMask) ==
+
1003  kPesStreamIdVideo) {
+
1004  new_sample->set_duration(prev_media_sample_data_.video_sample_duration);
+
1005  } else if ((parsed_audio_or_video_stream_id & kPesStreamIdAudioMask) ==
+
1006  kPesStreamIdAudio) {
+
1007  new_sample->set_duration(prev_media_sample_data_.audio_sample_duration);
+
1008  }
+
1009  if (!new_sample_cb_.Run(stream_id, new_sample)) {
+
1010  LOG(ERROR) << "Failed to process the last sample.";
+
1011  return false;
+
1012  }
+
1013  return true;
+
1014  }
+
1015 
+
1016  // Cannot emit current sample. Compute duration first and then,
+
1017  // emit previous sample.
+
1018  if ((parsed_audio_or_video_stream_id & kPesStreamIdVideoMask) ==
+
1019  kPesStreamIdVideo) {
+
1020  if (prev_media_sample_data_.video_sample == NULL) {
+
1021  prev_media_sample_data_.video_sample = new_sample;
+
1022  prev_media_sample_data_.video_stream_id = stream_id;
+
1023  return true;
+
1024  }
+
1025  prev_media_sample_data_.video_sample->set_duration(
+
1026  new_sample->dts() - prev_media_sample_data_.video_sample->dts());
+
1027  prev_media_sample_data_.video_sample_duration =
+
1028  prev_media_sample_data_.video_sample->duration();
+
1029  if (!new_sample_cb_.Run(prev_media_sample_data_.video_stream_id,
+
1030  prev_media_sample_data_.video_sample)) {
+
1031  LOG(ERROR) << "Failed to process the video sample.";
+
1032  return false;
+
1033  }
+
1034  prev_media_sample_data_.video_sample = new_sample;
+
1035  prev_media_sample_data_.video_stream_id = stream_id;
+
1036  } else if ((parsed_audio_or_video_stream_id & kPesStreamIdAudioMask) ==
+
1037  kPesStreamIdAudio) {
+
1038  if (prev_media_sample_data_.audio_sample == NULL) {
+
1039  prev_media_sample_data_.audio_sample = new_sample;
+
1040  prev_media_sample_data_.audio_stream_id = stream_id;
+
1041  return true;
+
1042  }
+
1043  prev_media_sample_data_.audio_sample->set_duration(
+
1044  new_sample->dts() - prev_media_sample_data_.audio_sample->dts());
+
1045  prev_media_sample_data_.audio_sample_duration =
+
1046  prev_media_sample_data_.audio_sample->duration();
+
1047  if (!new_sample_cb_.Run(prev_media_sample_data_.audio_stream_id,
+
1048  prev_media_sample_data_.audio_sample)) {
+
1049  LOG(ERROR) << "Failed to process the audio sample.";
+
1050  return false;
+
1051  }
+
1052  prev_media_sample_data_.audio_sample = new_sample;
+
1053  prev_media_sample_data_.audio_stream_id = stream_id;
+
1054  }
+
1055  return true;
+
1056 }
+
1057 
+
1058 bool WvmMediaParser::GetAssetKey(const uint32_t asset_id,
+
1059  EncryptionKey* encryption_key) {
+
1060  DCHECK(decryption_key_source_);
+
1061  Status status = decryption_key_source_->FetchKeys(asset_id);
+
1062  if (!status.ok()) {
+
1063  LOG(ERROR) << "Fetch Key(s) failed for AssetID = " << asset_id
+
1064  << ", error = " << status;
+
1065  return false;
+
1066  }
+
1067 
+
1068  status = decryption_key_source_->GetKey(KeySource::TRACK_TYPE_HD,
+
1069  encryption_key);
+
1070  if (!status.ok()) {
+
1071  LOG(ERROR) << "Fetch Key(s) failed for AssetID = " << asset_id
+
1072  << ", error = " << status;
+
1073  return false;
+
1074  }
+
1075 
+
1076  return true;
+
1077 }
+
1078 
+
1079 bool WvmMediaParser::ProcessEcm() {
+
1080  // An error will be returned later if the samples need to be decrypted.
+
1081  if (!decryption_key_source_)
+
1082  return true;
+
1083 
+
1084  if (current_program_id_ > 0) {
+
1085  return true;
+
1086  }
+
1087  if (ecm_.size() != kEcmSizeBytes) {
+
1088  LOG(ERROR) << "Unexpected ECM size = " << ecm_.size()
+
1089  << ", expected size = " << kEcmSizeBytes;
+
1090  return false;
+
1091  }
+
1092  const uint8_t* ecm_data = ecm_.data();
+
1093  DCHECK(ecm_data);
+
1094  ecm_data += sizeof(uint32_t); // old version field - skip.
+
1095  ecm_data += sizeof(uint32_t); // clear lead - skip.
+
1096  ecm_data += sizeof(uint32_t); // system id(includes ECM version) - skip.
+
1097  uint32_t asset_id = ntohlFromBuffer(ecm_data);
+
1098  if (asset_id == 0) {
+
1099  LOG(ERROR) << "AssetID in ECM is not valid.";
+
1100  return false;
+
1101  }
+
1102  ecm_data += sizeof(uint32_t); // asset_id.
+
1103  EncryptionKey encryption_key;
+
1104  if (!GetAssetKey(asset_id, &encryption_key)) {
+
1105  return false;
+
1106  }
+
1107  if (encryption_key.key.size() < kAssetKeySizeBytes) {
+
1108  LOG(ERROR) << "Asset Key size of " << encryption_key.key.size()
+
1109  << " for AssetID = " << asset_id
+
1110  << " is less than minimum asset key size.";
+
1111  return false;
+
1112  }
+
1113  // Legacy WVM content may have asset keys > 16 bytes.
+
1114  // Use only the first 16 bytes of the asset key to get
+
1115  // the content key.
+
1116  std::vector<uint8_t> asset_key(
+
1117  encryption_key.key.begin(),
+
1118  encryption_key.key.begin() + kAssetKeySizeBytes);
+
1119  // WVM format always uses all zero IV.
+
1120  std::vector<uint8_t> zero_iv(kInitializationVectorSizeBytes, 0);
+
1121  AesCbcDecryptor asset_decryptor(kCtsPadding, AesCryptor::kUseConstantIv);
+
1122  if (!asset_decryptor.InitializeWithIv(asset_key, zero_iv)) {
+
1123  LOG(ERROR) << "Failed to initialize asset_decryptor.";
+
1124  return false;
+
1125  }
+
1126 
+
1127  const size_t content_key_buffer_size =
+
1128  kEcmFlagsSizeBytes + kEcmContentKeySizeBytes +
+
1129  kEcmPaddingSizeBytes; // flags + contentKey + padding.
+
1130  std::vector<uint8_t> content_key_buffer(content_key_buffer_size);
+
1131  CHECK(asset_decryptor.Crypt(ecm_data, content_key_buffer_size,
+
1132  content_key_buffer.data()));
+
1133 
+
1134  std::vector<uint8_t> decrypted_content_key_vec(
+
1135  content_key_buffer.begin() + 4,
+
1136  content_key_buffer.begin() + 20);
+
1137  scoped_ptr<AesCbcDecryptor> content_decryptor(
+
1138  new AesCbcDecryptor(kCtsPadding, AesCryptor::kUseConstantIv));
+
1139  if (!content_decryptor->InitializeWithIv(decrypted_content_key_vec,
+
1140  zero_iv)) {
+
1141  LOG(ERROR) << "Failed to initialize content decryptor.";
+
1142  return false;
+
1143  }
+
1144 
+
1145  content_decryptor_ = content_decryptor.Pass();
+
1146  return true;
+
1147 }
+
1148 
+
1149 DemuxStreamIdMediaSample::DemuxStreamIdMediaSample() :
+
1150  demux_stream_id(0),
+
1151  parsed_audio_or_video_stream_id(0) {}
1152 
-
1153 PrevSampleData::PrevSampleData() {
-
1154  Reset();
-
1155 }
-
1156 
-
1157 PrevSampleData::~PrevSampleData() {}
+
1153 DemuxStreamIdMediaSample::~DemuxStreamIdMediaSample() {}
+
1154 
+
1155 PrevSampleData::PrevSampleData() {
+
1156  Reset();
+
1157 }
1158 
-
1159 void PrevSampleData::Reset() {
-
1160  audio_sample = NULL;
-
1161  video_sample = NULL;
-
1162  audio_stream_id = 0;
-
1163  video_stream_id = 0;
-
1164  audio_sample_duration = 0;
-
1165  video_sample_duration = 0;
-
1166 }
-
1167 
-
1168 } // namespace wvm
-
1169 } // namespace media
-
1170 } // namespace shaka
-
static std::string GetCodecString(AudioCodec codec, uint8_t audio_object_type)
+
1159 PrevSampleData::~PrevSampleData() {}
+
1160 
+
1161 void PrevSampleData::Reset() {
+
1162  audio_sample = NULL;
+
1163  video_sample = NULL;
+
1164  audio_stream_id = 0;
+
1165  video_stream_id = 0;
+
1166  audio_sample_duration = 0;
+
1167  video_sample_duration = 0;
+
1168 }
+
1169 
+
1170 } // namespace wvm
+
1171 } // namespace media
+
1172 } // namespace shaka
static size_t GetAdtsFrameSize(const uint8_t *data, size_t num_bytes)
Definition: adts_header.cc:23
+
static std::string GetCodecString(Codec codec, uint8_t audio_object_type)
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:31
static scoped_refptr< MediaSample > CreateEmptyMediaSample()
Create a MediaSample object with default members.
Definition: media_sample.cc:74
diff --git a/docs/dd/d3b/mp4_2segmenter_8h_source.html b/docs/dd/d3b/mp4_2segmenter_8h_source.html index f37f26a2d6..b4c71b28f2 100644 --- a/docs/dd/d3b/mp4_2segmenter_8h_source.html +++ b/docs/dd/d3b/mp4_2segmenter_8h_source.html @@ -221,7 +221,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d3f/structshaka_1_1media_1_1mp4_1_1SyncSample.html b/docs/dd/d3f/structshaka_1_1media_1_1mp4_1_1SyncSample.html index df9dd864e0..821c25774c 100644 --- a/docs/dd/d3f/structshaka_1_1media_1_1mp4_1_1SyncSample.html +++ b/docs/dd/d3f/structshaka_1_1media_1_1mp4_1_1SyncSample.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/dd/d42/encryptor_8h_source.html b/docs/dd/d42/encryptor_8h_source.html index c0b2a0e51c..a24a68bf5e 100644 --- a/docs/dd/d42/encryptor_8h_source.html +++ b/docs/dd/d42/encryptor_8h_source.html @@ -100,58 +100,65 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
11 #include "packager/base/memory/scoped_ptr.h"
12 #include "packager/media/base/key_source.h"
13 #include "packager/media/base/status.h"
-
14 #include "packager/media/event/muxer_listener.h"
-
15 #include "packager/third_party/libwebm/src/mkvmuxer.hpp"
-
16 
-
17 namespace shaka {
-
18 namespace media {
-
19 
-
20 class AesCtrEncryptor;
-
21 class MediaSample;
-
22 
-
23 namespace webm {
+
14 #include "packager/media/base/stream_info.h"
+
15 #include "packager/media/codecs/vpx_parser.h"
+
16 #include "packager/media/event/muxer_listener.h"
+
17 #include "packager/third_party/libwebm/src/mkvmuxer.hpp"
+
18 
+
19 namespace shaka {
+
20 namespace media {
+
21 
+
22 class AesCtrEncryptor;
+
23 class MediaSample;
24 
-
27 class Encryptor {
-
28  public:
-
29  Encryptor();
-
30  ~Encryptor();
-
31 
-
34  Status Initialize(MuxerListener* muxer_listener,
-
35  KeySource::TrackType track_type,
-
36  KeySource* key_source);
-
37 
-
41  Status AddTrackInfo(mkvmuxer::Track* track);
-
42 
-
46  Status EncryptFrame(scoped_refptr<MediaSample> sample,
-
47  bool encrypt_frame);
-
48 
-
49  private:
-
50  // Create the encryptor for the internal encryption key.
-
51  Status CreateEncryptor(MuxerListener* muxer_listener,
-
52  KeySource::TrackType track_type,
-
53  KeySource* key_source);
-
54 
-
55  private:
-
56  scoped_ptr<EncryptionKey> key_;
-
57  scoped_ptr<AesCtrEncryptor> encryptor_;
-
58 };
-
59 
-
60 } // namespace webm
-
61 } // namespace media
-
62 } // namespace shaka
-
63 
-
64 #endif // MEDIA_FORMATS_WEBM_ENCRYPTOR_H_
-
Status AddTrackInfo(mkvmuxer::Track *track)
Definition: encryptor.cc:62
- -
Status EncryptFrame(scoped_refptr< MediaSample > sample, bool encrypt_frame)
Definition: encryptor.cc:67
-
Status Initialize(MuxerListener *muxer_listener, KeySource::TrackType track_type, KeySource *key_source)
Definition: encryptor.cc:55
+
25 namespace webm {
+
26 
+
29 class Encryptor {
+
30  public:
+
31  Encryptor();
+
32  ~Encryptor();
+
33 
+
36  Status Initialize(MuxerListener* muxer_listener,
+
37  KeySource::TrackType track_type,
+
38  Codec codec,
+
39  KeySource* key_source,
+
40  bool webm_subsample_encryption);
+
41 
+
45  Status AddTrackInfo(mkvmuxer::Track* track);
+
46 
+
50  Status EncryptFrame(scoped_refptr<MediaSample> sample,
+
51  bool encrypt_frame);
+
52 
+
53  private:
+
54  // Create the encryptor for the internal encryption key.
+
55  Status CreateEncryptor(MuxerListener* muxer_listener,
+
56  KeySource::TrackType track_type,
+
57  Codec codec,
+
58  KeySource* key_source,
+
59  bool webm_subsample_encryption);
+
60 
+
61  private:
+
62  scoped_ptr<EncryptionKey> key_;
+
63  scoped_ptr<AesCtrEncryptor> encryptor_;
+
64  scoped_ptr<VPxParser> vpx_parser_;
+
65 };
+
66 
+
67 } // namespace webm
+
68 } // namespace media
+
69 } // namespace shaka
+
70 
+
71 #endif // MEDIA_FORMATS_WEBM_ENCRYPTOR_H_
+
Status AddTrackInfo(mkvmuxer::Track *track)
Definition: encryptor.cc:71
+
Status Initialize(MuxerListener *muxer_listener, KeySource::TrackType track_type, Codec codec, KeySource *key_source, bool webm_subsample_encryption)
Definition: encryptor.cc:61
+ +
Status EncryptFrame(scoped_refptr< MediaSample > sample, bool encrypt_frame)
Definition: encryptor.cc:76
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:31
diff --git a/docs/dd/d46/webm__parser_8h_source.html b/docs/dd/d46/webm__parser_8h_source.html index 2517146c99..6ea32ffdd6 100644 --- a/docs/dd/d46/webm__parser_8h_source.html +++ b/docs/dd/d46/webm__parser_8h_source.html @@ -227,7 +227,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d4d/structshaka_1_1media_1_1mp4_1_1MovieFragment-members.html b/docs/dd/d4d/structshaka_1_1media_1_1mp4_1_1MovieFragment-members.html index 7eab2c9ca8..c55f074560 100644 --- a/docs/dd/d4d/structshaka_1_1media_1_1mp4_1_1MovieFragment-members.html +++ b/docs/dd/d4d/structshaka_1_1media_1_1mp4_1_1MovieFragment-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d53/structshaka_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample-members.html b/docs/dd/d53/structshaka_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample-members.html index f4c634a83d..022239ef43 100644 --- a/docs/dd/d53/structshaka_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample-members.html +++ b/docs/dd/d53/structshaka_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d54/widevine__encryption__flags_8h_source.html b/docs/dd/d54/widevine__encryption__flags_8h_source.html index e4a3fe2b67..1e85ca17b6 100644 --- a/docs/dd/d54/widevine__encryption__flags_8h_source.html +++ b/docs/dd/d54/widevine__encryption__flags_8h_source.html @@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d59/classshaka_1_1media_1_1mp2t_1_1EsParserH265-members.html b/docs/dd/d59/classshaka_1_1media_1_1mp2t_1_1EsParserH265-members.html index b2ffa6ca6b..781092105f 100644 --- a/docs/dd/d59/classshaka_1_1media_1_1mp2t_1_1EsParserH265-members.html +++ b/docs/dd/d59/classshaka_1_1media_1_1mp2t_1_1EsParserH265-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d59/structshaka_1_1media_1_1mp4_1_1SchemeInfo-members.html b/docs/dd/d59/structshaka_1_1media_1_1mp4_1_1SchemeInfo-members.html index c3734eeca2..896c0cebc4 100644 --- a/docs/dd/d59/structshaka_1_1media_1_1mp4_1_1SchemeInfo-members.html +++ b/docs/dd/d59/structshaka_1_1media_1_1mp4_1_1SchemeInfo-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d64/structshaka_1_1media_1_1mp4_1_1SyncSample-members.html b/docs/dd/d64/structshaka_1_1media_1_1mp4_1_1SyncSample-members.html index fbbb93c3a9..1e8322124d 100644 --- a/docs/dd/d64/structshaka_1_1media_1_1mp4_1_1SyncSample-members.html +++ b/docs/dd/d64/structshaka_1_1media_1_1mp4_1_1SyncSample-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d65/vp8__parser_8h_source.html b/docs/dd/d65/vp8__parser_8h_source.html index e4c216522f..574b1d8722 100644 --- a/docs/dd/d65/vp8__parser_8h_source.html +++ b/docs/dd/d65/vp8__parser_8h_source.html @@ -136,7 +136,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d67/h264__byte__to__unit__stream__converter_8cc_source.html b/docs/dd/d67/h264__byte__to__unit__stream__converter_8cc_source.html index 206df63bad..4921036a25 100644 --- a/docs/dd/d67/h264__byte__to__unit__stream__converter_8cc_source.html +++ b/docs/dd/d67/h264__byte__to__unit__stream__converter_8cc_source.html @@ -177,7 +177,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d6e/classshaka_1_1media_1_1H265VideoSliceHeaderParser-members.html b/docs/dd/d6e/classshaka_1_1media_1_1H265VideoSliceHeaderParser-members.html index a453488f03..f33d9a58e8 100644 --- a/docs/dd/d6e/classshaka_1_1media_1_1H265VideoSliceHeaderParser-members.html +++ b/docs/dd/d6e/classshaka_1_1media_1_1H265VideoSliceHeaderParser-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d71/structshaka_1_1media_1_1mp4_1_1PixelAspectRatio.html b/docs/dd/d71/structshaka_1_1media_1_1mp4_1_1PixelAspectRatio.html index 886880eca7..e21e796005 100644 --- a/docs/dd/d71/structshaka_1_1media_1_1mp4_1_1PixelAspectRatio.html +++ b/docs/dd/d71/structshaka_1_1media_1_1mp4_1_1PixelAspectRatio.html @@ -176,7 +176,7 @@ Additional Inherited Members diff --git a/docs/dd/d7a/classshaka_1_1media_1_1MuxerListener.html b/docs/dd/d7a/classshaka_1_1media_1_1MuxerListener.html index 5cb5c4539f..ce43eed010 100644 --- a/docs/dd/d7a/classshaka_1_1media_1_1MuxerListener.html +++ b/docs/dd/d7a/classshaka_1_1media_1_1MuxerListener.html @@ -469,7 +469,7 @@ Public Member Functions diff --git a/docs/dd/d7c/classshaka_1_1media_1_1IoCache.html b/docs/dd/d7c/classshaka_1_1media_1_1IoCache.html index 783e69d191..4b5b1798b8 100644 --- a/docs/dd/d7c/classshaka_1_1media_1_1IoCache.html +++ b/docs/dd/d7c/classshaka_1_1media_1_1IoCache.html @@ -297,7 +297,7 @@ void  diff --git a/docs/dd/d80/media__sample_8h_source.html b/docs/dd/d80/media__sample_8h_source.html index 9f39c39e0c..0558b2f683 100644 --- a/docs/dd/d80/media__sample_8h_source.html +++ b/docs/dd/d80/media__sample_8h_source.html @@ -260,7 +260,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d87/memory__file_8cc_source.html b/docs/dd/d87/memory__file_8cc_source.html index 03640c2749..4186bf169d 100644 --- a/docs/dd/d87/memory__file_8cc_source.html +++ b/docs/dd/d87/memory__file_8cc_source.html @@ -241,7 +241,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d88/pes__packet__generator_8h_source.html b/docs/dd/d88/pes__packet__generator_8h_source.html index b9edcf8cd8..c645a80e59 100644 --- a/docs/dd/d88/pes__packet__generator_8h_source.html +++ b/docs/dd/d88/pes__packet__generator_8h_source.html @@ -164,7 +164,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
97 
98 #endif // PACKAGER_MEDIA_FORMATS_MP2T_PES_PACKET_GENERATOR_H_
-
Abstract class holds stream information.
Definition: stream_info.h:26
+
Abstract class holds stream information.
Definition: stream_info.h:53
virtual scoped_ptr< PesPacket > GetNextPesPacket()
virtual bool SetEncryptionKey(scoped_ptr< EncryptionKey > encryption_key)
@@ -174,7 +174,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d8c/file__test__util_8h_source.html b/docs/dd/d8c/file__test__util_8h_source.html index e9f2972ed6..4bf91b2569 100644 --- a/docs/dd/d8c/file__test__util_8h_source.html +++ b/docs/dd/d8c/file__test__util_8h_source.html @@ -119,7 +119,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d8d/structshaka_1_1media_1_1mp4_1_1SegmentIndex-members.html b/docs/dd/d8d/structshaka_1_1media_1_1mp4_1_1SegmentIndex-members.html index 42eb06a92f..8547e38016 100644 --- a/docs/dd/d8d/structshaka_1_1media_1_1mp4_1_1SegmentIndex-members.html +++ b/docs/dd/d8d/structshaka_1_1media_1_1mp4_1_1SegmentIndex-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d98/ts__packet__writer__util_8h_source.html b/docs/dd/d98/ts__packet__writer__util_8h_source.html index 57a973cca6..87c6db9dd1 100644 --- a/docs/dd/d98/ts__packet__writer__util_8h_source.html +++ b/docs/dd/d98/ts__packet__writer__util_8h_source.html @@ -127,7 +127,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d9a/audio__timestamp__helper_8h_source.html b/docs/dd/d9a/audio__timestamp__helper_8h_source.html index eabc86176b..4e3b538e92 100644 --- a/docs/dd/d9a/audio__timestamp__helper_8h_source.html +++ b/docs/dd/d9a/audio__timestamp__helper_8h_source.html @@ -167,7 +167,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d9b/structshaka_1_1media_1_1mp4_1_1SegmentReference.html b/docs/dd/d9b/structshaka_1_1media_1_1mp4_1_1SegmentReference.html index 0c829d3e83..41a57e2e08 100644 --- a/docs/dd/d9b/structshaka_1_1media_1_1mp4_1_1SegmentReference.html +++ b/docs/dd/d9b/structshaka_1_1media_1_1mp4_1_1SegmentReference.html @@ -143,7 +143,7 @@ uint64_t earliest_presenta diff --git a/docs/dd/d9d/classshaka_1_1MpdNotifier-members.html b/docs/dd/d9d/classshaka_1_1MpdNotifier-members.html index cfccb13967..fc389704c9 100644 --- a/docs/dd/d9d/classshaka_1_1MpdNotifier-members.html +++ b/docs/dd/d9d/classshaka_1_1MpdNotifier-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/da4/structshaka_1_1xml_1_1XmlDeleter.html b/docs/dd/da4/structshaka_1_1xml_1_1XmlDeleter.html index f32ab6be78..6fefee26f3 100644 --- a/docs/dd/da4/structshaka_1_1xml_1_1XmlDeleter.html +++ b/docs/dd/da4/structshaka_1_1xml_1_1XmlDeleter.html @@ -127,7 +127,7 @@ void operator() (xmlCh diff --git a/docs/dd/da5/classshaka_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter.html b/docs/dd/da5/classshaka_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter.html index 7cef4c7351..4777d0acdb 100644 --- a/docs/dd/da5/classshaka_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter.html +++ b/docs/dd/da5/classshaka_1_1media_1_1webm_1_1TwoPassSingleSegmentSegmenter.html @@ -217,7 +217,7 @@ double cluster_length_sec< diff --git a/docs/dd/daa/vod__media__info__dump__muxer__listener_8h_source.html b/docs/dd/daa/vod__media__info__dump__muxer__listener_8h_source.html index 796e13f245..99ceac5394 100644 --- a/docs/dd/daa/vod__media__info__dump__muxer__listener_8h_source.html +++ b/docs/dd/daa/vod__media__info__dump__muxer__listener_8h_source.html @@ -167,7 +167,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
85 } // namespace shaka
86 
87 #endif // MEDIA_EVENT_VOD_MEDIA_INFO_DUMP_MUXER_LISTENER_H_
-
Abstract class holds stream information.
Definition: stream_info.h:26
+
Abstract class holds stream information.
Definition: stream_info.h:53
void OnSampleDurationReady(uint32_t sample_duration) override
void OnNewSegment(const std::string &file_name, uint64_t start_time, uint64_t duration, uint64_t segment_file_size) override
@@ -181,7 +181,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dab/webm__muxer_8h_source.html b/docs/dd/dab/webm__muxer_8h_source.html index 8e069d632d..85949f2450 100644 --- a/docs/dd/dab/webm__muxer_8h_source.html +++ b/docs/dd/dab/webm__muxer_8h_source.html @@ -138,7 +138,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dae/structshaka_1_1media_1_1mp4_1_1WebVTTSourceLabelBox-members.html b/docs/dd/dae/structshaka_1_1media_1_1mp4_1_1WebVTTSourceLabelBox-members.html index 1a8c6354ca..bf9a5d05dd 100644 --- a/docs/dd/dae/structshaka_1_1media_1_1mp4_1_1WebVTTSourceLabelBox-members.html +++ b/docs/dd/dae/structshaka_1_1media_1_1mp4_1_1WebVTTSourceLabelBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/db0/classshaka_1_1media_1_1WebMAudioClient-members.html b/docs/dd/db0/classshaka_1_1media_1_1WebMAudioClient-members.html index c47ac9e129..67a6c542bb 100644 --- a/docs/dd/db0/classshaka_1_1media_1_1WebMAudioClient-members.html +++ b/docs/dd/db0/classshaka_1_1media_1_1WebMAudioClient-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/db3/structshaka_1_1media_1_1mp4_1_1SampleTable-members.html b/docs/dd/db3/structshaka_1_1media_1_1mp4_1_1SampleTable-members.html index 5bb1dfc230..e301fb7f34 100644 --- a/docs/dd/db3/structshaka_1_1media_1_1mp4_1_1SampleTable-members.html +++ b/docs/dd/db3/structshaka_1_1media_1_1mp4_1_1SampleTable-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/db9/classshaka_1_1xml_1_1RepresentationBaseXmlNode.html b/docs/dd/db9/classshaka_1_1xml_1_1RepresentationBaseXmlNode.html index d4b430a88c..db141d1b4a 100644 --- a/docs/dd/db9/classshaka_1_1xml_1_1RepresentationBaseXmlNode.html +++ b/docs/dd/db9/classshaka_1_1xml_1_1RepresentationBaseXmlNode.html @@ -156,7 +156,7 @@ Protected Member Functions diff --git a/docs/dd/dbc/buffer__reader_8cc_source.html b/docs/dd/dbc/buffer__reader_8cc_source.html index 58073e7dc8..55f3c65ba0 100644 --- a/docs/dd/dbc/buffer__reader_8cc_source.html +++ b/docs/dd/dbc/buffer__reader_8cc_source.html @@ -196,7 +196,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dbd/structshaka_1_1media_1_1EncryptionKey.html b/docs/dd/dbd/structshaka_1_1media_1_1EncryptionKey.html index 25521d1fcc..2e8e38e02b 100644 --- a/docs/dd/dbd/structshaka_1_1media_1_1EncryptionKey.html +++ b/docs/dd/dbd/structshaka_1_1media_1_1EncryptionKey.html @@ -120,7 +120,7 @@ std::vector< uint8_t >  diff --git a/docs/dd/dbd/structshaka_1_1media_1_1mp4_1_1TrackEncryption-members.html b/docs/dd/dbd/structshaka_1_1media_1_1mp4_1_1TrackEncryption-members.html index 0a5a5d83ac..3389a5e153 100644 --- a/docs/dd/dbd/structshaka_1_1media_1_1mp4_1_1TrackEncryption-members.html +++ b/docs/dd/dbd/structshaka_1_1media_1_1mp4_1_1TrackEncryption-members.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dbf/webm__webvtt__parser_8h_source.html b/docs/dd/dbf/webm__webvtt__parser_8h_source.html index d85fe5df06..b3111cb5bf 100644 --- a/docs/dd/dbf/webm__webvtt__parser_8h_source.html +++ b/docs/dd/dbf/webm__webvtt__parser_8h_source.html @@ -144,7 +144,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dc1/structshaka_1_1media_1_1mp4_1_1FullBox.html b/docs/dd/dc1/structshaka_1_1media_1_1mp4_1_1FullBox.html index 8726ec4e95..8726991c86 100644 --- a/docs/dd/dc1/structshaka_1_1media_1_1mp4_1_1FullBox.html +++ b/docs/dd/dc1/structshaka_1_1media_1_1mp4_1_1FullBox.html @@ -245,7 +245,7 @@ Protected Member Functions diff --git a/docs/dd/dc4/classshaka_1_1media_1_1ProducerConsumerQueue-members.html b/docs/dd/dc4/classshaka_1_1media_1_1ProducerConsumerQueue-members.html index 91e4ed7fdd..97822ec54e 100644 --- a/docs/dd/dc4/classshaka_1_1media_1_1ProducerConsumerQueue-members.html +++ b/docs/dd/dc4/classshaka_1_1media_1_1ProducerConsumerQueue-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dc5/classshaka_1_1media_1_1webm_1_1Segmenter.html b/docs/dd/dc5/classshaka_1_1media_1_1webm_1_1Segmenter.html index d35bd0a030..213269aa64 100644 --- a/docs/dd/dc5/classshaka_1_1media_1_1webm_1_1Segmenter.html +++ b/docs/dd/dc5/classshaka_1_1media_1_1webm_1_1Segmenter.html @@ -207,7 +207,7 @@ virtual Sta
Returns
OK on success, an error status otherwise.
-

Definition at line 117 of file segmenter.cc.

+

Definition at line 118 of file segmenter.cc.

@@ -226,7 +226,7 @@ virtual Sta

Finalize the segmenter.

Returns
OK on success, an error status otherwise.
-

Definition at line 106 of file segmenter.cc.

+

Definition at line 107 of file segmenter.cc.

@@ -253,7 +253,7 @@ virtual Sta @@ -271,7 +271,7 @@ virtual Sta @@ -427,7 +427,7 @@ virtual Sta diff --git a/docs/dd/dca/structshaka_1_1media_1_1mp4_1_1OriginalFormat-members.html b/docs/dd/dca/structshaka_1_1media_1_1mp4_1_1OriginalFormat-members.html index 3273e44b3b..fe227de485 100644 --- a/docs/dd/dca/structshaka_1_1media_1_1mp4_1_1OriginalFormat-members.html +++ b/docs/dd/dca/structshaka_1_1media_1_1mp4_1_1OriginalFormat-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dce/structshaka_1_1media_1_1Cue.html b/docs/dd/dce/structshaka_1_1media_1_1Cue.html index 4a6618e52a..2d09f0312f 100644 --- a/docs/dd/dce/structshaka_1_1media_1_1Cue.html +++ b/docs/dd/dce/structshaka_1_1media_1_1Cue.html @@ -125,7 +125,7 @@ std::vector< std::string >  diff --git a/docs/dd/dd2/buffer__writer_8h_source.html b/docs/dd/dd2/buffer__writer_8h_source.html index 4aa82eebb5..d68aa225e9 100644 --- a/docs/dd/dd2/buffer__writer_8h_source.html +++ b/docs/dd/dd2/buffer__writer_8h_source.html @@ -159,7 +159,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dd3/buffer__writer_8cc_source.html b/docs/dd/dd3/buffer__writer_8cc_source.html index 0c04f21896..c3fafecaf2 100644 --- a/docs/dd/dd3/buffer__writer_8cc_source.html +++ b/docs/dd/dd3/buffer__writer_8cc_source.html @@ -187,7 +187,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dd6/classshaka_1_1media_1_1WebMVideoClient-members.html b/docs/dd/dd6/classshaka_1_1media_1_1WebMVideoClient-members.html index 9321e6f885..734b80208e 100644 --- a/docs/dd/dd6/classshaka_1_1media_1_1WebMVideoClient-members.html +++ b/docs/dd/dd6/classshaka_1_1media_1_1WebMVideoClient-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dd8/mock__muxer__listener_8cc_source.html b/docs/dd/dd8/mock__muxer__listener_8cc_source.html index 04031579de..9eb191f3ff 100644 --- a/docs/dd/dd8/mock__muxer__listener_8cc_source.html +++ b/docs/dd/dd8/mock__muxer__listener_8cc_source.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dd9/structshaka_1_1media_1_1mp4_1_1Box-members.html b/docs/dd/dd9/structshaka_1_1media_1_1mp4_1_1Box-members.html index 855e7a6952..62cec14f64 100644 --- a/docs/dd/dd9/structshaka_1_1media_1_1mp4_1_1Box-members.html +++ b/docs/dd/dd9/structshaka_1_1media_1_1mp4_1_1Box-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/de4/classshaka_1_1media_1_1VideoSliceHeaderParser.html b/docs/dd/de4/classshaka_1_1media_1_1VideoSliceHeaderParser.html index cb38f3e8b8..75f2cc85df 100644 --- a/docs/dd/de4/classshaka_1_1media_1_1VideoSliceHeaderParser.html +++ b/docs/dd/de4/classshaka_1_1media_1_1VideoSliceHeaderParser.html @@ -150,7 +150,7 @@ virtual int64_t  diff --git a/docs/dd/de7/structshaka_1_1media_1_1H265Pps-members.html b/docs/dd/de7/structshaka_1_1media_1_1H265Pps-members.html index fea0cdb4c1..a0cbb859b4 100644 --- a/docs/dd/de7/structshaka_1_1media_1_1H265Pps-members.html +++ b/docs/dd/de7/structshaka_1_1media_1_1H265Pps-members.html @@ -137,7 +137,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/de7/xml__node_8h_source.html b/docs/dd/de7/xml__node_8h_source.html index 8611dd7fca..982752ef9f 100644 --- a/docs/dd/de7/xml__node_8h_source.html +++ b/docs/dd/de7/xml__node_8h_source.html @@ -230,7 +230,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dee/box__definitions_8cc_source.html b/docs/dd/dee/box__definitions_8cc_source.html index 09a1c8cbff..257ed74160 100644 --- a/docs/dd/dee/box__definitions_8cc_source.html +++ b/docs/dd/dee/box__definitions_8cc_source.html @@ -2944,7 +2944,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/df2/webm_2multi__segment__segmenter_8h_source.html b/docs/dd/df2/webm_2multi__segment__segmenter_8h_source.html index 56704a4a90..b6ab6155b1 100644 --- a/docs/dd/df2/webm_2multi__segment__segmenter_8h_source.html +++ b/docs/dd/df2/webm_2multi__segment__segmenter_8h_source.html @@ -149,7 +149,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/df5/structshaka_1_1media_1_1mp4_1_1TrackFragmentRun.html b/docs/dd/df5/structshaka_1_1media_1_1mp4_1_1TrackFragmentRun.html index 4c193b0ba5..f6e2fce356 100644 --- a/docs/dd/df5/structshaka_1_1media_1_1mp4_1_1TrackFragmentRun.html +++ b/docs/dd/df5/structshaka_1_1media_1_1mp4_1_1TrackFragmentRun.html @@ -212,7 +212,7 @@ Additional Inherited Members diff --git a/docs/dd/df6/structshaka_1_1media_1_1mp4_1_1Metadata.html b/docs/dd/df6/structshaka_1_1media_1_1mp4_1_1Metadata.html index 0812f1d2c7..4ca32acec4 100644 --- a/docs/dd/df6/structshaka_1_1media_1_1mp4_1_1Metadata.html +++ b/docs/dd/df6/structshaka_1_1media_1_1mp4_1_1Metadata.html @@ -185,7 +185,7 @@ Additional Inherited Members diff --git a/docs/de/d0f/local__file_8h_source.html b/docs/de/d0f/local__file_8h_source.html index fe3c46431a..0a6c288c11 100644 --- a/docs/de/d0f/local__file_8h_source.html +++ b/docs/de/d0f/local__file_8h_source.html @@ -152,7 +152,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d12/container__names_8h_source.html b/docs/de/d12/container__names_8h_source.html index bb64ee2abc..0967cf276c 100644 --- a/docs/de/d12/container__names_8h_source.html +++ b/docs/de/d12/container__names_8h_source.html @@ -159,7 +159,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d13/ts__writer_8cc_source.html b/docs/de/d13/ts__writer_8cc_source.html index 4236344afa..012c0420f1 100644 --- a/docs/de/d13/ts__writer_8cc_source.html +++ b/docs/de/d13/ts__writer_8cc_source.html @@ -263,7 +263,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
174  if (stream_info.stream_type() == StreamType::kStreamVideo) {
175  const VideoStreamInfo& video_stream_info =
176  static_cast<const VideoStreamInfo&>(stream_info);
-
177  if (video_stream_info.codec() != VideoCodec::kCodecH264) {
+
177  if (video_stream_info.codec() != Codec::kCodecH264) {
178  LOG(ERROR) << "TsWriter cannot handle video codec "
179  << video_stream_info.codec() << " yet.";
180  return false;
@@ -273,7 +273,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
184  DCHECK_EQ(stream_type, StreamType::kStreamAudio);
185  const AudioStreamInfo& audio_stream_info =
186  static_cast<const AudioStreamInfo&>(stream_info);
-
187  if (audio_stream_info.codec() != AudioCodec::kCodecAAC) {
+
187  if (audio_stream_info.codec() != Codec::kCodecAAC) {
188  LOG(ERROR) << "TsWriter cannot handle audio codec "
189  << audio_stream_info.codec() << " yet.";
190  return false;
@@ -345,7 +345,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
256 } // namespace media
257 } // namespace shaka
virtual bool Open()=0
Internal open. Should not be used directly.
-
Abstract class holds stream information.
Definition: stream_info.h:26
+
Abstract class holds stream information.
Definition: stream_info.h:53
virtual bool NewSegment(const std::string &file_name)
Definition: ts_writer.cc:199
void SetProgramMapTableWriterForTesting(scoped_ptr< ProgramMapTableWriter > table_writer)
Only for testing.
Definition: ts_writer.cc:250
@@ -354,14 +354,14 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
virtual bool AddPesPacket(scoped_ptr< PesPacket > pes_packet)
Definition: ts_writer.cc:238
virtual bool FinalizeSegment()
Definition: ts_writer.cc:234
virtual bool Initialize(const StreamInfo &stream_info)
Definition: ts_writer.cc:165
-
Holds video stream information.
-
Holds audio stream information.
+
Holds video stream information.
+
Holds audio stream information.
Status WriteToFile(File *file)
virtual void SignalEncrypted()
Signals the writer that the rest of the segments are encrypted.
Definition: ts_writer.cc:230
diff --git a/docs/de/d15/media__stream_8cc_source.html b/docs/de/d15/media__stream_8cc_source.html index c814e8cbd5..bc6f26620a 100644 --- a/docs/de/d15/media__stream_8cc_source.html +++ b/docs/de/d15/media__stream_8cc_source.html @@ -210,7 +210,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d16/classshaka_1_1media_1_1TextTrackConfig-members.html b/docs/de/d16/classshaka_1_1media_1_1TextTrackConfig-members.html index cb820a53eb..a010549e78 100644 --- a/docs/de/d16/classshaka_1_1media_1_1TextTrackConfig-members.html +++ b/docs/de/d16/classshaka_1_1media_1_1TextTrackConfig-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d17/cluster__builder_8cc_source.html b/docs/de/d17/cluster__builder_8cc_source.html index fab7311273..5ef7d8ed12 100644 --- a/docs/de/d17/cluster__builder_8cc_source.html +++ b/docs/de/d17/cluster__builder_8cc_source.html @@ -330,7 +330,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d1a/classshaka_1_1media_1_1wvm_1_1WvmMediaParser-members.html b/docs/de/d1a/classshaka_1_1media_1_1wvm_1_1WvmMediaParser-members.html index 444a5bf097..a287c88d9d 100644 --- a/docs/de/d1a/classshaka_1_1media_1_1wvm_1_1WvmMediaParser-members.html +++ b/docs/de/d1a/classshaka_1_1media_1_1wvm_1_1WvmMediaParser-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d1e/mp4_2single__segment__segmenter_8cc_source.html b/docs/de/d1e/mp4_2single__segment__segmenter_8cc_source.html index f8e89ebbde..8a050b152a 100644 --- a/docs/de/d1e/mp4_2single__segment__segmenter_8cc_source.html +++ b/docs/de/d1e/mp4_2single__segment__segmenter_8cc_source.html @@ -331,12 +331,12 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
virtual void OnSampleDurationReady(uint32_t sample_duration)=0
-
void UpdateProgress(uint64_t progress)
Update segmentation progress using ProgressListener.
Definition: segmenter.cc:254
+
void UpdateProgress(uint64_t progress)
Update segmentation progress using ProgressListener.
Definition: segmenter.cc:255
static bool Delete(const char *file_name)
Definition: file.cc:167
diff --git a/docs/de/d22/aes__pattern__cryptor_8cc_source.html b/docs/de/d22/aes__pattern__cryptor_8cc_source.html index 47587b906b..cc14e12418 100644 --- a/docs/de/d22/aes__pattern__cryptor_8cc_source.html +++ b/docs/de/d22/aes__pattern__cryptor_8cc_source.html @@ -198,7 +198,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d27/classshaka_1_1media_1_1mp2t_1_1H264ProgramMapTableWriter.html b/docs/de/d27/classshaka_1_1media_1_1mp2t_1_1H264ProgramMapTableWriter.html index 05ab208037..016a6e6cbf 100644 --- a/docs/de/d27/classshaka_1_1media_1_1mp2t_1_1H264ProgramMapTableWriter.html +++ b/docs/de/d27/classshaka_1_1media_1_1mp2t_1_1H264ProgramMapTableWriter.html @@ -140,7 +140,7 @@ static const uint8_t kElem diff --git a/docs/de/d29/structshaka_1_1media_1_1mp4_1_1TrackExtends.html b/docs/de/d29/structshaka_1_1media_1_1mp4_1_1TrackExtends.html index 913706ad46..86f3fe93e4 100644 --- a/docs/de/d29/structshaka_1_1media_1_1mp4_1_1TrackExtends.html +++ b/docs/de/d29/structshaka_1_1media_1_1mp4_1_1TrackExtends.html @@ -194,7 +194,7 @@ Additional Inherited Members diff --git a/docs/de/d33/classshaka_1_1media_1_1WebMTracksParser-members.html b/docs/de/d33/classshaka_1_1media_1_1WebMTracksParser-members.html index 247489cd6e..e874908d48 100644 --- a/docs/de/d33/classshaka_1_1media_1_1WebMTracksParser-members.html +++ b/docs/de/d33/classshaka_1_1media_1_1WebMTracksParser-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d33/structshaka_1_1media_1_1H265Pps.html b/docs/de/d33/structshaka_1_1media_1_1H265Pps.html index de32c2fc03..1d4dbf2174 100644 --- a/docs/de/d33/structshaka_1_1media_1_1H265Pps.html +++ b/docs/de/d33/structshaka_1_1media_1_1H265Pps.html @@ -224,7 +224,7 @@ bool chroma_qp_offset_list diff --git a/docs/de/d34/offset__byte__queue_8h_source.html b/docs/de/d34/offset__byte__queue_8h_source.html index b50340a98b..e15371ec77 100644 --- a/docs/de/d34/offset__byte__queue_8h_source.html +++ b/docs/de/d34/offset__byte__queue_8h_source.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d3c/h26x__byte__to__unit__stream__converter_8cc_source.html b/docs/de/d3c/h26x__byte__to__unit__stream__converter_8cc_source.html index f59a4c4df4..607943261f 100644 --- a/docs/de/d3c/h26x__byte__to__unit__stream__converter_8cc_source.html +++ b/docs/de/d3c/h26x__byte__to__unit__stream__converter_8cc_source.html @@ -162,7 +162,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d3c/macros_8h_source.html b/docs/de/d3c/macros_8h_source.html index 01a373d45c..5b54e84c8f 100644 --- a/docs/de/d3c/macros_8h_source.html +++ b/docs/de/d3c/macros_8h_source.html @@ -144,7 +144,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d3e/buffer__reader_8h_source.html b/docs/de/d3e/buffer__reader_8h_source.html index d35402a19e..5c791731d4 100644 --- a/docs/de/d3e/buffer__reader_8h_source.html +++ b/docs/de/d3e/buffer__reader_8h_source.html @@ -163,7 +163,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d3e/classshaka_1_1media_1_1H264Parser-members.html b/docs/de/d3e/classshaka_1_1media_1_1H264Parser-members.html index a9ef905e9e..7156183dee 100644 --- a/docs/de/d3e/classshaka_1_1media_1_1H264Parser-members.html +++ b/docs/de/d3e/classshaka_1_1media_1_1H264Parser-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d43/classshaka_1_1media_1_1mp2t_1_1PesPacket-members.html b/docs/de/d43/classshaka_1_1media_1_1mp2t_1_1PesPacket-members.html index 34aa68954e..bb5fa02684 100644 --- a/docs/de/d43/classshaka_1_1media_1_1mp2t_1_1PesPacket-members.html +++ b/docs/de/d43/classshaka_1_1media_1_1mp2t_1_1PesPacket-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d49/classshaka_1_1media_1_1DecryptConfig.html b/docs/de/d49/classshaka_1_1media_1_1DecryptConfig.html index de4b0d1f28..8a4f27cb63 100644 --- a/docs/de/d49/classshaka_1_1media_1_1DecryptConfig.html +++ b/docs/de/d49/classshaka_1_1media_1_1DecryptConfig.html @@ -249,7 +249,7 @@ static const size_t  diff --git a/docs/de/d4a/muxer__listener__internal_8h_source.html b/docs/de/d4a/muxer__listener__internal_8h_source.html index 5734449e40..1291acc49d 100644 --- a/docs/de/d4a/muxer__listener__internal_8h_source.html +++ b/docs/de/d4a/muxer__listener__internal_8h_source.html @@ -145,7 +145,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d52/classshaka_1_1Representation.html b/docs/de/d52/classshaka_1_1Representation.html index 22697acbf2..661b59c770 100644 --- a/docs/de/d52/classshaka_1_1Representation.html +++ b/docs/de/d52/classshaka_1_1Representation.html @@ -456,7 +456,7 @@ template<MpdBuilder::MpdType type> diff --git a/docs/de/d55/structshaka_1_1media_1_1mp4_1_1Language-members.html b/docs/de/d55/structshaka_1_1media_1_1mp4_1_1Language-members.html index 12d1b51cdf..bc35853eac 100644 --- a/docs/de/d55/structshaka_1_1media_1_1mp4_1_1Language-members.html +++ b/docs/de/d55/structshaka_1_1media_1_1mp4_1_1Language-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d5b/adts__header_8cc_source.html b/docs/de/d5b/adts__header_8cc_source.html index 41cbf7bbab..480aa21bd2 100644 --- a/docs/de/d5b/adts__header_8cc_source.html +++ b/docs/de/d5b/adts__header_8cc_source.html @@ -207,7 +207,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d5c/mpd__flags_8h_source.html b/docs/de/d5c/mpd__flags_8h_source.html index 522fba352b..0736984960 100644 --- a/docs/de/d5c/mpd__flags_8h_source.html +++ b/docs/de/d5c/mpd__flags_8h_source.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d60/classshaka_1_1media_1_1mp2t_1_1ProgramMapTableWriter-members.html b/docs/de/d60/classshaka_1_1media_1_1mp2t_1_1ProgramMapTableWriter-members.html index 651dd5b84d..2c69cb139a 100644 --- a/docs/de/d60/classshaka_1_1media_1_1mp2t_1_1ProgramMapTableWriter-members.html +++ b/docs/de/d60/classshaka_1_1media_1_1mp2t_1_1ProgramMapTableWriter-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d64/classshaka_1_1media_1_1mp2t_1_1TsWriter.html b/docs/de/d64/classshaka_1_1media_1_1mp2t_1_1TsWriter.html index a5eb721ea0..4a586cf6ba 100644 --- a/docs/de/d64/classshaka_1_1media_1_1mp2t_1_1TsWriter.html +++ b/docs/de/d64/classshaka_1_1media_1_1mp2t_1_1TsWriter.html @@ -257,7 +257,7 @@ void  diff --git a/docs/de/d6c/structshaka_1_1media_1_1mp4_1_1SampleToGroupEntry-members.html b/docs/de/d6c/structshaka_1_1media_1_1mp4_1_1SampleToGroupEntry-members.html index 56aeca9668..02b7c18f2a 100644 --- a/docs/de/d6c/structshaka_1_1media_1_1mp4_1_1SampleToGroupEntry-members.html +++ b/docs/de/d6c/structshaka_1_1media_1_1mp4_1_1SampleToGroupEntry-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d6e/language__utils_8h_source.html b/docs/de/d6e/language__utils_8h_source.html index ee39d2657f..d035420817 100644 --- a/docs/de/d6e/language__utils_8h_source.html +++ b/docs/de/d6e/language__utils_8h_source.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d70/http__key__fetcher_8cc_source.html b/docs/de/d70/http__key__fetcher_8cc_source.html index cf82ad2b28..a643f05da7 100644 --- a/docs/de/d70/http__key__fetcher_8cc_source.html +++ b/docs/de/d70/http__key__fetcher_8cc_source.html @@ -238,7 +238,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d77/webm__content__encodings__client_8cc_source.html b/docs/de/d77/webm__content__encodings__client_8cc_source.html index 7d566f7723..48d19a638c 100644 --- a/docs/de/d77/webm__content__encodings__client_8cc_source.html +++ b/docs/de/d77/webm__content__encodings__client_8cc_source.html @@ -361,7 +361,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d7b/mp4__media__parser_8h_source.html b/docs/de/d7b/mp4__media__parser_8h_source.html index 74305652da..fae0d8aa20 100644 --- a/docs/de/d7b/mp4__media__parser_8h_source.html +++ b/docs/de/d7b/mp4__media__parser_8h_source.html @@ -194,19 +194,19 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
114 #endif // MEDIA_FORMATS_MP4_MP4_MEDIA_PARSER_H_
base::Callback< void(const std::vector< scoped_refptr< StreamInfo > > &stream_info)> InitCB
Definition: media_parser.h:35
-
bool Flush() override WARN_UNUSED_RESULT
-
bool Parse(const uint8_t *buf, int size) override WARN_UNUSED_RESULT
+
bool Flush() override WARN_UNUSED_RESULT
+
bool Parse(const uint8_t *buf, int size) override WARN_UNUSED_RESULT
Class for reading MP4 boxes.
Definition: box_reader.h:24
base::Callback< bool(uint32_t track_id, const scoped_refptr< MediaSample > &media_sample)> NewSampleCB
Definition: media_parser.h:44
-
bool LoadMoov(const std::string &file_path)
+
bool LoadMoov(const std::string &file_path)
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:31
-
void Init(const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source) override
+
void Init(const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source) override
diff --git a/docs/de/d7e/classshaka_1_1media_1_1mp2t_1_1TsSectionPsi.html b/docs/de/d7e/classshaka_1_1media_1_1mp2t_1_1TsSectionPsi.html index 9f9e9964bf..6eca31a2a1 100644 --- a/docs/de/d7e/classshaka_1_1media_1_1mp2t_1_1TsSectionPsi.html +++ b/docs/de/d7e/classshaka_1_1media_1_1mp2t_1_1TsSectionPsi.html @@ -147,7 +147,7 @@ Additional Inherited Members diff --git a/docs/de/d83/box__definitions__comparison_8h_source.html b/docs/de/d83/box__definitions__comparison_8h_source.html index 5e4bd69fb5..18fa953fa8 100644 --- a/docs/de/d83/box__definitions__comparison_8h_source.html +++ b/docs/de/d83/box__definitions__comparison_8h_source.html @@ -592,7 +592,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d83/classshaka_1_1media_1_1LocalFile-members.html b/docs/de/d83/classshaka_1_1media_1_1LocalFile-members.html index c6a55d3a3f..4b973d4e8b 100644 --- a/docs/de/d83/classshaka_1_1media_1_1LocalFile-members.html +++ b/docs/de/d83/classshaka_1_1media_1_1LocalFile-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d87/structshaka_1_1media_1_1wvm_1_1PrevSampleData-members.html b/docs/de/d87/structshaka_1_1media_1_1wvm_1_1PrevSampleData-members.html index 48b3d0b356..c1269b2d48 100644 --- a/docs/de/d87/structshaka_1_1media_1_1wvm_1_1PrevSampleData-members.html +++ b/docs/de/d87/structshaka_1_1media_1_1wvm_1_1PrevSampleData-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d8d/structshaka_1_1media_1_1mp4_1_1MovieFragmentHeader-members.html b/docs/de/d8d/structshaka_1_1media_1_1mp4_1_1MovieFragmentHeader-members.html index ad606e440a..7c7bd94060 100644 --- a/docs/de/d8d/structshaka_1_1media_1_1mp4_1_1MovieFragmentHeader-members.html +++ b/docs/de/d8d/structshaka_1_1media_1_1mp4_1_1MovieFragmentHeader-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d93/classshaka_1_1media_1_1VP8Parser-members.html b/docs/de/d93/classshaka_1_1media_1_1VP8Parser-members.html index 64bec7120a..381f98a34e 100644 --- a/docs/de/d93/classshaka_1_1media_1_1VP8Parser-members.html +++ b/docs/de/d93/classshaka_1_1media_1_1VP8Parser-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/da9/structshaka_1_1Element.html b/docs/de/da9/structshaka_1_1Element.html index f7ef365d45..f2b0cb3a04 100644 --- a/docs/de/da9/structshaka_1_1Element.html +++ b/docs/de/da9/structshaka_1_1Element.html @@ -120,7 +120,7 @@ std::vector< El diff --git a/docs/de/dab/es__parser__h26x_8cc_source.html b/docs/de/dab/es__parser__h26x_8cc_source.html index e4cce4b9e3..f58ce7e581 100644 --- a/docs/de/dab/es__parser__h26x_8cc_source.html +++ b/docs/de/dab/es__parser__h26x_8cc_source.html @@ -415,7 +415,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dad/validate__flag_8cc_source.html b/docs/de/dad/validate__flag_8cc_source.html index b847a242f0..8d82b610a4 100644 --- a/docs/de/dad/validate__flag_8cc_source.html +++ b/docs/de/dad/validate__flag_8cc_source.html @@ -132,7 +132,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/db3/classshaka_1_1media_1_1TextTrackConfig.html b/docs/de/db3/classshaka_1_1media_1_1TextTrackConfig.html index da03e64fd4..9a7c1797fd 100644 --- a/docs/de/db3/classshaka_1_1media_1_1TextTrackConfig.html +++ b/docs/de/db3/classshaka_1_1media_1_1TextTrackConfig.html @@ -125,7 +125,7 @@ const std::string & id diff --git a/docs/de/db4/classshaka_1_1media_1_1H26xBitReader.html b/docs/de/db4/classshaka_1_1media_1_1H26xBitReader.html index f16f14cd6b..9f5195c371 100644 --- a/docs/de/db4/classshaka_1_1media_1_1H26xBitReader.html +++ b/docs/de/db4/classshaka_1_1media_1_1H26xBitReader.html @@ -134,7 +134,7 @@ size_t NumEmulationPrevent diff --git a/docs/de/dc1/demuxer_8h_source.html b/docs/de/dc1/demuxer_8h_source.html index 39e6af8171..19262373ab 100644 --- a/docs/de/dc1/demuxer_8h_source.html +++ b/docs/de/dc1/demuxer_8h_source.html @@ -187,7 +187,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dc2/classshaka_1_1media_1_1H265Parser.html b/docs/de/dc2/classshaka_1_1media_1_1H265Parser.html index de8fcd1be8..ec9cd1c456 100644 --- a/docs/de/dc2/classshaka_1_1media_1_1H265Parser.html +++ b/docs/de/dc2/classshaka_1_1media_1_1H265Parser.html @@ -256,7 +256,7 @@ Public Member Functions diff --git a/docs/de/dc9/structshaka_1_1media_1_1mp4_1_1DecodingTimeToSample-members.html b/docs/de/dc9/structshaka_1_1media_1_1mp4_1_1DecodingTimeToSample-members.html index 14d0292704..f9b4e6f4dc 100644 --- a/docs/de/dc9/structshaka_1_1media_1_1mp4_1_1DecodingTimeToSample-members.html +++ b/docs/de/dc9/structshaka_1_1media_1_1mp4_1_1DecodingTimeToSample-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dcb/ts__segmenter_8h_source.html b/docs/de/dcb/ts__segmenter_8h_source.html index bd0464aabf..a8f7e00d6d 100644 --- a/docs/de/dcb/ts__segmenter_8h_source.html +++ b/docs/de/dcb/ts__segmenter_8h_source.html @@ -195,7 +195,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
121 } // namespace media
122 } // namespace shaka
123 #endif // PACKAGER_MEDIA_FORMATS_MP2T_TS_SEGMENTER_H_
-
Abstract class holds stream information.
Definition: stream_info.h:26
+
Abstract class holds stream information.
Definition: stream_info.h:53
Status AddSample(scoped_refptr< MediaSample > sample)
Definition: ts_segmenter.cc:88
This structure contains the list of configuration options for Muxer.
Definition: muxer_options.h:18
@@ -211,7 +211,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dcc/mock__mpd__notifier_8cc_source.html b/docs/de/dcc/mock__mpd__notifier_8cc_source.html index dfe428e2b1..4e579e26e4 100644 --- a/docs/de/dcc/mock__mpd__notifier_8cc_source.html +++ b/docs/de/dcc/mock__mpd__notifier_8cc_source.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dcf/file__closer_8h_source.html b/docs/de/dcf/file__closer_8h_source.html index e0337d1830..170522fe33 100644 --- a/docs/de/dcf/file__closer_8h_source.html +++ b/docs/de/dcf/file__closer_8h_source.html @@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dd6/content__protection__element_8h_source.html b/docs/de/dd6/content__protection__element_8h_source.html index b70ce03e6b..c5c73b2349 100644 --- a/docs/de/dd6/content__protection__element_8h_source.html +++ b/docs/de/dd6/content__protection__element_8h_source.html @@ -142,7 +142,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dd6/muxer__listener__test__helper_8cc_source.html b/docs/de/dd6/muxer__listener__test__helper_8cc_source.html index 004d605582..29b28f6d44 100644 --- a/docs/de/dd6/muxer__listener__test__helper_8cc_source.html +++ b/docs/de/dd6/muxer__listener__test__helper_8cc_source.html @@ -105,121 +105,111 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
16 
17 scoped_refptr<StreamInfo> CreateVideoStreamInfo(
18  const VideoStreamInfoParameters& param) {
-
19  return scoped_refptr<StreamInfo>(
-
20  new VideoStreamInfo(param.track_id,
-
21  param.time_scale,
-
22  param.duration,
-
23  param.codec,
-
24  param.codec_string,
-
25  param.language,
-
26  param.width,
-
27  param.height,
-
28  param.pixel_width,
-
29  param.pixel_height,
-
30  0, // trick_play_rate
-
31  param.nalu_length_size,
-
32  param.codec_config.data(),
-
33  param.codec_config.size(),
-
34  param.is_encrypted));
-
35 }
-
36 
-
37 VideoStreamInfoParameters GetDefaultVideoStreamInfoParams() {
-
38  const int kTrackId = 0;
-
39  const uint32_t kTimeScale = 10;
-
40  const uint64_t kVideoStreamDuration = 200;
-
41  const VideoCodec kH264Codec = kCodecH264;
-
42  const char* kCodecString = "avc1.010101";
-
43  const char* kLanuageUndefined = "und";
-
44  const uint16_t kWidth = 720;
-
45  const uint16_t kHeight = 480;
-
46  const uint32_t kPixelWidth = 1;
-
47  const uint32_t kPixelHeight = 1;
-
48  const uint8_t kNaluLengthSize = 1;
-
49  const std::vector<uint8_t> kExtraData;
-
50  const bool kEncryptedFlag = false;
-
51  VideoStreamInfoParameters params;
-
52  params.track_id = kTrackId;
-
53  params.time_scale = kTimeScale;
-
54  params.duration = kVideoStreamDuration;
-
55  params.codec = kH264Codec;
-
56  params.codec_string = kCodecString;
-
57  params.language = kLanuageUndefined;
-
58  params.width = kWidth;
-
59  params.height = kHeight;
-
60  params.pixel_width = kPixelWidth;
-
61  params.pixel_height = kPixelHeight;
-
62  params.nalu_length_size = kNaluLengthSize;
-
63  params.codec_config = kExtraData;
-
64  params.is_encrypted = kEncryptedFlag;
-
65  return params;
-
66 }
-
67 
-
68 OnMediaEndParameters GetDefaultOnMediaEndParams() {
-
69  // Values for {init, index} range {start, end} are arbitrary, but makes sure
-
70  // that it is monotonically increasing and contiguous.
-
71  const bool kHasInitRange = true;
-
72  const uint64_t kInitRangeStart = 0;
-
73  const uint64_t kInitRangeEnd = kInitRangeStart + 120;
-
74  const uint64_t kHasIndexRange = true;
-
75  const uint64_t kIndexRangeStart = kInitRangeEnd + 1;
-
76  const uint64_t kIndexRangeEnd = kIndexRangeStart + 100;
-
77  const float kMediaDuration = 10.5f;
-
78  const uint64_t kFileSize = 10000;
-
79  OnMediaEndParameters param = {
-
80  kHasInitRange, kInitRangeStart, kInitRangeEnd, kHasIndexRange,
-
81  kIndexRangeStart, kIndexRangeEnd, kMediaDuration, kFileSize};
-
82  return param;
-
83 }
-
84 
-
85 void SetDefaultMuxerOptionsValues(MuxerOptions* muxer_options) {
-
86  muxer_options->single_segment = true;
-
87  muxer_options->segment_duration = 10.0;
-
88  muxer_options->fragment_duration = 10.0;
-
89  muxer_options->segment_sap_aligned = true;
-
90  muxer_options->fragment_sap_aligned = true;
-
91  muxer_options->num_subsegments_per_sidx = 0;
-
92  muxer_options->output_file_name = "test_output_file_name.mp4";
-
93  muxer_options->segment_template.clear();
-
94  muxer_options->temp_dir.clear();
-
95 }
-
96 
-
97 std::vector<ProtectionSystemSpecificInfo> GetDefaultKeySystemInfo() {
-
98  const uint8_t kPsshData[] = {'p', 's', 's', 'h'};
-
99  const uint8_t kTestSystemId[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
-
100  0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
-
101  0x0c, 0x0d, 0x0e, 0x0f};
-
102 
-
103  ProtectionSystemSpecificInfo info;
-
104  info.set_system_id(kTestSystemId, arraysize(kTestSystemId));
-
105  info.set_pssh_data(
-
106  std::vector<uint8_t>(kPsshData, kPsshData + arraysize(kPsshData)));
-
107  info.set_pssh_box_version(0);
-
108 
-
109  std::vector<ProtectionSystemSpecificInfo> key_system_info;
-
110  key_system_info.push_back(info);
-
111  return key_system_info;
-
112 }
-
113 
-
114 void ExpectMediaInfoEqual(const MediaInfo& expect, const MediaInfo& actual) {
-
115  ASSERT_TRUE(MediaInfoEqual(expect, actual));
+
19  return scoped_refptr<StreamInfo>(new VideoStreamInfo(
+
20  param.track_id, param.time_scale, param.duration, param.codec,
+
21  param.codec_string, param.codec_config.data(), param.codec_config.size(),
+
22  param.width, param.height, param.pixel_width, param.pixel_height,
+
23  0, // trick_play_rate
+
24  param.nalu_length_size, param.language, param.is_encrypted));
+
25 }
+
26 
+
27 VideoStreamInfoParameters GetDefaultVideoStreamInfoParams() {
+
28  const int kTrackId = 0;
+
29  const uint32_t kTimeScale = 10;
+
30  const uint64_t kVideoStreamDuration = 200;
+
31  const Codec kH264Codec = kCodecH264;
+
32  const char* kCodecString = "avc1.010101";
+
33  const char* kLanuageUndefined = "und";
+
34  const uint16_t kWidth = 720;
+
35  const uint16_t kHeight = 480;
+
36  const uint32_t kPixelWidth = 1;
+
37  const uint32_t kPixelHeight = 1;
+
38  const uint8_t kNaluLengthSize = 1;
+
39  const std::vector<uint8_t> kExtraData;
+
40  const bool kEncryptedFlag = false;
+
41  VideoStreamInfoParameters params;
+
42  params.track_id = kTrackId;
+
43  params.time_scale = kTimeScale;
+
44  params.duration = kVideoStreamDuration;
+
45  params.codec = kH264Codec;
+
46  params.codec_string = kCodecString;
+
47  params.language = kLanuageUndefined;
+
48  params.width = kWidth;
+
49  params.height = kHeight;
+
50  params.pixel_width = kPixelWidth;
+
51  params.pixel_height = kPixelHeight;
+
52  params.nalu_length_size = kNaluLengthSize;
+
53  params.codec_config = kExtraData;
+
54  params.is_encrypted = kEncryptedFlag;
+
55  return params;
+
56 }
+
57 
+
58 OnMediaEndParameters GetDefaultOnMediaEndParams() {
+
59  // Values for {init, index} range {start, end} are arbitrary, but makes sure
+
60  // that it is monotonically increasing and contiguous.
+
61  const bool kHasInitRange = true;
+
62  const uint64_t kInitRangeStart = 0;
+
63  const uint64_t kInitRangeEnd = kInitRangeStart + 120;
+
64  const uint64_t kHasIndexRange = true;
+
65  const uint64_t kIndexRangeStart = kInitRangeEnd + 1;
+
66  const uint64_t kIndexRangeEnd = kIndexRangeStart + 100;
+
67  const float kMediaDuration = 10.5f;
+
68  const uint64_t kFileSize = 10000;
+
69  OnMediaEndParameters param = {
+
70  kHasInitRange, kInitRangeStart, kInitRangeEnd, kHasIndexRange,
+
71  kIndexRangeStart, kIndexRangeEnd, kMediaDuration, kFileSize};
+
72  return param;
+
73 }
+
74 
+
75 void SetDefaultMuxerOptionsValues(MuxerOptions* muxer_options) {
+
76  muxer_options->single_segment = true;
+
77  muxer_options->segment_duration = 10.0;
+
78  muxer_options->fragment_duration = 10.0;
+
79  muxer_options->segment_sap_aligned = true;
+
80  muxer_options->fragment_sap_aligned = true;
+
81  muxer_options->num_subsegments_per_sidx = 0;
+
82  muxer_options->output_file_name = "test_output_file_name.mp4";
+
83  muxer_options->segment_template.clear();
+
84  muxer_options->temp_dir.clear();
+
85 }
+
86 
+
87 std::vector<ProtectionSystemSpecificInfo> GetDefaultKeySystemInfo() {
+
88  const uint8_t kPsshData[] = {'p', 's', 's', 'h'};
+
89  const uint8_t kTestSystemId[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
+
90  0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
+
91  0x0c, 0x0d, 0x0e, 0x0f};
+
92 
+
93  ProtectionSystemSpecificInfo info;
+
94  info.set_system_id(kTestSystemId, arraysize(kTestSystemId));
+
95  info.set_pssh_data(
+
96  std::vector<uint8_t>(kPsshData, kPsshData + arraysize(kPsshData)));
+
97  info.set_pssh_box_version(0);
+
98 
+
99  std::vector<ProtectionSystemSpecificInfo> key_system_info;
+
100  key_system_info.push_back(info);
+
101  return key_system_info;
+
102 }
+
103 
+
104 void ExpectMediaInfoEqual(const MediaInfo& expect, const MediaInfo& actual) {
+
105  ASSERT_TRUE(MediaInfoEqual(expect, actual));
+
106 }
+
107 
+
108 bool MediaInfoEqual(const MediaInfo& expect, const MediaInfo& actual) {
+
109  // I found out here
+
110  // https://groups.google.com/forum/#!msg/protobuf/5sOExQkB2eQ/ZSBNZI0K54YJ
+
111  // that the best way to check equality is to serialize and check equality.
+
112  std::string expect_serialized = expect.SerializeAsString();
+
113  std::string actual_serialized = actual.SerializeAsString();
+
114  EXPECT_EQ(expect_serialized, actual_serialized);
+
115  return expect_serialized == actual_serialized;
116 }
117 
-
118 bool MediaInfoEqual(const MediaInfo& expect, const MediaInfo& actual) {
-
119  // I found out here
-
120  // https://groups.google.com/forum/#!msg/protobuf/5sOExQkB2eQ/ZSBNZI0K54YJ
-
121  // that the best way to check equality is to serialize and check equality.
-
122  std::string expect_serialized = expect.SerializeAsString();
-
123  std::string actual_serialized = actual.SerializeAsString();
-
124  EXPECT_EQ(expect_serialized, actual_serialized);
-
125  return expect_serialized == actual_serialized;
-
126 }
-
127 
-
128 } // namespace media
-
129 } // namespace shaka
+
118 } // namespace media
+
119 } // namespace shaka
diff --git a/docs/de/ddd/classshaka_1_1media_1_1Muxer-members.html b/docs/de/ddd/classshaka_1_1media_1_1Muxer-members.html index 35e4c79d53..a89f539640 100644 --- a/docs/de/ddd/classshaka_1_1media_1_1Muxer-members.html +++ b/docs/de/ddd/classshaka_1_1media_1_1Muxer-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dde/classshaka_1_1media_1_1mp2t_1_1TsSegmenter.html b/docs/de/dde/classshaka_1_1media_1_1mp2t_1_1TsSegmenter.html index 8236139f0a..9c5fac1dbe 100644 --- a/docs/de/dde/classshaka_1_1media_1_1mp2t_1_1TsSegmenter.html +++ b/docs/de/dde/classshaka_1_1media_1_1mp2t_1_1TsSegmenter.html @@ -256,7 +256,7 @@ void  diff --git a/docs/de/ddf/structshaka_1_1media_1_1mp4_1_1MediaData-members.html b/docs/de/ddf/structshaka_1_1media_1_1mp4_1_1MediaData-members.html index 844197e460..ff3c104e4e 100644 --- a/docs/de/ddf/structshaka_1_1media_1_1mp4_1_1MediaData-members.html +++ b/docs/de/ddf/structshaka_1_1media_1_1mp4_1_1MediaData-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/de0/classshaka_1_1media_1_1DecoderConfigurationRecord.html b/docs/de/de0/classshaka_1_1media_1_1DecoderConfigurationRecord.html index 8217f6ac21..c42317151d 100644 --- a/docs/de/de0/classshaka_1_1media_1_1DecoderConfigurationRecord.html +++ b/docs/de/de0/classshaka_1_1media_1_1DecoderConfigurationRecord.html @@ -333,7 +333,7 @@ void  diff --git a/docs/de/de0/classshaka_1_1media_1_1mp4_1_1MP4Muxer-members.html b/docs/de/de0/classshaka_1_1media_1_1mp4_1_1MP4Muxer-members.html index c13efaeb03..22ac5a2297 100644 --- a/docs/de/de0/classshaka_1_1media_1_1mp4_1_1MP4Muxer-members.html +++ b/docs/de/de0/classshaka_1_1media_1_1mp4_1_1MP4Muxer-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/de4/structshaka_1_1media_1_1H264Pps.html b/docs/de/de4/structshaka_1_1media_1_1H264Pps.html index 0cee8c6821..b3179990ce 100644 --- a/docs/de/de4/structshaka_1_1media_1_1H264Pps.html +++ b/docs/de/de4/structshaka_1_1media_1_1H264Pps.html @@ -167,7 +167,7 @@ int second_chroma_qp_index diff --git a/docs/de/dea/classshaka_1_1media_1_1H26xByteToUnitStreamConverter.html b/docs/de/dea/classshaka_1_1media_1_1H26xByteToUnitStreamConverter.html index d9b8328a34..1a061d947d 100644 --- a/docs/de/dea/classshaka_1_1media_1_1H26xByteToUnitStreamConverter.html +++ b/docs/de/dea/classshaka_1_1media_1_1H26xByteToUnitStreamConverter.html @@ -216,7 +216,7 @@ static const size_t kUnitS diff --git a/docs/de/def/structshaka_1_1media_1_1mp4_1_1DecodingTimeToSample.html b/docs/de/def/structshaka_1_1media_1_1mp4_1_1DecodingTimeToSample.html index a9602a7cac..e0af806c5f 100644 --- a/docs/de/def/structshaka_1_1media_1_1mp4_1_1DecodingTimeToSample.html +++ b/docs/de/def/structshaka_1_1media_1_1mp4_1_1DecodingTimeToSample.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html b/docs/de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html index 45bf4007c5..9757dfb169 100644 --- a/docs/de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html +++ b/docs/de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html @@ -412,7 +412,7 @@ bool is_keyframe () co diff --git a/docs/de/dfa/classshaka_1_1media_1_1webm_1_1Encryptor.html b/docs/de/dfa/classshaka_1_1media_1_1webm_1_1Encryptor.html index 7655308874..353de3f484 100644 --- a/docs/de/dfa/classshaka_1_1media_1_1webm_1_1Encryptor.html +++ b/docs/de/dfa/classshaka_1_1media_1_1webm_1_1Encryptor.html @@ -98,8 +98,8 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); - - + + @@ -108,7 +108,7 @@ Public Member Functions

Detailed Description

A helper class used to encrypt WebM frames before being written to the Cluster. This can also handle unencrypted frames.

-

Definition at line 27 of file encryptor.h.

+

Definition at line 29 of file encryptor.h.

Member Function Documentation

@@ -126,7 +126,7 @@ Public Member Functions

Adds the encryption info to the given track. Initialize must be called first.

Returns
OK on success, an error status otherwise.
-

Definition at line 62 of file encryptor.cc.

+

Definition at line 71 of file encryptor.cc.

@@ -156,11 +156,11 @@ Public Member Functions

Encrypt the data. This needs to be told whether the current frame will be encrypted (e.g. for a clear lead).

Returns
OK on success, an error status otherwise.
-

Definition at line 67 of file encryptor.cc.

+

Definition at line 76 of file encryptor.cc.

- +

Public Member Functions

Status Initialize (MuxerListener *muxer_listener, KeySource::TrackType track_type, KeySource *key_source)
 
Status Initialize (MuxerListener *muxer_listener, KeySource::TrackType track_type, Codec codec, KeySource *key_source, bool webm_subsample_encryption)
 
Status AddTrackInfo (mkvmuxer::Track *track)
 
Status EncryptFrame (scoped_refptr< MediaSample > sample, bool encrypt_frame)
@@ -176,11 +176,23 @@ Public Member Functions + + + + + + - + + + + + + + @@ -192,7 +204,7 @@ Public Member Functions

Initializes the encryptor with the given key source.

Returns
OK on success, an error status otherwise.
-

Definition at line 55 of file encryptor.cc.

+

Definition at line 61 of file encryptor.cc.

@@ -203,7 +215,7 @@ Public Member Functions diff --git a/docs/de/dfa/muxer__listener_8h_source.html b/docs/de/dfa/muxer__listener_8h_source.html index c9266898e5..e5b8298019 100644 --- a/docs/de/dfa/muxer__listener_8h_source.html +++ b/docs/de/dfa/muxer__listener_8h_source.html @@ -164,7 +164,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
virtual void OnNewSegment(const std::string &segment_name, uint64_t start_time, uint64_t duration, uint64_t segment_file_size)=0
virtual void OnEncryptionInfoReady(bool is_initial_encryption_info, FourCC protection_scheme, const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &iv, const std::vector< ProtectionSystemSpecificInfo > &key_system_info)=0
virtual void OnMediaEnd(bool has_init_range, uint64_t init_range_start, uint64_t init_range_end, bool has_index_range, uint64_t index_range_start, uint64_t index_range_end, float duration_seconds, uint64_t file_size)=0
-
Abstract class holds stream information.
Definition: stream_info.h:26
+
Abstract class holds stream information.
Definition: stream_info.h:53
virtual void OnSampleDurationReady(uint32_t sample_duration)=0
virtual void OnEncryptionStart()=0
This structure contains the list of configuration options for Muxer.
Definition: muxer_options.h:18
@@ -173,7 +173,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dfa/structshaka_1_1media_1_1mp4_1_1OpusSpecific.html b/docs/de/dfa/structshaka_1_1media_1_1mp4_1_1OpusSpecific.html index 000fb6623a..184bebe773 100644 --- a/docs/de/dfa/structshaka_1_1media_1_1mp4_1_1OpusSpecific.html +++ b/docs/de/dfa/structshaka_1_1media_1_1mp4_1_1OpusSpecific.html @@ -176,7 +176,7 @@ Additional Inherited Members diff --git a/docs/de/dfd/stream__info_8cc_source.html b/docs/de/dfd/stream__info_8cc_source.html index bb92686226..178fea8f90 100644 --- a/docs/de/dfd/stream__info_8cc_source.html +++ b/docs/de/dfd/stream__info_8cc_source.html @@ -103,47 +103,44 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
14 namespace shaka {
15 namespace media {
16 
-
17 StreamInfo::StreamInfo(StreamType stream_type,
-
18  int track_id,
-
19  uint32_t time_scale,
-
20  uint64_t duration,
-
21  const std::string& codec_string,
-
22  const std::string& language,
-
23  const uint8_t* codec_config,
-
24  size_t codec_config_size,
-
25  bool is_encrypted)
-
26  : stream_type_(stream_type),
-
27  track_id_(track_id),
-
28  time_scale_(time_scale),
-
29  duration_(duration),
-
30  codec_string_(codec_string),
-
31  language_(language),
-
32  is_encrypted_(is_encrypted) {
-
33  if (codec_config_size > 0) {
-
34  codec_config_.assign(codec_config, codec_config + codec_config_size);
-
35  }
-
36 }
-
37 
-
38 StreamInfo::~StreamInfo() {}
-
39 
-
40 std::string StreamInfo::ToString() const {
-
41  return base::StringPrintf(
-
42  "type: %s\n codec_string: %s\n time_scale: %d\n duration: "
-
43  "%" PRIu64 " (%.1f seconds)\n is_encrypted: %s\n",
-
44  (stream_type_ == kStreamAudio ? "Audio" : "Video"),
-
45  codec_string_.c_str(),
-
46  time_scale_, duration_,
-
47  static_cast<double>(duration_) / time_scale_,
-
48  is_encrypted_ ? "true" : "false");
-
49 }
-
50 
-
51 } // namespace media
-
52 } // namespace shaka
-
virtual std::string ToString() const
Definition: stream_info.cc:40
+
17 StreamInfo::StreamInfo(StreamType stream_type, int track_id,
+
18  uint32_t time_scale, uint64_t duration, Codec codec,
+
19  const std::string& codec_string,
+
20  const uint8_t* codec_config, size_t codec_config_size,
+
21  const std::string& language, bool is_encrypted)
+
22  : stream_type_(stream_type),
+
23  track_id_(track_id),
+
24  time_scale_(time_scale),
+
25  duration_(duration),
+
26  codec_(codec),
+
27  codec_string_(codec_string),
+
28  language_(language),
+
29  is_encrypted_(is_encrypted) {
+
30  if (codec_config_size > 0) {
+
31  codec_config_.assign(codec_config, codec_config + codec_config_size);
+
32  }
+
33 }
+
34 
+
35 StreamInfo::~StreamInfo() {}
+
36 
+
37 std::string StreamInfo::ToString() const {
+
38  return base::StringPrintf(
+
39  "type: %s\n codec_string: %s\n time_scale: %d\n duration: "
+
40  "%" PRIu64 " (%.1f seconds)\n is_encrypted: %s\n",
+
41  (stream_type_ == kStreamAudio ? "Audio" : "Video"),
+
42  codec_string_.c_str(),
+
43  time_scale_, duration_,
+
44  static_cast<double>(duration_) / time_scale_,
+
45  is_encrypted_ ? "true" : "false");
+
46 }
+
47 
+
48 } // namespace media
+
49 } // namespace shaka
+
virtual std::string ToString() const
Definition: stream_info.cc:37
diff --git a/docs/df/d05/vp__codec__configuration__record_8cc_source.html b/docs/df/d05/vp__codec__configuration__record_8cc_source.html index e27665e3ff..21e3e2b3f2 100644 --- a/docs/df/d05/vp__codec__configuration__record_8cc_source.html +++ b/docs/df/d05/vp__codec__configuration__record_8cc_source.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
24  kFeatureChromaSubsampling = 4,
25 };
26 
-
27 std::string VPCodecAsString(VideoCodec codec) {
+
27 std::string VPCodecAsString(Codec codec) {
28  switch (codec) {
29  case kCodecVP8:
30  return "vp08";
@@ -294,7 +294,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
205  writer.SwapBuffer(data);
206 }
207 
-
208 std::string VPCodecConfigurationRecord::GetCodecString(VideoCodec codec) const {
+
208 std::string VPCodecConfigurationRecord::GetCodecString(Codec codec) const {
209  const std::string fields[] = {
210  base::IntToString(profile_),
211  base::IntToString(level_),
@@ -352,15 +352,15 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
void WriteMP4(std::vector< uint8_t > *data) const
+
void WriteWebM(std::vector< uint8_t > *data) const
bool ParseMP4(const std::vector< uint8_t > &data)
-
std::string GetCodecString(VideoCodec codec) const
bool ParseWebM(const std::vector< uint8_t > &data)
diff --git a/docs/df/d1a/offset__byte__queue_8cc_source.html b/docs/df/d1a/offset__byte__queue_8cc_source.html index 1ff0302c38..f6759fb1c8 100644 --- a/docs/df/d1a/offset__byte__queue_8cc_source.html +++ b/docs/df/d1a/offset__byte__queue_8cc_source.html @@ -164,7 +164,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d1c/classshaka_1_1media_1_1MediaSample-members.html b/docs/df/d1c/classshaka_1_1media_1_1MediaSample-members.html index 8930ee1fe3..93ec9943db 100644 --- a/docs/df/d1c/classshaka_1_1media_1_1MediaSample-members.html +++ b/docs/df/d1c/classshaka_1_1media_1_1MediaSample-members.html @@ -123,7 +123,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
KeySource::TrackType  track_type,
Codec codec,
KeySourcekey_source key_source,
bool webm_subsample_encryption 
diff --git a/docs/df/d1c/composition__offset__iterator_8h_source.html b/docs/df/d1c/composition__offset__iterator_8h_source.html index 958d1b3a72..9972ab0d3c 100644 --- a/docs/df/d1c/composition__offset__iterator_8h_source.html +++ b/docs/df/d1c/composition__offset__iterator_8h_source.html @@ -147,7 +147,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d21/classshaka_1_1media_1_1SegmentTestBase_1_1ClusterParser-members.html b/docs/df/d21/classshaka_1_1media_1_1SegmentTestBase_1_1ClusterParser-members.html index f5d334af1e..6c02642c6d 100644 --- a/docs/df/d21/classshaka_1_1media_1_1SegmentTestBase_1_1ClusterParser-members.html +++ b/docs/df/d21/classshaka_1_1media_1_1SegmentTestBase_1_1ClusterParser-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d22/validate__flag_8h_source.html b/docs/df/d22/validate__flag_8h_source.html index 70e8d31e3b..af3ec24d16 100644 --- a/docs/df/d22/validate__flag_8h_source.html +++ b/docs/df/d22/validate__flag_8h_source.html @@ -120,7 +120,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d2a/classshaka_1_1media_1_1mp4_1_1DecodingTimeIterator-members.html b/docs/df/d2a/classshaka_1_1media_1_1mp4_1_1DecodingTimeIterator-members.html index 5d4c1f39c9..23c730190a 100644 --- a/docs/df/d2a/classshaka_1_1media_1_1mp4_1_1DecodingTimeIterator-members.html +++ b/docs/df/d2a/classshaka_1_1media_1_1mp4_1_1DecodingTimeIterator-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d2d/classshaka_1_1media_1_1AesCbcDecryptor.html b/docs/df/d2d/classshaka_1_1media_1_1AesCbcDecryptor.html index d4a0a1888c..3e5cf12585 100644 --- a/docs/df/d2d/classshaka_1_1media_1_1AesCbcDecryptor.html +++ b/docs/df/d2d/classshaka_1_1media_1_1AesCbcDecryptor.html @@ -279,7 +279,7 @@ AES_KEY * mutable_aes_key< diff --git a/docs/df/d31/muxer__util_8cc_source.html b/docs/df/d31/muxer__util_8cc_source.html index 1e0dd8d504..e1e3f72759 100644 --- a/docs/df/d31/muxer__util_8cc_source.html +++ b/docs/df/d31/muxer__util_8cc_source.html @@ -264,7 +264,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d32/audio__stream__info_8h_source.html b/docs/df/d32/audio__stream__info_8h_source.html index 70da571a42..829d7acc9c 100644 --- a/docs/df/d32/audio__stream__info_8h_source.html +++ b/docs/df/d32/audio__stream__info_8h_source.html @@ -103,97 +103,68 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
14 namespace shaka {
15 namespace media {
16 
-
17 enum AudioCodec {
-
18  kUnknownAudioCodec = 0,
-
19  kCodecAAC,
-
20  kCodecAC3,
-
21  kCodecDTSC,
-
22  kCodecDTSE,
-
23  kCodecDTSH,
-
24  kCodecDTSL,
-
25  kCodecDTSM,
-
26  kCodecDTSP,
-
27  kCodecEAC3,
-
28  kCodecOpus,
-
29  kCodecVorbis,
-
30 
-
31  kNumAudioCodec
-
32 };
-
33 
-
35 class AudioStreamInfo : public StreamInfo {
-
36  public:
-
38  AudioStreamInfo(int track_id,
-
39  uint32_t time_scale,
-
40  uint64_t duration,
-
41  AudioCodec codec,
-
42  const std::string& codec_string,
-
43  const std::string& language,
-
44  uint8_t sample_bits,
-
45  uint8_t num_channels,
-
46  uint32_t sampling_frequency,
-
47  uint64_t seek_preroll_ns,
-
48  uint64_t codec_delay_ns,
-
49  uint32_t max_bitrate,
-
50  uint32_t avg_bitrate,
-
51  const uint8_t* codec_config,
-
52  size_t codec_config_size,
-
53  bool is_encrypted);
-
54 
-
57  bool IsValidConfig() const override;
-
58  std::string ToString() const override;
-
60 
-
61  AudioCodec codec() const { return codec_; }
-
62  uint8_t sample_bits() const { return sample_bits_; }
-
63  uint8_t sample_bytes() const { return sample_bits_ / 8; }
-
64  uint8_t num_channels() const { return num_channels_; }
-
65  uint32_t sampling_frequency() const { return sampling_frequency_; }
-
66  uint32_t bytes_per_frame() const {
-
67  return static_cast<uint32_t>(num_channels_) * sample_bits_ / 8;
-
68  }
-
69  uint64_t seek_preroll_ns() const { return seek_preroll_ns_; }
-
70  uint64_t codec_delay_ns() const { return codec_delay_ns_; }
-
71  uint32_t max_bitrate() const { return max_bitrate_; }
-
72  uint32_t avg_bitrate() const { return avg_bitrate_; }
-
73 
-
74  void set_codec(AudioCodec codec) { codec_ = codec; }
-
75  void set_sampling_frequency(const uint32_t sampling_frequency) {
-
76  sampling_frequency_ = sampling_frequency;
-
77  }
-
78 
-
81  static std::string GetCodecString(AudioCodec codec,
-
82  uint8_t audio_object_type);
-
83 
-
84  private:
-
85  ~AudioStreamInfo() override;
-
86 
-
87  AudioCodec codec_;
-
88  uint8_t sample_bits_;
-
89  uint8_t num_channels_;
-
90  uint32_t sampling_frequency_;
-
91  uint64_t seek_preroll_ns_;
-
92  uint64_t codec_delay_ns_;
-
93  uint32_t max_bitrate_;
-
94  uint32_t avg_bitrate_;
-
95 
-
96  // Not using DISALLOW_COPY_AND_ASSIGN here intentionally to allow the compiler
-
97  // generated copy constructor and assignment operator. Since the extra data is
-
98  // typically small, the performance impact is minimal.
-
99 };
-
100 
-
101 } // namespace media
-
102 } // namespace shaka
-
103 
-
104 #endif // MEDIA_BASE_AUDIO_STREAM_INFO_H_
-
static std::string GetCodecString(AudioCodec codec, uint8_t audio_object_type)
-
Abstract class holds stream information.
Definition: stream_info.h:26
-
AudioStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, AudioCodec codec, const std::string &codec_string, const std::string &language, uint8_t sample_bits, uint8_t num_channels, uint32_t sampling_frequency, uint64_t seek_preroll_ns, uint64_t codec_delay_ns, uint32_t max_bitrate, uint32_t avg_bitrate, const uint8_t *codec_config, size_t codec_config_size, bool is_encrypted)
Construct an initialized audio stream info object.
-
std::string ToString() const override
-
bool IsValidConfig() const override
-
Holds audio stream information.
+
18 class AudioStreamInfo : public StreamInfo {
+
19  public:
+
21  AudioStreamInfo(int track_id, uint32_t time_scale, uint64_t duration,
+
22  Codec codec, const std::string& codec_string,
+
23  const uint8_t* codec_config, size_t codec_config_size,
+
24  uint8_t sample_bits, uint8_t num_channels,
+
25  uint32_t sampling_frequency, uint64_t seek_preroll_ns,
+
26  uint64_t codec_delay_ns, uint32_t max_bitrate,
+
27  uint32_t avg_bitrate, const std::string& language,
+
28  bool is_encrypted);
+
29 
+
32  bool IsValidConfig() const override;
+
33  std::string ToString() const override;
+
35 
+
36  uint8_t sample_bits() const { return sample_bits_; }
+
37  uint8_t sample_bytes() const { return sample_bits_ / 8; }
+
38  uint8_t num_channels() const { return num_channels_; }
+
39  uint32_t sampling_frequency() const { return sampling_frequency_; }
+
40  uint32_t bytes_per_frame() const {
+
41  return static_cast<uint32_t>(num_channels_) * sample_bits_ / 8;
+
42  }
+
43  uint64_t seek_preroll_ns() const { return seek_preroll_ns_; }
+
44  uint64_t codec_delay_ns() const { return codec_delay_ns_; }
+
45  uint32_t max_bitrate() const { return max_bitrate_; }
+
46  uint32_t avg_bitrate() const { return avg_bitrate_; }
+
47 
+
48  void set_sampling_frequency(const uint32_t sampling_frequency) {
+
49  sampling_frequency_ = sampling_frequency;
+
50  }
+
51 
+
54  static std::string GetCodecString(Codec codec, uint8_t audio_object_type);
+
55 
+
56  private:
+
57  ~AudioStreamInfo() override;
+
58 
+
59  uint8_t sample_bits_;
+
60  uint8_t num_channels_;
+
61  uint32_t sampling_frequency_;
+
62  uint64_t seek_preroll_ns_;
+
63  uint64_t codec_delay_ns_;
+
64  uint32_t max_bitrate_;
+
65  uint32_t avg_bitrate_;
+
66 
+
67  // Not using DISALLOW_COPY_AND_ASSIGN here intentionally to allow the compiler
+
68  // generated copy constructor and assignment operator. Since the extra data is
+
69  // typically small, the performance impact is minimal.
+
70 };
+
71 
+
72 } // namespace media
+
73 } // namespace shaka
+
74 
+
75 #endif // MEDIA_BASE_AUDIO_STREAM_INFO_H_
+
Abstract class holds stream information.
Definition: stream_info.h:53
+
std::string ToString() const override
+
bool IsValidConfig() const override
+
static std::string GetCodecString(Codec codec, uint8_t audio_object_type)
+
AudioStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, Codec codec, const std::string &codec_string, const uint8_t *codec_config, size_t codec_config_size, uint8_t sample_bits, uint8_t num_channels, uint32_t sampling_frequency, uint64_t seek_preroll_ns, uint64_t codec_delay_ns, uint32_t max_bitrate, uint32_t avg_bitrate, const std::string &language, bool is_encrypted)
Construct an initialized audio stream info object.
+
Holds audio stream information.
diff --git a/docs/df/d33/classshaka_1_1AdaptationSet-members.html b/docs/df/d33/classshaka_1_1AdaptationSet-members.html index 08ae74ea6e..2ab34dec93 100644 --- a/docs/df/d33/classshaka_1_1AdaptationSet-members.html +++ b/docs/df/d33/classshaka_1_1AdaptationSet-members.html @@ -119,7 +119,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d38/structshaka_1_1media_1_1mp4_1_1ChunkInfo.html b/docs/df/d38/structshaka_1_1media_1_1mp4_1_1ChunkInfo.html index 14bb156bd6..89db15cd4a 100644 --- a/docs/df/d38/structshaka_1_1media_1_1mp4_1_1ChunkInfo.html +++ b/docs/df/d38/structshaka_1_1media_1_1mp4_1_1ChunkInfo.html @@ -115,7 +115,7 @@ uint32_t sample_descriptio diff --git a/docs/df/d38/structshaka_1_1media_1_1mp4_1_1MovieExtendsHeader-members.html b/docs/df/d38/structshaka_1_1media_1_1mp4_1_1MovieExtendsHeader-members.html index 608da62668..196cd68111 100644 --- a/docs/df/d38/structshaka_1_1media_1_1mp4_1_1MovieExtendsHeader-members.html +++ b/docs/df/d38/structshaka_1_1media_1_1mp4_1_1MovieExtendsHeader-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d3c/classshaka_1_1media_1_1RequestSigner.html b/docs/df/d3c/classshaka_1_1media_1_1RequestSigner.html index 2ae392a638..7f406a5be6 100644 --- a/docs/df/d3c/classshaka_1_1media_1_1RequestSigner.html +++ b/docs/df/d3c/classshaka_1_1media_1_1RequestSigner.html @@ -180,7 +180,7 @@ Protected Member Functions diff --git a/docs/df/d46/classshaka_1_1media_1_1Muxer.html b/docs/df/d46/classshaka_1_1media_1_1Muxer.html index 1508a576d0..34d02ecca0 100644 --- a/docs/df/d46/classshaka_1_1media_1_1Muxer.html +++ b/docs/df/d46/classshaka_1_1media_1_1Muxer.html @@ -342,7 +342,7 @@ class MediaStream diff --git a/docs/df/d46/classshaka_1_1media_1_1ThreadedIoFile-members.html b/docs/df/d46/classshaka_1_1media_1_1ThreadedIoFile-members.html index f3d4d9ade1..67c31298e9 100644 --- a/docs/df/d46/classshaka_1_1media_1_1ThreadedIoFile-members.html +++ b/docs/df/d46/classshaka_1_1media_1_1ThreadedIoFile-members.html @@ -120,7 +120,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d50/classshaka_1_1media_1_1mp2t_1_1AacProgramMapTableWriter-members.html b/docs/df/d50/classshaka_1_1media_1_1mp2t_1_1AacProgramMapTableWriter-members.html index 7fb5cf06f7..c2870cfb77 100644 --- a/docs/df/d50/classshaka_1_1media_1_1mp2t_1_1AacProgramMapTableWriter-members.html +++ b/docs/df/d50/classshaka_1_1media_1_1mp2t_1_1AacProgramMapTableWriter-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d51/classshaka_1_1media_1_1RsaPrivateKey-members.html b/docs/df/d51/classshaka_1_1media_1_1RsaPrivateKey-members.html index a7549016ae..a1d6a8d4f7 100644 --- a/docs/df/d51/classshaka_1_1media_1_1RsaPrivateKey-members.html +++ b/docs/df/d51/classshaka_1_1media_1_1RsaPrivateKey-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d51/classshaka_1_1media_1_1mp4_1_1EncryptingFragmenter-members.html b/docs/df/d51/classshaka_1_1media_1_1mp4_1_1EncryptingFragmenter-members.html index 64f02df5af..7c4caaba12 100644 --- a/docs/df/d51/classshaka_1_1media_1_1mp4_1_1EncryptingFragmenter-members.html +++ b/docs/df/d51/classshaka_1_1media_1_1mp4_1_1EncryptingFragmenter-members.html @@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d60/classshaka_1_1MockMpdBuilder.html b/docs/df/d60/classshaka_1_1MockMpdBuilder.html index 230819e4df..a48b06eb5d 100644 --- a/docs/df/d60/classshaka_1_1MockMpdBuilder.html +++ b/docs/df/d60/classshaka_1_1MockMpdBuilder.html @@ -153,7 +153,7 @@ Additional Inherited Members diff --git a/docs/df/d63/structshaka_1_1media_1_1mp4_1_1AudioRollRecoveryEntry-members.html b/docs/df/d63/structshaka_1_1media_1_1mp4_1_1AudioRollRecoveryEntry-members.html index 5212dbec6c..72d3ef9a82 100644 --- a/docs/df/d63/structshaka_1_1media_1_1mp4_1_1AudioRollRecoveryEntry-members.html +++ b/docs/df/d63/structshaka_1_1media_1_1mp4_1_1AudioRollRecoveryEntry-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d66/classshaka_1_1media_1_1KeyFetcher.html b/docs/df/d66/classshaka_1_1media_1_1KeyFetcher.html index 4e753a379c..6ac0c2fe35 100644 --- a/docs/df/d66/classshaka_1_1media_1_1KeyFetcher.html +++ b/docs/df/d66/classshaka_1_1media_1_1KeyFetcher.html @@ -177,7 +177,7 @@ Public Member Functions diff --git a/docs/df/d6a/classshaka_1_1MockMpdBuilder-members.html b/docs/df/d6a/classshaka_1_1MockMpdBuilder-members.html index 692523d582..1e794273d0 100644 --- a/docs/df/d6a/classshaka_1_1MockMpdBuilder-members.html +++ b/docs/df/d6a/classshaka_1_1MockMpdBuilder-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d6a/structshaka_1_1media_1_1mp4_1_1OpusSpecific-members.html b/docs/df/d6a/structshaka_1_1media_1_1mp4_1_1OpusSpecific-members.html index d06ab24c13..8a4a8a37d9 100644 --- a/docs/df/d6a/structshaka_1_1media_1_1mp4_1_1OpusSpecific-members.html +++ b/docs/df/d6a/structshaka_1_1media_1_1mp4_1_1OpusSpecific-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d7b/structshaka_1_1media_1_1mp4_1_1CompositionTimeToSample.html b/docs/df/d7b/structshaka_1_1media_1_1mp4_1_1CompositionTimeToSample.html index 27b89ed431..6553e068a4 100644 --- a/docs/df/d7b/structshaka_1_1media_1_1mp4_1_1CompositionTimeToSample.html +++ b/docs/df/d7b/structshaka_1_1media_1_1mp4_1_1CompositionTimeToSample.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/df/d7b/structshaka_1_1media_1_1mp4_1_1TrackFragment.html b/docs/df/d7b/structshaka_1_1media_1_1mp4_1_1TrackFragment.html index 8abd7bcd14..cd0b35dfdf 100644 --- a/docs/df/d7b/structshaka_1_1media_1_1mp4_1_1TrackFragment.html +++ b/docs/df/d7b/structshaka_1_1media_1_1mp4_1_1TrackFragment.html @@ -198,7 +198,7 @@ Additional Inherited Members diff --git a/docs/df/d7d/webm__info__parser_8cc_source.html b/docs/df/d7d/webm__info__parser_8cc_source.html index d09b2eae73..ee1d535dd6 100644 --- a/docs/df/d7d/webm__info__parser_8cc_source.html +++ b/docs/df/d7d/webm__info__parser_8cc_source.html @@ -200,7 +200,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d82/classshaka_1_1media_1_1DecoderConfigurationRecord-members.html b/docs/df/d82/classshaka_1_1media_1_1DecoderConfigurationRecord-members.html index 172ae59c90..85cef21416 100644 --- a/docs/df/d82/classshaka_1_1media_1_1DecoderConfigurationRecord-members.html +++ b/docs/df/d82/classshaka_1_1media_1_1DecoderConfigurationRecord-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d87/classshaka_1_1media_1_1AesCryptor.html b/docs/df/d87/classshaka_1_1media_1_1AesCryptor.html index bb3b47f525..9fec2a5f9c 100644 --- a/docs/df/d87/classshaka_1_1media_1_1AesCryptor.html +++ b/docs/df/d87/classshaka_1_1media_1_1AesCryptor.html @@ -424,7 +424,7 @@ AES_KEY * mutable_aes_key< diff --git a/docs/df/d8a/structshaka_1_1media_1_1mp4_1_1DataEntryUrl.html b/docs/df/d8a/structshaka_1_1media_1_1mp4_1_1DataEntryUrl.html index c2483499e9..8f653ab73c 100644 --- a/docs/df/d8a/structshaka_1_1media_1_1mp4_1_1DataEntryUrl.html +++ b/docs/df/d8a/structshaka_1_1media_1_1mp4_1_1DataEntryUrl.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/df/d8a/vp9__parser_8h_source.html b/docs/df/d8a/vp9__parser_8h_source.html index df1c162757..bd9f483636 100644 --- a/docs/df/d8a/vp9__parser_8h_source.html +++ b/docs/df/d8a/vp9__parser_8h_source.html @@ -136,7 +136,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d8a/vpx__parser_8h_source.html b/docs/df/d8a/vpx__parser_8h_source.html index 978b65a5f9..e6a23fbbc6 100644 --- a/docs/df/d8a/vpx__parser_8h_source.html +++ b/docs/df/d8a/vpx__parser_8h_source.html @@ -147,7 +147,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d8c/classshaka_1_1media_1_1mp4_1_1MultiSegmentSegmenter-members.html b/docs/df/d8c/classshaka_1_1media_1_1mp4_1_1MultiSegmentSegmenter-members.html index 922c94082a..3572b2b346 100644 --- a/docs/df/d8c/classshaka_1_1media_1_1mp4_1_1MultiSegmentSegmenter-members.html +++ b/docs/df/d8c/classshaka_1_1media_1_1mp4_1_1MultiSegmentSegmenter-members.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d8d/es__parser__h26x_8h_source.html b/docs/df/d8d/es__parser__h26x_8h_source.html index c77270712b..73bf691663 100644 --- a/docs/df/d8d/es__parser__h26x_8h_source.html +++ b/docs/df/d8d/es__parser__h26x_8h_source.html @@ -222,7 +222,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d94/classshaka_1_1RepresentationStateChangeListener.html b/docs/df/d94/classshaka_1_1RepresentationStateChangeListener.html index 7992d18951..68d8ece02c 100644 --- a/docs/df/d94/classshaka_1_1RepresentationStateChangeListener.html +++ b/docs/df/d94/classshaka_1_1RepresentationStateChangeListener.html @@ -195,7 +195,7 @@ Public Member Functions diff --git a/docs/df/d96/xml__node_8cc_source.html b/docs/df/d96/xml__node_8cc_source.html index 69fffa11c3..b67585d6b8 100644 --- a/docs/df/d96/xml__node_8cc_source.html +++ b/docs/df/d96/xml__node_8cc_source.html @@ -488,7 +488,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d9a/structshaka_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html b/docs/df/d9a/structshaka_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html index 73bdd5e749..5352789b54 100644 --- a/docs/df/d9a/structshaka_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html +++ b/docs/df/d9a/structshaka_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/df/d9e/classshaka_1_1xml_1_1RepresentationXmlNode.html b/docs/df/d9e/classshaka_1_1xml_1_1RepresentationXmlNode.html index 9f28f4f0f2..cd4310de80 100644 --- a/docs/df/d9e/classshaka_1_1xml_1_1RepresentationXmlNode.html +++ b/docs/df/d9e/classshaka_1_1xml_1_1RepresentationXmlNode.html @@ -311,7 +311,7 @@ Additional Inherited Members diff --git a/docs/df/da0/structshaka_1_1media_1_1mp4_1_1ChunkOffset-members.html b/docs/df/da0/structshaka_1_1media_1_1mp4_1_1ChunkOffset-members.html index d7c7e064ae..426e1eb4a4 100644 --- a/docs/df/da0/structshaka_1_1media_1_1mp4_1_1ChunkOffset-members.html +++ b/docs/df/da0/structshaka_1_1media_1_1mp4_1_1ChunkOffset-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/da5/structshaka_1_1media_1_1mp4_1_1CueIDBox-members.html b/docs/df/da5/structshaka_1_1media_1_1mp4_1_1CueIDBox-members.html index ab29ce7d9e..3d8011c516 100644 --- a/docs/df/da5/structshaka_1_1media_1_1mp4_1_1CueIDBox-members.html +++ b/docs/df/da5/structshaka_1_1media_1_1mp4_1_1CueIDBox-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/dad/decrypt__config_8h_source.html b/docs/df/dad/decrypt__config_8h_source.html index 1f876dcce0..6363b8b6da 100644 --- a/docs/df/dad/decrypt__config_8h_source.html +++ b/docs/df/dad/decrypt__config_8h_source.html @@ -168,7 +168,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/db8/structshaka_1_1media_1_1StreamDescriptor-members.html b/docs/df/db8/structshaka_1_1media_1_1StreamDescriptor-members.html index 6b9a692cfc..3dfe1d14e5 100644 --- a/docs/df/db8/structshaka_1_1media_1_1StreamDescriptor-members.html +++ b/docs/df/db8/structshaka_1_1media_1_1StreamDescriptor-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/dc7/avc__decoder__configuration__record_8h_source.html b/docs/df/dc7/avc__decoder__configuration__record_8h_source.html index 472c64135a..4936c65228 100644 --- a/docs/df/dc7/avc__decoder__configuration__record_8h_source.html +++ b/docs/df/dc7/avc__decoder__configuration__record_8h_source.html @@ -153,7 +153,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/dd2/mpd__utils_8h_source.html b/docs/df/dd2/mpd__utils_8h_source.html index 057a4852bd..0f823d3af2 100644 --- a/docs/df/dd2/mpd__utils_8h_source.html +++ b/docs/df/dd2/mpd__utils_8h_source.html @@ -174,7 +174,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/dd2/structshaka_1_1media_1_1H264Pps-members.html b/docs/df/dd2/structshaka_1_1media_1_1H264Pps-members.html index 4d5e33e6b4..97c7d52977 100644 --- a/docs/df/dd2/structshaka_1_1media_1_1H264Pps-members.html +++ b/docs/df/dd2/structshaka_1_1media_1_1H264Pps-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/ddc/webm_2segmenter_8h_source.html b/docs/df/ddc/webm_2segmenter_8h_source.html index 4521511a0b..cb6c48e804 100644 --- a/docs/df/ddc/webm_2segmenter_8h_source.html +++ b/docs/df/ddc/webm_2segmenter_8h_source.html @@ -225,32 +225,32 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
166 } // namespace shaka
167 
168 #endif // MEDIA_FORMATS_WEBM_SEGMENTER_H_
-
Status WriteSegmentHeader(uint64_t file_size, MkvWriter *writer)
Writes the Segment header to writer.
Definition: segmenter.cc:207
-
Abstract class holds stream information.
Definition: stream_info.h:26
- -
Status AddSample(scoped_refptr< MediaSample > sample)
Definition: segmenter.cc:117
+
Status WriteSegmentHeader(uint64_t file_size, MkvWriter *writer)
Writes the Segment header to writer.
Definition: segmenter.cc:208
+
Abstract class holds stream information.
Definition: stream_info.h:53
+ +
Status AddSample(scoped_refptr< MediaSample > sample)
Definition: segmenter.cc:118
This structure contains the list of configuration options for Muxer.
Definition: muxer_options.h:18
-
Status SetCluster(uint64_t start_webm_timecode, uint64_t position, MkvWriter *writer)
Creates a Cluster object with the given parameters.
Definition: segmenter.cc:245
+
Status SetCluster(uint64_t start_webm_timecode, uint64_t position, MkvWriter *writer)
Creates a Cluster object with the given parameters.
Definition: segmenter.cc:246
This class listens to progress updates events.
virtual bool GetIndexRangeStartAndEnd(uint64_t *start, uint64_t *end)=0
Status Initialize(scoped_ptr< MkvWriter > writer, StreamInfo *info, ProgressListener *progress_listener, MuxerListener *muxer_listener, KeySource *encryption_key_source, uint32_t max_sd_pixels, double clear_lead_in_seconds)
Definition: segmenter.cc:49
An implementation of IMkvWriter using our File type.
Definition: mkv_writer.h:21
- +
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:31
-
void UpdateProgress(uint64_t progress)
Update segmentation progress using ProgressListener.
Definition: segmenter.cc:254
+
void UpdateProgress(uint64_t progress)
Update segmentation progress using ProgressListener.
Definition: segmenter.cc:255
virtual bool GetInitRangeStartAndEnd(uint64_t *start, uint64_t *end)=0
-
uint64_t FromWebMTimecode(uint64_t time_webm_timecode)
Converts the given time in WebM timecode to ISO BMFF timescale.
Definition: segmenter.cc:201
-
Holds video stream information.
-
Holds audio stream information.
-
uint64_t FromBMFFTimescale(uint64_t time_timescale)
Definition: segmenter.cc:194
+
uint64_t FromWebMTimecode(uint64_t time_webm_timecode)
Converts the given time in WebM timecode to ISO BMFF timescale.
Definition: segmenter.cc:202
+
Holds video stream information.
+
Holds audio stream information.
+
uint64_t FromBMFFTimescale(uint64_t time_timescale)
Definition: segmenter.cc:195
diff --git a/docs/df/dde/ts__section__psi_8cc_source.html b/docs/df/dde/ts__section__psi_8cc_source.html index 4f55668500..9297f0f41f 100644 --- a/docs/df/dde/ts__section__psi_8cc_source.html +++ b/docs/df/dde/ts__section__psi_8cc_source.html @@ -228,7 +228,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/de2/structshaka_1_1media_1_1H264SEIRecoveryPoint.html b/docs/df/de2/structshaka_1_1media_1_1H264SEIRecoveryPoint.html index 84336d122b..bb8ef140b9 100644 --- a/docs/df/de2/structshaka_1_1media_1_1H264SEIRecoveryPoint.html +++ b/docs/df/de2/structshaka_1_1media_1_1H264SEIRecoveryPoint.html @@ -118,7 +118,7 @@ int changing_slice_group_i diff --git a/docs/df/de3/text__track__config_8cc_source.html b/docs/df/de3/text__track__config_8cc_source.html index 05851c502a..5573dc07dd 100644 --- a/docs/df/de3/text__track__config_8cc_source.html +++ b/docs/df/de3/text__track__config_8cc_source.html @@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/de9/segment__info_8h_source.html b/docs/df/de9/segment__info_8h_source.html index 5805839677..20cdb6b6b7 100644 --- a/docs/df/de9/segment__info_8h_source.html +++ b/docs/df/de9/segment__info_8h_source.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/df1/structshaka_1_1ContentProtectionElement-members.html b/docs/df/df1/structshaka_1_1ContentProtectionElement-members.html index ed27fd2b04..22bcc959aa 100644 --- a/docs/df/df1/structshaka_1_1ContentProtectionElement-members.html +++ b/docs/df/df1/structshaka_1_1ContentProtectionElement-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dir_0494b8c96e3190a776d2b97ade9c8ddf.html b/docs/dir_0494b8c96e3190a776d2b97ade9c8ddf.html index f8ba3c2c62..70abf04aa5 100644 --- a/docs/dir_0494b8c96e3190a776d2b97ade9c8ddf.html +++ b/docs/dir_0494b8c96e3190a776d2b97ade9c8ddf.html @@ -165,7 +165,7 @@ Files diff --git a/docs/dir_2618cd273dea54f184e42d7a562af818.html b/docs/dir_2618cd273dea54f184e42d7a562af818.html index 593576dbce..2a771557f3 100644 --- a/docs/dir_2618cd273dea54f184e42d7a562af818.html +++ b/docs/dir_2618cd273dea54f184e42d7a562af818.html @@ -140,7 +140,7 @@ Files diff --git a/docs/dir_279fd47bebb21302c25cfb685e84c359.html b/docs/dir_279fd47bebb21302c25cfb685e84c359.html index 74cd0346d0..add3429b0a 100644 --- a/docs/dir_279fd47bebb21302c25cfb685e84c359.html +++ b/docs/dir_279fd47bebb21302c25cfb685e84c359.html @@ -119,7 +119,7 @@ Files diff --git a/docs/dir_2eceb70145328c029a5f43350007537a.html b/docs/dir_2eceb70145328c029a5f43350007537a.html index 5c6ca22317..e4497160e0 100644 --- a/docs/dir_2eceb70145328c029a5f43350007537a.html +++ b/docs/dir_2eceb70145328c029a5f43350007537a.html @@ -93,7 +93,7 @@ Files diff --git a/docs/dir_39dc0668bd5a501998f94e8b4e546c71.html b/docs/dir_39dc0668bd5a501998f94e8b4e546c71.html index 8673d6d722..2f3926ca21 100644 --- a/docs/dir_39dc0668bd5a501998f94e8b4e546c71.html +++ b/docs/dir_39dc0668bd5a501998f94e8b4e546c71.html @@ -99,7 +99,7 @@ Directories diff --git a/docs/dir_3e9291fd7a18fdecc763294cb2628910.html b/docs/dir_3e9291fd7a18fdecc763294cb2628910.html index 5354354470..b2b6bfc4bb 100644 --- a/docs/dir_3e9291fd7a18fdecc763294cb2628910.html +++ b/docs/dir_3e9291fd7a18fdecc763294cb2628910.html @@ -157,7 +157,7 @@ Files diff --git a/docs/dir_49627ef5ef0630f6cf11dd06344c4cf0.html b/docs/dir_49627ef5ef0630f6cf11dd06344c4cf0.html index 417a3fd3b4..b44baecf51 100644 --- a/docs/dir_49627ef5ef0630f6cf11dd06344c4cf0.html +++ b/docs/dir_49627ef5ef0630f6cf11dd06344c4cf0.html @@ -93,7 +93,7 @@ Files diff --git a/docs/dir_5039d854a18988ed1f1dbebc120ffbf7.html b/docs/dir_5039d854a18988ed1f1dbebc120ffbf7.html index 539146e522..e2ecb9a580 100644 --- a/docs/dir_5039d854a18988ed1f1dbebc120ffbf7.html +++ b/docs/dir_5039d854a18988ed1f1dbebc120ffbf7.html @@ -181,7 +181,7 @@ Files diff --git a/docs/dir_65f7acfa8cf3a5f1edc11faa2428b914.html b/docs/dir_65f7acfa8cf3a5f1edc11faa2428b914.html index 07b60d44c6..75467ca3ac 100644 --- a/docs/dir_65f7acfa8cf3a5f1edc11faa2428b914.html +++ b/docs/dir_65f7acfa8cf3a5f1edc11faa2428b914.html @@ -101,7 +101,7 @@ Directories diff --git a/docs/dir_679a6f4e9fa092b388fc986148018f2a.html b/docs/dir_679a6f4e9fa092b388fc986148018f2a.html index 33021ba2bd..da3c65d661 100644 --- a/docs/dir_679a6f4e9fa092b388fc986148018f2a.html +++ b/docs/dir_679a6f4e9fa092b388fc986148018f2a.html @@ -95,7 +95,7 @@ Files diff --git a/docs/dir_7f5e01ba7faf319a30cabd201b6ef121.html b/docs/dir_7f5e01ba7faf319a30cabd201b6ef121.html index 23d2735f12..eafabbeb99 100644 --- a/docs/dir_7f5e01ba7faf319a30cabd201b6ef121.html +++ b/docs/dir_7f5e01ba7faf319a30cabd201b6ef121.html @@ -93,7 +93,7 @@ Files diff --git a/docs/dir_89dd766eb2df7d7257dbe806a34404af.html b/docs/dir_89dd766eb2df7d7257dbe806a34404af.html index 400c105bd1..426e3edccd 100644 --- a/docs/dir_89dd766eb2df7d7257dbe806a34404af.html +++ b/docs/dir_89dd766eb2df7d7257dbe806a34404af.html @@ -93,7 +93,7 @@ Directories diff --git a/docs/dir_aa73376d632f252584a1c0dfbefab2c4.html b/docs/dir_aa73376d632f252584a1c0dfbefab2c4.html index 194426e261..451011aaa9 100644 --- a/docs/dir_aa73376d632f252584a1c0dfbefab2c4.html +++ b/docs/dir_aa73376d632f252584a1c0dfbefab2c4.html @@ -117,7 +117,7 @@ Files diff --git a/docs/dir_c6ada2450b25ab5438a4dba6c9b890af.html b/docs/dir_c6ada2450b25ab5438a4dba6c9b890af.html index 2bc160e7e6..5f3e8aae96 100644 --- a/docs/dir_c6ada2450b25ab5438a4dba6c9b890af.html +++ b/docs/dir_c6ada2450b25ab5438a4dba6c9b890af.html @@ -245,7 +245,7 @@ Files diff --git a/docs/dir_d422163b96683743ed3963d4aac17747.html b/docs/dir_d422163b96683743ed3963d4aac17747.html index ff077a182e..c177356a5c 100644 --- a/docs/dir_d422163b96683743ed3963d4aac17747.html +++ b/docs/dir_d422163b96683743ed3963d4aac17747.html @@ -135,7 +135,7 @@ Files diff --git a/docs/dir_eeaeb49ac3913fcfb450d3ce9cc0141b.html b/docs/dir_eeaeb49ac3913fcfb450d3ce9cc0141b.html index af4c8d4819..76a859fe32 100644 --- a/docs/dir_eeaeb49ac3913fcfb450d3ce9cc0141b.html +++ b/docs/dir_eeaeb49ac3913fcfb450d3ce9cc0141b.html @@ -93,7 +93,7 @@ Files diff --git a/docs/dir_f7dcbe7025bbacfc4b9a7dff6ad41d72.html b/docs/dir_f7dcbe7025bbacfc4b9a7dff6ad41d72.html index 481a8a62d4..fc86413b09 100644 --- a/docs/dir_f7dcbe7025bbacfc4b9a7dff6ad41d72.html +++ b/docs/dir_f7dcbe7025bbacfc4b9a7dff6ad41d72.html @@ -171,7 +171,7 @@ Files diff --git a/docs/files.html b/docs/files.html index 50feba4f0d..2ea2335b88 100644 --- a/docs/files.html +++ b/docs/files.html @@ -430,7 +430,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions.html b/docs/functions.html index 34b28c0a75..06a494569d 100644 --- a/docs/functions.html +++ b/docs/functions.html @@ -231,7 +231,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : shaka::media::AACAudioSpecificConfig
  • AudioStreamInfo() -: shaka::media::AudioStreamInfo +: shaka::media::AudioStreamInfo
  • AuxInfoNeedsToBeCached() : shaka::media::mp4::TrackRunIterator @@ -240,7 +240,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_b.html b/docs/functions_b.html index e5297c3835..298cc7ad40 100644 --- a/docs/functions_b.html +++ b/docs/functions_b.html @@ -240,7 +240,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_c.html b/docs/functions_c.html index 2e8df11a9f..b663c36ea5 100644 --- a/docs/functions_c.html +++ b/docs/functions_c.html @@ -241,7 +241,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_d.html b/docs/functions_d.html index 968e85f836..c58453eb66 100644 --- a/docs/functions_d.html +++ b/docs/functions_d.html @@ -162,7 +162,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_e.html b/docs/functions_e.html index 5731fd266c..86ae8249eb 100644 --- a/docs/functions_e.html +++ b/docs/functions_e.html @@ -146,7 +146,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_enum.html b/docs/functions_enum.html index a7b4c6bc8d..a6bf183263 100644 --- a/docs/functions_enum.html +++ b/docs/functions_enum.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_eval.html b/docs/functions_eval.html index d8d2220677..80f58754cf 100644 --- a/docs/functions_eval.html +++ b/docs/functions_eval.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_f.html b/docs/functions_f.html index 51c98563a4..27a690bf88 100644 --- a/docs/functions_f.html +++ b/docs/functions_f.html @@ -193,7 +193,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func.html b/docs/functions_func.html index b46a182aff..32c528c796 100644 --- a/docs/functions_func.html +++ b/docs/functions_func.html @@ -231,7 +231,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : shaka::media::AACAudioSpecificConfig
  • AudioStreamInfo() -: shaka::media::AudioStreamInfo +: shaka::media::AudioStreamInfo
  • AuxInfoNeedsToBeCached() : shaka::media::mp4::TrackRunIterator @@ -240,7 +240,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_b.html b/docs/functions_func_b.html index b1c08823e4..d1af9dda97 100644 --- a/docs/functions_func_b.html +++ b/docs/functions_func_b.html @@ -237,7 +237,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_c.html b/docs/functions_func_c.html index e8c18bb399..ab88d738ae 100644 --- a/docs/functions_func_c.html +++ b/docs/functions_func_c.html @@ -241,7 +241,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_d.html b/docs/functions_func_d.html index d37abef476..5d8ee69fad 100644 --- a/docs/functions_func_d.html +++ b/docs/functions_func_d.html @@ -162,7 +162,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_e.html b/docs/functions_func_e.html index 0d154ffd84..62618cb9ed 100644 --- a/docs/functions_func_e.html +++ b/docs/functions_func_e.html @@ -146,7 +146,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_f.html b/docs/functions_func_f.html index d9cecb3ce8..e7420245ee 100644 --- a/docs/functions_func_f.html +++ b/docs/functions_func_f.html @@ -187,7 +187,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_g.html b/docs/functions_func_g.html index f7b9367367..6dfe3ccf32 100644 --- a/docs/functions_func_g.html +++ b/docs/functions_func_g.html @@ -153,10 +153,10 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : shaka::media::WebMAudioClient
  • GetCodecString() -: shaka::media::AudioStreamInfo +: shaka::media::AudioStreamInfo , shaka::media::AVCDecoderConfigurationRecord -, shaka::media::HEVCDecoderConfigurationRecord -, shaka::media::VPCodecConfigurationRecord +, shaka::media::HEVCDecoderConfigurationRecord +, shaka::media::VPCodecConfigurationRecord
  • GetCryptoPeriodKey() : shaka::media::FixedKeySource @@ -259,7 +259,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_h.html b/docs/functions_func_h.html index 8591ddaaf0..bcf68a7e4a 100644 --- a/docs/functions_func_h.html +++ b/docs/functions_func_h.html @@ -154,7 +154,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_i.html b/docs/functions_func_i.html index d2a74ec1d1..a6ca867c7c 100644 --- a/docs/functions_func_i.html +++ b/docs/functions_func_i.html @@ -151,7 +151,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); , shaka::media::mp4::Segmenter , shaka::media::NalUnitToByteStreamConverter , shaka::media::VideoSliceHeaderParser -, shaka::media::webm::Encryptor +, shaka::media::webm::Encryptor , shaka::media::webm::Segmenter
  • InitializeFragment() @@ -210,7 +210,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_k.html b/docs/functions_func_k.html index 960ea4c19e..c266f657bd 100644 --- a/docs/functions_func_k.html +++ b/docs/functions_func_k.html @@ -129,7 +129,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_l.html b/docs/functions_func_l.html index 3f8040ec46..127c3aeff6 100644 --- a/docs/functions_func_l.html +++ b/docs/functions_func_l.html @@ -135,7 +135,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_m.html b/docs/functions_func_m.html index 1a0cc1afd0..a9158189f5 100644 --- a/docs/functions_func_m.html +++ b/docs/functions_func_m.html @@ -147,7 +147,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_n.html b/docs/functions_func_n.html index 9105f00cef..f93ff81bc0 100644 --- a/docs/functions_func_n.html +++ b/docs/functions_func_n.html @@ -172,7 +172,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_o.html b/docs/functions_func_o.html index f94c9506a7..81f84297b7 100644 --- a/docs/functions_func_o.html +++ b/docs/functions_func_o.html @@ -193,7 +193,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_p.html b/docs/functions_func_p.html index b2a8318aec..85310bdd6d 100644 --- a/docs/functions_func_p.html +++ b/docs/functions_func_p.html @@ -228,7 +228,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_r.html b/docs/functions_func_r.html index 5b1fb5074f..02ca2f47ff 100644 --- a/docs/functions_func_r.html +++ b/docs/functions_func_r.html @@ -201,7 +201,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_s.html b/docs/functions_func_s.html index e5e718b594..dc963654ce 100644 --- a/docs/functions_func_s.html +++ b/docs/functions_func_s.html @@ -285,7 +285,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_t.html b/docs/functions_func_t.html index 2b132e5d00..d674dc18b3 100644 --- a/docs/functions_func_t.html +++ b/docs/functions_func_t.html @@ -139,7 +139,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : shaka::media::SegmentTestBase
  • TextStreamInfo() -: shaka::media::TextStreamInfo +: shaka::media::TextStreamInfo
  • ToString() : shaka::media::AudioStreamInfo @@ -179,7 +179,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_u.html b/docs/functions_func_u.html index 7f82f8f7ea..f772440803 100644 --- a/docs/functions_func_u.html +++ b/docs/functions_func_u.html @@ -146,7 +146,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_v.html b/docs/functions_func_v.html index 72696fdd32..431f720e60 100644 --- a/docs/functions_func_v.html +++ b/docs/functions_func_v.html @@ -129,13 +129,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : shaka::media::mp4::TrackRunIterator
  • VideoStreamInfo() -: shaka::media::VideoStreamInfo +: shaka::media::VideoStreamInfo
  • diff --git a/docs/functions_func_w.html b/docs/functions_func_w.html index be90aa10d1..7b2f4b9a33 100644 --- a/docs/functions_func_w.html +++ b/docs/functions_func_w.html @@ -182,7 +182,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_x.html b/docs/functions_func_x.html index 758243767b..84ff4865c4 100644 --- a/docs/functions_func_x.html +++ b/docs/functions_func_x.html @@ -129,7 +129,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_~.html b/docs/functions_func_~.html index 25b21fa87c..1aee803968 100644 --- a/docs/functions_func_~.html +++ b/docs/functions_func_~.html @@ -132,7 +132,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_g.html b/docs/functions_g.html index 9f5012a5c2..b85a5b0701 100644 --- a/docs/functions_g.html +++ b/docs/functions_g.html @@ -153,10 +153,10 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : shaka::media::WebMAudioClient
  • GetCodecString() -: shaka::media::AudioStreamInfo +: shaka::media::AudioStreamInfo , shaka::media::AVCDecoderConfigurationRecord -, shaka::media::HEVCDecoderConfigurationRecord -, shaka::media::VPCodecConfigurationRecord +, shaka::media::HEVCDecoderConfigurationRecord +, shaka::media::VPCodecConfigurationRecord
  • GetCryptoPeriodKey() : shaka::media::FixedKeySource @@ -259,7 +259,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_h.html b/docs/functions_h.html index 45b2c28342..3447e4bc75 100644 --- a/docs/functions_h.html +++ b/docs/functions_h.html @@ -154,7 +154,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_i.html b/docs/functions_i.html index 1139577fd4..1da09fe33d 100644 --- a/docs/functions_i.html +++ b/docs/functions_i.html @@ -154,7 +154,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); , shaka::media::mp4::Segmenter , shaka::media::NalUnitToByteStreamConverter , shaka::media::VideoSliceHeaderParser -, shaka::media::webm::Encryptor +, shaka::media::webm::Encryptor , shaka::media::webm::Segmenter
  • InitializeFragment() @@ -213,7 +213,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_k.html b/docs/functions_k.html index b119d725c3..8a89b50837 100644 --- a/docs/functions_k.html +++ b/docs/functions_k.html @@ -150,7 +150,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_l.html b/docs/functions_l.html index 26b590983a..9c13f57c03 100644 --- a/docs/functions_l.html +++ b/docs/functions_l.html @@ -135,7 +135,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_m.html b/docs/functions_m.html index d1e2655069..098a2d060f 100644 --- a/docs/functions_m.html +++ b/docs/functions_m.html @@ -150,7 +150,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_n.html b/docs/functions_n.html index 7cb20ad8be..d8db95b425 100644 --- a/docs/functions_n.html +++ b/docs/functions_n.html @@ -178,7 +178,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_o.html b/docs/functions_o.html index 1771ba5e09..da33cd485f 100644 --- a/docs/functions_o.html +++ b/docs/functions_o.html @@ -196,7 +196,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_p.html b/docs/functions_p.html index 2daeb92793..d35b5c496a 100644 --- a/docs/functions_p.html +++ b/docs/functions_p.html @@ -234,7 +234,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_r.html b/docs/functions_r.html index 198b5b1fb2..c6ec3d0072 100644 --- a/docs/functions_r.html +++ b/docs/functions_r.html @@ -201,7 +201,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_s.html b/docs/functions_s.html index d823c13f8d..02e901e6fe 100644 --- a/docs/functions_s.html +++ b/docs/functions_s.html @@ -300,7 +300,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_t.html b/docs/functions_t.html index 6c2201552b..217e50e6c6 100644 --- a/docs/functions_t.html +++ b/docs/functions_t.html @@ -142,7 +142,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : shaka::media::SegmentTestBase
  • TextStreamInfo() -: shaka::media::TextStreamInfo +: shaka::media::TextStreamInfo
  • ToString() : shaka::media::AudioStreamInfo @@ -182,7 +182,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_type.html b/docs/functions_type.html index 879fa72461..3597de607d 100644 --- a/docs/functions_type.html +++ b/docs/functions_type.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_u.html b/docs/functions_u.html index b3ceb7225b..ed35e3461a 100644 --- a/docs/functions_u.html +++ b/docs/functions_u.html @@ -146,7 +146,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_v.html b/docs/functions_v.html index abf7ea0223..5977e7524b 100644 --- a/docs/functions_v.html +++ b/docs/functions_v.html @@ -129,13 +129,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : shaka::media::mp4::TrackRunIterator
  • VideoStreamInfo() -: shaka::media::VideoStreamInfo +: shaka::media::VideoStreamInfo
  • diff --git a/docs/functions_vars.html b/docs/functions_vars.html index afd7c05e43..95e81a67d9 100644 --- a/docs/functions_vars.html +++ b/docs/functions_vars.html @@ -145,7 +145,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_w.html b/docs/functions_w.html index d68b6f7b23..4e30e78092 100644 --- a/docs/functions_w.html +++ b/docs/functions_w.html @@ -182,7 +182,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_x.html b/docs/functions_x.html index 8fa1b845bd..940f0168af 100644 --- a/docs/functions_x.html +++ b/docs/functions_x.html @@ -129,7 +129,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_~.html b/docs/functions_~.html index bbfefadd30..ff6a2535c1 100644 --- a/docs/functions_~.html +++ b/docs/functions_~.html @@ -132,7 +132,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/hierarchy.html b/docs/hierarchy.html index 85cd65fc9e..92e961f285 100644 --- a/docs/hierarchy.html +++ b/docs/hierarchy.html @@ -368,7 +368,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/index.html b/docs/index.html index 2b016bb893..ec2f586631 100644 --- a/docs/index.html +++ b/docs/index.html @@ -81,7 +81,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/namespacemembers.html b/docs/namespacemembers.html index 5c7ad1807d..cf0fe7fc8a 100644 --- a/docs/namespacemembers.html +++ b/docs/namespacemembers.html @@ -124,7 +124,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/namespacemembers_func.html b/docs/namespacemembers_func.html index 53ad01caae..7445f17e12 100644 --- a/docs/namespacemembers_func.html +++ b/docs/namespacemembers_func.html @@ -124,7 +124,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/namespaces.html b/docs/namespaces.html index 8557238662..7cc1589e13 100644 --- a/docs/namespaces.html +++ b/docs/namespaces.html @@ -92,7 +92,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/search/all_0.js b/docs/search/all_0.js index b79537e5b2..5e5990c7a3 100644 --- a/docs/search/all_0.js +++ b/docs/search/all_0.js @@ -49,7 +49,7 @@ var searchData= ['audiorollrecoveryentry',['AudioRollRecoveryEntry',['../da/d6e/structshaka_1_1media_1_1mp4_1_1AudioRollRecoveryEntry.html',1,'shaka::media::mp4']]], ['audiosampleentry',['AudioSampleEntry',['../d8/d5b/structshaka_1_1media_1_1mp4_1_1AudioSampleEntry.html',1,'shaka::media::mp4']]], ['audiostreaminfo',['AudioStreamInfo',['../da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html',1,'shaka::media']]], - ['audiostreaminfo',['AudioStreamInfo',['../da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html#a90bac4407cc8f295781b4819c60da771',1,'shaka::media::AudioStreamInfo']]], + ['audiostreaminfo',['AudioStreamInfo',['../da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html#a1333ea7b15790da37addb60ba49131b4',1,'shaka::media::AudioStreamInfo']]], ['audiotimestamphelper',['AudioTimestampHelper',['../d0/d4d/classshaka_1_1media_1_1AudioTimestampHelper.html',1,'shaka::media']]], ['auxinfoneedstobecached',['AuxInfoNeedsToBeCached',['../de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html#a8d4fb433e66fec693035cac796ca6851',1,'shaka::media::mp4::TrackRunIterator']]], ['avcdecoderconfigurationrecord',['AVCDecoderConfigurationRecord',['../d6/d57/classshaka_1_1media_1_1AVCDecoderConfigurationRecord.html',1,'shaka::media']]] diff --git a/docs/search/all_11.js b/docs/search/all_11.js index e9f196abfe..3bb1b32f61 100644 --- a/docs/search/all_11.js +++ b/docs/search/all_11.js @@ -7,7 +7,7 @@ var searchData= ['templatefilename',['TemplateFileName',['../d2/dba/classshaka_1_1media_1_1SegmentTestBase.html#afa2cdde90c04bf69301a9589faa7efd9',1,'shaka::media::SegmentTestBase']]], ['textsampleentry',['TextSampleEntry',['../d7/dc3/structshaka_1_1media_1_1mp4_1_1TextSampleEntry.html',1,'shaka::media::mp4']]], ['textstreaminfo',['TextStreamInfo',['../db/dab/classshaka_1_1media_1_1TextStreamInfo.html',1,'shaka::media']]], - ['textstreaminfo',['TextStreamInfo',['../db/dab/classshaka_1_1media_1_1TextStreamInfo.html#a643174313de01f895f8e494c15010fdc',1,'shaka::media::TextStreamInfo']]], + ['textstreaminfo',['TextStreamInfo',['../db/dab/classshaka_1_1media_1_1TextStreamInfo.html#a3cc97869179c6e1f845ee84ba630048f',1,'shaka::media::TextStreamInfo']]], ['texttrack',['TextTrack',['../d4/d0b/classshaka_1_1media_1_1TextTrack.html',1,'shaka::media']]], ['texttrackconfig',['TextTrackConfig',['../de/db3/classshaka_1_1media_1_1TextTrackConfig.html',1,'shaka::media']]], ['threadediofile',['ThreadedIoFile',['../d0/d66/classshaka_1_1media_1_1ThreadedIoFile.html',1,'shaka::media']]], diff --git a/docs/search/all_13.js b/docs/search/all_13.js index 52981f1a85..35f01f5ab9 100644 --- a/docs/search/all_13.js +++ b/docs/search/all_13.js @@ -8,7 +8,7 @@ var searchData= ['videomediaheader',['VideoMediaHeader',['../d1/db0/structshaka_1_1media_1_1mp4_1_1VideoMediaHeader.html',1,'shaka::media::mp4']]], ['videosampleentry',['VideoSampleEntry',['../d0/d73/structshaka_1_1media_1_1mp4_1_1VideoSampleEntry.html',1,'shaka::media::mp4']]], ['videosliceheaderparser',['VideoSliceHeaderParser',['../dd/de4/classshaka_1_1media_1_1VideoSliceHeaderParser.html',1,'shaka::media']]], - ['videostreaminfo',['VideoStreamInfo',['../d6/db1/classshaka_1_1media_1_1VideoStreamInfo.html#a3f4380f77c0846fc07e07df40d5eb618',1,'shaka::media::VideoStreamInfo']]], + ['videostreaminfo',['VideoStreamInfo',['../d6/db1/classshaka_1_1media_1_1VideoStreamInfo.html#a3de6a7d65ddd877c513f3047a86db59e',1,'shaka::media::VideoStreamInfo']]], ['videostreaminfo',['VideoStreamInfo',['../d6/db1/classshaka_1_1media_1_1VideoStreamInfo.html',1,'shaka::media']]], ['videostreaminfoparameters',['VideoStreamInfoParameters',['../d6/d26/structshaka_1_1media_1_1VideoStreamInfoParameters.html',1,'shaka::media']]], ['vodmediainfodumpmuxerlistener',['VodMediaInfoDumpMuxerListener',['../db/dd0/classshaka_1_1media_1_1VodMediaInfoDumpMuxerListener.html',1,'shaka::media']]], diff --git a/docs/search/all_6.js b/docs/search/all_6.js index 6960eaa9c5..91432de582 100644 --- a/docs/search/all_6.js +++ b/docs/search/all_6.js @@ -9,7 +9,7 @@ var searchData= ['getaudiodefaultduration',['GetAudioDefaultDuration',['../d8/d86/classshaka_1_1media_1_1WebMTracksParser.html#a554135ee3a8ad995beeab868c67aba36',1,'shaka::media::WebMTracksParser']]], ['getaudiospecificconfig',['GetAudioSpecificConfig',['../d3/d0c/classshaka_1_1media_1_1mp2t_1_1AdtsHeader.html#a5ca14cc4eb4a28906fe832ab263ba5a2',1,'shaka::media::mp2t::AdtsHeader']]], ['getaudiostreaminfo',['GetAudioStreamInfo',['../d3/d7c/classshaka_1_1media_1_1WebMAudioClient.html#a8a23999bc3e6e88276d3ad62bd81e63f',1,'shaka::media::WebMAudioClient']]], - ['getcodecstring',['GetCodecString',['../da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html#a2a09eeb3559dd38c333c071d78be1e8c',1,'shaka::media::AudioStreamInfo::GetCodecString()'],['../d6/d57/classshaka_1_1media_1_1AVCDecoderConfigurationRecord.html#a52fbab2c863be9e771eafa20b34b89bc',1,'shaka::media::AVCDecoderConfigurationRecord::GetCodecString() const '],['../d6/d57/classshaka_1_1media_1_1AVCDecoderConfigurationRecord.html#a120f0913aea1e336da1335e80564b106',1,'shaka::media::AVCDecoderConfigurationRecord::GetCodecString(uint8_t profile_indication, uint8_t profile_compatibility, uint8_t avc_level)'],['../d4/d8a/classshaka_1_1media_1_1HEVCDecoderConfigurationRecord.html#a1383da792b80b1607767f1ee53112e3e',1,'shaka::media::HEVCDecoderConfigurationRecord::GetCodecString()'],['../d1/da5/classshaka_1_1media_1_1VPCodecConfigurationRecord.html#a44bfb58b5c35974fd617cba85fc81be6',1,'shaka::media::VPCodecConfigurationRecord::GetCodecString()']]], + ['getcodecstring',['GetCodecString',['../da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html#aee79e7aa61b741bb96f451c6de1c9d42',1,'shaka::media::AudioStreamInfo::GetCodecString()'],['../d6/d57/classshaka_1_1media_1_1AVCDecoderConfigurationRecord.html#a52fbab2c863be9e771eafa20b34b89bc',1,'shaka::media::AVCDecoderConfigurationRecord::GetCodecString() const '],['../d6/d57/classshaka_1_1media_1_1AVCDecoderConfigurationRecord.html#a120f0913aea1e336da1335e80564b106',1,'shaka::media::AVCDecoderConfigurationRecord::GetCodecString(uint8_t profile_indication, uint8_t profile_compatibility, uint8_t avc_level)'],['../d4/d8a/classshaka_1_1media_1_1HEVCDecoderConfigurationRecord.html#ad6b1f9ca644b001ff59c8e8188117f76',1,'shaka::media::HEVCDecoderConfigurationRecord::GetCodecString()'],['../d1/da5/classshaka_1_1media_1_1VPCodecConfigurationRecord.html#a86b48fb506b476538a7440d9ccf9a533',1,'shaka::media::VPCodecConfigurationRecord::GetCodecString()']]], ['getcontenttype',['GetContentType',['../d8/daf/namespaceshaka.html#a5ea880937da26d677ff6a48c0219d090',1,'shaka']]], ['getcryptoperiodkey',['GetCryptoPeriodKey',['../d0/dac/classshaka_1_1media_1_1FixedKeySource.html#afa9abf3a9104cbcb4711eac65c8a5bdf',1,'shaka::media::FixedKeySource::GetCryptoPeriodKey()'],['../d1/d1f/classshaka_1_1media_1_1KeySource.html#a18806b962c858e35ed07753687605b16',1,'shaka::media::KeySource::GetCryptoPeriodKey()'],['../da/ddd/classshaka_1_1media_1_1WidevineKeySource.html#ab56a71e9f9f9e545f96e667279c05bb1',1,'shaka::media::WidevineKeySource::GetCryptoPeriodKey()']]], ['getdecoderconfigurationrecord',['GetDecoderConfigurationRecord',['../d8/d08/classshaka_1_1media_1_1H264ByteToUnitStreamConverter.html#a6a7a73841ded1942364f88aad90dcbc9',1,'shaka::media::H264ByteToUnitStreamConverter::GetDecoderConfigurationRecord()'],['../db/df8/classshaka_1_1media_1_1H265ByteToUnitStreamConverter.html#a9a866e255a2b267f2b44d0156c479de9',1,'shaka::media::H265ByteToUnitStreamConverter::GetDecoderConfigurationRecord()'],['../de/dea/classshaka_1_1media_1_1H26xByteToUnitStreamConverter.html#a57f8a71d948f27303ba41dd5aafb5445',1,'shaka::media::H26xByteToUnitStreamConverter::GetDecoderConfigurationRecord()']]], diff --git a/docs/search/all_8.js b/docs/search/all_8.js index b63b475866..530e092925 100644 --- a/docs/search/all_8.js +++ b/docs/search/all_8.js @@ -5,7 +5,7 @@ var searchData= ['ignorebytes',['IgnoreBytes',['../d1/da1/classshaka_1_1media_1_1mp4_1_1BoxBuffer.html#a1a0c70e3124677ae08164f7b89f6a1d4',1,'shaka::media::mp4::BoxBuffer']]], ['init',['Init',['../d3/d0a/classshaka_1_1media_1_1MediaParser.html#adc7c91bebe75879abba91a56dae52153',1,'shaka::media::MediaParser::Init()'],['../d3/dc1/classshaka_1_1media_1_1mp2t_1_1Mp2tMediaParser.html#aa2aff12312827aacf2b7db6e2f792c52',1,'shaka::media::mp2t::Mp2tMediaParser::Init()'],['../d7/dd5/classshaka_1_1media_1_1mp4_1_1MP4MediaParser.html#acc87b9752a7f6e8c739109acbc02b69d',1,'shaka::media::mp4::MP4MediaParser::Init()'],['../de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html#ae9f02c32b4e2be8fc41a20f3f00f3494',1,'shaka::media::mp4::TrackRunIterator::Init()'],['../de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html#a4d39eaf8568da29b597411c56f50d86f',1,'shaka::media::mp4::TrackRunIterator::Init(const MovieFragment &moof)'],['../d2/ddb/classshaka_1_1media_1_1WebMMediaParser.html#a5cd5c298938e2c58c45f962b21e43b2e',1,'shaka::media::WebMMediaParser::Init()'],['../dc/df2/classshaka_1_1media_1_1WebVttMediaParser.html#af6c0fb7de806cccd0e1f9dd92b5310f3',1,'shaka::media::WebVttMediaParser::Init()'],['../dc/d18/classshaka_1_1media_1_1wvm_1_1WvmMediaParser.html#a6f931f1702724a9b19c3078a7832bc77',1,'shaka::media::wvm::WvmMediaParser::Init()'],['../d4/d70/classshaka_1_1DashIopMpdNotifier.html#a9dd9d655a538ff2618634ca1f9809478',1,'shaka::DashIopMpdNotifier::Init()'],['../de/d52/classshaka_1_1Representation.html#ae998409ae94f3ba12909a96e8f3f4f7e',1,'shaka::Representation::Init()'],['../d3/dd0/classshaka_1_1MpdNotifier.html#ad6171481d6fb437767b1f5b9e0dac1a3',1,'shaka::MpdNotifier::Init()'],['../d8/de1/classshaka_1_1SimpleMpdNotifier.html#a59bcb401b5ca8d5b893ec7da9461569f',1,'shaka::SimpleMpdNotifier::Init()']]], ['initcb',['InitCB',['../d3/d0a/classshaka_1_1media_1_1MediaParser.html#a95d25a50ad371304f1abce9971ce3704',1,'shaka::media::MediaParser']]], - ['initialize',['Initialize',['../dd/d17/classshaka_1_1media_1_1Demuxer.html#a436ed9fd2a3ddd78056ec7cf656fd9ad',1,'shaka::media::Demuxer::Initialize()'],['../d5/d66/classshaka_1_1media_1_1NalUnitToByteStreamConverter.html#aa84e36b83b1caa2b1f726c4d3cff3d6d',1,'shaka::media::NalUnitToByteStreamConverter::Initialize()'],['../dd/de4/classshaka_1_1media_1_1VideoSliceHeaderParser.html#a862422cdf78f370069055037338fa53d',1,'shaka::media::VideoSliceHeaderParser::Initialize()'],['../da/df0/classshaka_1_1media_1_1H264VideoSliceHeaderParser.html#a551bd1e2a852d1a3b23b77df8505b7f7',1,'shaka::media::H264VideoSliceHeaderParser::Initialize()'],['../d1/d79/classshaka_1_1media_1_1H265VideoSliceHeaderParser.html#a83a25520f713f4818a765ea3324a1438',1,'shaka::media::H265VideoSliceHeaderParser::Initialize()'],['../d5/de0/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator.html#aa0346189f99b2f0fc2c71da1543155fa',1,'shaka::media::mp2t::PesPacketGenerator::Initialize()'],['../de/dde/classshaka_1_1media_1_1mp2t_1_1TsSegmenter.html#a412be69ae8e18c5ceb3c48d1559c79c2',1,'shaka::media::mp2t::TsSegmenter::Initialize()'],['../de/d64/classshaka_1_1media_1_1mp2t_1_1TsWriter.html#a6bee605be771538f78633e2ecfc979c6',1,'shaka::media::mp2t::TsWriter::Initialize()'],['../d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html#a0440c751fd818964397d17330acc7afc',1,'shaka::media::mp4::Segmenter::Initialize()'],['../de/dfa/classshaka_1_1media_1_1webm_1_1Encryptor.html#ace5a25125eb3ca9848813ac044e56429',1,'shaka::media::webm::Encryptor::Initialize()'],['../dd/dc5/classshaka_1_1media_1_1webm_1_1Segmenter.html#a144b19be7c3f693b06da2fbe2e40587a',1,'shaka::media::webm::Segmenter::Initialize()']]], + ['initialize',['Initialize',['../dd/d17/classshaka_1_1media_1_1Demuxer.html#a436ed9fd2a3ddd78056ec7cf656fd9ad',1,'shaka::media::Demuxer::Initialize()'],['../d5/d66/classshaka_1_1media_1_1NalUnitToByteStreamConverter.html#aa84e36b83b1caa2b1f726c4d3cff3d6d',1,'shaka::media::NalUnitToByteStreamConverter::Initialize()'],['../dd/de4/classshaka_1_1media_1_1VideoSliceHeaderParser.html#a862422cdf78f370069055037338fa53d',1,'shaka::media::VideoSliceHeaderParser::Initialize()'],['../da/df0/classshaka_1_1media_1_1H264VideoSliceHeaderParser.html#a551bd1e2a852d1a3b23b77df8505b7f7',1,'shaka::media::H264VideoSliceHeaderParser::Initialize()'],['../d1/d79/classshaka_1_1media_1_1H265VideoSliceHeaderParser.html#a83a25520f713f4818a765ea3324a1438',1,'shaka::media::H265VideoSliceHeaderParser::Initialize()'],['../d5/de0/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator.html#aa0346189f99b2f0fc2c71da1543155fa',1,'shaka::media::mp2t::PesPacketGenerator::Initialize()'],['../de/dde/classshaka_1_1media_1_1mp2t_1_1TsSegmenter.html#a412be69ae8e18c5ceb3c48d1559c79c2',1,'shaka::media::mp2t::TsSegmenter::Initialize()'],['../de/d64/classshaka_1_1media_1_1mp2t_1_1TsWriter.html#a6bee605be771538f78633e2ecfc979c6',1,'shaka::media::mp2t::TsWriter::Initialize()'],['../d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html#a0440c751fd818964397d17330acc7afc',1,'shaka::media::mp4::Segmenter::Initialize()'],['../de/dfa/classshaka_1_1media_1_1webm_1_1Encryptor.html#afa6065049fad093b96643b9e3d70595f',1,'shaka::media::webm::Encryptor::Initialize()'],['../dd/dc5/classshaka_1_1media_1_1webm_1_1Segmenter.html#a144b19be7c3f693b06da2fbe2e40587a',1,'shaka::media::webm::Segmenter::Initialize()']]], ['initializefragment',['InitializeFragment',['../dc/df3/classshaka_1_1media_1_1mp4_1_1EncryptingFragmenter.html#a126294f104809268975fe04391902ad3',1,'shaka::media::mp4::EncryptingFragmenter::InitializeFragment()'],['../db/d95/classshaka_1_1media_1_1mp4_1_1Fragmenter.html#aa702c2af5ea5096d94f2943076a21e4a',1,'shaka::media::mp4::Fragmenter::InitializeFragment()']]], ['initializewithiv',['InitializeWithIv',['../df/d87/classshaka_1_1media_1_1AesCryptor.html#a41954df34b76b04d561892732dd0ec2f',1,'shaka::media::AesCryptor::InitializeWithIv()'],['../df/d2d/classshaka_1_1media_1_1AesCbcDecryptor.html#a71ff0b9654de96f9990b29c35fa9b7bf',1,'shaka::media::AesCbcDecryptor::InitializeWithIv()'],['../d3/d75/classshaka_1_1media_1_1AesEncryptor.html#a0695df5615cadf6977fdbac978daeffa',1,'shaka::media::AesEncryptor::InitializeWithIv()'],['../d3/dfe/classshaka_1_1media_1_1AesPatternCryptor.html#af878688f0f277f3f6757e85654439c34',1,'shaka::media::AesPatternCryptor::InitializeWithIv()']]], ['injectclockfortesting',['InjectClockForTesting',['../dc/da1/classshaka_1_1MpdBuilder.html#a723afe73b9d619a1178ae21e46fd7450',1,'shaka::MpdBuilder']]], diff --git a/docs/search/functions_0.js b/docs/search/functions_0.js index fbcbd80e67..6412d98eb7 100644 --- a/docs/search/functions_0.js +++ b/docs/search/functions_0.js @@ -33,6 +33,6 @@ var searchData= ['appendnbytes',['AppendNBytes',['../dc/d41/classshaka_1_1media_1_1BufferWriter.html#ae44b09c03c9b8f0fbf58deb80355f299',1,'shaka::media::BufferWriter']]], ['audio_5fdescription',['audio_description',['../de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html#adb40e673e8025ca51740a50eb20d89b2',1,'shaka::media::mp4::TrackRunIterator']]], ['audio_5fobject_5ftype',['audio_object_type',['../d0/da2/classshaka_1_1media_1_1AACAudioSpecificConfig.html#a8c89c8845d90d292fad38f8caf378a63',1,'shaka::media::AACAudioSpecificConfig']]], - ['audiostreaminfo',['AudioStreamInfo',['../da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html#a90bac4407cc8f295781b4819c60da771',1,'shaka::media::AudioStreamInfo']]], + ['audiostreaminfo',['AudioStreamInfo',['../da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html#a1333ea7b15790da37addb60ba49131b4',1,'shaka::media::AudioStreamInfo']]], ['auxinfoneedstobecached',['AuxInfoNeedsToBeCached',['../de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html#a8d4fb433e66fec693035cac796ca6851',1,'shaka::media::mp4::TrackRunIterator']]] ]; diff --git a/docs/search/functions_11.js b/docs/search/functions_11.js index ba17cd125c..6c3a48a407 100644 --- a/docs/search/functions_11.js +++ b/docs/search/functions_11.js @@ -4,7 +4,7 @@ var searchData= ['tailpos',['TailPos',['../d5/d33/classshaka_1_1media_1_1ProducerConsumerQueue.html#a8a48278d994c0c170b408191d7d994b7',1,'shaka::media::ProducerConsumerQueue']]], ['tell',['Tell',['../d3/d61/classshaka_1_1media_1_1File.html#a57dd80258b1989f85d99c154ba377db8',1,'shaka::media::File::Tell()'],['../d9/de6/classshaka_1_1media_1_1LocalFile.html#ad8dd99ee399830616cd23869ed35d768',1,'shaka::media::LocalFile::Tell()'],['../d9/dbd/classshaka_1_1media_1_1MemoryFile.html#a0346e0c4f961c06041efeaf43aee8f03',1,'shaka::media::MemoryFile::Tell()'],['../d0/d66/classshaka_1_1media_1_1ThreadedIoFile.html#a23949d75527c8de9f02e749c7744f11e',1,'shaka::media::ThreadedIoFile::Tell()'],['../d7/d7a/classshaka_1_1media_1_1UdpFile.html#affb3b5c69847e5f40671e65a7110358c',1,'shaka::media::UdpFile::Tell()']]], ['templatefilename',['TemplateFileName',['../d2/dba/classshaka_1_1media_1_1SegmentTestBase.html#afa2cdde90c04bf69301a9589faa7efd9',1,'shaka::media::SegmentTestBase']]], - ['textstreaminfo',['TextStreamInfo',['../db/dab/classshaka_1_1media_1_1TextStreamInfo.html#a643174313de01f895f8e494c15010fdc',1,'shaka::media::TextStreamInfo']]], + ['textstreaminfo',['TextStreamInfo',['../db/dab/classshaka_1_1media_1_1TextStreamInfo.html#a3cc97869179c6e1f845ee84ba630048f',1,'shaka::media::TextStreamInfo']]], ['tostring',['ToString',['../da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html#a7f94e51abcf522ff70e2456a8c8595df',1,'shaka::media::AudioStreamInfo::ToString()'],['../d7/d6d/classshaka_1_1media_1_1MediaSample.html#aa3cbd9fee3a228403c3128be5141a614',1,'shaka::media::MediaSample::ToString()'],['../d8/d5c/classshaka_1_1media_1_1MediaStream.html#a51d85facae4f9d8d89b97a42148769dd',1,'shaka::media::MediaStream::ToString()'],['../d0/d93/classshaka_1_1media_1_1Status.html#ac5d67e71539ca2f3589d3b2d4dc9ad60',1,'shaka::media::Status::ToString()'],['../d5/db1/classshaka_1_1media_1_1StreamInfo.html#aa11d2fe5509ebfdc038aa3f2cdbbe00d',1,'shaka::media::StreamInfo::ToString()'],['../d6/db1/classshaka_1_1media_1_1VideoStreamInfo.html#a9cac8e75d76f1192a48d1dcf61435537',1,'shaka::media::VideoStreamInfo::ToString()'],['../dc/da1/classshaka_1_1MpdBuilder.html#af7eae5cc11141eed2b5451d969e57db6',1,'shaka::MpdBuilder::ToString()']]], ['trackruniterator',['TrackRunIterator',['../de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html#a743961add0060500509c3fc74ffd26ab',1,'shaka::media::mp4::TrackRunIterator']]], ['tracktypetostring',['TrackTypeToString',['../d1/d1f/classshaka_1_1media_1_1KeySource.html#a4f9cede7a8c1678e1fac93c8fe12aa75',1,'shaka::media::KeySource']]], diff --git a/docs/search/functions_13.js b/docs/search/functions_13.js index 493758520b..ab2001b112 100644 --- a/docs/search/functions_13.js +++ b/docs/search/functions_13.js @@ -5,5 +5,5 @@ var searchData= ['validatewidevinecryptoflags',['ValidateWidevineCryptoFlags',['../d8/daf/namespaceshaka.html#ade3cbb360c0dcaacc5667676af885008',1,'shaka']]], ['verifysignature',['VerifySignature',['../d9/d0c/classshaka_1_1media_1_1RsaPublicKey.html#a146cc97c8fcacadde1b08c373b766fe4',1,'shaka::media::RsaPublicKey']]], ['video_5fdescription',['video_description',['../de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html#aee813f01267e89ff00fdb836bb3a159d',1,'shaka::media::mp4::TrackRunIterator']]], - ['videostreaminfo',['VideoStreamInfo',['../d6/db1/classshaka_1_1media_1_1VideoStreamInfo.html#a3f4380f77c0846fc07e07df40d5eb618',1,'shaka::media::VideoStreamInfo']]] + ['videostreaminfo',['VideoStreamInfo',['../d6/db1/classshaka_1_1media_1_1VideoStreamInfo.html#a3de6a7d65ddd877c513f3047a86db59e',1,'shaka::media::VideoStreamInfo']]] ]; diff --git a/docs/search/functions_6.js b/docs/search/functions_6.js index 6960eaa9c5..91432de582 100644 --- a/docs/search/functions_6.js +++ b/docs/search/functions_6.js @@ -9,7 +9,7 @@ var searchData= ['getaudiodefaultduration',['GetAudioDefaultDuration',['../d8/d86/classshaka_1_1media_1_1WebMTracksParser.html#a554135ee3a8ad995beeab868c67aba36',1,'shaka::media::WebMTracksParser']]], ['getaudiospecificconfig',['GetAudioSpecificConfig',['../d3/d0c/classshaka_1_1media_1_1mp2t_1_1AdtsHeader.html#a5ca14cc4eb4a28906fe832ab263ba5a2',1,'shaka::media::mp2t::AdtsHeader']]], ['getaudiostreaminfo',['GetAudioStreamInfo',['../d3/d7c/classshaka_1_1media_1_1WebMAudioClient.html#a8a23999bc3e6e88276d3ad62bd81e63f',1,'shaka::media::WebMAudioClient']]], - ['getcodecstring',['GetCodecString',['../da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html#a2a09eeb3559dd38c333c071d78be1e8c',1,'shaka::media::AudioStreamInfo::GetCodecString()'],['../d6/d57/classshaka_1_1media_1_1AVCDecoderConfigurationRecord.html#a52fbab2c863be9e771eafa20b34b89bc',1,'shaka::media::AVCDecoderConfigurationRecord::GetCodecString() const '],['../d6/d57/classshaka_1_1media_1_1AVCDecoderConfigurationRecord.html#a120f0913aea1e336da1335e80564b106',1,'shaka::media::AVCDecoderConfigurationRecord::GetCodecString(uint8_t profile_indication, uint8_t profile_compatibility, uint8_t avc_level)'],['../d4/d8a/classshaka_1_1media_1_1HEVCDecoderConfigurationRecord.html#a1383da792b80b1607767f1ee53112e3e',1,'shaka::media::HEVCDecoderConfigurationRecord::GetCodecString()'],['../d1/da5/classshaka_1_1media_1_1VPCodecConfigurationRecord.html#a44bfb58b5c35974fd617cba85fc81be6',1,'shaka::media::VPCodecConfigurationRecord::GetCodecString()']]], + ['getcodecstring',['GetCodecString',['../da/d4e/classshaka_1_1media_1_1AudioStreamInfo.html#aee79e7aa61b741bb96f451c6de1c9d42',1,'shaka::media::AudioStreamInfo::GetCodecString()'],['../d6/d57/classshaka_1_1media_1_1AVCDecoderConfigurationRecord.html#a52fbab2c863be9e771eafa20b34b89bc',1,'shaka::media::AVCDecoderConfigurationRecord::GetCodecString() const '],['../d6/d57/classshaka_1_1media_1_1AVCDecoderConfigurationRecord.html#a120f0913aea1e336da1335e80564b106',1,'shaka::media::AVCDecoderConfigurationRecord::GetCodecString(uint8_t profile_indication, uint8_t profile_compatibility, uint8_t avc_level)'],['../d4/d8a/classshaka_1_1media_1_1HEVCDecoderConfigurationRecord.html#ad6b1f9ca644b001ff59c8e8188117f76',1,'shaka::media::HEVCDecoderConfigurationRecord::GetCodecString()'],['../d1/da5/classshaka_1_1media_1_1VPCodecConfigurationRecord.html#a86b48fb506b476538a7440d9ccf9a533',1,'shaka::media::VPCodecConfigurationRecord::GetCodecString()']]], ['getcontenttype',['GetContentType',['../d8/daf/namespaceshaka.html#a5ea880937da26d677ff6a48c0219d090',1,'shaka']]], ['getcryptoperiodkey',['GetCryptoPeriodKey',['../d0/dac/classshaka_1_1media_1_1FixedKeySource.html#afa9abf3a9104cbcb4711eac65c8a5bdf',1,'shaka::media::FixedKeySource::GetCryptoPeriodKey()'],['../d1/d1f/classshaka_1_1media_1_1KeySource.html#a18806b962c858e35ed07753687605b16',1,'shaka::media::KeySource::GetCryptoPeriodKey()'],['../da/ddd/classshaka_1_1media_1_1WidevineKeySource.html#ab56a71e9f9f9e545f96e667279c05bb1',1,'shaka::media::WidevineKeySource::GetCryptoPeriodKey()']]], ['getdecoderconfigurationrecord',['GetDecoderConfigurationRecord',['../d8/d08/classshaka_1_1media_1_1H264ByteToUnitStreamConverter.html#a6a7a73841ded1942364f88aad90dcbc9',1,'shaka::media::H264ByteToUnitStreamConverter::GetDecoderConfigurationRecord()'],['../db/df8/classshaka_1_1media_1_1H265ByteToUnitStreamConverter.html#a9a866e255a2b267f2b44d0156c479de9',1,'shaka::media::H265ByteToUnitStreamConverter::GetDecoderConfigurationRecord()'],['../de/dea/classshaka_1_1media_1_1H26xByteToUnitStreamConverter.html#a57f8a71d948f27303ba41dd5aafb5445',1,'shaka::media::H26xByteToUnitStreamConverter::GetDecoderConfigurationRecord()']]], diff --git a/docs/search/functions_8.js b/docs/search/functions_8.js index 38533f87e8..3e9a3d1a93 100644 --- a/docs/search/functions_8.js +++ b/docs/search/functions_8.js @@ -3,7 +3,7 @@ var searchData= ['id',['id',['../de/d52/classshaka_1_1Representation.html#a6a3ba385179698e57a1451d1a26ad827',1,'shaka::Representation']]], ['ignorebytes',['IgnoreBytes',['../d1/da1/classshaka_1_1media_1_1mp4_1_1BoxBuffer.html#a1a0c70e3124677ae08164f7b89f6a1d4',1,'shaka::media::mp4::BoxBuffer']]], ['init',['Init',['../d3/d0a/classshaka_1_1media_1_1MediaParser.html#adc7c91bebe75879abba91a56dae52153',1,'shaka::media::MediaParser::Init()'],['../d3/dc1/classshaka_1_1media_1_1mp2t_1_1Mp2tMediaParser.html#aa2aff12312827aacf2b7db6e2f792c52',1,'shaka::media::mp2t::Mp2tMediaParser::Init()'],['../d7/dd5/classshaka_1_1media_1_1mp4_1_1MP4MediaParser.html#acc87b9752a7f6e8c739109acbc02b69d',1,'shaka::media::mp4::MP4MediaParser::Init()'],['../de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html#ae9f02c32b4e2be8fc41a20f3f00f3494',1,'shaka::media::mp4::TrackRunIterator::Init()'],['../de/df6/classshaka_1_1media_1_1mp4_1_1TrackRunIterator.html#a4d39eaf8568da29b597411c56f50d86f',1,'shaka::media::mp4::TrackRunIterator::Init(const MovieFragment &moof)'],['../d2/ddb/classshaka_1_1media_1_1WebMMediaParser.html#a5cd5c298938e2c58c45f962b21e43b2e',1,'shaka::media::WebMMediaParser::Init()'],['../dc/df2/classshaka_1_1media_1_1WebVttMediaParser.html#af6c0fb7de806cccd0e1f9dd92b5310f3',1,'shaka::media::WebVttMediaParser::Init()'],['../dc/d18/classshaka_1_1media_1_1wvm_1_1WvmMediaParser.html#a6f931f1702724a9b19c3078a7832bc77',1,'shaka::media::wvm::WvmMediaParser::Init()'],['../d4/d70/classshaka_1_1DashIopMpdNotifier.html#a9dd9d655a538ff2618634ca1f9809478',1,'shaka::DashIopMpdNotifier::Init()'],['../de/d52/classshaka_1_1Representation.html#ae998409ae94f3ba12909a96e8f3f4f7e',1,'shaka::Representation::Init()'],['../d3/dd0/classshaka_1_1MpdNotifier.html#ad6171481d6fb437767b1f5b9e0dac1a3',1,'shaka::MpdNotifier::Init()'],['../d8/de1/classshaka_1_1SimpleMpdNotifier.html#a59bcb401b5ca8d5b893ec7da9461569f',1,'shaka::SimpleMpdNotifier::Init()']]], - ['initialize',['Initialize',['../dd/d17/classshaka_1_1media_1_1Demuxer.html#a436ed9fd2a3ddd78056ec7cf656fd9ad',1,'shaka::media::Demuxer::Initialize()'],['../d5/d66/classshaka_1_1media_1_1NalUnitToByteStreamConverter.html#aa84e36b83b1caa2b1f726c4d3cff3d6d',1,'shaka::media::NalUnitToByteStreamConverter::Initialize()'],['../dd/de4/classshaka_1_1media_1_1VideoSliceHeaderParser.html#a862422cdf78f370069055037338fa53d',1,'shaka::media::VideoSliceHeaderParser::Initialize()'],['../da/df0/classshaka_1_1media_1_1H264VideoSliceHeaderParser.html#a551bd1e2a852d1a3b23b77df8505b7f7',1,'shaka::media::H264VideoSliceHeaderParser::Initialize()'],['../d1/d79/classshaka_1_1media_1_1H265VideoSliceHeaderParser.html#a83a25520f713f4818a765ea3324a1438',1,'shaka::media::H265VideoSliceHeaderParser::Initialize()'],['../d5/de0/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator.html#aa0346189f99b2f0fc2c71da1543155fa',1,'shaka::media::mp2t::PesPacketGenerator::Initialize()'],['../de/dde/classshaka_1_1media_1_1mp2t_1_1TsSegmenter.html#a412be69ae8e18c5ceb3c48d1559c79c2',1,'shaka::media::mp2t::TsSegmenter::Initialize()'],['../de/d64/classshaka_1_1media_1_1mp2t_1_1TsWriter.html#a6bee605be771538f78633e2ecfc979c6',1,'shaka::media::mp2t::TsWriter::Initialize()'],['../d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html#a0440c751fd818964397d17330acc7afc',1,'shaka::media::mp4::Segmenter::Initialize()'],['../de/dfa/classshaka_1_1media_1_1webm_1_1Encryptor.html#ace5a25125eb3ca9848813ac044e56429',1,'shaka::media::webm::Encryptor::Initialize()'],['../dd/dc5/classshaka_1_1media_1_1webm_1_1Segmenter.html#a144b19be7c3f693b06da2fbe2e40587a',1,'shaka::media::webm::Segmenter::Initialize()']]], + ['initialize',['Initialize',['../dd/d17/classshaka_1_1media_1_1Demuxer.html#a436ed9fd2a3ddd78056ec7cf656fd9ad',1,'shaka::media::Demuxer::Initialize()'],['../d5/d66/classshaka_1_1media_1_1NalUnitToByteStreamConverter.html#aa84e36b83b1caa2b1f726c4d3cff3d6d',1,'shaka::media::NalUnitToByteStreamConverter::Initialize()'],['../dd/de4/classshaka_1_1media_1_1VideoSliceHeaderParser.html#a862422cdf78f370069055037338fa53d',1,'shaka::media::VideoSliceHeaderParser::Initialize()'],['../da/df0/classshaka_1_1media_1_1H264VideoSliceHeaderParser.html#a551bd1e2a852d1a3b23b77df8505b7f7',1,'shaka::media::H264VideoSliceHeaderParser::Initialize()'],['../d1/d79/classshaka_1_1media_1_1H265VideoSliceHeaderParser.html#a83a25520f713f4818a765ea3324a1438',1,'shaka::media::H265VideoSliceHeaderParser::Initialize()'],['../d5/de0/classshaka_1_1media_1_1mp2t_1_1PesPacketGenerator.html#aa0346189f99b2f0fc2c71da1543155fa',1,'shaka::media::mp2t::PesPacketGenerator::Initialize()'],['../de/dde/classshaka_1_1media_1_1mp2t_1_1TsSegmenter.html#a412be69ae8e18c5ceb3c48d1559c79c2',1,'shaka::media::mp2t::TsSegmenter::Initialize()'],['../de/d64/classshaka_1_1media_1_1mp2t_1_1TsWriter.html#a6bee605be771538f78633e2ecfc979c6',1,'shaka::media::mp2t::TsWriter::Initialize()'],['../d9/d26/classshaka_1_1media_1_1mp4_1_1Segmenter.html#a0440c751fd818964397d17330acc7afc',1,'shaka::media::mp4::Segmenter::Initialize()'],['../de/dfa/classshaka_1_1media_1_1webm_1_1Encryptor.html#afa6065049fad093b96643b9e3d70595f',1,'shaka::media::webm::Encryptor::Initialize()'],['../dd/dc5/classshaka_1_1media_1_1webm_1_1Segmenter.html#a144b19be7c3f693b06da2fbe2e40587a',1,'shaka::media::webm::Segmenter::Initialize()']]], ['initializefragment',['InitializeFragment',['../dc/df3/classshaka_1_1media_1_1mp4_1_1EncryptingFragmenter.html#a126294f104809268975fe04391902ad3',1,'shaka::media::mp4::EncryptingFragmenter::InitializeFragment()'],['../db/d95/classshaka_1_1media_1_1mp4_1_1Fragmenter.html#aa702c2af5ea5096d94f2943076a21e4a',1,'shaka::media::mp4::Fragmenter::InitializeFragment()']]], ['initializewithiv',['InitializeWithIv',['../df/d87/classshaka_1_1media_1_1AesCryptor.html#a41954df34b76b04d561892732dd0ec2f',1,'shaka::media::AesCryptor::InitializeWithIv()'],['../df/d2d/classshaka_1_1media_1_1AesCbcDecryptor.html#a71ff0b9654de96f9990b29c35fa9b7bf',1,'shaka::media::AesCbcDecryptor::InitializeWithIv()'],['../d3/d75/classshaka_1_1media_1_1AesEncryptor.html#a0695df5615cadf6977fdbac978daeffa',1,'shaka::media::AesEncryptor::InitializeWithIv()'],['../d3/dfe/classshaka_1_1media_1_1AesPatternCryptor.html#af878688f0f277f3f6757e85654439c34',1,'shaka::media::AesPatternCryptor::InitializeWithIv()']]], ['injectclockfortesting',['InjectClockForTesting',['../dc/da1/classshaka_1_1MpdBuilder.html#a723afe73b9d619a1178ae21e46fd7450',1,'shaka::MpdBuilder']]],