diff --git a/docs/annotated.html b/docs/annotated.html index a3255ce0dd..22d29fa1cc 100644 --- a/docs/annotated.html +++ b/docs/annotated.html @@ -123,7 +123,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); |||oCEditList |||oCEdit |||oCHandlerReference -|||oCAVCDecoderConfigurationRecord +|||oCCodecConfigurationRecord |||oCPixelAspectRatioBox |||oCVideoSampleEntry |||oCElementaryStreamDescriptor @@ -240,33 +240,34 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); ||oCLocalFileImplement LocalFile which deals with local storage ||oCThreadedIoFileDeclaration of class which implements a thread-safe circular buffer ||oCUdpFileImplements UdpFile, which receives UDP unicast and multicast streams -||oCH264BitReader -||oCH264ByteToUnitStreamConverter -||oCH264NALU -||oCH264SPS -||oCH264PPS -||oCH264ModificationOfPicNum -||oCH264WeightingFactors -||oCH264DecRefPicMarking -||oCH264SliceHeader -||oCH264SEIRecoveryPoint -||oCH264SEIMessage -||oCH264Parser -||oCCluster -||oCClusterBuilder -||oCOpusPacket -||oCTracksBuilder -||oCWebMAudioClientHelper class used to parse an Audio element inside a TrackEntry element -||oCWebMClusterParser -||oCContentEncoding -||oCWebMContentEncodingsClientParser for WebM ContentEncodings element -||oCWebMInfoParserParser for WebM Info element -||oCWebMMediaParser -||oCWebMParserClient -||oCWebMListParser -||oCWebMTracksParserParser for WebM Tracks element -||oCWebMVideoClientHelper class used to parse a Video element inside a TrackEntry element -||\CWebMWebVTTParser +||oCAVCDecoderConfigurationClass for parsing AVC decoder configuration +||oCH264BitReader +||oCH264ByteToUnitStreamConverter +||oCH264NALU +||oCH264SPS +||oCH264PPS +||oCH264ModificationOfPicNum +||oCH264WeightingFactors +||oCH264DecRefPicMarking +||oCH264SliceHeader +||oCH264SEIRecoveryPoint +||oCH264SEIMessage +||oCH264Parser +||oCCluster +||oCClusterBuilder +||oCOpusPacket +||oCTracksBuilder +||oCWebMAudioClientHelper class used to parse an Audio element inside a TrackEntry element +||oCWebMClusterParser +||oCContentEncoding +||oCWebMContentEncodingsClientParser for WebM ContentEncodings element +||oCWebMInfoParserParser for WebM Info element +||oCWebMMediaParser +||oCWebMParserClient +||oCWebMListParser +||oCWebMTracksParserParser for WebM Tracks element +||oCWebMVideoClientHelper class used to parse a Video element inside a TrackEntry element +||\CWebMWebVTTParser |oNxml ||oCXmlDeleter ||oCScopedXmlPtrScoped_ptr for libxml2 resources @@ -297,7 +298,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/classes.html b/docs/classes.html index db1edcab07..49f5cbb885 100644 --- a/docs/classes.html +++ b/docs/classes.html @@ -89,82 +89,82 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
A | B | C | D | E | F | H | I | K | L | M | O | P | R | S | T | U | V | W | X
- - - - + + + + + - - - - - - - - - - + + + + + + + + + - + - - - + + - - - - - - + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + - + - + - - - + + + - +
  A  
-
DecodingTime (edash_packager::media::mp4)   KeyRotationFragmenter (edash_packager::media::mp4)   ProducerConsumerQueue (edash_packager::media)   Track (edash_packager::media::mp4)   
DecodingTimeIterator (edash_packager::media::mp4)   KeySource (edash_packager::media)   ProgressListener (edash_packager::media)   TrackEncryption (edash_packager::media::mp4)   
AACAudioSpecificConfig (edash_packager::media::mp4)   DecodingTimeToSample (edash_packager::media::mp4)   
  L  
-
ProtectionSchemeInfo (edash_packager::media::mp4)   TrackExtends (edash_packager::media::mp4)   
AdaptationSet (edash_packager)   DecryptConfig (edash_packager::media)   ProtectionSystemSpecificHeader (edash_packager::media::mp4)   TrackFragment (edash_packager::media::mp4)   
AdaptationSetXmlNode (edash_packager::xml)   DecryptorSource (edash_packager::media)   LibcryptoThreading (edash_packager::media)   
  R  
+
DataReference (edash_packager::media::mp4)   
  K  
+
PrevSampleData (edash_packager::media::wvm)   ThreadedIoFile (edash_packager::media)   
DecodingTime (edash_packager::media::mp4)   ProducerConsumerQueue (edash_packager::media)   Track (edash_packager::media::mp4)   
AACAudioSpecificConfig (edash_packager::media::mp4)   DecodingTimeIterator (edash_packager::media::mp4)   KeyFetcher (edash_packager::media)   ProgressListener (edash_packager::media)   TrackEncryption (edash_packager::media::mp4)   
AdaptationSet (edash_packager)   DecodingTimeToSample (edash_packager::media::mp4)   KeyRotationFragmenter (edash_packager::media::mp4)   ProtectionSchemeInfo (edash_packager::media::mp4)   TrackExtends (edash_packager::media::mp4)   
AdaptationSetXmlNode (edash_packager::xml)   DecryptConfig (edash_packager::media)   KeySource (edash_packager::media)   ProtectionSystemSpecificHeader (edash_packager::media::mp4)   TrackFragment (edash_packager::media::mp4)   
AdtsHeader (edash_packager::media::mp2t)   DecryptorSource (edash_packager::media)   
  L  
+
  R  
TrackFragmentDecodeTime (edash_packager::media::mp4)   
AdtsHeader (edash_packager::media::mp2t)   Demuxer (edash_packager::media)   LocalFile (edash_packager::media)   TrackFragmentHeader (edash_packager::media::mp4)   
AesCbcCtsDecryptor (edash_packager::media)   DemuxStreamIdMediaSample (edash_packager::media::wvm)   
  M  
-
Representation (edash_packager)   TrackFragmentRun (edash_packager::media::mp4)   
AesCbcCtsEncryptor (edash_packager::media)   
  E  
-
RepresentationBaseXmlNode (edash_packager::xml)   TrackHeader (edash_packager::media::mp4)   
AesCbcPkcs5Decryptor (edash_packager::media)   Media (edash_packager::media::mp4)   RepresentationStateChangeListener (edash_packager)   TrackRunIterator (edash_packager::media::mp4)   
AesCbcPkcs5Encryptor (edash_packager::media)   Edit (edash_packager::media::mp4)   MediaData (edash_packager::media::mp4)   RepresentationXmlNode (edash_packager::xml)   TracksBuilder (edash_packager::media)   
AesCtrEncryptor (edash_packager::media)   EditList (edash_packager::media::mp4)   MediaHeader (edash_packager::media::mp4)   RequestSigner (edash_packager::media)   TsPacket (edash_packager::media::mp2t)   
AesRequestSigner (edash_packager::media)   EditListEntry (edash_packager::media::mp4)   MediaInformation (edash_packager::media::mp4)   RsaPrivateKey (edash_packager::media)   TsSection (edash_packager::media::mp2t)   
AudioSampleEntry (edash_packager::media::mp4)   Element (edash_packager)   MediaParser (edash_packager::media)   RsaPublicKey (edash_packager::media)   TsSectionPat (edash_packager::media::mp2t)   
AudioStreamInfo (edash_packager::media)   ElementaryStreamDescriptor (edash_packager::media::mp4)   MediaSample (edash_packager::media)   RsaRequestSigner (edash_packager::media)   TsSectionPes (edash_packager::media::mp2t)   
AudioTimestampHelper (edash_packager::media)   EncryptingFragmenter (edash_packager::media::mp4)   MediaStream (edash_packager::media)   
  S  
+
AesCbcCtsDecryptor (edash_packager::media)   Demuxer (edash_packager::media)   TrackFragmentHeader (edash_packager::media::mp4)   
AesCbcCtsEncryptor (edash_packager::media)   DemuxStreamIdMediaSample (edash_packager::media::wvm)   LibcryptoThreading (edash_packager::media)   Representation (edash_packager)   TrackFragmentRun (edash_packager::media::mp4)   
AesCbcPkcs5Decryptor (edash_packager::media)   
  E  
+
LocalFile (edash_packager::media)   RepresentationBaseXmlNode (edash_packager::xml)   TrackHeader (edash_packager::media::mp4)   
AesCbcPkcs5Encryptor (edash_packager::media)   
  M  
+
RepresentationStateChangeListener (edash_packager)   TrackRunIterator (edash_packager::media::mp4)   
AesCtrEncryptor (edash_packager::media)   Edit (edash_packager::media::mp4)   RepresentationXmlNode (edash_packager::xml)   TracksBuilder (edash_packager::media)   
AesRequestSigner (edash_packager::media)   EditList (edash_packager::media::mp4)   Media (edash_packager::media::mp4)   RequestSigner (edash_packager::media)   TsPacket (edash_packager::media::mp2t)   
AudioSampleEntry (edash_packager::media::mp4)   EditListEntry (edash_packager::media::mp4)   MediaData (edash_packager::media::mp4)   RsaPrivateKey (edash_packager::media)   TsSection (edash_packager::media::mp2t)   
AudioStreamInfo (edash_packager::media)   Element (edash_packager)   MediaHeader (edash_packager::media::mp4)   RsaPublicKey (edash_packager::media)   TsSectionPat (edash_packager::media::mp2t)   
AudioTimestampHelper (edash_packager::media)   ElementaryStreamDescriptor (edash_packager::media::mp4)   MediaInformation (edash_packager::media::mp4)   RsaRequestSigner (edash_packager::media)   TsSectionPes (edash_packager::media::mp2t)   
AVCDecoderConfiguration (edash_packager::media)   EncryptingFragmenter (edash_packager::media::mp4)   MediaParser (edash_packager::media)   
  S  
TsSectionPmt (edash_packager::media::mp2t)   
AVCDecoderConfigurationRecord (edash_packager::media::mp4)   EncryptionKey (edash_packager::media)   MockAdaptationSet (edash_packager)   TsSectionPsi (edash_packager::media::mp2t)   
  B  
-
ESDescriptor (edash_packager::media::mp4)   MockMpdBuilder (edash_packager)   SampleAuxiliaryInformationOffset (edash_packager::media::mp4)   
  U  
+
EncryptionKey (edash_packager::media)   MediaSample (edash_packager::media)   TsSectionPsi (edash_packager::media::mp2t)   
ESDescriptor (edash_packager::media::mp4)   MediaStream (edash_packager::media)   SampleAuxiliaryInformationOffset (edash_packager::media::mp4)   
  U  
EsParser (edash_packager::media::mp2t)   MockMpdNotifier (edash_packager)   SampleAuxiliaryInformationSize (edash_packager::media::mp4)   
BandwidthEstimator   EsParserAdts (edash_packager::media::mp2t)   MockRepresentation (edash_packager)   SampleDescription (edash_packager::media::mp4)   UdpFile (edash_packager::media)   
BitReader (edash_packager::media)   EsParserH264 (edash_packager::media::mp2t)   Movie (edash_packager::media::mp4)   SampleGroupDescription (edash_packager::media::mp4)   
  V  
+
BandwidthEstimator   EsParser (edash_packager::media::mp2t)   MockAdaptationSet (edash_packager)   SampleAuxiliaryInformationSize (edash_packager::media::mp4)   
BitReader (edash_packager::media)   EsParserAdts (edash_packager::media::mp2t)   MockMpdBuilder (edash_packager)   SampleDescription (edash_packager::media::mp4)   UdpFile (edash_packager::media)   
Box (edash_packager::media::mp4)   EsParserH264 (edash_packager::media::mp2t)   MockMpdNotifier (edash_packager)   SampleGroupDescription (edash_packager::media::mp4)   
  V  
Box (edash_packager::media::mp4)   
  F  
-
MovieExtends (edash_packager::media::mp4)   SampleSize (edash_packager::media::mp4)   
BoxBuffer (edash_packager::media::mp4)   MovieExtendsHeader (edash_packager::media::mp4)   SampleTable (edash_packager::media::mp4)   VideoMediaHeader (edash_packager::media::mp4)   
BoxReader (edash_packager::media::mp4)   File (edash_packager::media)   MovieFragment (edash_packager::media::mp4)   SampleToChunk (edash_packager::media::mp4)   VideoSampleEntry (edash_packager::media::mp4)   
BufferReader (edash_packager::media)   FileCloser (edash_packager::media)   MovieFragmentHeader (edash_packager::media::mp4)   SampleToGroup (edash_packager::media::mp4)   VideoStreamInfo (edash_packager::media)   
BufferWriter (edash_packager::media)   FileType (edash_packager::media::mp4)   MovieHeader (edash_packager::media::mp4)   SampleToGroupEntry (edash_packager::media::mp4)   VideoStreamInfoParameters (edash_packager::media)   
ByteQueue (edash_packager::media)   Fragmenter (edash_packager::media::mp4)   Mp2tMediaParser (edash_packager::media::mp2t)   SchemeInfo (edash_packager::media::mp4)   VodMediaInfoDumpMuxerListener (edash_packager::media)   
BoxBuffer (edash_packager::media::mp4)   
  F  
+
MockRepresentation (edash_packager)   SampleSize (edash_packager::media::mp4)   
BoxReader (edash_packager::media::mp4)   Movie (edash_packager::media::mp4)   SampleTable (edash_packager::media::mp4)   VideoMediaHeader (edash_packager::media::mp4)   
BufferReader (edash_packager::media)   File (edash_packager::media)   MovieExtends (edash_packager::media::mp4)   SampleToChunk (edash_packager::media::mp4)   VideoSampleEntry (edash_packager::media::mp4)   
BufferWriter (edash_packager::media)   FileCloser (edash_packager::media)   MovieExtendsHeader (edash_packager::media::mp4)   SampleToGroup (edash_packager::media::mp4)   VideoStreamInfo (edash_packager::media)   
ByteQueue (edash_packager::media)   FileType (edash_packager::media::mp4)   MovieFragment (edash_packager::media::mp4)   SampleToGroupEntry (edash_packager::media::mp4)   VideoStreamInfoParameters (edash_packager::media)   
  C  
-
FrameCENCInfo (edash_packager::media::mp4)   MP4MediaParser (edash_packager::media::mp4)   SchemeType (edash_packager::media::mp4)   
  W  
+
Fragmenter (edash_packager::media::mp4)   MovieFragmentHeader (edash_packager::media::mp4)   SchemeInfo (edash_packager::media::mp4)   VodMediaInfoDumpMuxerListener (edash_packager::media)   
FrameCENCInfo (edash_packager::media::mp4)   MovieHeader (edash_packager::media::mp4)   SchemeType (edash_packager::media::mp4)   
  W  
FullBox (edash_packager::media::mp4)   MP4Muxer (edash_packager::media::mp4)   ScopedXmlPtr (edash_packager::xml)   
CencSampleEncryptionInfoEntry (edash_packager::media::mp4)   
  H  
-
MpdBuilder (edash_packager)   Segmenter (edash_packager::media::mp4)   WebMAudioClient (edash_packager::media)   
ChunkInfo (edash_packager::media::mp4)   MpdNotifier (edash_packager)   SegmentIndex (edash_packager::media::mp4)   WebMClusterParser (edash_packager::media)   
ChunkInfoIterator (edash_packager::media::mp4)   H264BitReader (edash_packager::media)   MpdNotifierFactory (edash_packager)   SegmentInfo (edash_packager)   WebMContentEncodingsClient (edash_packager::media)   
ChunkLargeOffset (edash_packager::media::mp4)   H264ByteToUnitStreamConverter (edash_packager::media)   MpdNotifyMuxerListener (edash_packager::media)   SegmentReference (edash_packager::media::mp4)   WebMInfoParser (edash_packager::media)   
ChunkOffset (edash_packager::media::mp4)   H264DecRefPicMarking (edash_packager::media)   MpdOptions (edash_packager)   SegmentType (edash_packager::media::mp4)   WebMListParser (edash_packager::media)   
ClosureThread (edash_packager::media)   H264ModificationOfPicNum (edash_packager::media)   MpdWriter (edash_packager)   SimpleMpdNotifier (edash_packager)   WebMMediaParser (edash_packager::media)   
Cluster (edash_packager::media)   H264NALU (edash_packager::media)   MultiSegmentSegmenter (edash_packager::media::mp4)   SingleSegmentSegmenter (edash_packager::media::mp4)   WebMParserClient (edash_packager::media)   
ClusterBuilder (edash_packager::media)   H264Parser (edash_packager::media)   Muxer (edash_packager::media)   SoundMediaHeader (edash_packager::media::mp4)   WebMTracksParser (edash_packager::media)   
CompactSampleSize (edash_packager::media::mp4)   H264PPS (edash_packager::media)   MuxerListener (edash_packager::media)   Status (edash_packager::media)   WebMVideoClient (edash_packager::media)   
CompositionOffset (edash_packager::media::mp4)   H264SEIMessage (edash_packager::media)   MuxerOptions (edash_packager::media)   StreamDescriptor (edash_packager::media)   WebMWebVTTParser (edash_packager::media)   
CompositionOffsetIterator (edash_packager::media::mp4)   H264SEIRecoveryPoint (edash_packager::media)   
  O  
-
StreamDescriptorCompareFn (edash_packager::media)   WidevineKeySource (edash_packager::media)   
CompositionTimeToSample (edash_packager::media::mp4)   H264SliceHeader (edash_packager::media)   StreamInfo (edash_packager::media)   WvmMediaParser (edash_packager::media::wvm)   
ContentEncoding (edash_packager::media)   H264SPS (edash_packager::media)   OffsetByteQueue (edash_packager::media)   SubsampleEntry (edash_packager::media)   
  X  
+
CencSampleEncryptionInfoEntry (edash_packager::media::mp4)   FullBox (edash_packager::media::mp4)   Mp2tMediaParser (edash_packager::media::mp2t)   ScopedXmlPtr (edash_packager::xml)   
ChunkInfo (edash_packager::media::mp4)   
  H  
+
MP4MediaParser (edash_packager::media::mp4)   Segmenter (edash_packager::media::mp4)   WebMAudioClient (edash_packager::media)   
ChunkInfoIterator (edash_packager::media::mp4)   MP4Muxer (edash_packager::media::mp4)   SegmentIndex (edash_packager::media::mp4)   WebMClusterParser (edash_packager::media)   
ChunkLargeOffset (edash_packager::media::mp4)   H264BitReader (edash_packager::media)   MpdBuilder (edash_packager)   SegmentInfo (edash_packager)   WebMContentEncodingsClient (edash_packager::media)   
ChunkOffset (edash_packager::media::mp4)   H264ByteToUnitStreamConverter (edash_packager::media)   MpdNotifier (edash_packager)   SegmentReference (edash_packager::media::mp4)   WebMInfoParser (edash_packager::media)   
ClosureThread (edash_packager::media)   H264DecRefPicMarking (edash_packager::media)   MpdNotifierFactory (edash_packager)   SegmentType (edash_packager::media::mp4)   WebMListParser (edash_packager::media)   
Cluster (edash_packager::media)   H264ModificationOfPicNum (edash_packager::media)   MpdNotifyMuxerListener (edash_packager::media)   SimpleMpdNotifier (edash_packager)   WebMMediaParser (edash_packager::media)   
ClusterBuilder (edash_packager::media)   H264NALU (edash_packager::media)   MpdOptions (edash_packager)   SingleSegmentSegmenter (edash_packager::media::mp4)   WebMParserClient (edash_packager::media)   
CodecConfigurationRecord (edash_packager::media::mp4)   H264Parser (edash_packager::media)   MpdWriter (edash_packager)   SoundMediaHeader (edash_packager::media::mp4)   WebMTracksParser (edash_packager::media)   
CompactSampleSize (edash_packager::media::mp4)   H264PPS (edash_packager::media)   MultiSegmentSegmenter (edash_packager::media::mp4)   Status (edash_packager::media)   WebMVideoClient (edash_packager::media)   
CompositionOffset (edash_packager::media::mp4)   H264SEIMessage (edash_packager::media)   Muxer (edash_packager::media)   StreamDescriptor (edash_packager::media)   WebMWebVTTParser (edash_packager::media)   
CompositionOffsetIterator (edash_packager::media::mp4)   H264SEIRecoveryPoint (edash_packager::media)   MuxerListener (edash_packager::media)   StreamDescriptorCompareFn (edash_packager::media)   WidevineKeySource (edash_packager::media)   
CompositionTimeToSample (edash_packager::media::mp4)   H264SliceHeader (edash_packager::media)   MuxerOptions (edash_packager::media)   StreamInfo (edash_packager::media)   WvmMediaParser (edash_packager::media::wvm)   
ContentEncoding (edash_packager::media)   H264SPS (edash_packager::media)   
  O  
+
SubsampleEntry (edash_packager::media)   
  X  
ContentProtectionElement (edash_packager)   H264WeightingFactors (edash_packager::media)   OnMediaEndParameters (edash_packager::media)   SyncSample (edash_packager::media::mp4)   
ContentProtectionElement (edash_packager)   H264WeightingFactors (edash_packager::media)   SyncSample (edash_packager::media::mp4)   
  D  
-
HandlerReference (edash_packager::media::mp4)   OpusPacket (edash_packager::media)   SyncSampleIterator (edash_packager::media::mp4)   XmlDeleter (edash_packager::xml)   
HttpKeyFetcher (edash_packager::media)   OriginalFormat (edash_packager::media::mp4)   
  T  
+
HandlerReference (edash_packager::media::mp4)   OffsetByteQueue (edash_packager::media)   SyncSampleIterator (edash_packager::media::mp4)   XmlDeleter (edash_packager::xml)   
HttpKeyFetcher (edash_packager::media)   OnMediaEndParameters (edash_packager::media)   
  T  
XmlNode (edash_packager::xml)   
DashIopMpdNotifier (edash_packager)   
  I  
-
  P  
-
DataEntryUrl (edash_packager::media::mp4)   TextTrack (edash_packager::media)   
DataInformation (edash_packager::media::mp4)   IoCache (edash_packager::media)   PixelAspectRatioBox (edash_packager::media::mp4)   TextTrackConfig (edash_packager::media)   
DataReference (edash_packager::media::mp4)   
  K  
-
PrevSampleData (edash_packager::media::wvm)   ThreadedIoFile (edash_packager::media)   
OpusPacket (edash_packager::media)   
DataEntryUrl (edash_packager::media::mp4)   OriginalFormat (edash_packager::media::mp4)   TextTrack (edash_packager::media)   
DataInformation (edash_packager::media::mp4)   IoCache (edash_packager::media)   
  P  
+
TextTrackConfig (edash_packager::media)   
KeyFetcher (edash_packager::media)   
PixelAspectRatioBox (edash_packager::media::mp4)   
A | B | C | D | E | F | H | I | K | L | M | O | P | R | S | T | U | V | W | X
diff --git a/docs/d0/d06/mpd__flags_8cc_source.html b/docs/d0/d06/mpd__flags_8cc_source.html index b8dcf5fc48..d3951789e9 100644 --- a/docs/d0/d06/mpd__flags_8cc_source.html +++ b/docs/d0/d06/mpd__flags_8cc_source.html @@ -148,7 +148,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d08/structedash__packager_1_1media_1_1mp4_1_1CodecConfigurationRecord-members.html b/docs/d0/d08/structedash__packager_1_1media_1_1mp4_1_1CodecConfigurationRecord-members.html new file mode 100644 index 0000000000..060cb33bf8 --- /dev/null +++ b/docs/d0/d08/structedash__packager_1_1media_1_1mp4_1_1CodecConfigurationRecord-members.html @@ -0,0 +1,116 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + +
+ All Classes Namespaces Functions Variables Typedefs Enumerator
+ + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::CodecConfigurationRecord Member List
+
+
+ +

This is the complete list of members for edash_packager::media::mp4::CodecConfigurationRecord, including all inherited members.

+ + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
box_type (defined in edash_packager::media::mp4::CodecConfigurationRecord)edash_packager::media::mp4::CodecConfigurationRecord
BoxType() const override (defined in edash_packager::media::mp4::CodecConfigurationRecord)edash_packager::media::mp4::CodecConfigurationRecordvirtual
CodecConfigurationRecord() (defined in edash_packager::media::mp4::CodecConfigurationRecord)edash_packager::media::mp4::CodecConfigurationRecord
ComputeSize() overrideedash_packager::media::mp4::CodecConfigurationRecordvirtual
data (defined in edash_packager::media::mp4::CodecConfigurationRecord)edash_packager::media::mp4::CodecConfigurationRecord
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) overrideedash_packager::media::mp4::CodecConfigurationRecordvirtual
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~CodecConfigurationRecord() override (defined in edash_packager::media::mp4::CodecConfigurationRecord)edash_packager::media::mp4::CodecConfigurationRecord
+ + + + diff --git a/docs/d0/d0e/muxer__options_8h_source.html b/docs/d0/d0e/muxer__options_8h_source.html index 01685f567f..bb26145e94 100644 --- a/docs/d0/d0e/muxer__options_8h_source.html +++ b/docs/d0/d0e/muxer__options_8h_source.html @@ -146,7 +146,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d0e/structedash__packager_1_1media_1_1StreamDescriptor-members.html b/docs/d0/d0e/structedash__packager_1_1media_1_1StreamDescriptor-members.html index 944d0c2def..62fb5bcdd7 100644 --- a/docs/d0/d0e/structedash__packager_1_1media_1_1StreamDescriptor-members.html +++ b/docs/d0/d0e/structedash__packager_1_1media_1_1StreamDescriptor-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d1a/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset-members.html b/docs/d0/d1a/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset-members.html index e772ffee3e..eefa7ba053 100644 --- a/docs/d0/d1a/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset-members.html +++ b/docs/d0/d1a/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d24/structedash__packager_1_1media_1_1H264DecRefPicMarking-members.html b/docs/d0/d24/structedash__packager_1_1media_1_1H264DecRefPicMarking-members.html index c015c455eb..688d8f5ec6 100644 --- a/docs/d0/d24/structedash__packager_1_1media_1_1H264DecRefPicMarking-members.html +++ b/docs/d0/d24/structedash__packager_1_1media_1_1H264DecRefPicMarking-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d28/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter-members.html b/docs/d0/d28/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter-members.html index c2576c8080..c31ff90f96 100644 --- a/docs/d0/d28/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter-members.html +++ b/docs/d0/d28/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter-members.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d30/mock__mpd__notifier_8h_source.html b/docs/d0/d30/mock__mpd__notifier_8h_source.html index 2e319411b4..97a65f35bc 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 cb4735ba97..f88c0c6712 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/d35/es__descriptor_8cc_source.html b/docs/d0/d35/es__descriptor_8cc_source.html index 49ce32c8f1..e5d78dc8ac 100644 --- a/docs/d0/d35/es__descriptor_8cc_source.html +++ b/docs/d0/d35/es__descriptor_8cc_source.html @@ -282,7 +282,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d3a/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode-members.html b/docs/d0/d3a/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode-members.html index bff4ce0b95..b5be0a41c0 100644 --- a/docs/d0/d3a/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode-members.html +++ b/docs/d0/d3a/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode-members.html @@ -111,7 +111,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 f4bd39333c..54a9776c53 100644 --- a/docs/d0/d3a/webm__constants_8h_source.html +++ b/docs/d0/d3a/webm__constants_8h_source.html @@ -313,7 +313,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 f9d76e01a0..d250607bde 100644 --- a/docs/d0/d42/widevine__encryption__flags_8cc_source.html +++ b/docs/d0/d42/widevine__encryption__flags_8cc_source.html @@ -243,7 +243,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d43/structedash__packager_1_1media_1_1H264SPS-members.html b/docs/d0/d43/structedash__packager_1_1media_1_1H264SPS-members.html index fff7b29d65..1a65b2e400 100644 --- a/docs/d0/d43/structedash__packager_1_1media_1_1H264SPS-members.html +++ b/docs/d0/d43/structedash__packager_1_1media_1_1H264SPS-members.html @@ -142,7 +142,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 371dc960b8..96ba56a1ff 100644 --- a/docs/d0/d46/fourccs_8h_source.html +++ b/docs/d0/d46/fourccs_8h_source.html @@ -202,7 +202,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 aced930a2f..80118f1357 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 @@ -227,7 +227,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d4a/structedash__packager_1_1media_1_1mp4_1_1SampleSize-members.html b/docs/d0/d4a/structedash__packager_1_1media_1_1mp4_1_1SampleSize-members.html index d07bddd0bf..d04c744c1e 100644 --- a/docs/d0/d4a/structedash__packager_1_1media_1_1mp4_1_1SampleSize-members.html +++ b/docs/d0/d4a/structedash__packager_1_1media_1_1mp4_1_1SampleSize-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d4e/libcrypto__threading_8cc_source.html b/docs/d0/d4e/libcrypto__threading_8cc_source.html index 529b1c3f06..4a0dea98d8 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/d66/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox-members.html b/docs/d0/d66/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox-members.html index 2280e78be6..88823e62aa 100644 --- a/docs/d0/d66/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox-members.html +++ b/docs/d0/d66/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d7d/classedash__packager_1_1media_1_1H264Parser-members.html b/docs/d0/d7d/classedash__packager_1_1media_1_1H264Parser-members.html index 7df5c1718e..380456a085 100644 --- a/docs/d0/d7d/classedash__packager_1_1media_1_1H264Parser-members.html +++ b/docs/d0/d7d/classedash__packager_1_1media_1_1H264Parser-members.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d7d/decryptor__source_8h_source.html b/docs/d0/d7d/decryptor__source_8h_source.html index f4e9c4b9fe..4066cd7030 100644 --- a/docs/d0/d7d/decryptor__source_8h_source.html +++ b/docs/d0/d7d/decryptor__source_8h_source.html @@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d86/structedash__packager_1_1media_1_1EncryptionKey.html b/docs/d0/d86/structedash__packager_1_1media_1_1EncryptionKey.html index 0fdad781a7..053ce1652a 100644 --- a/docs/d0/d86/structedash__packager_1_1media_1_1EncryptionKey.html +++ b/docs/d0/d86/structedash__packager_1_1media_1_1EncryptionKey.html @@ -119,7 +119,7 @@ std::vector< uint8_t >  diff --git a/docs/d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html b/docs/d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html index e86fcf33bb..1447465f0e 100644 --- a/docs/d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html +++ b/docs/d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html @@ -143,7 +143,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 435 of file box_definitions.h.

+

Definition at line 425 of file box_definitions.h.

Member Function Documentation

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

Implements edash_packager::media::mp4::Box.

-

Definition at line 1471 of file box_definitions.cc.

+

Definition at line 1441 of file box_definitions.cc.

@@ -180,7 +180,7 @@ Additional Inherited Members diff --git a/docs/d0/d93/structedash__packager_1_1media_1_1mp4_1_1SampleTable-members.html b/docs/d0/d93/structedash__packager_1_1media_1_1mp4_1_1SampleTable-members.html index 246816a8dd..6b4ee924cd 100644 --- a/docs/d0/d93/structedash__packager_1_1media_1_1mp4_1_1SampleTable-members.html +++ b/docs/d0/d93/structedash__packager_1_1media_1_1mp4_1_1SampleTable-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/d96/structedash__packager_1_1ContentProtectionElement.html b/docs/d0/d96/structedash__packager_1_1ContentProtectionElement.html index 997a053040..8bc3001c22 100644 --- a/docs/d0/d96/structedash__packager_1_1ContentProtectionElement.html +++ b/docs/d0/d96/structedash__packager_1_1ContentProtectionElement.html @@ -123,7 +123,7 @@ std::vector< diff --git a/docs/d0/da4/classedash__packager_1_1media_1_1WebMVideoClient-members.html b/docs/d0/da4/classedash__packager_1_1media_1_1WebMVideoClient-members.html index 6cb54ce796..9f8f89e64e 100644 --- a/docs/d0/da4/classedash__packager_1_1media_1_1WebMVideoClient-members.html +++ b/docs/d0/da4/classedash__packager_1_1media_1_1WebMVideoClient-members.html @@ -106,7 +106,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 0d855c7d37..e4e6beae1a 100644 --- a/docs/d0/da6/stream__descriptor_8cc_source.html +++ b/docs/d0/da6/stream__descriptor_8cc_source.html @@ -229,7 +229,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/da9/classedash__packager_1_1MockRepresentation.html b/docs/d0/da9/classedash__packager_1_1MockRepresentation.html index 1984939a32..12edacf4b2 100644 --- a/docs/d0/da9/classedash__packager_1_1MockRepresentation.html +++ b/docs/d0/da9/classedash__packager_1_1MockRepresentation.html @@ -146,7 +146,7 @@ Public Member Functions diff --git a/docs/d0/dae/classedash__packager_1_1media_1_1BufferWriter-members.html b/docs/d0/dae/classedash__packager_1_1media_1_1BufferWriter-members.html index fc7f8760d6..4c7c78ea3b 100644 --- a/docs/d0/dae/classedash__packager_1_1media_1_1BufferWriter-members.html +++ b/docs/d0/dae/classedash__packager_1_1media_1_1BufferWriter-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/dd1/classedash__packager_1_1SimpleMpdNotifier-members.html b/docs/d0/dd1/classedash__packager_1_1SimpleMpdNotifier-members.html index 7bcac0500c..a01324f7c7 100644 --- a/docs/d0/dd1/classedash__packager_1_1SimpleMpdNotifier-members.html +++ b/docs/d0/dd1/classedash__packager_1_1SimpleMpdNotifier-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/dd4/structedash__packager_1_1media_1_1SubsampleEntry-members.html b/docs/d0/dd4/structedash__packager_1_1media_1_1SubsampleEntry-members.html index 9d011cfa35..61e4f94129 100644 --- a/docs/d0/dd4/structedash__packager_1_1media_1_1SubsampleEntry-members.html +++ b/docs/d0/dd4/structedash__packager_1_1media_1_1SubsampleEntry-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/dd6/webm__crypto__helpers_8cc_source.html b/docs/d0/dd6/webm__crypto__helpers_8cc_source.html index 374a398a8e..c996e1a0de 100644 --- a/docs/d0/dd6/webm__crypto__helpers_8cc_source.html +++ b/docs/d0/dd6/webm__crypto__helpers_8cc_source.html @@ -157,7 +157,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/ddc/structedash__packager_1_1media_1_1FileCloser.html b/docs/d0/ddc/structedash__packager_1_1media_1_1FileCloser.html index 466f7778f7..237f644288 100644 --- a/docs/d0/ddc/structedash__packager_1_1media_1_1FileCloser.html +++ b/docs/d0/ddc/structedash__packager_1_1media_1_1FileCloser.html @@ -112,7 +112,7 @@ void operator() ( diff --git a/docs/d0/de0/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry-members.html b/docs/d0/de0/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry-members.html index bfd07405dd..c18dbaa7e7 100644 --- a/docs/d0/de0/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry-members.html +++ b/docs/d0/de0/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry-members.html @@ -94,26 +94,27 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');

This is the complete list of members for edash_packager::media::mp4::VideoSampleEntry, including all inherited members.

- - - + + + - - - - - - - - - - + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
avcc (defined in edash_packager::media::mp4::VideoSampleEntry)edash_packager::media::mp4::VideoSampleEntry
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const override (defined in edash_packager::media::mp4::VideoSampleEntry)edash_packager::media::mp4::VideoSampleEntryvirtual
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const override (defined in edash_packager::media::mp4::VideoSampleEntry)edash_packager::media::mp4::VideoSampleEntryvirtual
codec_config_record (defined in edash_packager::media::mp4::VideoSampleEntry)edash_packager::media::mp4::VideoSampleEntry
ComputeSize() overrideedash_packager::media::mp4::VideoSampleEntryvirtual
data_reference_index (defined in edash_packager::media::mp4::VideoSampleEntry)edash_packager::media::mp4::VideoSampleEntry
format (defined in edash_packager::media::mp4::VideoSampleEntry)edash_packager::media::mp4::VideoSampleEntry
height (defined in edash_packager::media::mp4::VideoSampleEntry)edash_packager::media::mp4::VideoSampleEntry
Parse(BoxReader *reader)edash_packager::media::mp4::Box
pixel_aspect (defined in edash_packager::media::mp4::VideoSampleEntry)edash_packager::media::mp4::VideoSampleEntry
ReadWrite(BoxBuffer *buffer) overrideedash_packager::media::mp4::VideoSampleEntryvirtual
sinf (defined in edash_packager::media::mp4::VideoSampleEntry)edash_packager::media::mp4::VideoSampleEntry
VideoSampleEntry() (defined in edash_packager::media::mp4::VideoSampleEntry)edash_packager::media::mp4::VideoSampleEntry
width (defined in edash_packager::media::mp4::VideoSampleEntry)edash_packager::media::mp4::VideoSampleEntry
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~VideoSampleEntry() override (defined in edash_packager::media::mp4::VideoSampleEntry)edash_packager::media::mp4::VideoSampleEntry
GetActualFormat() const (defined in edash_packager::media::mp4::VideoSampleEntry)edash_packager::media::mp4::VideoSampleEntryinline
height (defined in edash_packager::media::mp4::VideoSampleEntry)edash_packager::media::mp4::VideoSampleEntry
Parse(BoxReader *reader)edash_packager::media::mp4::Box
pixel_aspect (defined in edash_packager::media::mp4::VideoSampleEntry)edash_packager::media::mp4::VideoSampleEntry
ReadWrite(BoxBuffer *buffer) overrideedash_packager::media::mp4::VideoSampleEntryvirtual
sinf (defined in edash_packager::media::mp4::VideoSampleEntry)edash_packager::media::mp4::VideoSampleEntry
VideoSampleEntry() (defined in edash_packager::media::mp4::VideoSampleEntry)edash_packager::media::mp4::VideoSampleEntry
width (defined in edash_packager::media::mp4::VideoSampleEntry)edash_packager::media::mp4::VideoSampleEntry
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~VideoSampleEntry() override (defined in edash_packager::media::mp4::VideoSampleEntry)edash_packager::media::mp4::VideoSampleEntry
diff --git a/docs/d0/de4/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader-members.html b/docs/d0/de4/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader-members.html index 0a8b910902..5fa69208e8 100644 --- a/docs/d0/de4/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader-members.html +++ b/docs/d0/de4/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/de6/classedash__packager_1_1media_1_1TracksBuilder.html b/docs/d0/de6/classedash__packager_1_1media_1_1TracksBuilder.html index 066832b92f..635d011779 100644 --- a/docs/d0/de6/classedash__packager_1_1media_1_1TracksBuilder.html +++ b/docs/d0/de6/classedash__packager_1_1media_1_1TracksBuilder.html @@ -123,7 +123,7 @@ std::vector< uint8_t >  diff --git a/docs/d0/dea/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader-members.html b/docs/d0/dea/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader-members.html index cd542f00a8..4a214dd494 100644 --- a/docs/d0/dea/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader-members.html +++ b/docs/d0/dea/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/df3/packager__util_8cc_source.html b/docs/d0/df3/packager__util_8cc_source.html index e190a18ced..276b290c96 100644 --- a/docs/d0/df3/packager__util_8cc_source.html +++ b/docs/d0/df3/packager__util_8cc_source.html @@ -315,7 +315,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/df6/structedash__packager_1_1media_1_1mp4_1_1MovieExtends-members.html b/docs/d0/df6/structedash__packager_1_1media_1_1mp4_1_1MovieExtends-members.html index 96c0d54a2f..d7f613215c 100644 --- a/docs/d0/df6/structedash__packager_1_1media_1_1mp4_1_1MovieExtends-members.html +++ b/docs/d0/df6/structedash__packager_1_1media_1_1mp4_1_1MovieExtends-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d0/dfa/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample.html b/docs/d0/dfa/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample.html index 1dd6ba7ed5..59c4fedeb9 100644 --- a/docs/d0/dfa/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample.html +++ b/docs/d0/dfa/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample.html @@ -116,7 +116,7 @@ scoped_refptr< diff --git a/docs/d1/d02/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer-members.html b/docs/d1/d02/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer-members.html index 5581c2d80c..116880799f 100644 --- a/docs/d1/d02/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer-members.html +++ b/docs/d1/d02/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer-members.html @@ -119,7 +119,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d08/segmenter_8cc_source.html b/docs/d1/d08/segmenter_8cc_source.html index 9b9b68f1d1..3f9e373ec3 100644 --- a/docs/d1/d08/segmenter_8cc_source.html +++ b/docs/d1/d08/segmenter_8cc_source.html @@ -518,7 +518,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
429 } // namespace edash_packager
edash_packager::media::mp4::Fragmenter
Definition: fragmenter.h:29
edash_packager::media::KeySource::GetKey
virtual Status GetKey(TrackType track_type, EncryptionKey *key)
Definition: key_source.cc:46
-
edash_packager::media::mp4::SampleDescription
Definition: box_definitions.h:233
+
edash_packager::media::mp4::SampleDescription
Definition: box_definitions.h:223
edash_packager::media::MuxerOptions::fragment_duration
double fragment_duration
Definition: muxer_options.h:34
edash_packager::media::MuxerOptions::fragment_sap_aligned
bool fragment_sap_aligned
Definition: muxer_options.h:43
edash_packager::media::mp4::Segmenter::GetDuration
double GetDuration() const
Definition: segmenter.cc:324
@@ -544,7 +544,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 86527c6a12..5c1048bbd5 100644 --- a/docs/d1/d13/status_8h_source.html +++ b/docs/d1/d13/status_8h_source.html @@ -240,7 +240,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d16/structedash__packager_1_1xml_1_1XmlDeleter-members.html b/docs/d1/d16/structedash__packager_1_1xml_1_1XmlDeleter-members.html index 4541fcb956..d943ad5eea 100644 --- a/docs/d1/d16/structedash__packager_1_1xml_1_1XmlDeleter-members.html +++ b/docs/d1/d16/structedash__packager_1_1xml_1_1XmlDeleter-members.html @@ -102,7 +102,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 1d140378fe..9f49fdf0e1 100644 --- a/docs/d1/d1d/muxer__flags_8cc_source.html +++ b/docs/d1/d1d/muxer__flags_8cc_source.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d27/key__fetcher_8h_source.html b/docs/d1/d27/key__fetcher_8h_source.html index aa5ab6a1b5..2eeaa0c523 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/classedash__packager_1_1media_1_1WebMTracksParser-members.html b/docs/d1/d28/classedash__packager_1_1media_1_1WebMTracksParser-members.html index c7b407965b..8b7e90431f 100644 --- a/docs/d1/d28/classedash__packager_1_1media_1_1WebMTracksParser-members.html +++ b/docs/d1/d28/classedash__packager_1_1media_1_1WebMTracksParser-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d28/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator-members.html b/docs/d1/d28/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator-members.html index f24ba24613..0c8a97aea3 100644 --- a/docs/d1/d28/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator-members.html +++ b/docs/d1/d28/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d2a/structedash__packager_1_1media_1_1mp4_1_1TrackExtends-members.html b/docs/d1/d2a/structedash__packager_1_1media_1_1mp4_1_1TrackExtends-members.html index a97e3123f2..4ca2e6a377 100644 --- a/docs/d1/d2a/structedash__packager_1_1media_1_1mp4_1_1TrackExtends-members.html +++ b/docs/d1/d2a/structedash__packager_1_1media_1_1mp4_1_1TrackExtends-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/dbb/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord.html b/docs/d1/d31/structedash__packager_1_1media_1_1mp4_1_1CodecConfigurationRecord.html similarity index 63% rename from docs/d8/dbb/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord.html rename to docs/d1/d31/structedash__packager_1_1media_1_1mp4_1_1CodecConfigurationRecord.html index ab4bcd6fa0..172e8deb44 100644 --- a/docs/d8/dbb/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord.html +++ b/docs/d1/d31/structedash__packager_1_1media_1_1mp4_1_1CodecConfigurationRecord.html @@ -4,7 +4,7 @@ -DASH Media Packaging SDK: edash_packager::media::mp4::AVCDecoderConfigurationRecord Struct Reference +DASH Media Packaging SDK: edash_packager::media::mp4::CodecConfigurationRecord Struct Reference @@ -82,52 +82,39 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
-Public Types | Public Member Functions | Public Attributes | -List of all members
+List of all members
-
edash_packager::media::mp4::AVCDecoderConfigurationRecord Struct Reference
+
edash_packager::media::mp4::CodecConfigurationRecord Struct Reference
-Inheritance diagram for edash_packager::media::mp4::AVCDecoderConfigurationRecord:
+Inheritance diagram for edash_packager::media::mp4::CodecConfigurationRecord:
- - -edash_packager::media::mp4::Box + + +edash_packager::media::mp4::Box
- - - - - -

-Public Types

-typedef std::vector< uint8_t > SPS
 
-typedef std::vector< uint8_t > PPS
 
- - - - + + + - - - - - + + + @@ -136,30 +123,12 @@ bool 

Implements edash_packager::media::mp4::Box.

-

Definition at line 1699 of file box_definitions.cc.

+

Definition at line 1669 of file box_definitions.cc.

@@ -186,7 +186,7 @@ Additional Inherited Members diff --git a/docs/d1/d72/language__utils_8cc_source.html b/docs/d1/d72/language__utils_8cc_source.html index 5ae19f3b94..f814cb8077 100644 --- a/docs/d1/d72/language__utils_8cc_source.html +++ b/docs/d1/d72/language__utils_8cc_source.html @@ -206,7 +206,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d72/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry-members.html b/docs/d1/d72/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry-members.html index 6007022830..be61bc897c 100644 --- a/docs/d1/d72/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry-members.html +++ b/docs/d1/d72/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry-members.html @@ -102,18 +102,19 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); - - - - - - - - + + + + + + + + +

Public Member Functions

-bool ReadWrite (BoxBuffer *buffer) override
 Read/write the mp4 box from/to BoxBuffer.
 
+
+bool ReadWrite (BoxBuffer *buffer) override
 Read/write the mp4 box from/to BoxBuffer.
 
FourCC BoxType () const override
 
uint32_t ComputeSize () override
 
-bool ParseData (BufferReader *reader)
 
 
uint32_t ComputeSize () override
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
ParseData ( - + + - - - - - - - - - - - - - - - +

Public Attributes

+
+FourCC box_type
 
std::vector< uint8_t > data
 
-uint8_t version
 
-uint8_t profile_indication
 
-uint8_t profile_compatibility
 
-uint8_t avc_level
 
-uint8_t length_size
 
-std::vector< SPS > sps_list
 
-std::vector< PPS > pps_list
 
 
@@ -169,9 +138,9 @@ Additional Inherited Members

Additional Inherited Members

Detailed Description

-

Definition at line 168 of file box_definitions.h.

+

Definition at line 167 of file box_definitions.h.

Member Function Documentation

- +
@@ -179,7 +148,7 @@ Additional Inherited Members
- + @@ -195,7 +164,7 @@ Additional Inherited Members

Implements edash_packager::media::mp4::Box.

-

Definition at line 932 of file box_definitions.cc.

+

Definition at line 896 of file box_definitions.cc.

@@ -206,7 +175,7 @@ Additional Inherited Members diff --git a/docs/d1/d31/structedash__packager_1_1media_1_1mp4_1_1CodecConfigurationRecord.png b/docs/d1/d31/structedash__packager_1_1media_1_1mp4_1_1CodecConfigurationRecord.png new file mode 100644 index 0000000000..d59c2ff7a7 Binary files /dev/null and b/docs/d1/d31/structedash__packager_1_1media_1_1mp4_1_1CodecConfigurationRecord.png differ diff --git a/docs/d1/d37/es__parser__h264_8h_source.html b/docs/d1/d37/es__parser__h264_8h_source.html index 858c1b5606..792a2b90c6 100644 --- a/docs/d1/d37/es__parser__h264_8h_source.html +++ b/docs/d1/d37/es__parser__h264_8h_source.html @@ -195,12 +195,12 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
106 
107 #endif
- + diff --git a/docs/d1/d38/classedash__packager_1_1MockRepresentation-members.html b/docs/d1/d38/classedash__packager_1_1MockRepresentation-members.html index e548385a74..a5011536de 100644 --- a/docs/d1/d38/classedash__packager_1_1MockRepresentation-members.html +++ b/docs/d1/d38/classedash__packager_1_1MockRepresentation-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
uint32_t edash_packager::media::mp4::AVCDecoderConfigurationRecord::ComputeSize uint32_t edash_packager::media::mp4::CodecConfigurationRecord::ComputeSize ( )
diff --git a/docs/d1/d3b/mpd__generator__flags_8h_source.html b/docs/d1/d3b/mpd__generator__flags_8h_source.html index 6e76eaf85a..09edc56768 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/d45/decoding__time__iterator_8cc_source.html b/docs/d1/d45/decoding__time__iterator_8cc_source.html index 7d05a39b17..16a6a85758 100644 --- a/docs/d1/d45/decoding__time__iterator_8cc_source.html +++ b/docs/d1/d45/decoding__time__iterator_8cc_source.html @@ -163,12 +163,12 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); - +
uint64_t Duration(uint32_t start_sample, uint32_t end_sample) const
diff --git a/docs/d1/d48/text__track__config_8h_source.html b/docs/d1/d48/text__track__config_8h_source.html index 47eb24ecc2..d30d071520 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/d4b/classedash__packager_1_1media_1_1mp2t_1_1TsPacket.html b/docs/d1/d4b/classedash__packager_1_1media_1_1mp2t_1_1TsPacket.html index e2ee5cd624..e8472d39c0 100644 --- a/docs/d1/d4b/classedash__packager_1_1media_1_1mp2t_1_1TsPacket.html +++ b/docs/d1/d4b/classedash__packager_1_1media_1_1mp2t_1_1TsPacket.html @@ -145,7 +145,7 @@ static const int 
kPacketSi diff --git a/docs/d1/d4d/h264__bit__reader_8cc_source.html b/docs/d1/d4d/h264__bit__reader_8cc_source.html index a9de28ba91..61ca801968 100644 --- a/docs/d1/d4d/h264__bit__reader_8cc_source.html +++ b/docs/d1/d4d/h264__bit__reader_8cc_source.html @@ -205,7 +205,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d5d/structedash__packager_1_1MpdOptions.html b/docs/d1/d5d/structedash__packager_1_1MpdOptions.html index e613282e5c..9d45a70c0a 100644 --- a/docs/d1/d5d/structedash__packager_1_1MpdOptions.html +++ b/docs/d1/d5d/structedash__packager_1_1MpdOptions.html @@ -127,7 +127,7 @@ double suggested_presentat diff --git a/docs/d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html b/docs/d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html index a65833e457..8766704a2f 100644 --- a/docs/d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html +++ b/docs/d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html @@ -149,7 +149,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 507 of file box_definitions.h.

+

Definition at line 497 of file box_definitions.h.

Member Function Documentation

@@ -175,7 +175,7 @@ Additional Inherited Members
data_reference_index (defined in edash_packager::media::mp4::AudioSampleEntry)edash_packager::media::mp4::AudioSampleEntry
esds (defined in edash_packager::media::mp4::AudioSampleEntry)edash_packager::media::mp4::AudioSampleEntry
format (defined in edash_packager::media::mp4::AudioSampleEntry)edash_packager::media::mp4::AudioSampleEntry
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) overrideedash_packager::media::mp4::AudioSampleEntryvirtual
samplerate (defined in edash_packager::media::mp4::AudioSampleEntry)edash_packager::media::mp4::AudioSampleEntry
samplesize (defined in edash_packager::media::mp4::AudioSampleEntry)edash_packager::media::mp4::AudioSampleEntry
sinf (defined in edash_packager::media::mp4::AudioSampleEntry)edash_packager::media::mp4::AudioSampleEntry
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~AudioSampleEntry() override (defined in edash_packager::media::mp4::AudioSampleEntry)edash_packager::media::mp4::AudioSampleEntry
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
GetActualFormat() const (defined in edash_packager::media::mp4::AudioSampleEntry)edash_packager::media::mp4::AudioSampleEntryinline
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) overrideedash_packager::media::mp4::AudioSampleEntryvirtual
samplerate (defined in edash_packager::media::mp4::AudioSampleEntry)edash_packager::media::mp4::AudioSampleEntry
samplesize (defined in edash_packager::media::mp4::AudioSampleEntry)edash_packager::media::mp4::AudioSampleEntry
sinf (defined in edash_packager::media::mp4::AudioSampleEntry)edash_packager::media::mp4::AudioSampleEntry
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~AudioSampleEntry() override (defined in edash_packager::media::mp4::AudioSampleEntry)edash_packager::media::mp4::AudioSampleEntry
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
diff --git a/docs/d1/d74/mp2t__media__parser_8cc_source.html b/docs/d1/d74/mp2t__media__parser_8cc_source.html index 2a22f1fce1..900c05c366 100644 --- a/docs/d1/d74/mp2t__media__parser_8cc_source.html +++ b/docs/d1/d74/mp2t__media__parser_8cc_source.html @@ -528,7 +528,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk-members.html b/docs/d1/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk-members.html index 5366fa2d50..2784141837 100644 --- a/docs/d1/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk-members.html +++ b/docs/d1/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d78/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer.html b/docs/d1/d78/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer.html index ab03416a81..12b3000261 100644 --- a/docs/d1/d78/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer.html +++ b/docs/d1/d78/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer.html @@ -176,7 +176,7 @@ base::Clock * clock () diff --git a/docs/d1/d7d/webm__video__client_8cc_source.html b/docs/d1/d7d/webm__video__client_8cc_source.html index f843e7545f..9b0fa2d109 100644 --- a/docs/d1/d7d/webm__video__client_8cc_source.html +++ b/docs/d1/d7d/webm__video__client_8cc_source.html @@ -198,81 +198,82 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
109  extra_data_size = codec_private.size();
110  }
111 
-
112  return scoped_refptr<VideoStreamInfo>(
-
113  new VideoStreamInfo(track_num, kWebMTimeScale, 0, video_codec,
-
114  VideoStreamInfo::GetCodecString(video_codec, 0, 0, 0),
-
115  "", width_after_crop, height_after_crop, sar_x, sar_y,
-
116  0, 0, extra_data, extra_data_size, is_encrypted));
-
117 }
-
118 
-
119 bool WebMVideoClient::OnUInt(int id, int64_t val) {
-
120  int64_t* dst = NULL;
-
121 
-
122  switch (id) {
-
123  case kWebMIdPixelWidth:
-
124  dst = &pixel_width_;
-
125  break;
-
126  case kWebMIdPixelHeight:
-
127  dst = &pixel_height_;
-
128  break;
-
129  case kWebMIdPixelCropTop:
-
130  dst = &crop_top_;
-
131  break;
-
132  case kWebMIdPixelCropBottom:
-
133  dst = &crop_bottom_;
-
134  break;
-
135  case kWebMIdPixelCropLeft:
-
136  dst = &crop_left_;
-
137  break;
-
138  case kWebMIdPixelCropRight:
-
139  dst = &crop_right_;
-
140  break;
-
141  case kWebMIdDisplayWidth:
-
142  dst = &display_width_;
-
143  break;
-
144  case kWebMIdDisplayHeight:
-
145  dst = &display_height_;
-
146  break;
-
147  case kWebMIdDisplayUnit:
-
148  dst = &display_unit_;
-
149  break;
-
150  case kWebMIdAlphaMode:
-
151  dst = &alpha_mode_;
-
152  break;
-
153  default:
-
154  return true;
-
155  }
-
156 
-
157  if (*dst != -1) {
-
158  LOG(ERROR) << "Multiple values for id " << std::hex << id << " specified ("
-
159  << *dst << " and " << val << ")";
-
160  return false;
-
161  }
-
162 
-
163  *dst = val;
-
164  return true;
-
165 }
-
166 
-
167 bool WebMVideoClient::OnBinary(int id, const uint8_t* data, int size) {
-
168  // Accept binary fields we don't care about for now.
-
169  return true;
-
170 }
-
171 
-
172 bool WebMVideoClient::OnFloat(int id, double val) {
-
173  // Accept float fields we don't care about for now.
-
174  return true;
-
175 }
-
176 
-
177 } // namespace media
-
178 } // namespace edash_packager
+
112  // TODO(kqyang): Generate codec string.
+
113  std::string codec_string;
+
114 
+
115  return scoped_refptr<VideoStreamInfo>(new VideoStreamInfo(
+
116  track_num, kWebMTimeScale, 0, video_codec, codec_string, std::string(),
+
117  width_after_crop, height_after_crop, sar_x, sar_y, 0, 0, extra_data,
+
118  extra_data_size, is_encrypted));
+
119 }
+
120 
+
121 bool WebMVideoClient::OnUInt(int id, int64_t val) {
+
122  int64_t* dst = NULL;
+
123 
+
124  switch (id) {
+
125  case kWebMIdPixelWidth:
+
126  dst = &pixel_width_;
+
127  break;
+
128  case kWebMIdPixelHeight:
+
129  dst = &pixel_height_;
+
130  break;
+
131  case kWebMIdPixelCropTop:
+
132  dst = &crop_top_;
+
133  break;
+
134  case kWebMIdPixelCropBottom:
+
135  dst = &crop_bottom_;
+
136  break;
+
137  case kWebMIdPixelCropLeft:
+
138  dst = &crop_left_;
+
139  break;
+
140  case kWebMIdPixelCropRight:
+
141  dst = &crop_right_;
+
142  break;
+
143  case kWebMIdDisplayWidth:
+
144  dst = &display_width_;
+
145  break;
+
146  case kWebMIdDisplayHeight:
+
147  dst = &display_height_;
+
148  break;
+
149  case kWebMIdDisplayUnit:
+
150  dst = &display_unit_;
+
151  break;
+
152  case kWebMIdAlphaMode:
+
153  dst = &alpha_mode_;
+
154  break;
+
155  default:
+
156  return true;
+
157  }
+
158 
+
159  if (*dst != -1) {
+
160  LOG(ERROR) << "Multiple values for id " << std::hex << id << " specified ("
+
161  << *dst << " and " << val << ")";
+
162  return false;
+
163  }
+
164 
+
165  *dst = val;
+
166  return true;
+
167 }
+
168 
+
169 bool WebMVideoClient::OnBinary(int id, const uint8_t* data, int size) {
+
170  // Accept binary fields we don't care about for now.
+
171  return true;
+
172 }
+
173 
+
174 bool WebMVideoClient::OnFloat(int id, double val) {
+
175  // Accept float fields we don't care about for now.
+
176  return true;
+
177 }
+
178 
+
179 } // namespace media
+
180 } // namespace edash_packager
edash_packager::media::WebMVideoClient::GetVideoStreamInfo
scoped_refptr< VideoStreamInfo > GetVideoStreamInfo(int64_t track_num, const std::string &codec_id, const std::vector< uint8_t > &codec_private, bool is_encrypted)
Definition: webm_video_client.cc:49
-
edash_packager::media::VideoStreamInfo::GetCodecString
static std::string GetCodecString(VideoCodec codec, uint8_t profile, uint8_t compatible_profiles, uint8_t level)
Definition: video_stream_info.cc:95
edash_packager::media::WebMVideoClient::Reset
void Reset()
Reset this object's state so it can process a new video track element.
Definition: webm_video_client.cc:36
edash_packager::media::VideoStreamInfo
Holds video stream information.
Definition: video_stream_info.h:28
diff --git a/docs/d1/d7f/classedash__packager_1_1media_1_1BitReader-members.html b/docs/d1/d7f/classedash__packager_1_1media_1_1BitReader-members.html index 84e334978d..290a12a4ca 100644 --- a/docs/d1/d7f/classedash__packager_1_1media_1_1BitReader-members.html +++ b/docs/d1/d7f/classedash__packager_1_1media_1_1BitReader-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html b/docs/d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html index 45c41065fa..5d720b3ae7 100644 --- a/docs/d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html +++ b/docs/d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html @@ -155,7 +155,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 574 of file box_definitions.h.

+

Definition at line 564 of file box_definitions.h.

Member Function Documentation

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

Implements edash_packager::media::mp4::Box.

-

Definition at line 1923 of file box_definitions.cc.

+

Definition at line 1893 of file box_definitions.cc.

@@ -192,7 +192,7 @@ Additional Inherited Members diff --git a/docs/d1/d82/adts__constants_8h_source.html b/docs/d1/d82/adts__constants_8h_source.html index 149d0dc17d..5bba242e2e 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/d86/classedash__packager_1_1media_1_1RsaPublicKey.html b/docs/d1/d86/classedash__packager_1_1media_1_1RsaPublicKey.html index f289a80364..b5c316fc59 100644 --- a/docs/d1/d86/classedash__packager_1_1media_1_1RsaPublicKey.html +++ b/docs/d1/d86/classedash__packager_1_1media_1_1RsaPublicKey.html @@ -218,7 +218,7 @@ Static Public Member Functions diff --git a/docs/d1/d8e/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample-members.html b/docs/d1/d8e/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample-members.html index 44b74486bc..9db72706d5 100644 --- a/docs/d1/d8e/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample-members.html +++ b/docs/d1/d8e/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample-members.html @@ -111,7 +111,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 79b9da2950..24c2b714fa 100644 --- a/docs/d1/d8e/webm__audio__client_8cc_source.html +++ b/docs/d1/d8e/webm__audio__client_8cc_source.html @@ -211,7 +211,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/d92/classedash__packager_1_1media_1_1OffsetByteQueue.html b/docs/d1/d92/classedash__packager_1_1media_1_1OffsetByteQueue.html index 301e965672..75de76275d 100644 --- a/docs/d1/d92/classedash__packager_1_1media_1_1OffsetByteQueue.html +++ b/docs/d1/d92/classedash__packager_1_1media_1_1OffsetByteQueue.html @@ -242,7 +242,7 @@ false if max_offset > diff --git a/docs/d1/d9d/tracks__builder_8h_source.html b/docs/d1/d9d/tracks__builder_8h_source.html index 4c68ccd4bf..24eca56e13 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/dc3/classedash__packager_1_1media_1_1LocalFile-members.html b/docs/d1/dc3/classedash__packager_1_1media_1_1LocalFile-members.html index 7377febde8..f8d6c5ea7a 100644 --- a/docs/d1/dc3/classedash__packager_1_1media_1_1LocalFile-members.html +++ b/docs/d1/dc3/classedash__packager_1_1media_1_1LocalFile-members.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.html b/docs/d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.html index 951c0a5505..0af6d16ea1 100644 --- a/docs/d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.html +++ b/docs/d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.html @@ -138,7 +138,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 191 of file box_definitions.h.

+

Definition at line 175 of file box_definitions.h.

Member Function Documentation

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

Implements edash_packager::media::mp4::Box.

-

Definition at line 950 of file box_definitions.cc.

+

Definition at line 914 of file box_definitions.cc.

@@ -175,7 +175,7 @@ Additional Inherited Members diff --git a/docs/d1/dcb/encrypting__fragmenter_8h_source.html b/docs/d1/dcb/encrypting__fragmenter_8h_source.html index a23f720ef1..b6934869b5 100644 --- a/docs/d1/dcb/encrypting__fragmenter_8h_source.html +++ b/docs/d1/dcb/encrypting__fragmenter_8h_source.html @@ -164,14 +164,14 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
edash_packager::media::mp4::EncryptingFragmenter::AddSample
Status AddSample(scoped_refptr< MediaSample > sample) override
Definition: encrypting_fragmenter.cc:39
edash_packager::media::AesCtrEncryptor
Definition: aes_encryptor.h:25
edash_packager::media::mp4::EncryptingFragmenter::FinalizeFragment
void FinalizeFragment() override
Finalize and optimize the fragment.
Definition: encrypting_fragmenter.cc:76
-
edash_packager::media::mp4::TrackFragment
Definition: box_definitions.h:531
+
edash_packager::media::mp4::TrackFragment
Definition: box_definitions.h:521
edash_packager::media::mp4::EncryptingFragmenter::PrepareFragmentForEncryption
virtual Status PrepareFragmentForEncryption(bool enable_encryption)
Definition: encrypting_fragmenter.cc:87
edash_packager::media::mp4::EncryptingFragmenter::EncryptingFragmenter
EncryptingFragmenter(TrackFragment *traf, scoped_ptr< EncryptionKey > encryption_key, int64_t clear_time, uint8_t nalu_length_size)
Definition: encrypting_fragmenter.cc:25
edash_packager::media::mp4::EncryptingFragmenter::FinalizeFragmentForEncryption
virtual void FinalizeFragmentForEncryption()
Finalize current fragment for encryption.
Definition: encrypting_fragmenter.cc:92
diff --git a/docs/d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.html b/docs/d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.html index a49d8256b2..ec677409d1 100644 --- a/docs/d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.html +++ b/docs/d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.html @@ -142,7 +142,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 39 of file box_definitions.h.

+

Definition at line 38 of file box_definitions.h.

Member Function Documentation

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

Reimplemented in edash_packager::media::mp4::SegmentType.

-

Definition at line 84 of file box_definitions.cc.

+

Definition at line 86 of file box_definitions.cc.

@@ -181,7 +181,7 @@ Additional Inherited Members diff --git a/docs/d1/dd0/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup-members.html b/docs/d1/dd0/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup-members.html index 50063ede33..13769db4d7 100644 --- a/docs/d1/dd0/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup-members.html +++ b/docs/d1/dd0/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/dd5/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode.html b/docs/d1/dd5/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode.html index 9039c8d127..9b649d7034 100644 --- a/docs/d1/dd5/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode.html +++ b/docs/d1/dd5/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode.html @@ -156,7 +156,7 @@ Protected Member Functions diff --git a/docs/d1/de2/composition__offset__iterator_8cc_source.html b/docs/d1/de2/composition__offset__iterator_8cc_source.html index 8bce62a934..f5c195f8db 100644 --- a/docs/d1/de2/composition__offset__iterator_8cc_source.html +++ b/docs/d1/de2/composition__offset__iterator_8cc_source.html @@ -153,13 +153,13 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
edash_packager::media::mp4::CompositionOffsetIterator::SampleOffset
int64_t SampleOffset(uint32_t sample) const
Definition: composition_offset_iterator.cc:38
edash_packager::media::mp4::CompositionOffsetIterator::AdvanceSample
bool AdvanceSample()
Definition: composition_offset_iterator.cc:22
edash_packager::media::mp4::CompositionOffsetIterator::CompositionOffsetIterator
CompositionOffsetIterator(const CompositionTimeToSample &composition_time_to_sample)
Create CompositionOffsetIterator from composition time to sample box.
Definition: composition_offset_iterator.cc:15
-
edash_packager::media::mp4::CompositionTimeToSample
Definition: box_definitions.h:262
+
edash_packager::media::mp4::CompositionTimeToSample
Definition: box_definitions.h:252
edash_packager::media::mp4::CompositionOffsetIterator::NumSamples
uint32_t NumSamples() const
Definition: composition_offset_iterator.cc:51
edash_packager::media::mp4::CompositionOffsetIterator::IsValid
bool IsValid() const
Definition: composition_offset_iterator.cc:33
diff --git a/docs/d1/df0/aes__encryptor_8h_source.html b/docs/d1/df0/aes__encryptor_8h_source.html index 99aeba5abf..993df626d1 100644 --- a/docs/d1/df0/aes__encryptor_8h_source.html +++ b/docs/d1/df0/aes__encryptor_8h_source.html @@ -305,7 +305,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/df1/multi__segment__segmenter_8cc_source.html b/docs/d1/df1/multi__segment__segmenter_8cc_source.html index e65e37d6e3..c4956e0720 100644 --- a/docs/d1/df1/multi__segment__segmenter_8cc_source.html +++ b/docs/d1/df1/multi__segment__segmenter_8cc_source.html @@ -303,7 +303,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d1/dfc/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample-members.html b/docs/d1/dfc/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample-members.html index 53b1c38630..920991abf6 100644 --- a/docs/d1/dfc/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample-members.html +++ b/docs/d1/dfc/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample-members.html @@ -101,7 +101,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 5da9eb4e1f..20e7cd9c76 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/d0f/structedash__packager_1_1media_1_1mp4_1_1MediaInformation-members.html b/docs/d2/d0f/structedash__packager_1_1media_1_1mp4_1_1MediaInformation-members.html index 14c76fd7b9..5dceb96f20 100644 --- a/docs/d2/d0f/structedash__packager_1_1media_1_1mp4_1_1MediaInformation-members.html +++ b/docs/d2/d0f/structedash__packager_1_1media_1_1mp4_1_1MediaInformation-members.html @@ -110,7 +110,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 d67831ab2b..0936a8fd8f 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 f77c2a18a2..d0826d9f50 100644 --- a/docs/d2/d23/threaded__io__file_8cc_source.html +++ b/docs/d2/d23/threaded__io__file_8cc_source.html @@ -272,7 +272,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 635b1c21ab..608860a38a 100644 --- a/docs/d2/d24/packager__util_8h_source.html +++ b/docs/d2/d24/packager__util_8h_source.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html b/docs/d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html index 9b89b835f5..ad04993570 100644 --- a/docs/d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html +++ b/docs/d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html @@ -147,7 +147,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 524 of file box_definitions.h.

+

Definition at line 514 of file box_definitions.h.

Member Function Documentation

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

Implements edash_packager::media::mp4::Box.

-

Definition at line 1780 of file box_definitions.cc.

+

Definition at line 1750 of file box_definitions.cc.

@@ -184,7 +184,7 @@ Additional Inherited Members diff --git a/docs/d2/d2d/structedash__packager_1_1media_1_1mp4_1_1MediaHeader-members.html b/docs/d2/d2d/structedash__packager_1_1media_1_1mp4_1_1MediaHeader-members.html index 49c6d74863..e69639c4e2 100644 --- a/docs/d2/d2d/structedash__packager_1_1media_1_1mp4_1_1MediaHeader-members.html +++ b/docs/d2/d2d/structedash__packager_1_1media_1_1mp4_1_1MediaHeader-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d30/tracks__builder_8cc_source.html b/docs/d2/d30/tracks__builder_8cc_source.html index 4ec1f190c7..95c78d28fc 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/d48/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader-members.html b/docs/d2/d48/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader-members.html index c7fb6c0646..4fe398f20e 100644 --- a/docs/d2/d48/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader-members.html +++ b/docs/d2/d48/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d4b/structedash__packager_1_1media_1_1FileCloser-members.html b/docs/d2/d4b/structedash__packager_1_1media_1_1FileCloser-members.html index af18fe1d55..3abc84092e 100644 --- a/docs/d2/d4b/structedash__packager_1_1media_1_1FileCloser-members.html +++ b/docs/d2/d4b/structedash__packager_1_1media_1_1FileCloser-members.html @@ -97,7 +97,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 fde2c40350..886effb166 100644 --- a/docs/d2/d4d/file_8h_source.html +++ b/docs/d2/d4d/file_8h_source.html @@ -181,7 +181,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d50/structedash__packager_1_1media_1_1H264DecRefPicMarking.html b/docs/d2/d50/structedash__packager_1_1media_1_1H264DecRefPicMarking.html index bf3ddc4d11..ad17c30135 100644 --- a/docs/d2/d50/structedash__packager_1_1media_1_1H264DecRefPicMarking.html +++ b/docs/d2/d50/structedash__packager_1_1media_1_1H264DecRefPicMarking.html @@ -114,14 +114,14 @@ int max_long_term_frame_id

Detailed Description

-

Definition at line 180 of file h264_parser.h.

+

Definition at line 161 of file h264_parser.h.


The documentation for this struct was generated from the following file: diff --git a/docs/d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html b/docs/d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html index 7e6d41939f..cb1785925a 100644 --- a/docs/d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html +++ b/docs/d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html @@ -149,7 +149,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 65 of file box_definitions.h.

+

Definition at line 64 of file box_definitions.h.

Member Function Documentation

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

Implements edash_packager::media::mp4::Box.

-

Definition at line 186 of file box_definitions.cc.

+

Definition at line 188 of file box_definitions.cc.

@@ -186,7 +186,7 @@ Additional Inherited Members diff --git a/docs/d2/d5b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt.html b/docs/d2/d5b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt.html index f7d3e792d8..e29f6ef85f 100644 --- a/docs/d2/d5b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt.html +++ b/docs/d2/d5b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt.html @@ -155,7 +155,7 @@ void Reset () override diff --git a/docs/d2/d5d/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader-members.html b/docs/d2/d5d/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader-members.html index 54fd987842..f951af5943 100644 --- a/docs/d2/d5d/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader-members.html +++ b/docs/d2/d5d/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader-members.html @@ -114,7 +114,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 d308ab1718..634f4cafba 100644 --- a/docs/d2/d62/simple__mpd__notifier_8h_source.html +++ b/docs/d2/d62/simple__mpd__notifier_8h_source.html @@ -188,7 +188,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d6f/classBandwidthEstimator.html b/docs/d2/d6f/classBandwidthEstimator.html index e0d0b30b4a..084542e15b 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/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html b/docs/d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html index 7640e4f1d7..0edaea9f4c 100644 --- a/docs/d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html +++ b/docs/d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html @@ -135,7 +135,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 95 of file box_definitions.h.

+

Definition at line 94 of file box_definitions.h.

Member Function Documentation

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

Implements edash_packager::media::mp4::Box.

-

Definition at line 273 of file box_definitions.cc.

+

Definition at line 275 of file box_definitions.cc.

@@ -172,7 +172,7 @@ Additional Inherited Members diff --git a/docs/d2/d7b/simple__mpd__notifier_8cc_source.html b/docs/d2/d7b/simple__mpd__notifier_8cc_source.html index fe9aff5b63..553dc9065e 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 6e48e60bf1..379c702974 100644 --- a/docs/d2/d7e/aac__audio__specific__config_8h_source.html +++ b/docs/d2/d7e/aac__audio__specific__config_8h_source.html @@ -166,7 +166,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d90/classedash__packager_1_1media_1_1Status.html b/docs/d2/d90/classedash__packager_1_1media_1_1Status.html index 9ee63950df..7a797c7105 100644 --- a/docs/d2/d90/classedash__packager_1_1media_1_1Status.html +++ b/docs/d2/d90/classedash__packager_1_1media_1_1Status.html @@ -302,7 +302,7 @@ static const diff --git a/docs/d2/d92/box__reader_8h_source.html b/docs/d2/d92/box__reader_8h_source.html index f2bd2b68f2..c3aa92a010 100644 --- a/docs/d2/d92/box__reader_8h_source.html +++ b/docs/d2/d92/box__reader_8h_source.html @@ -249,7 +249,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/d98/avc__decoder__configuration_8h_source.html b/docs/d2/d98/avc__decoder__configuration_8h_source.html new file mode 100644 index 0000000000..ff36f078b5 --- /dev/null +++ b/docs/d2/d98/avc__decoder__configuration_8h_source.html @@ -0,0 +1,162 @@ + + + + + + +DASH Media Packaging SDK: media/filters/avc_decoder_configuration.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
avc_decoder_configuration.h
+
+
+
1 // Copyright 2015 Google Inc. All rights reserved.
+
2 //
+
3 // Use of this source code is governed by a BSD-style
+
4 // license that can be found in the LICENSE file or at
+
5 // https://developers.google.com/open-source/licenses/bsd
+
6 
+
7 #ifndef MEDIA_FILTERS_AVC_DECODER_CONFIGURATION_H_
+
8 #define MEDIA_FILTERS_AVC_DECODER_CONFIGURATION_H_
+
9 
+
10 #include <stdint.h>
+
11 #include <string>
+
12 #include <vector>
+
13 
+
14 #include "packager/base/macros.h"
+
15 
+
16 namespace edash_packager {
+
17 namespace media {
+
18 
+ +
21  public:
+ + +
24 
+
27  bool Parse(const std::vector<uint8_t>& data);
+
28 
+
30  std::string GetCodecString() const;
+
31 
+
32  uint8_t version() const { return version_; }
+
33  uint8_t profile_indication() const { return profile_indication_; }
+
34  uint8_t profile_compatibility() const { return profile_compatibility_; }
+
35  uint8_t avc_level() const { return avc_level_; }
+
36  uint8_t length_size() const { return length_size_; }
+
37  uint32_t coded_width() const { return coded_width_; }
+
38  uint32_t coded_height() const { return coded_height_; }
+
39  uint32_t pixel_width() const { return pixel_width_; }
+
40  uint32_t pixel_height() const { return pixel_height_; }
+
41 
+
44  static std::string GetCodecString(uint8_t profile_indication,
+
45  uint8_t profile_compatibility,
+
46  uint8_t avc_level);
+
47 
+
48  private:
+
49  uint8_t version_;
+
50  uint8_t profile_indication_;
+
51  uint8_t profile_compatibility_;
+
52  uint8_t avc_level_;
+
53  uint8_t length_size_;
+
54 
+
55  // Extracted from SPS.
+
56  uint32_t coded_width_;
+
57  uint32_t coded_height_;
+
58  uint32_t pixel_width_;
+
59  uint32_t pixel_height_;
+
60 
+
61  DISALLOW_COPY_AND_ASSIGN(AVCDecoderConfiguration);
+
62 };
+
63 
+
64 } // namespace media
+
65 } // namespace edash_packager
+
66 
+
67 #endif // MEDIA_FILTERS_AVC_DECODER_CONFIGURATION_H_
+ +
bool Parse(const std::vector< uint8_t > &data)
+
Class for parsing AVC decoder configuration.
+
+ + + + diff --git a/docs/d2/da6/threaded__io__file_8h_source.html b/docs/d2/da6/threaded__io__file_8h_source.html index 8179fa2a8c..55891be14f 100644 --- a/docs/d2/da6/threaded__io__file_8h_source.html +++ b/docs/d2/da6/threaded__io__file_8h_source.html @@ -169,7 +169,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dd9/structedash__packager_1_1media_1_1VideoStreamInfoParameters.html b/docs/d2/dd9/structedash__packager_1_1media_1_1VideoStreamInfoParameters.html index 51b999c8ea..4c1aa42098 100644 --- a/docs/d2/dd9/structedash__packager_1_1media_1_1VideoStreamInfoParameters.html +++ b/docs/d2/dd9/structedash__packager_1_1media_1_1VideoStreamInfoParameters.html @@ -146,7 +146,7 @@ bool is_encrypted diff --git a/docs/d2/de6/packager__main_8cc_source.html b/docs/d2/de6/packager__main_8cc_source.html index b1e4c34c30..4138407ffd 100644 --- a/docs/d2/de6/packager__main_8cc_source.html +++ b/docs/d2/de6/packager__main_8cc_source.html @@ -432,7 +432,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 2b96d2ed54..497c18b3e5 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/df3/structedash__packager_1_1media_1_1mp4_1_1Edit-members.html b/docs/d2/df3/structedash__packager_1_1media_1_1mp4_1_1Edit-members.html index 66603c3c52..0d0aa73d2c 100644 --- a/docs/d2/df3/structedash__packager_1_1media_1_1mp4_1_1Edit-members.html +++ b/docs/d2/df3/structedash__packager_1_1media_1_1mp4_1_1Edit-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d2/dfa/classedash__packager_1_1RepresentationStateChangeListener.html b/docs/d2/dfa/classedash__packager_1_1RepresentationStateChangeListener.html index 4b3a0924f3..7d0ef0a639 100644 --- a/docs/d2/dfa/classedash__packager_1_1RepresentationStateChangeListener.html +++ b/docs/d2/dfa/classedash__packager_1_1RepresentationStateChangeListener.html @@ -195,7 +195,7 @@ Public Member Functions diff --git a/docs/d2/dfd/adts__header_8h_source.html b/docs/d2/dfd/adts__header_8h_source.html index 0dba916932..cec527dc37 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/d2/dfd/classedash__packager_1_1media_1_1MediaStream.html b/docs/d2/dfd/classedash__packager_1_1media_1_1MediaStream.html index a9e2b1682f..d93ece01ec 100644 --- a/docs/d2/dfd/classedash__packager_1_1media_1_1MediaStream.html +++ b/docs/d2/dfd/classedash__packager_1_1media_1_1MediaStream.html @@ -225,7 +225,7 @@ const scoped_refptr< diff --git a/docs/d3/d04/classedash__packager_1_1media_1_1WebMAudioClient-members.html b/docs/d3/d04/classedash__packager_1_1media_1_1WebMAudioClient-members.html index 39010d37f0..7473253abc 100644 --- a/docs/d3/d04/classedash__packager_1_1media_1_1WebMAudioClient-members.html +++ b/docs/d3/d04/classedash__packager_1_1media_1_1WebMAudioClient-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d0e/classedash__packager_1_1media_1_1MpdNotifyMuxerListener.html b/docs/d3/d0e/classedash__packager_1_1media_1_1MpdNotifyMuxerListener.html index e6ad85fa93..26cc1fbf2f 100644 --- a/docs/d3/d0e/classedash__packager_1_1media_1_1MpdNotifyMuxerListener.html +++ b/docs/d3/d0e/classedash__packager_1_1media_1_1MpdNotifyMuxerListener.html @@ -234,7 +234,7 @@ Additional Inherited Members diff --git a/docs/d3/d15/udp__file__win_8cc_source.html b/docs/d3/d15/udp__file__win_8cc_source.html index 341108c663..8496f88b76 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/d19/io__cache_8h_source.html b/docs/d3/d19/io__cache_8h_source.html index af101d6bd4..7e61226309 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/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html b/docs/d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html index 2d1bb2789c..36638927fd 100644 --- a/docs/d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html +++ b/docs/d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html @@ -155,7 +155,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 409 of file box_definitions.h.

+

Definition at line 399 of file box_definitions.h.

Member Function Documentation

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

Implements edash_packager::media::mp4::Box.

-

Definition at line 1391 of file box_definitions.cc.

+

Definition at line 1361 of file box_definitions.cc.

@@ -192,7 +192,7 @@ Additional Inherited Members diff --git a/docs/d3/d2f/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption-members.html b/docs/d3/d2f/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption-members.html index 906a74b157..6063175a18 100644 --- a/docs/d3/d2f/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption-members.html +++ b/docs/d3/d2f/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d37/single__segment__segmenter_8cc_source.html b/docs/d3/d37/single__segment__segmenter_8cc_source.html index 96eafc3690..d675908600 100644 --- a/docs/d3/d37/single__segment__segmenter_8cc_source.html +++ b/docs/d3/d37/single__segment__segmenter_8cc_source.html @@ -329,8 +329,8 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
static bool Delete(const char *file_name)
Definition: file.cc:138
virtual bool Open()=0
Internal open. Should not be used directly.
- - + +
bool GetIndexRange(size_t *offset, size_t *size) override
@@ -341,7 +341,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.html b/docs/d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.html index 603d9c4ad0..63f8216bb6 100644 --- a/docs/d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.html +++ b/docs/d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.html @@ -311,7 +311,7 @@ KeyFetcher implementation overrides. diff --git a/docs/d3/d48/structedash__packager_1_1media_1_1mp4_1_1EditList-members.html b/docs/d3/d48/structedash__packager_1_1media_1_1mp4_1_1EditList-members.html index fa58506b4c..5a3a7a1c97 100644 --- a/docs/d3/d48/structedash__packager_1_1media_1_1mp4_1_1EditList-members.html +++ b/docs/d3/d48/structedash__packager_1_1media_1_1mp4_1_1EditList-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d52/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator-members.html b/docs/d3/d52/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator-members.html index 067fea011b..0b1da0de58 100644 --- a/docs/d3/d52/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator-members.html +++ b/docs/d3/d52/classedash__packager_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/d56/decrypt__config_8cc_source.html b/docs/d3/d56/decrypt__config_8cc_source.html index e8e8ea04f9..9bdde70595 100644 --- a/docs/d3/d56/decrypt__config_8cc_source.html +++ b/docs/d3/d56/decrypt__config_8cc_source.html @@ -118,7 +118,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 5d2531d40c..1a7a6cc65e 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/d69/classedash__packager_1_1media_1_1ClusterBuilder.html b/docs/d3/d69/classedash__packager_1_1media_1_1ClusterBuilder.html index aaa832845c..a8e0c7a25f 100644 --- a/docs/d3/d69/classedash__packager_1_1media_1_1ClusterBuilder.html +++ b/docs/d3/d69/classedash__packager_1_1media_1_1ClusterBuilder.html @@ -125,7 +125,7 @@ scoped_ptr< diff --git a/docs/d3/d6b/classedash__packager_1_1media_1_1IoCache.html b/docs/d3/d6b/classedash__packager_1_1media_1_1IoCache.html index d795a82292..b33580a201 100644 --- a/docs/d3/d6b/classedash__packager_1_1media_1_1IoCache.html +++ b/docs/d3/d6b/classedash__packager_1_1media_1_1IoCache.html @@ -297,7 +297,7 @@ void  diff --git a/docs/d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html b/docs/d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html index d1f58b6f60..c14b77c44e 100644 --- a/docs/d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html +++ b/docs/d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html @@ -149,7 +149,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 233 of file box_definitions.h.

+

Definition at line 223 of file box_definitions.h.

Member Function Documentation

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

Implements edash_packager::media::mp4::Box.

-

Definition at line 440 of file box_definitions.cc.

+

Definition at line 442 of file box_definitions.cc.

@@ -186,7 +186,7 @@ Additional Inherited Members diff --git a/docs/d3/d76/muxer__flags_8h_source.html b/docs/d3/d76/muxer__flags_8h_source.html index 4c7a4c8ed0..2cae030346 100644 --- a/docs/d3/d76/muxer__flags_8h_source.html +++ b/docs/d3/d76/muxer__flags_8h_source.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html b/docs/d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html index f81d9a9e9e..68ca442dcb 100644 --- a/docs/d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html +++ b/docs/d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html @@ -153,7 +153,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 317 of file box_definitions.h.

+

Definition at line 307 of file box_definitions.h.

Member Function Documentation

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

Implements edash_packager::media::mp4::Box.

-

Definition at line 763 of file box_definitions.cc.

+

Definition at line 765 of file box_definitions.cc.

@@ -190,7 +190,7 @@ Additional Inherited Members diff --git a/docs/d3/d80/muxer__util_8h_source.html b/docs/d3/d80/muxer__util_8h_source.html index 07f9c3d981..75781f6866 100644 --- a/docs/d3/d80/muxer__util_8h_source.html +++ b/docs/d3/d80/muxer__util_8h_source.html @@ -120,7 +120,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d8a/classedash__packager_1_1RepresentationStateChangeListener-members.html b/docs/d3/d8a/classedash__packager_1_1RepresentationStateChangeListener-members.html index 29100d094e..9651c2b92e 100644 --- a/docs/d3/d8a/classedash__packager_1_1RepresentationStateChangeListener-members.html +++ b/docs/d3/d8a/classedash__packager_1_1RepresentationStateChangeListener-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d8d/webm__audio__client_8h_source.html b/docs/d3/d8d/webm__audio__client_8h_source.html index 11546b68ba..a7b1ea59b9 100644 --- a/docs/d3/d8d/webm__audio__client_8h_source.html +++ b/docs/d3/d8d/webm__audio__client_8h_source.html @@ -142,7 +142,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d9b/structedash__packager_1_1media_1_1VideoStreamInfoParameters-members.html b/docs/d3/d9b/structedash__packager_1_1media_1_1VideoStreamInfoParameters-members.html index 956a6b4596..30000379f8 100644 --- a/docs/d3/d9b/structedash__packager_1_1media_1_1VideoStreamInfoParameters-members.html +++ b/docs/d3/d9b/structedash__packager_1_1media_1_1VideoStreamInfoParameters-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/d9f/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor-members.html b/docs/d3/d9f/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor-members.html index 377506dc28..bfe27a3a3a 100644 --- a/docs/d3/d9f/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor-members.html +++ b/docs/d3/d9f/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/db6/cenc_8cc_source.html b/docs/d3/db6/cenc_8cc_source.html index 98842b52ff..c7e27d7e4e 100644 --- a/docs/d3/db6/cenc_8cc_source.html +++ b/docs/d3/db6/cenc_8cc_source.html @@ -183,7 +183,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/db6/webm__parser_8cc_source.html b/docs/d3/db6/webm__parser_8cc_source.html index 1bbebf3d1d..ed4ad13888 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/structedash__packager_1_1media_1_1H264WeightingFactors.html b/docs/d3/dbc/structedash__packager_1_1media_1_1H264WeightingFactors.html index f888785435..159be4739d 100644 --- a/docs/d3/dbc/structedash__packager_1_1media_1_1H264WeightingFactors.html +++ b/docs/d3/dbc/structedash__packager_1_1media_1_1H264WeightingFactors.html @@ -117,14 +117,14 @@ int chroma_offset [32]

Detailed Description

-

Definition at line 171 of file h264_parser.h.

+

Definition at line 152 of file h264_parser.h.


The documentation for this struct was generated from the following file: diff --git a/docs/d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html b/docs/d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html index 81724462a9..ce252b24a0 100644 --- a/docs/d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html +++ b/docs/d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html @@ -143,7 +143,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 162 of file box_definitions.h.

+

Definition at line 161 of file box_definitions.h.

Member Function Documentation

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

Implements edash_packager::media::mp4::Box.

-

Definition at line 869 of file box_definitions.cc.

+

Definition at line 871 of file box_definitions.cc.

@@ -180,7 +180,7 @@ Additional Inherited Members diff --git a/docs/d3/dbe/classedash__packager_1_1media_1_1WebMMediaParser-members.html b/docs/d3/dbe/classedash__packager_1_1media_1_1WebMMediaParser-members.html index 0fb5477d3f..a030d785ab 100644 --- a/docs/d3/dbe/classedash__packager_1_1media_1_1WebMMediaParser-members.html +++ b/docs/d3/dbe/classedash__packager_1_1media_1_1WebMMediaParser-members.html @@ -105,7 +105,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 b6f36b11b8..d88fa7b1b2 100644 --- a/docs/d3/dbe/demuxer_8cc_source.html +++ b/docs/d3/dbe/demuxer_8cc_source.html @@ -301,7 +301,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/dc0/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset-members.html b/docs/d3/dc0/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset-members.html index b01163e1b5..01457e7a68 100644 --- a/docs/d3/dc0/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset-members.html +++ b/docs/d3/dc0/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/dcc/classedash__packager_1_1media_1_1ProgressListener-members.html b/docs/d3/dcc/classedash__packager_1_1media_1_1ProgressListener-members.html index c63cc3c169..1c35cb4570 100644 --- a/docs/d3/dcc/classedash__packager_1_1media_1_1ProgressListener-members.html +++ b/docs/d3/dcc/classedash__packager_1_1media_1_1ProgressListener-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/dd0/classedash__packager_1_1media_1_1mp4_1_1BoxReader-members.html b/docs/d3/dd0/classedash__packager_1_1media_1_1mp4_1_1BoxReader-members.html index 308b0375e1..3a3f4fd52b 100644 --- a/docs/d3/dd0/classedash__packager_1_1media_1_1mp4_1_1BoxReader-members.html +++ b/docs/d3/dd0/classedash__packager_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/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html b/docs/d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html index 5049bfa110..e28394a546 100644 --- a/docs/d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html +++ b/docs/d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html @@ -141,7 +141,7 @@ Additional Inherited Members

Detailed Description

-

Definition at line 395 of file box_definitions.h.

+

Definition at line 385 of file box_definitions.h.

Member Function Documentation

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

Implements edash_packager::media::mp4::Box.

-

Definition at line 1345 of file box_definitions.cc.

+

Definition at line 1315 of file box_definitions.cc.

@@ -178,7 +178,7 @@ Additional Inherited Members diff --git a/docs/d3/de7/structedash__packager_1_1media_1_1OnMediaEndParameters.html b/docs/d3/de7/structedash__packager_1_1media_1_1OnMediaEndParameters.html index 0cfaa244df..e41231b365 100644 --- a/docs/d3/de7/structedash__packager_1_1media_1_1OnMediaEndParameters.html +++ b/docs/d3/de7/structedash__packager_1_1media_1_1OnMediaEndParameters.html @@ -130,7 +130,7 @@ uint64_t file_size diff --git a/docs/d3/df1/box__reader_8cc_source.html b/docs/d3/df1/box__reader_8cc_source.html index e8389f6d6a..62bb91e268 100644 --- a/docs/d3/df1/box__reader_8cc_source.html +++ b/docs/d3/df1/box__reader_8cc_source.html @@ -295,7 +295,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d3/dfa/classedash__packager_1_1MpdBuilder.html b/docs/d3/dfa/classedash__packager_1_1MpdBuilder.html index beb142bae6..94e3b1928c 100644 --- a/docs/d3/dfa/classedash__packager_1_1MpdBuilder.html +++ b/docs/d3/dfa/classedash__packager_1_1MpdBuilder.html @@ -381,7 +381,7 @@ class DynamicMpdBuilderTes diff --git a/docs/d3/dfa/structedash__packager_1_1media_1_1H264SliceHeader-members.html b/docs/d3/dfa/structedash__packager_1_1media_1_1H264SliceHeader-members.html index b39ac23ce0..9fecba3894 100644 --- a/docs/d3/dfa/structedash__packager_1_1media_1_1H264SliceHeader-members.html +++ b/docs/d3/dfa/structedash__packager_1_1media_1_1H264SliceHeader-members.html @@ -154,7 +154,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d0b/structedash__packager_1_1media_1_1mp4_1_1Media-members.html b/docs/d4/d0b/structedash__packager_1_1media_1_1mp4_1_1Media-members.html index b441abfbd1..477e7d6c8c 100644 --- a/docs/d4/d0b/structedash__packager_1_1media_1_1mp4_1_1Media-members.html +++ b/docs/d4/d0b/structedash__packager_1_1media_1_1mp4_1_1Media-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d1d/classedash__packager_1_1media_1_1Muxer.html b/docs/d4/d1d/classedash__packager_1_1media_1_1Muxer.html index a56bd206db..c51ad5e817 100644 --- a/docs/d4/d1d/classedash__packager_1_1media_1_1Muxer.html +++ b/docs/d4/d1d/classedash__packager_1_1media_1_1Muxer.html @@ -330,7 +330,7 @@ class MediaStream diff --git a/docs/d4/d2e/classedash__packager_1_1media_1_1mp4_1_1FrameCENCInfo-members.html b/docs/d4/d2e/classedash__packager_1_1media_1_1mp4_1_1FrameCENCInfo-members.html index ca75d46cf3..c14a92fa94 100644 --- a/docs/d4/d2e/classedash__packager_1_1media_1_1mp4_1_1FrameCENCInfo-members.html +++ b/docs/d4/d2e/classedash__packager_1_1media_1_1mp4_1_1FrameCENCInfo-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d37/io__cache_8cc_source.html b/docs/d4/d37/io__cache_8cc_source.html index 110429c858..cbb845b1cc 100644 --- a/docs/d4/d37/io__cache_8cc_source.html +++ b/docs/d4/d37/io__cache_8cc_source.html @@ -253,7 +253,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d43/classedash__packager_1_1media_1_1KeyFetcher.html b/docs/d4/d43/classedash__packager_1_1media_1_1KeyFetcher.html index 1a4417e259..7cc8bfa15f 100644 --- a/docs/d4/d43/classedash__packager_1_1media_1_1KeyFetcher.html +++ b/docs/d4/d43/classedash__packager_1_1media_1_1KeyFetcher.html @@ -177,7 +177,7 @@ Public Member Functions diff --git a/docs/d4/d55/classedash__packager_1_1media_1_1H264BitReader.html b/docs/d4/d55/classedash__packager_1_1media_1_1H264BitReader.html index 60edabc00d..ee329aec86 100644 --- a/docs/d4/d55/classedash__packager_1_1media_1_1H264BitReader.html +++ b/docs/d4/d55/classedash__packager_1_1media_1_1H264BitReader.html @@ -122,7 +122,7 @@ size_t NumEmulationPrevent diff --git a/docs/d4/d67/structedash__packager_1_1media_1_1mp4_1_1MovieFragment-members.html b/docs/d4/d67/structedash__packager_1_1media_1_1mp4_1_1MovieFragment-members.html index 49ac2768cb..0ac34895a9 100644 --- a/docs/d4/d67/structedash__packager_1_1media_1_1mp4_1_1MovieFragment-members.html +++ b/docs/d4/d67/structedash__packager_1_1media_1_1mp4_1_1MovieFragment-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d71/structedash__packager_1_1xml_1_1ScopedXmlPtr-members.html b/docs/d4/d71/structedash__packager_1_1xml_1_1ScopedXmlPtr-members.html index 2fa2ca9fc7..b9b9eadcab 100644 --- a/docs/d4/d71/structedash__packager_1_1xml_1_1ScopedXmlPtr-members.html +++ b/docs/d4/d71/structedash__packager_1_1xml_1_1ScopedXmlPtr-members.html @@ -97,7 +97,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d8f/structedash__packager_1_1media_1_1mp4_1_1MovieHeader-members.html b/docs/d4/d8f/structedash__packager_1_1media_1_1mp4_1_1MovieHeader-members.html index 3883a03a76..46ea6a5c30 100644 --- a/docs/d4/d8f/structedash__packager_1_1media_1_1mp4_1_1MovieHeader-members.html +++ b/docs/d4/d8f/structedash__packager_1_1media_1_1mp4_1_1MovieHeader-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html b/docs/d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html index 3a8a616585..af26c04467 100644 --- a/docs/d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html +++ b/docs/d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html @@ -235,7 +235,7 @@ Public Member Functions diff --git a/docs/d4/d92/structedash__packager_1_1media_1_1mp4_1_1MediaData.html b/docs/d4/d92/structedash__packager_1_1media_1_1mp4_1_1MediaData.html index 1beb7c9918..0abd660749 100644 --- a/docs/d4/d92/structedash__packager_1_1media_1_1mp4_1_1MediaData.html +++ b/docs/d4/d92/structedash__packager_1_1media_1_1mp4_1_1MediaData.html @@ -115,7 +115,7 @@ uint32_t data_size

Detailed Description

-

Definition at line 586 of file box_definitions.h.

+

Definition at line 576 of file box_definitions.h.


The documentation for this struct was generated from the following files:
  • media/formats/mp4/box_definitions.h
  • media/formats/mp4/box_definitions.cc
  • @@ -123,7 +123,7 @@ uint32_t data_size diff --git a/docs/d4/d93/structedash__packager_1_1media_1_1H264SEIMessage.html b/docs/d4/d93/structedash__packager_1_1media_1_1H264SEIMessage.html index 0d0981e300..93f4bf0377 100644 --- a/docs/d4/d93/structedash__packager_1_1media_1_1H264SEIMessage.html +++ b/docs/d4/d93/structedash__packager_1_1media_1_1H264SEIMessage.html @@ -119,7 +119,7 @@ union {

    Detailed Description

    -

    Definition at line 271 of file h264_parser.h.

    +

    Definition at line 252 of file h264_parser.h.


    The documentation for this struct was generated from the following files:
    • media/filters/h264_parser.h
    • media/filters/h264_parser.cc
    • @@ -127,7 +127,7 @@ union { diff --git a/docs/d4/d9b/classedash__packager_1_1AdaptationSet-members.html b/docs/d4/d9b/classedash__packager_1_1AdaptationSet-members.html index c5b9a3c3ac..dd4d31623e 100644 --- a/docs/d4/d9b/classedash__packager_1_1AdaptationSet-members.html +++ b/docs/d4/d9b/classedash__packager_1_1AdaptationSet-members.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/da1/classedash__packager_1_1media_1_1DecryptConfig.html b/docs/d4/da1/classedash__packager_1_1media_1_1DecryptConfig.html index b41b5a7af5..b2ec9de6ac 100644 --- a/docs/d4/da1/classedash__packager_1_1media_1_1DecryptConfig.html +++ b/docs/d4/da1/classedash__packager_1_1media_1_1DecryptConfig.html @@ -183,7 +183,7 @@ static const size_t  diff --git a/docs/d4/da4/classedash__packager_1_1media_1_1AesCbcCtsEncryptor-members.html b/docs/d4/da4/classedash__packager_1_1media_1_1AesCbcCtsEncryptor-members.html index 450ec3c7cd..606dda59e4 100644 --- a/docs/d4/da4/classedash__packager_1_1media_1_1AesCbcCtsEncryptor-members.html +++ b/docs/d4/da4/classedash__packager_1_1media_1_1AesCbcCtsEncryptor-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/db2/cluster__builder_8h_source.html b/docs/d4/db2/cluster__builder_8h_source.html index 576b7d1c58..6e497331be 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/dca/structedash__packager_1_1media_1_1H264SEIRecoveryPoint.html b/docs/d4/dca/structedash__packager_1_1media_1_1H264SEIRecoveryPoint.html index e1b3f1e431..2ccfb86f99 100644 --- a/docs/d4/dca/structedash__packager_1_1media_1_1H264SEIRecoveryPoint.html +++ b/docs/d4/dca/structedash__packager_1_1media_1_1H264SEIRecoveryPoint.html @@ -111,14 +111,14 @@ int changing_slice_group_i

      Detailed Description

      -

      Definition at line 264 of file h264_parser.h.

      +

      Definition at line 245 of file h264_parser.h.


      The documentation for this struct was generated from the following file: diff --git a/docs/d4/dcb/classedash__packager_1_1media_1_1Status-members.html b/docs/d4/dcb/classedash__packager_1_1media_1_1Status-members.html index 2022afff5d..db8bcb8501 100644 --- a/docs/d4/dcb/classedash__packager_1_1media_1_1Status-members.html +++ b/docs/d4/dcb/classedash__packager_1_1media_1_1Status-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html b/docs/d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html index 8deff74c8e..e087283b4b 100644 --- a/docs/d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html +++ b/docs/d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html @@ -146,7 +146,7 @@ Additional Inherited Members

      Detailed Description

      -

      Definition at line 79 of file box_definitions.h.

      +

      Definition at line 78 of file box_definitions.h.

      Member Function Documentation

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

      Implements edash_packager::media::mp4::Box.

      -

      Definition at line 221 of file box_definitions.cc.

      +

      Definition at line 223 of file box_definitions.cc.

      @@ -183,7 +183,7 @@ Additional Inherited Members diff --git a/docs/d4/dcd/classedash__packager_1_1media_1_1OffsetByteQueue-members.html b/docs/d4/dcd/classedash__packager_1_1media_1_1OffsetByteQueue-members.html index 08feab6644..c6136d6673 100644 --- a/docs/d4/dcd/classedash__packager_1_1media_1_1OffsetByteQueue-members.html +++ b/docs/d4/dcd/classedash__packager_1_1media_1_1OffsetByteQueue-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/dce/structedash__packager_1_1media_1_1mp4_1_1SegmentReference.html b/docs/d4/dce/structedash__packager_1_1media_1_1mp4_1_1SegmentReference.html index 4507778e18..ca7c46e880 100644 --- a/docs/d4/dce/structedash__packager_1_1media_1_1mp4_1_1SegmentReference.html +++ b/docs/d4/dce/structedash__packager_1_1media_1_1mp4_1_1SegmentReference.html @@ -136,14 +136,14 @@ uint64_t earliest_presenta

      Detailed Description

      -

      Definition at line 552 of file box_definitions.h.

      +

      Definition at line 542 of file box_definitions.h.


      The documentation for this struct was generated from the following file: diff --git a/docs/d4/dd3/bit__reader_8h_source.html b/docs/d4/dd3/bit__reader_8h_source.html index 6330c65173..2ca225ebbf 100644 --- a/docs/d4/dd3/bit__reader_8h_source.html +++ b/docs/d4/dd3/bit__reader_8h_source.html @@ -158,7 +158,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/dd4/segmenter_8h_source.html b/docs/d4/dd4/segmenter_8h_source.html index a041f79814..6f8b7169d1 100644 --- a/docs/d4/dd4/segmenter_8h_source.html +++ b/docs/d4/dd4/segmenter_8h_source.html @@ -223,7 +223,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html b/docs/d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html index 5d9a650c0b..14dc38d4cd 100644 --- a/docs/d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html +++ b/docs/d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html @@ -156,7 +156,7 @@ Additional Inherited Members

      Detailed Description

      -

      Definition at line 531 of file box_definitions.h.

      +

      Definition at line 521 of file box_definitions.h.

      Member Function Documentation

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

      Implements edash_packager::media::mp4::Box.

      -

      Definition at line 1833 of file box_definitions.cc.

      +

      Definition at line 1803 of file box_definitions.cc.

      @@ -193,7 +193,7 @@ Additional Inherited Members diff --git a/docs/d4/dde/webvtt__util_8h_source.html b/docs/d4/dde/webvtt__util_8h_source.html index 64e812c001..a3ad5fd53a 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/de4/structedash__packager_1_1media_1_1SubsampleEntry.html b/docs/d4/de4/structedash__packager_1_1media_1_1SubsampleEntry.html index 185a312570..3976a204ef 100644 --- a/docs/d4/de4/structedash__packager_1_1media_1_1SubsampleEntry.html +++ b/docs/d4/de4/structedash__packager_1_1media_1_1SubsampleEntry.html @@ -115,7 +115,7 @@ uint32_t cipher_bytes< diff --git a/docs/d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html b/docs/d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html index fbc996b706..12913d85a1 100644 --- a/docs/d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html +++ b/docs/d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html @@ -225,7 +225,7 @@ Public Member Functions diff --git a/docs/d4/de7/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize-members.html b/docs/d4/de7/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize-members.html index e618f7d9e1..e3f15132e0 100644 --- a/docs/d4/de7/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize-members.html +++ b/docs/d4/de7/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize-members.html @@ -113,7 +113,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 5d885afb90..30706278f0 100644 --- a/docs/d4/df5/request__signer_8cc_source.html +++ b/docs/d4/df5/request__signer_8cc_source.html @@ -176,7 +176,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/df9/structedash__packager_1_1MpdOptions-members.html b/docs/d4/df9/structedash__packager_1_1MpdOptions-members.html index 904b83fff2..202cbc0ccb 100644 --- a/docs/d4/df9/structedash__packager_1_1MpdOptions-members.html +++ b/docs/d4/df9/structedash__packager_1_1MpdOptions-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d4/dff/webm__media__parser_8cc_source.html b/docs/d4/dff/webm__media__parser_8cc_source.html index fc85007f0b..56b1efdd63 100644 --- a/docs/d4/dff/webm__media__parser_8cc_source.html +++ b/docs/d4/dff/webm__media__parser_8cc_source.html @@ -332,7 +332,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html b/docs/d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html index 7b659d1dc0..1b1ebfddd1 100644 --- a/docs/d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html +++ b/docs/d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html @@ -501,7 +501,7 @@ template<class T > diff --git a/docs/d5/d15/producer__consumer__queue_8h_source.html b/docs/d5/d15/producer__consumer__queue_8h_source.html index 4cb5f8d1c4..61b2a84a81 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/d18/structedash__packager_1_1media_1_1H264NALU-members.html b/docs/d5/d18/structedash__packager_1_1media_1_1H264NALU-members.html index 79fe043d9d..963e98d8cc 100644 --- a/docs/d5/d18/structedash__packager_1_1media_1_1H264NALU-members.html +++ b/docs/d5/d18/structedash__packager_1_1media_1_1H264NALU-members.html @@ -112,7 +112,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 8f9bbcaea6..ebcd95d799 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/d1f/classedash__packager_1_1media_1_1BufferReader-members.html b/docs/d5/d1f/classedash__packager_1_1media_1_1BufferReader-members.html index dc6ad9bcca..ee925b6585 100644 --- a/docs/d5/d1f/classedash__packager_1_1media_1_1BufferReader-members.html +++ b/docs/d5/d1f/classedash__packager_1_1media_1_1BufferReader-members.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d26/classedash__packager_1_1media_1_1MediaParser-members.html b/docs/d5/d26/classedash__packager_1_1media_1_1MediaParser-members.html index ef8b98be27..737208452f 100644 --- a/docs/d5/d26/classedash__packager_1_1media_1_1MediaParser-members.html +++ b/docs/d5/d26/classedash__packager_1_1media_1_1MediaParser-members.html @@ -103,7 +103,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 85fa40df69..322ec9ae18 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/d30/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter.html b/docs/d5/d30/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter.html index d814a14b75..9c102bea35 100644 --- a/docs/d5/d30/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter.html +++ b/docs/d5/d30/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter.html @@ -192,7 +192,7 @@ static const size_t kUnitS diff --git a/docs/d5/d4a/classedash__packager_1_1media_1_1mp2t_1_1TsPacket-members.html b/docs/d5/d4a/classedash__packager_1_1media_1_1mp2t_1_1TsPacket-members.html index 5b448d02b6..934364b7fe 100644 --- a/docs/d5/d4a/classedash__packager_1_1media_1_1mp2t_1_1TsPacket-members.html +++ b/docs/d5/d4a/classedash__packager_1_1media_1_1mp2t_1_1TsPacket-members.html @@ -107,7 +107,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 b488ca1fbc..d411ca9631 100644 --- a/docs/d5/d4d/box_8cc_source.html +++ b/docs/d5/d4d/box_8cc_source.html @@ -167,7 +167,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 62823f06b5..2c9f69b8bd 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/d54/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig-members.html b/docs/d5/d54/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig-members.html index 6fa83c2351..b9abdd5e11 100644 --- a/docs/d5/d54/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig-members.html +++ b/docs/d5/d54/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d62/classedash__packager_1_1media_1_1RsaPrivateKey.html b/docs/d5/d62/classedash__packager_1_1media_1_1RsaPrivateKey.html index 776ca86c08..ab50affe90 100644 --- a/docs/d5/d62/classedash__packager_1_1media_1_1RsaPrivateKey.html +++ b/docs/d5/d62/classedash__packager_1_1media_1_1RsaPrivateKey.html @@ -224,7 +224,7 @@ Static Public Member Functions diff --git a/docs/d5/d63/network__util_8cc_source.html b/docs/d5/d63/network__util_8cc_source.html index fa814b2b22..3e42d41f62 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/d6e/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader-members.html b/docs/d5/d6e/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader-members.html index 749f8c2533..5254cef250 100644 --- a/docs/d5/d6e/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader-members.html +++ b/docs/d5/d6e/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d7a/structedash__packager_1_1Element.html b/docs/d5/d7a/structedash__packager_1_1Element.html index 6245b49191..115384143b 100644 --- a/docs/d5/d7a/structedash__packager_1_1Element.html +++ b/docs/d5/d7a/structedash__packager_1_1Element.html @@ -120,7 +120,7 @@ std::vector< diff --git a/docs/d5/d7b/box__definitions_8h_source.html b/docs/d5/d7b/box__definitions_8h_source.html index 91681f4075..9e1e9b326e 100644 --- a/docs/d5/d7b/box__definitions_8h_source.html +++ b/docs/d5/d7b/box__definitions_8h_source.html @@ -94,671 +94,660 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
      5 #ifndef MEDIA_FORMATS_MP4_BOX_DEFINITIONS_H_
      6 #define MEDIA_FORMATS_MP4_BOX_DEFINITIONS_H_
      7 
      -
      8 #include <string>
      -
      9 #include <vector>
      -
      10 
      -
      11 #include "packager/media/formats/mp4/aac_audio_specific_config.h"
      -
      12 #include "packager/media/formats/mp4/box.h"
      -
      13 #include "packager/media/formats/mp4/es_descriptor.h"
      -
      14 #include "packager/media/formats/mp4/fourccs.h"
      -
      15 
      -
      16 namespace edash_packager {
      -
      17 namespace media {
      -
      18 
      -
      19 class BufferReader;
      -
      20 
      -
      21 namespace mp4 {
      -
      22 
      -
      23 enum TrackType {
      -
      24  kInvalid = 0,
      -
      25  kVideo,
      -
      26  kAudio,
      -
      27  kHint
      -
      28 };
      -
      29 
      -
      30 class BoxBuffer;
      -
      31 
      -
      32 #define DECLARE_BOX_METHODS(T) \
      -
      33  T(); \
      -
      34  ~T() override; \
      -
      35  bool ReadWrite(BoxBuffer* buffer) override; \
      -
      36  FourCC BoxType() const override; \
      -
      37  uint32_t ComputeSize() override;
      -
      38 
      -
      39 struct FileType : Box {
      -
      40  DECLARE_BOX_METHODS(FileType);
      -
      41 
      -
      42  FourCC major_brand;
      -
      43  uint32_t minor_version;
      -
      44  std::vector<FourCC> compatible_brands;
      -
      45 };
      -
      46 
      - -
      48  DECLARE_BOX_METHODS(SegmentType);
      -
      49 };
      -
      50 
      - -
      52  DECLARE_BOX_METHODS(ProtectionSystemSpecificHeader);
      -
      53 
      -
      54  std::vector<uint8_t> system_id;
      -
      55  std::vector<uint8_t> data;
      -
      56  std::vector<uint8_t> raw_box;
      -
      57 };
      -
      58 
      - -
      60  DECLARE_BOX_METHODS(SampleAuxiliaryInformationOffset);
      -
      61 
      -
      62  std::vector<uint64_t> offsets;
      -
      63 };
      -
      64 
      - -
      66  DECLARE_BOX_METHODS(SampleAuxiliaryInformationSize);
      -
      67 
      -
      68  uint8_t default_sample_info_size;
      -
      69  uint32_t sample_count;
      -
      70  std::vector<uint8_t> sample_info_sizes;
      -
      71 };
      -
      72 
      -
      73 struct OriginalFormat : Box {
      -
      74  DECLARE_BOX_METHODS(OriginalFormat);
      -
      75 
      -
      76  FourCC format;
      -
      77 };
      -
      78 
      -
      79 struct SchemeType : FullBox {
      -
      80  DECLARE_BOX_METHODS(SchemeType);
      -
      81 
      -
      82  FourCC type;
      -
      83  uint32_t version;
      -
      84 };
      -
      85 
      - -
      87  DECLARE_BOX_METHODS(TrackEncryption);
      -
      88 
      -
      89  // Note: this definition is specific to the CENC protection type.
      -
      90  bool is_encrypted;
      -
      91  uint8_t default_iv_size;
      -
      92  std::vector<uint8_t> default_kid;
      -
      93 };
      -
      94 
      -
      95 struct SchemeInfo : Box {
      -
      96  DECLARE_BOX_METHODS(SchemeInfo);
      -
      97 
      -
      98  TrackEncryption track_encryption;
      -
      99 };
      -
      100 
      - -
      102  DECLARE_BOX_METHODS(ProtectionSchemeInfo);
      -
      103 
      -
      104  OriginalFormat format;
      -
      105  SchemeType type;
      -
      106  SchemeInfo info;
      -
      107 };
      -
      108 
      - -
      110  DECLARE_BOX_METHODS(MovieHeader);
      -
      111 
      -
      112  uint64_t creation_time;
      -
      113  uint64_t modification_time;
      -
      114  uint32_t timescale;
      -
      115  uint64_t duration;
      -
      116  int32_t rate;
      -
      117  int16_t volume;
      -
      118  uint32_t next_track_id;
      -
      119 };
      -
      120 
      - -
      122  enum TrackHeaderFlags {
      -
      123  kTrackEnabled = 0x000001,
      -
      124  kTrackInMovie = 0x000002,
      -
      125  kTrackInPreview = 0x000004,
      -
      126  };
      -
      127 
      -
      128  DECLARE_BOX_METHODS(TrackHeader);
      -
      129 
      -
      130  uint64_t creation_time;
      -
      131  uint64_t modification_time;
      -
      132  uint32_t track_id;
      -
      133  uint64_t duration;
      -
      134  int16_t layer;
      -
      135  int16_t alternate_group;
      -
      136  int16_t volume;
      -
      137  // width and height specify the track's visual presentation size as
      -
      138  // fixed-point 16.16 values.
      -
      139  uint32_t width;
      -
      140  uint32_t height;
      -
      141 };
      -
      142 
      - -
      144  uint64_t segment_duration;
      -
      145  int64_t media_time;
      -
      146  int16_t media_rate_integer;
      -
      147  int16_t media_rate_fraction;
      -
      148 };
      -
      149 
      -
      150 struct EditList : FullBox {
      -
      151  DECLARE_BOX_METHODS(EditList);
      -
      152 
      -
      153  std::vector<EditListEntry> edits;
      -
      154 };
      -
      155 
      -
      156 struct Edit : Box {
      -
      157  DECLARE_BOX_METHODS(Edit);
      -
      158 
      -
      159  EditList list;
      -
      160 };
      -
      161 
      - -
      163  DECLARE_BOX_METHODS(HandlerReference);
      -
      164 
      -
      165  TrackType type;
      -
      166 };
      -
      167 
      - -
      169  DECLARE_BOX_METHODS(AVCDecoderConfigurationRecord);
      -
      170  bool ParseData(BufferReader* reader);
      -
      171 
      -
      172  // Contains full avc decoder configuration record as defined in iso14496-15
      -
      173  // 5.2.4.1, including possible extension bytes described in paragraph 3.
      -
      174  // Known fields defined in the spec are also parsed and included in this
      -
      175  // structure.
      -
      176  std::vector<uint8_t> data;
      +
      8 #include <vector>
      +
      9 
      +
      10 #include "packager/media/formats/mp4/aac_audio_specific_config.h"
      +
      11 #include "packager/media/formats/mp4/box.h"
      +
      12 #include "packager/media/formats/mp4/es_descriptor.h"
      +
      13 #include "packager/media/formats/mp4/fourccs.h"
      +
      14 
      +
      15 namespace edash_packager {
      +
      16 namespace media {
      +
      17 
      +
      18 class BufferReader;
      +
      19 
      +
      20 namespace mp4 {
      +
      21 
      +
      22 enum TrackType {
      +
      23  kInvalid = 0,
      +
      24  kVideo,
      +
      25  kAudio,
      +
      26  kHint
      +
      27 };
      +
      28 
      +
      29 class BoxBuffer;
      +
      30 
      +
      31 #define DECLARE_BOX_METHODS(T) \
      +
      32  T(); \
      +
      33  ~T() override; \
      +
      34  bool ReadWrite(BoxBuffer* buffer) override; \
      +
      35  FourCC BoxType() const override; \
      +
      36  uint32_t ComputeSize() override;
      +
      37 
      +
      38 struct FileType : Box {
      +
      39  DECLARE_BOX_METHODS(FileType);
      +
      40 
      +
      41  FourCC major_brand;
      +
      42  uint32_t minor_version;
      +
      43  std::vector<FourCC> compatible_brands;
      +
      44 };
      +
      45 
      + +
      47  DECLARE_BOX_METHODS(SegmentType);
      +
      48 };
      +
      49 
      + +
      51  DECLARE_BOX_METHODS(ProtectionSystemSpecificHeader);
      +
      52 
      +
      53  std::vector<uint8_t> system_id;
      +
      54  std::vector<uint8_t> data;
      +
      55  std::vector<uint8_t> raw_box;
      +
      56 };
      +
      57 
      + +
      59  DECLARE_BOX_METHODS(SampleAuxiliaryInformationOffset);
      +
      60 
      +
      61  std::vector<uint64_t> offsets;
      +
      62 };
      +
      63 
      + +
      65  DECLARE_BOX_METHODS(SampleAuxiliaryInformationSize);
      +
      66 
      +
      67  uint8_t default_sample_info_size;
      +
      68  uint32_t sample_count;
      +
      69  std::vector<uint8_t> sample_info_sizes;
      +
      70 };
      +
      71 
      +
      72 struct OriginalFormat : Box {
      +
      73  DECLARE_BOX_METHODS(OriginalFormat);
      +
      74 
      +
      75  FourCC format;
      +
      76 };
      +
      77 
      +
      78 struct SchemeType : FullBox {
      +
      79  DECLARE_BOX_METHODS(SchemeType);
      +
      80 
      +
      81  FourCC type;
      +
      82  uint32_t version;
      +
      83 };
      +
      84 
      + +
      86  DECLARE_BOX_METHODS(TrackEncryption);
      +
      87 
      +
      88  // Note: this definition is specific to the CENC protection type.
      +
      89  bool is_encrypted;
      +
      90  uint8_t default_iv_size;
      +
      91  std::vector<uint8_t> default_kid;
      +
      92 };
      +
      93 
      +
      94 struct SchemeInfo : Box {
      +
      95  DECLARE_BOX_METHODS(SchemeInfo);
      +
      96 
      +
      97  TrackEncryption track_encryption;
      +
      98 };
      +
      99 
      + +
      101  DECLARE_BOX_METHODS(ProtectionSchemeInfo);
      +
      102 
      +
      103  OriginalFormat format;
      +
      104  SchemeType type;
      +
      105  SchemeInfo info;
      +
      106 };
      +
      107 
      + +
      109  DECLARE_BOX_METHODS(MovieHeader);
      +
      110 
      +
      111  uint64_t creation_time;
      +
      112  uint64_t modification_time;
      +
      113  uint32_t timescale;
      +
      114  uint64_t duration;
      +
      115  int32_t rate;
      +
      116  int16_t volume;
      +
      117  uint32_t next_track_id;
      +
      118 };
      +
      119 
      + +
      121  enum TrackHeaderFlags {
      +
      122  kTrackEnabled = 0x000001,
      +
      123  kTrackInMovie = 0x000002,
      +
      124  kTrackInPreview = 0x000004,
      +
      125  };
      +
      126 
      +
      127  DECLARE_BOX_METHODS(TrackHeader);
      +
      128 
      +
      129  uint64_t creation_time;
      +
      130  uint64_t modification_time;
      +
      131  uint32_t track_id;
      +
      132  uint64_t duration;
      +
      133  int16_t layer;
      +
      134  int16_t alternate_group;
      +
      135  int16_t volume;
      +
      136  // width and height specify the track's visual presentation size as
      +
      137  // fixed-point 16.16 values.
      +
      138  uint32_t width;
      +
      139  uint32_t height;
      +
      140 };
      +
      141 
      + +
      143  uint64_t segment_duration;
      +
      144  int64_t media_time;
      +
      145  int16_t media_rate_integer;
      +
      146  int16_t media_rate_fraction;
      +
      147 };
      +
      148 
      +
      149 struct EditList : FullBox {
      +
      150  DECLARE_BOX_METHODS(EditList);
      +
      151 
      +
      152  std::vector<EditListEntry> edits;
      +
      153 };
      +
      154 
      +
      155 struct Edit : Box {
      +
      156  DECLARE_BOX_METHODS(Edit);
      +
      157 
      +
      158  EditList list;
      +
      159 };
      +
      160 
      + +
      162  DECLARE_BOX_METHODS(HandlerReference);
      +
      163 
      +
      164  TrackType type;
      +
      165 };
      +
      166 
      + +
      168  DECLARE_BOX_METHODS(CodecConfigurationRecord);
      +
      169 
      +
      170  FourCC box_type;
      +
      171  // Contains full codec configuration record, including possible extension boxes.
      +
      172  std::vector<uint8_t> data;
      +
      173 };
      +
      174 
      + +
      176  DECLARE_BOX_METHODS(PixelAspectRatioBox);
      177 
      -
      178  uint8_t version;
      -
      179  uint8_t profile_indication;
      -
      180  uint8_t profile_compatibility;
      -
      181  uint8_t avc_level;
      -
      182  uint8_t length_size;
      -
      183 
      -
      184  typedef std::vector<uint8_t> SPS;
      -
      185  typedef std::vector<uint8_t> PPS;
      -
      186 
      -
      187  std::vector<SPS> sps_list;
      -
      188  std::vector<PPS> pps_list;
      -
      189 };
      -
      190 
      - -
      192  DECLARE_BOX_METHODS(PixelAspectRatioBox);
      +
      178  uint32_t h_spacing;
      +
      179  uint32_t v_spacing;
      +
      180 };
      +
      181 
      + +
      183  DECLARE_BOX_METHODS(VideoSampleEntry);
      +
      184  // Returns actual format of this sample entry.
      +
      185  FourCC GetActualFormat() const {
      +
      186  return format == FOURCC_ENCV ? sinf.format.format : format;
      +
      187  }
      +
      188 
      +
      189  FourCC format;
      +
      190  uint16_t data_reference_index;
      +
      191  uint16_t width;
      +
      192  uint16_t height;
      193 
      -
      194  uint32_t h_spacing;
      -
      195  uint32_t v_spacing;
      -
      196 };
      -
      197 
      - -
      199  DECLARE_BOX_METHODS(VideoSampleEntry);
      -
      200 
      -
      201  FourCC format;
      -
      202  uint16_t data_reference_index;
      -
      203  uint16_t width;
      -
      204  uint16_t height;
      +
      194  PixelAspectRatioBox pixel_aspect;
      + +
      196  CodecConfigurationRecord codec_config_record;
      +
      197 };
      +
      198 
      + +
      200  DECLARE_BOX_METHODS(ElementaryStreamDescriptor);
      +
      201 
      +
      202  AACAudioSpecificConfig aac_audio_specific_config;
      +
      203  ESDescriptor es_descriptor;
      +
      204 };
      205 
      -
      206  PixelAspectRatioBox pixel_aspect;
      - -
      208 
      -
      209  // Currently expected to be present regardless of format.
      - -
      211 };
      + +
      207  DECLARE_BOX_METHODS(AudioSampleEntry);
      +
      208  // Returns actual format of this sample entry.
      +
      209  FourCC GetActualFormat() const {
      +
      210  return format == FOURCC_ENCA ? sinf.format.format : format;
      +
      211  }
      212 
      - -
      214  DECLARE_BOX_METHODS(ElementaryStreamDescriptor);
      -
      215 
      -
      216  AACAudioSpecificConfig aac_audio_specific_config;
      -
      217  ESDescriptor es_descriptor;
      -
      218 };
      -
      219 
      - -
      221  DECLARE_BOX_METHODS(AudioSampleEntry);
      +
      213  FourCC format;
      +
      214  uint16_t data_reference_index;
      +
      215  uint16_t channelcount;
      +
      216  uint16_t samplesize;
      +
      217  uint32_t samplerate;
      +
      218 
      + + +
      221 };
      222 
      -
      223  FourCC format;
      -
      224  uint16_t data_reference_index;
      -
      225  uint16_t channelcount;
      -
      226  uint16_t samplesize;
      -
      227  uint32_t samplerate;
      -
      228 
      - - -
      231 };
      -
      232 
      - -
      234  DECLARE_BOX_METHODS(SampleDescription);
      + +
      224  DECLARE_BOX_METHODS(SampleDescription);
      +
      225 
      +
      226  TrackType type;
      +
      227  std::vector<VideoSampleEntry> video_entries;
      +
      228  std::vector<AudioSampleEntry> audio_entries;
      +
      229 };
      +
      230 
      +
      231 struct DecodingTime {
      +
      232  uint32_t sample_count;
      +
      233  uint32_t sample_delta;
      +
      234 };
      235 
      -
      236  TrackType type;
      -
      237  std::vector<VideoSampleEntry> video_entries;
      -
      238  std::vector<AudioSampleEntry> audio_entries;
      -
      239 };
      -
      240 
      -
      241 struct DecodingTime {
      -
      242  uint32_t sample_count;
      -
      243  uint32_t sample_delta;
      -
      244 };
      -
      245 
      -
      246 // stts.
      - -
      248  DECLARE_BOX_METHODS(DecodingTimeToSample);
      -
      249 
      -
      250  std::vector<DecodingTime> decoding_time;
      -
      251 };
      -
      252 
      - -
      254  uint32_t sample_count;
      -
      255  // If version == 0, sample_offset is uint32_t;
      -
      256  // If version == 1, sample_offset is int32_t.
      -
      257  // Use int64_t so both can be supported properly.
      -
      258  int64_t sample_offset;
      -
      259 };
      -
      260 
      -
      261 // ctts. Optional.
      - -
      263  DECLARE_BOX_METHODS(CompositionTimeToSample);
      -
      264 
      -
      265  std::vector<CompositionOffset> composition_offset;
      -
      266 };
      +
      236 // stts.
      + +
      238  DECLARE_BOX_METHODS(DecodingTimeToSample);
      +
      239 
      +
      240  std::vector<DecodingTime> decoding_time;
      +
      241 };
      +
      242 
      + +
      244  uint32_t sample_count;
      +
      245  // If version == 0, sample_offset is uint32_t;
      +
      246  // If version == 1, sample_offset is int32_t.
      +
      247  // Use int64_t so both can be supported properly.
      +
      248  int64_t sample_offset;
      +
      249 };
      +
      250 
      +
      251 // ctts. Optional.
      + +
      253  DECLARE_BOX_METHODS(CompositionTimeToSample);
      +
      254 
      +
      255  std::vector<CompositionOffset> composition_offset;
      +
      256 };
      +
      257 
      +
      258 struct ChunkInfo {
      +
      259  uint32_t first_chunk;
      +
      260  uint32_t samples_per_chunk;
      +
      261  uint32_t sample_description_index;
      +
      262 };
      +
      263 
      +
      264 // stsc.
      + +
      266  DECLARE_BOX_METHODS(SampleToChunk);
      267 
      -
      268 struct ChunkInfo {
      -
      269  uint32_t first_chunk;
      -
      270  uint32_t samples_per_chunk;
      -
      271  uint32_t sample_description_index;
      -
      272 };
      -
      273 
      -
      274 // stsc.
      - -
      276  DECLARE_BOX_METHODS(SampleToChunk);
      -
      277 
      -
      278  std::vector<ChunkInfo> chunk_info;
      -
      279 };
      -
      280 
      -
      281 // stsz.
      -
      282 struct SampleSize : FullBox {
      -
      283  DECLARE_BOX_METHODS(SampleSize);
      -
      284 
      -
      285  uint32_t sample_size;
      -
      286  uint32_t sample_count;
      -
      287  std::vector<uint32_t> sizes;
      -
      288 };
      -
      289 
      -
      290 // stz2.
      - -
      292  DECLARE_BOX_METHODS(CompactSampleSize);
      -
      293 
      -
      294  uint8_t field_size;
      -
      295  std::vector<uint32_t> sizes;
      -
      296 };
      -
      297 
      -
      298 // co64.
      - -
      300  DECLARE_BOX_METHODS(ChunkLargeOffset);
      -
      301 
      -
      302  std::vector<uint64_t> offsets;
      -
      303 };
      -
      304 
      -
      305 // stco.
      - -
      307  DECLARE_BOX_METHODS(ChunkOffset);
      -
      308 };
      +
      268  std::vector<ChunkInfo> chunk_info;
      +
      269 };
      +
      270 
      +
      271 // stsz.
      +
      272 struct SampleSize : FullBox {
      +
      273  DECLARE_BOX_METHODS(SampleSize);
      +
      274 
      +
      275  uint32_t sample_size;
      +
      276  uint32_t sample_count;
      +
      277  std::vector<uint32_t> sizes;
      +
      278 };
      +
      279 
      +
      280 // stz2.
      + +
      282  DECLARE_BOX_METHODS(CompactSampleSize);
      +
      283 
      +
      284  uint8_t field_size;
      +
      285  std::vector<uint32_t> sizes;
      +
      286 };
      +
      287 
      +
      288 // co64.
      + +
      290  DECLARE_BOX_METHODS(ChunkLargeOffset);
      +
      291 
      +
      292  std::vector<uint64_t> offsets;
      +
      293 };
      +
      294 
      +
      295 // stco.
      + +
      297  DECLARE_BOX_METHODS(ChunkOffset);
      +
      298 };
      +
      299 
      +
      300 // stss. Optional.
      +
      301 struct SyncSample : FullBox {
      +
      302  DECLARE_BOX_METHODS(SyncSample);
      +
      303 
      +
      304  std::vector<uint32_t> sample_number;
      +
      305 };
      +
      306 
      +
      307 struct SampleTable : Box {
      +
      308  DECLARE_BOX_METHODS(SampleTable);
      309 
      -
      310 // stss. Optional.
      -
      311 struct SyncSample : FullBox {
      -
      312  DECLARE_BOX_METHODS(SyncSample);
      -
      313 
      -
      314  std::vector<uint32_t> sample_number;
      -
      315 };
      -
      316 
      -
      317 struct SampleTable : Box {
      -
      318  DECLARE_BOX_METHODS(SampleTable);
      -
      319 
      -
      320  SampleDescription description;
      -
      321  DecodingTimeToSample decoding_time_to_sample;
      -
      322  CompositionTimeToSample composition_time_to_sample;
      -
      323  SampleToChunk sample_to_chunk;
      -
      324  // Either SampleSize or CompactSampleSize must present. Store in SampleSize.
      -
      325  SampleSize sample_size;
      -
      326  // Either ChunkOffset or ChunkLargeOffset must present. Store in
      -
      327  // ChunkLargeOffset.
      -
      328  ChunkLargeOffset chunk_large_offset;
      -
      329  SyncSample sync_sample;
      -
      330 };
      -
      331 
      - -
      333  DECLARE_BOX_METHODS(MediaHeader);
      -
      334 
      -
      335  uint64_t creation_time;
      -
      336  uint64_t modification_time;
      -
      337  uint32_t timescale;
      -
      338  uint64_t duration;
      -
      339  // 3-char language code + 1 null terminating char.
      -
      340  char language[4];
      -
      341 };
      -
      342 
      - -
      344  DECLARE_BOX_METHODS(VideoMediaHeader);
      -
      345 
      -
      346  uint16_t graphicsmode;
      -
      347  uint16_t opcolor_red;
      -
      348  uint16_t opcolor_green;
      -
      349  uint16_t opcolor_blue;
      -
      350 };
      -
      351 
      - -
      353  DECLARE_BOX_METHODS(SoundMediaHeader);
      -
      354 
      -
      355  uint16_t balance;
      -
      356 };
      -
      357 
      - -
      359  DECLARE_BOX_METHODS(DataEntryUrl);
      +
      310  SampleDescription description;
      +
      311  DecodingTimeToSample decoding_time_to_sample;
      +
      312  CompositionTimeToSample composition_time_to_sample;
      +
      313  SampleToChunk sample_to_chunk;
      +
      314  // Either SampleSize or CompactSampleSize must present. Store in SampleSize.
      +
      315  SampleSize sample_size;
      +
      316  // Either ChunkOffset or ChunkLargeOffset must present. Store in
      +
      317  // ChunkLargeOffset.
      +
      318  ChunkLargeOffset chunk_large_offset;
      +
      319  SyncSample sync_sample;
      +
      320 };
      +
      321 
      + +
      323  DECLARE_BOX_METHODS(MediaHeader);
      +
      324 
      +
      325  uint64_t creation_time;
      +
      326  uint64_t modification_time;
      +
      327  uint32_t timescale;
      +
      328  uint64_t duration;
      +
      329  // 3-char language code + 1 null terminating char.
      +
      330  char language[4];
      +
      331 };
      +
      332 
      + +
      334  DECLARE_BOX_METHODS(VideoMediaHeader);
      +
      335 
      +
      336  uint16_t graphicsmode;
      +
      337  uint16_t opcolor_red;
      +
      338  uint16_t opcolor_green;
      +
      339  uint16_t opcolor_blue;
      +
      340 };
      +
      341 
      + +
      343  DECLARE_BOX_METHODS(SoundMediaHeader);
      +
      344 
      +
      345  uint16_t balance;
      +
      346 };
      +
      347 
      + +
      349  DECLARE_BOX_METHODS(DataEntryUrl);
      +
      350 
      +
      351  std::vector<uint8_t> location;
      +
      352 };
      +
      353 
      + +
      355  DECLARE_BOX_METHODS(DataReference);
      +
      356 
      +
      357  // data entry can be either url or urn box. Fix to url box for now.
      +
      358  std::vector<DataEntryUrl> data_entry;
      +
      359 };
      360 
      -
      361  std::vector<uint8_t> location;
      -
      362 };
      + +
      362  DECLARE_BOX_METHODS(DataInformation);
      363 
      - -
      365  DECLARE_BOX_METHODS(DataReference);
      +
      364  DataReference dref;
      +
      365 };
      366 
      -
      367  // data entry can be either url or urn box. Fix to url box for now.
      -
      368  std::vector<DataEntryUrl> data_entry;
      -
      369 };
      -
      370 
      - -
      372  DECLARE_BOX_METHODS(DataInformation);
      -
      373 
      -
      374  DataReference dref;
      + +
      368  DECLARE_BOX_METHODS(MediaInformation);
      +
      369 
      +
      370  DataInformation dinf;
      +
      371  SampleTable sample_table;
      +
      372  // Exactly one specific meida header shall be present, vmhd, smhd, hmhd, nmhd.
      +
      373  VideoMediaHeader vmhd;
      +
      374  SoundMediaHeader smhd;
      375 };
      376 
      - -
      378  DECLARE_BOX_METHODS(MediaInformation);
      +
      377 struct Media : Box {
      +
      378  DECLARE_BOX_METHODS(Media);
      379 
      -
      380  DataInformation dinf;
      -
      381  SampleTable sample_table;
      -
      382  // Exactly one specific meida header shall be present, vmhd, smhd, hmhd, nmhd.
      -
      383  VideoMediaHeader vmhd;
      -
      384  SoundMediaHeader smhd;
      -
      385 };
      -
      386 
      -
      387 struct Media : Box {
      -
      388  DECLARE_BOX_METHODS(Media);
      -
      389 
      -
      390  MediaHeader header;
      -
      391  HandlerReference handler;
      -
      392  MediaInformation information;
      -
      393 };
      -
      394 
      -
      395 struct Track : Box {
      -
      396  DECLARE_BOX_METHODS(Track);
      -
      397 
      -
      398  TrackHeader header;
      -
      399  Media media;
      -
      400  Edit edit;
      -
      401 };
      -
      402 
      - -
      404  DECLARE_BOX_METHODS(MovieExtendsHeader);
      -
      405 
      -
      406  uint64_t fragment_duration;
      +
      380  MediaHeader header;
      +
      381  HandlerReference handler;
      +
      382  MediaInformation information;
      +
      383 };
      +
      384 
      +
      385 struct Track : Box {
      +
      386  DECLARE_BOX_METHODS(Track);
      +
      387 
      +
      388  TrackHeader header;
      +
      389  Media media;
      +
      390  Edit edit;
      +
      391 };
      +
      392 
      + +
      394  DECLARE_BOX_METHODS(MovieExtendsHeader);
      +
      395 
      +
      396  uint64_t fragment_duration;
      +
      397 };
      +
      398 
      + +
      400  DECLARE_BOX_METHODS(TrackExtends);
      +
      401 
      +
      402  uint32_t track_id;
      +
      403  uint32_t default_sample_description_index;
      +
      404  uint32_t default_sample_duration;
      +
      405  uint32_t default_sample_size;
      +
      406  uint32_t default_sample_flags;
      407 };
      408 
      - -
      410  DECLARE_BOX_METHODS(TrackExtends);
      +
      409 struct MovieExtends : Box {
      +
      410  DECLARE_BOX_METHODS(MovieExtends);
      411 
      -
      412  uint32_t track_id;
      -
      413  uint32_t default_sample_description_index;
      -
      414  uint32_t default_sample_duration;
      -
      415  uint32_t default_sample_size;
      -
      416  uint32_t default_sample_flags;
      -
      417 };
      +
      412  MovieExtendsHeader header;
      +
      413  std::vector<TrackExtends> tracks;
      +
      414 };
      +
      415 
      +
      416 struct Movie : Box {
      +
      417  DECLARE_BOX_METHODS(Movie);
      418 
      -
      419 struct MovieExtends : Box {
      -
      420  DECLARE_BOX_METHODS(MovieExtends);
      -
      421 
      -
      422  MovieExtendsHeader header;
      -
      423  std::vector<TrackExtends> tracks;
      -
      424 };
      -
      425 
      -
      426 struct Movie : Box {
      -
      427  DECLARE_BOX_METHODS(Movie);
      -
      428 
      -
      429  MovieHeader header;
      -
      430  MovieExtends extends;
      -
      431  std::vector<Track> tracks;
      -
      432  std::vector<ProtectionSystemSpecificHeader> pssh;
      -
      433 };
      -
      434 
      - -
      436  DECLARE_BOX_METHODS(TrackFragmentDecodeTime);
      -
      437 
      -
      438  uint64_t decode_time;
      -
      439 };
      -
      440 
      - -
      442  DECLARE_BOX_METHODS(MovieFragmentHeader);
      -
      443 
      -
      444  uint32_t sequence_number;
      -
      445 };
      -
      446 
      - -
      448  enum TrackFragmentFlagsMasks {
      -
      449  kBaseDataOffsetPresentMask = 0x000001,
      -
      450  kSampleDescriptionIndexPresentMask = 0x000002,
      -
      451  kDefaultSampleDurationPresentMask = 0x000008,
      -
      452  kDefaultSampleSizePresentMask = 0x000010,
      -
      453  kDefaultSampleFlagsPresentMask = 0x000020,
      -
      454  kDurationIsEmptyMask = 0x010000,
      -
      455  kDefaultBaseIsMoofMask = 0x020000,
      +
      419  MovieHeader header;
      +
      420  MovieExtends extends;
      +
      421  std::vector<Track> tracks;
      +
      422  std::vector<ProtectionSystemSpecificHeader> pssh;
      +
      423 };
      +
      424 
      + +
      426  DECLARE_BOX_METHODS(TrackFragmentDecodeTime);
      +
      427 
      +
      428  uint64_t decode_time;
      +
      429 };
      +
      430 
      + +
      432  DECLARE_BOX_METHODS(MovieFragmentHeader);
      +
      433 
      +
      434  uint32_t sequence_number;
      +
      435 };
      +
      436 
      + +
      438  enum TrackFragmentFlagsMasks {
      +
      439  kBaseDataOffsetPresentMask = 0x000001,
      +
      440  kSampleDescriptionIndexPresentMask = 0x000002,
      +
      441  kDefaultSampleDurationPresentMask = 0x000008,
      +
      442  kDefaultSampleSizePresentMask = 0x000010,
      +
      443  kDefaultSampleFlagsPresentMask = 0x000020,
      +
      444  kDurationIsEmptyMask = 0x010000,
      +
      445  kDefaultBaseIsMoofMask = 0x020000,
      +
      446  };
      +
      447 
      +
      448  enum SampleFlagsMasks {
      +
      449  kReservedMask = 0xFC000000,
      +
      450  kSampleDependsOnMask = 0x03000000,
      +
      451  kSampleIsDependedOnMask = 0x00C00000,
      +
      452  kSampleHasRedundancyMask = 0x00300000,
      +
      453  kSamplePaddingValueMask = 0x000E0000,
      +
      454  kNonKeySampleMask = 0x00010000,
      +
      455  kSampleDegradationPriorityMask = 0x0000FFFF,
      456  };
      457 
      -
      458  enum SampleFlagsMasks {
      -
      459  kReservedMask = 0xFC000000,
      -
      460  kSampleDependsOnMask = 0x03000000,
      -
      461  kSampleIsDependedOnMask = 0x00C00000,
      -
      462  kSampleHasRedundancyMask = 0x00300000,
      -
      463  kSamplePaddingValueMask = 0x000E0000,
      -
      464  kNonKeySampleMask = 0x00010000,
      -
      465  kSampleDegradationPriorityMask = 0x0000FFFF,
      -
      466  };
      -
      467 
      -
      468  DECLARE_BOX_METHODS(TrackFragmentHeader);
      -
      469 
      -
      470  uint32_t track_id;
      -
      471  uint32_t sample_description_index;
      -
      472  uint32_t default_sample_duration;
      -
      473  uint32_t default_sample_size;
      -
      474  uint32_t default_sample_flags;
      -
      475 };
      +
      458  DECLARE_BOX_METHODS(TrackFragmentHeader);
      +
      459 
      +
      460  uint32_t track_id;
      +
      461  uint32_t sample_description_index;
      +
      462  uint32_t default_sample_duration;
      +
      463  uint32_t default_sample_size;
      +
      464  uint32_t default_sample_flags;
      +
      465 };
      +
      466 
      + +
      468  enum TrackFragmentFlagsMasks {
      +
      469  kDataOffsetPresentMask = 0x000001,
      +
      470  kFirstSampleFlagsPresentMask = 0x000004,
      +
      471  kSampleDurationPresentMask = 0x000100,
      +
      472  kSampleSizePresentMask = 0x000200,
      +
      473  kSampleFlagsPresentMask = 0x000400,
      +
      474  kSampleCompTimeOffsetsPresentMask = 0x000800,
      +
      475  };
      476 
      - -
      478  enum TrackFragmentFlagsMasks {
      -
      479  kDataOffsetPresentMask = 0x000001,
      -
      480  kFirstSampleFlagsPresentMask = 0x000004,
      -
      481  kSampleDurationPresentMask = 0x000100,
      -
      482  kSampleSizePresentMask = 0x000200,
      -
      483  kSampleFlagsPresentMask = 0x000400,
      -
      484  kSampleCompTimeOffsetsPresentMask = 0x000800,
      -
      485  };
      +
      477  DECLARE_BOX_METHODS(TrackFragmentRun);
      +
      478 
      +
      479  uint32_t sample_count;
      +
      480  uint32_t data_offset;
      +
      481  std::vector<uint32_t> sample_flags;
      +
      482  std::vector<uint32_t> sample_sizes;
      +
      483  std::vector<uint32_t> sample_durations;
      +
      484  std::vector<int64_t> sample_composition_time_offsets;
      +
      485 };
      486 
      -
      487  DECLARE_BOX_METHODS(TrackFragmentRun);
      -
      488 
      -
      489  uint32_t sample_count;
      -
      490  uint32_t data_offset;
      -
      491  std::vector<uint32_t> sample_flags;
      -
      492  std::vector<uint32_t> sample_sizes;
      -
      493  std::vector<uint32_t> sample_durations;
      -
      494  std::vector<int64_t> sample_composition_time_offsets;
      + +
      488  enum GroupDescriptionIndexBase {
      +
      489  kTrackGroupDescriptionIndexBase = 0,
      +
      490  kTrackFragmentGroupDescriptionIndexBase = 0x10000,
      +
      491  };
      +
      492 
      +
      493  uint32_t sample_count;
      +
      494  uint32_t group_description_index;
      495 };
      496 
      - -
      498  enum GroupDescriptionIndexBase {
      -
      499  kTrackGroupDescriptionIndexBase = 0,
      -
      500  kTrackFragmentGroupDescriptionIndexBase = 0x10000,
      -
      501  };
      -
      502 
      -
      503  uint32_t sample_count;
      -
      504  uint32_t group_description_index;
      -
      505 };
      -
      506 
      - -
      508  DECLARE_BOX_METHODS(SampleToGroup);
      -
      509 
      -
      510  uint32_t grouping_type;
      -
      511  uint32_t grouping_type_parameter; // Version 1 only.
      -
      512  std::vector<SampleToGroupEntry> entries;
      -
      513 };
      -
      514 
      - - - -
      518 
      -
      519  bool is_encrypted;
      -
      520  uint8_t iv_size;
      -
      521  std::vector<uint8_t> key_id;
      -
      522 };
      + +
      498  DECLARE_BOX_METHODS(SampleToGroup);
      +
      499 
      +
      500  uint32_t grouping_type;
      +
      501  uint32_t grouping_type_parameter; // Version 1 only.
      +
      502  std::vector<SampleToGroupEntry> entries;
      +
      503 };
      +
      504 
      + + + +
      508 
      +
      509  bool is_encrypted;
      +
      510  uint8_t iv_size;
      +
      511  std::vector<uint8_t> key_id;
      +
      512 };
      +
      513 
      + +
      515  DECLARE_BOX_METHODS(SampleGroupDescription);
      +
      516 
      +
      517  uint32_t grouping_type;
      +
      518  std::vector<CencSampleEncryptionInfoEntry> entries;
      +
      519 };
      +
      520 
      +
      521 struct TrackFragment : Box {
      +
      522  DECLARE_BOX_METHODS(TrackFragment);
      523 
      - -
      525  DECLARE_BOX_METHODS(SampleGroupDescription);
      -
      526 
      -
      527  uint32_t grouping_type;
      -
      528  std::vector<CencSampleEncryptionInfoEntry> entries;
      -
      529 };
      -
      530 
      -
      531 struct TrackFragment : Box {
      -
      532  DECLARE_BOX_METHODS(TrackFragment);
      +
      524  TrackFragmentHeader header;
      +
      525  std::vector<TrackFragmentRun> runs;
      +
      526  bool decode_time_absent;
      +
      527  TrackFragmentDecodeTime decode_time;
      +
      528  SampleToGroup sample_to_group;
      +
      529  SampleGroupDescription sample_group_description;
      +
      530  SampleAuxiliaryInformationSize auxiliary_size;
      +
      531  SampleAuxiliaryInformationOffset auxiliary_offset;
      +
      532 };
      533 
      -
      534  TrackFragmentHeader header;
      -
      535  std::vector<TrackFragmentRun> runs;
      -
      536  bool decode_time_absent;
      -
      537  TrackFragmentDecodeTime decode_time;
      -
      538  SampleToGroup sample_to_group;
      -
      539  SampleGroupDescription sample_group_description;
      -
      540  SampleAuxiliaryInformationSize auxiliary_size;
      -
      541  SampleAuxiliaryInformationOffset auxiliary_offset;
      -
      542 };
      -
      543 
      -
      544 struct MovieFragment : Box {
      -
      545  DECLARE_BOX_METHODS(MovieFragment);
      -
      546 
      -
      547  MovieFragmentHeader header;
      -
      548  std::vector<TrackFragment> tracks;
      -
      549  std::vector<ProtectionSystemSpecificHeader> pssh;
      -
      550 };
      -
      551 
      - -
      553  enum SAPType {
      -
      554  TypeUnknown = 0,
      -
      555  Type1 = 1, // T(ept) = T(dec) = T(sap) = T(ptf)
      -
      556  Type2 = 2, // T(ept) = T(dec) = T(sap) < T(ptf)
      -
      557  Type3 = 3, // T(ept) < T(dec) = T(sap) <= T(ptf)
      -
      558  Type4 = 4, // T(ept) <= T(ptf) < T(dec) = T(sap)
      -
      559  Type5 = 5, // T(ept) = T(dec) < T(sap)
      -
      560  Type6 = 6, // T(ept) < T(dec) < T(sap)
      -
      561  };
      -
      562 
      -
      563  bool reference_type;
      -
      564  uint32_t referenced_size;
      -
      565  uint32_t subsegment_duration;
      -
      566  bool starts_with_sap;
      -
      567  SAPType sap_type;
      -
      568  uint32_t sap_delta_time;
      -
      569  // We add this field to keep track of earliest_presentation_time in this
      -
      570  // subsegment. It is not part of SegmentReference.
      -
      571  uint64_t earliest_presentation_time;
      +
      534 struct MovieFragment : Box {
      +
      535  DECLARE_BOX_METHODS(MovieFragment);
      +
      536 
      +
      537  MovieFragmentHeader header;
      +
      538  std::vector<TrackFragment> tracks;
      +
      539  std::vector<ProtectionSystemSpecificHeader> pssh;
      +
      540 };
      +
      541 
      + +
      543  enum SAPType {
      +
      544  TypeUnknown = 0,
      +
      545  Type1 = 1, // T(ept) = T(dec) = T(sap) = T(ptf)
      +
      546  Type2 = 2, // T(ept) = T(dec) = T(sap) < T(ptf)
      +
      547  Type3 = 3, // T(ept) < T(dec) = T(sap) <= T(ptf)
      +
      548  Type4 = 4, // T(ept) <= T(ptf) < T(dec) = T(sap)
      +
      549  Type5 = 5, // T(ept) = T(dec) < T(sap)
      +
      550  Type6 = 6, // T(ept) < T(dec) < T(sap)
      +
      551  };
      +
      552 
      +
      553  bool reference_type;
      +
      554  uint32_t referenced_size;
      +
      555  uint32_t subsegment_duration;
      +
      556  bool starts_with_sap;
      +
      557  SAPType sap_type;
      +
      558  uint32_t sap_delta_time;
      +
      559  // We add this field to keep track of earliest_presentation_time in this
      +
      560  // subsegment. It is not part of SegmentReference.
      +
      561  uint64_t earliest_presentation_time;
      +
      562 };
      +
      563 
      + +
      565  DECLARE_BOX_METHODS(SegmentIndex);
      +
      566 
      +
      567  uint32_t reference_id;
      +
      568  uint32_t timescale;
      +
      569  uint64_t earliest_presentation_time;
      +
      570  uint64_t first_offset;
      +
      571  std::vector<SegmentReference> references;
      572 };
      573 
      - -
      575  DECLARE_BOX_METHODS(SegmentIndex);
      -
      576 
      -
      577  uint32_t reference_id;
      -
      578  uint32_t timescale;
      -
      579  uint64_t earliest_presentation_time;
      -
      580  uint64_t first_offset;
      -
      581  std::vector<SegmentReference> references;
      -
      582 };
      -
      583 
      -
      584 // The actual data is parsed and written separately, so we do not inherit it
      -
      585 // from Box.
      -
      586 struct MediaData {
      -
      587  MediaData();
      -
      588  ~MediaData();
      -
      589  void Write(BufferWriter* buffer_writer);
      -
      590  uint32_t ComputeSize();
      -
      591  FourCC BoxType() const;
      -
      592 
      -
      593  uint32_t data_size;
      -
      594 };
      -
      595 
      -
      596 #undef DECLARE_BOX
      -
      597 
      -
      598 } // namespace mp4
      -
      599 } // namespace media
      -
      600 } // namespace edash_packager
      -
      601 
      -
      602 #endif // MEDIA_FORMATS_MP4_BOX_DEFINITIONS_H_
      +
      574 // The actual data is parsed and written separately, so we do not inherit it
      +
      575 // from Box.
      +
      576 struct MediaData {
      +
      577  MediaData();
      +
      578  ~MediaData();
      +
      579  void Write(BufferWriter* buffer_writer);
      +
      580  uint32_t ComputeSize();
      +
      581  FourCC BoxType() const;
      +
      582 
      +
      583  uint32_t data_size;
      +
      584 };
      +
      585 
      +
      586 #undef DECLARE_BOX
      +
      587 
      +
      588 } // namespace mp4
      +
      589 } // namespace media
      +
      590 } // namespace edash_packager
      +
      591 
      +
      592 #endif // MEDIA_FORMATS_MP4_BOX_DEFINITIONS_H_
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + - - - - - + + + + + diff --git a/docs/d5/d89/widevine__key__source_8cc_source.html b/docs/d5/d89/widevine__key__source_8cc_source.html index 0561bb257b..050f682cd9 100644 --- a/docs/d5/d89/widevine__key__source_8cc_source.html +++ b/docs/d5/d89/widevine__key__source_8cc_source.html @@ -649,7 +649,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d8f/webm__cluster__parser_8cc_source.html b/docs/d5/d8f/webm__cluster__parser_8cc_source.html index 8b57cbf0e0..2873727588 100644 --- a/docs/d5/d8f/webm__cluster__parser_8cc_source.html +++ b/docs/d5/d8f/webm__cluster__parser_8cc_source.html @@ -827,7 +827,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d91/es__parser__adts_8cc_source.html b/docs/d5/d91/es__parser__adts_8cc_source.html index 7373c792fe..0e89451f9b 100644 --- a/docs/d5/d91/es__parser__adts_8cc_source.html +++ b/docs/d5/d91/es__parser__adts_8cc_source.html @@ -374,7 +374,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/d9c/classedash__packager_1_1MpdNotifierFactory-members.html b/docs/d5/d9c/classedash__packager_1_1MpdNotifierFactory-members.html index 4fb01ef8d6..a3df721aee 100644 --- a/docs/d5/d9c/classedash__packager_1_1MpdNotifierFactory-members.html +++ b/docs/d5/d9c/classedash__packager_1_1MpdNotifierFactory-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/da4/aes__encryptor_8cc_source.html b/docs/d5/da4/aes__encryptor_8cc_source.html index 112a54425d..57bb285462 100644 --- a/docs/d5/da4/aes__encryptor_8cc_source.html +++ b/docs/d5/da4/aes__encryptor_8cc_source.html @@ -568,7 +568,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/db7/classedash__packager_1_1xml_1_1AdaptationSetXmlNode-members.html b/docs/d5/db7/classedash__packager_1_1xml_1_1AdaptationSetXmlNode-members.html index 169d88fbf9..58e871beaa 100644 --- a/docs/d5/db7/classedash__packager_1_1xml_1_1AdaptationSetXmlNode-members.html +++ b/docs/d5/db7/classedash__packager_1_1xml_1_1AdaptationSetXmlNode-members.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dba/ts__packet_8cc_source.html b/docs/d5/dba/ts__packet_8cc_source.html index b829f4175a..e898d891db 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 c9e5eeee39..084fe5b522 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/classedash__packager_1_1media_1_1OpusPacket.html b/docs/d5/dc8/classedash__packager_1_1media_1_1OpusPacket.html index c98e534af5..578a466125 100644 --- a/docs/d5/dc8/classedash__packager_1_1media_1_1OpusPacket.html +++ b/docs/d5/dc8/classedash__packager_1_1media_1_1OpusPacket.html @@ -119,7 +119,7 @@ double duration_ms () diff --git a/docs/d5/dce/classedash__packager_1_1media_1_1Demuxer.html b/docs/d5/dce/classedash__packager_1_1media_1_1Demuxer.html index 87341275c7..fe7e91519a 100644 --- a/docs/d5/dce/classedash__packager_1_1media_1_1Demuxer.html +++ b/docs/d5/dce/classedash__packager_1_1media_1_1Demuxer.html @@ -294,7 +294,7 @@ Public Member Functions diff --git a/docs/d5/dcf/rsa__key_8h_source.html b/docs/d5/dcf/rsa__key_8h_source.html index 55c1edc0c8..432cbafcdf 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 5cc7255e04..00507b3542 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/ddf/classedash__packager_1_1media_1_1mp4_1_1FrameCENCInfo.html b/docs/d5/ddf/classedash__packager_1_1media_1_1mp4_1_1FrameCENCInfo.html index 025c322432..cee5d4e4f2 100644 --- a/docs/d5/ddf/classedash__packager_1_1media_1_1mp4_1_1FrameCENCInfo.html +++ b/docs/d5/ddf/classedash__packager_1_1media_1_1mp4_1_1FrameCENCInfo.html @@ -132,7 +132,7 @@ const std::vector
      diff --git a/docs/d5/de0/bit__reader_8cc_source.html b/docs/d5/de0/bit__reader_8cc_source.html index d451b5b45f..c01dfd293f 100644 --- a/docs/d5/de0/bit__reader_8cc_source.html +++ b/docs/d5/de0/bit__reader_8cc_source.html @@ -185,7 +185,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d5/dec/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser-members.html b/docs/d5/dec/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser-members.html index 297ae9957e..69cbd1630b 100644 --- a/docs/d5/dec/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser-members.html +++ b/docs/d5/dec/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser-members.html @@ -105,7 +105,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 7bdf5086ce..e4efad0603 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/df8/classedash__packager_1_1media_1_1H264BitReader-members.html b/docs/d5/df8/classedash__packager_1_1media_1_1H264BitReader-members.html index 5063068592..766e6d9502 100644 --- a/docs/d5/df8/classedash__packager_1_1media_1_1H264BitReader-members.html +++ b/docs/d5/df8/classedash__packager_1_1media_1_1H264BitReader-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 e01da38be7..8ed0ee7ad4 100644 --- a/docs/d5/dfc/file_8cc_source.html +++ b/docs/d5/dfc/file_8cc_source.html @@ -280,7 +280,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d00/structedash__packager_1_1media_1_1mp4_1_1Box-members.html b/docs/d6/d00/structedash__packager_1_1media_1_1mp4_1_1Box-members.html index bf8bf0fa4b..a4bddb1f2b 100644 --- a/docs/d6/d00/structedash__packager_1_1media_1_1mp4_1_1Box-members.html +++ b/docs/d6/d00/structedash__packager_1_1media_1_1mp4_1_1Box-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d06/classedash__packager_1_1media_1_1StreamInfo.html b/docs/d6/d06/classedash__packager_1_1media_1_1StreamInfo.html index 11c1757a18..923a5a10e6 100644 --- a/docs/d6/d06/classedash__packager_1_1media_1_1StreamInfo.html +++ b/docs/d6/d06/classedash__packager_1_1media_1_1StreamInfo.html @@ -228,7 +228,7 @@ class base::RefCountedThre diff --git a/docs/d6/d10/classedash__packager_1_1media_1_1VideoStreamInfo-members.html b/docs/d6/d10/classedash__packager_1_1media_1_1VideoStreamInfo-members.html index 4bc889b801..a87e04b1b4 100644 --- a/docs/d6/d10/classedash__packager_1_1media_1_1VideoStreamInfo-members.html +++ b/docs/d6/d10/classedash__packager_1_1media_1_1VideoStreamInfo-members.html @@ -97,35 +97,34 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); codec_string() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline duration() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline extra_data() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline - GetCodecString(VideoCodec codec, uint8_t profile, uint8_t compatible_profiles, uint8_t level)edash_packager::media::VideoStreamInfostatic - height() const (defined in edash_packager::media::VideoStreamInfo)edash_packager::media::VideoStreamInfoinline - is_encrypted() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline - IsValidConfig() const overrideedash_packager::media::VideoStreamInfovirtual - language() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline - nalu_length_size() const (defined in edash_packager::media::VideoStreamInfo)edash_packager::media::VideoStreamInfoinline - pixel_height() const edash_packager::media::VideoStreamInfoinline - pixel_width() const edash_packager::media::VideoStreamInfoinline - set_codec_string(const std::string &codec_string) (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline - set_duration(int duration) (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline - set_extra_data(const std::vector< uint8_t > &data) (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline - set_height(uint32_t height) (defined in edash_packager::media::VideoStreamInfo)edash_packager::media::VideoStreamInfoinline - set_language(const std::string &language) (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline - set_pixel_height(uint32_t pixel_height) (defined in edash_packager::media::VideoStreamInfo)edash_packager::media::VideoStreamInfoinline - set_pixel_width(uint32_t pixel_width) (defined in edash_packager::media::VideoStreamInfo)edash_packager::media::VideoStreamInfoinline - set_width(uint32_t width) (defined in edash_packager::media::VideoStreamInfo)edash_packager::media::VideoStreamInfoinline - stream_type() const (defined in edash_packager::media::StreamInfo)edash_packager::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 *extra_data, size_t extra_data_size, bool is_encrypted) (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfo - time_scale() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline - ToString() const overrideedash_packager::media::VideoStreamInfovirtual - track_id() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline - trick_play_rate() const (defined in edash_packager::media::VideoStreamInfo)edash_packager::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 *extra_data, size_t extra_data_size, bool is_encrypted)edash_packager::media::VideoStreamInfo - width() const (defined in edash_packager::media::VideoStreamInfo)edash_packager::media::VideoStreamInfoinline - ~StreamInfo() (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoprotectedvirtual + height() const (defined in edash_packager::media::VideoStreamInfo)edash_packager::media::VideoStreamInfoinline + is_encrypted() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline + IsValidConfig() const overrideedash_packager::media::VideoStreamInfovirtual + language() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline + nalu_length_size() const (defined in edash_packager::media::VideoStreamInfo)edash_packager::media::VideoStreamInfoinline + pixel_height() const edash_packager::media::VideoStreamInfoinline + pixel_width() const edash_packager::media::VideoStreamInfoinline + set_codec_string(const std::string &codec_string) (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline + set_duration(int duration) (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline + set_extra_data(const std::vector< uint8_t > &data) (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline + set_height(uint32_t height) (defined in edash_packager::media::VideoStreamInfo)edash_packager::media::VideoStreamInfoinline + set_language(const std::string &language) (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline + set_pixel_height(uint32_t pixel_height) (defined in edash_packager::media::VideoStreamInfo)edash_packager::media::VideoStreamInfoinline + set_pixel_width(uint32_t pixel_width) (defined in edash_packager::media::VideoStreamInfo)edash_packager::media::VideoStreamInfoinline + set_width(uint32_t width) (defined in edash_packager::media::VideoStreamInfo)edash_packager::media::VideoStreamInfoinline + stream_type() const (defined in edash_packager::media::StreamInfo)edash_packager::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 *extra_data, size_t extra_data_size, bool is_encrypted) (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfo + time_scale() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline + ToString() const overrideedash_packager::media::VideoStreamInfovirtual + track_id() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline + trick_play_rate() const (defined in edash_packager::media::VideoStreamInfo)edash_packager::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 *extra_data, size_t extra_data_size, bool is_encrypted)edash_packager::media::VideoStreamInfo + width() const (defined in edash_packager::media::VideoStreamInfo)edash_packager::media::VideoStreamInfoinline + ~StreamInfo() (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoprotectedvirtual diff --git a/docs/d6/d12/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat-members.html b/docs/d6/d12/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat-members.html index 89a4ddd558..6601ac9c10 100644 --- a/docs/d6/d12/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat-members.html +++ b/docs/d6/d12/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d13/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator-members.html b/docs/d6/d13/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator-members.html index 665d822f53..7468be33a0 100644 --- a/docs/d6/d13/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator-members.html +++ b/docs/d6/d13/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d17/es__parser__h264_8cc_source.html b/docs/d6/d17/es__parser__h264_8cc_source.html index 15306167c0..19577da5f5 100644 --- a/docs/d6/d17/es__parser__h264_8cc_source.html +++ b/docs/d6/d17/es__parser__h264_8cc_source.html @@ -101,359 +101,359 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
      12 #include "packager/media/base/offset_byte_queue.h"
      13 #include "packager/media/base/timestamp.h"
      14 #include "packager/media/base/video_stream_info.h"
      -
      15 #include "packager/media/filters/h264_byte_to_unit_stream_converter.h"
      -
      16 #include "packager/media/filters/h264_parser.h"
      -
      17 #include "packager/media/formats/mp2t/mp2t_common.h"
      -
      18 
      -
      19 namespace edash_packager {
      -
      20 namespace media {
      -
      21 namespace mp2t {
      -
      22 
      -
      23 namespace {
      -
      24 
      -
      25 // An AUD NALU is at least 4 bytes:
      -
      26 // 3 bytes for the start code + 1 byte for the NALU type.
      -
      27 const int kMinAUDSize = 4;
      -
      28 
      -
      29 } // anonymous namespace
      -
      30 
      -
      31 EsParserH264::EsParserH264(uint32_t pid,
      -
      32  const NewStreamInfoCB& new_stream_info_cb,
      -
      33  const EmitSampleCB& emit_sample_cb)
      -
      34  : EsParser(pid),
      -
      35  new_stream_info_cb_(new_stream_info_cb),
      -
      36  emit_sample_cb_(emit_sample_cb),
      -
      37  es_queue_(new media::OffsetByteQueue()),
      -
      38  h264_parser_(new H264Parser()),
      -
      39  current_access_unit_pos_(0),
      -
      40  next_access_unit_pos_(0),
      -
      41  stream_converter_(new H264ByteToUnitStreamConverter),
      -
      42  decoder_config_check_pending_(false),
      -
      43  pending_sample_duration_(0),
      -
      44  waiting_for_key_frame_(true) {
      -
      45 }
      -
      46 
      -
      47 EsParserH264::~EsParserH264() {
      -
      48 }
      -
      49 
      -
      50 bool EsParserH264::Parse(const uint8_t* buf,
      -
      51  int size,
      -
      52  int64_t pts,
      -
      53  int64_t dts) {
      -
      54  // Note: Parse is invoked each time a PES packet has been reassembled.
      -
      55  // Unfortunately, a PES packet does not necessarily map
      -
      56  // to an h264 access unit, although the HLS recommendation is to use one PES
      -
      57  // for each access unit (but this is just a recommendation and some streams
      -
      58  // do not comply with this recommendation).
      -
      59 
      -
      60  // HLS recommendation: "In AVC video, you should have both a DTS and a
      -
      61  // PTS in each PES header".
      -
      62  // However, some streams do not comply with this recommendation.
      -
      63  DVLOG_IF(1, pts == kNoTimestamp) << "Each video PES should have a PTS";
      -
      64  if (pts != kNoTimestamp) {
      -
      65  TimingDesc timing_desc;
      -
      66  timing_desc.pts = pts;
      -
      67  timing_desc.dts = (dts != kNoTimestamp) ? dts : pts;
      -
      68 
      -
      69  // Link the end of the byte queue with the incoming timing descriptor.
      -
      70  timing_desc_list_.push_back(
      -
      71  std::pair<int64_t, TimingDesc>(es_queue_->tail(), timing_desc));
      -
      72  }
      -
      73 
      -
      74  // Add the incoming bytes to the ES queue.
      -
      75  es_queue_->Push(buf, size);
      -
      76  return ParseInternal();
      -
      77 }
      -
      78 
      -
      79 void EsParserH264::Flush() {
      -
      80  DVLOG(1) << "EsParserH264::Flush";
      -
      81 
      -
      82  if (FindAUD(&current_access_unit_pos_)) {
      -
      83  // Simulate an additional AUD to force emitting the last access unit
      -
      84  // which is assumed to be complete at this point.
      -
      85  uint8_t aud[] = {0x00, 0x00, 0x01, 0x09};
      -
      86  es_queue_->Push(aud, sizeof(aud));
      -
      87  ParseInternal();
      -
      88  }
      -
      89 
      -
      90  if (pending_sample_) {
      -
      91  // Flush pending sample.
      -
      92  DCHECK(pending_sample_duration_);
      -
      93  pending_sample_->set_duration(pending_sample_duration_);
      -
      94  emit_sample_cb_.Run(pid(), pending_sample_);
      -
      95  pending_sample_ = scoped_refptr<MediaSample>();
      -
      96  }
      -
      97 }
      -
      98 
      -
      99 void EsParserH264::Reset() {
      -
      100  DVLOG(1) << "EsParserH264::Reset";
      -
      101  es_queue_.reset(new media::OffsetByteQueue());
      -
      102  h264_parser_.reset(new H264Parser());
      -
      103  current_access_unit_pos_ = 0;
      -
      104  next_access_unit_pos_ = 0;
      -
      105  timing_desc_list_.clear();
      -
      106  last_video_decoder_config_ = scoped_refptr<StreamInfo>();
      -
      107  decoder_config_check_pending_ = false;
      -
      108  pending_sample_ = scoped_refptr<MediaSample>();
      -
      109  pending_sample_duration_ = 0;
      -
      110  waiting_for_key_frame_ = true;
      -
      111 }
      -
      112 
      -
      113 bool EsParserH264::FindAUD(int64_t* stream_pos) {
      -
      114  while (true) {
      -
      115  const uint8_t* es;
      -
      116  int size;
      -
      117  es_queue_->PeekAt(*stream_pos, &es, &size);
      -
      118 
      -
      119  // Find a start code and move the stream to the start code parser position.
      -
      120  off_t start_code_offset;
      -
      121  off_t start_code_size;
      -
      122  bool start_code_found = H264Parser::FindStartCode(
      -
      123  es, size, &start_code_offset, &start_code_size);
      -
      124  *stream_pos += start_code_offset;
      -
      125 
      -
      126  // No H264 start code found or NALU type not available yet.
      -
      127  if (!start_code_found || start_code_offset + start_code_size >= size)
      -
      128  return false;
      -
      129 
      -
      130  // Exit the parser loop when an AUD is found.
      -
      131  // Note: NALU header for an AUD:
      -
      132  // - nal_ref_idc must be 0
      -
      133  // - nal_unit_type must be H264NALU::kAUD
      -
      134  if (es[start_code_offset + start_code_size] == H264NALU::kAUD)
      -
      135  break;
      -
      136 
      -
      137  // The current NALU is not an AUD, skip the start code
      -
      138  // and continue parsing the stream.
      -
      139  *stream_pos += start_code_size;
      -
      140  }
      -
      141 
      -
      142  return true;
      -
      143 }
      -
      144 
      -
      145 bool EsParserH264::ParseInternal() {
      -
      146  DCHECK_LE(es_queue_->head(), current_access_unit_pos_);
      -
      147  DCHECK_LE(current_access_unit_pos_, next_access_unit_pos_);
      -
      148  DCHECK_LE(next_access_unit_pos_, es_queue_->tail());
      -
      149 
      -
      150  // Find the next AUD located at or after |current_access_unit_pos_|. This is
      -
      151  // needed since initially |current_access_unit_pos_| might not point to
      -
      152  // an AUD.
      -
      153  // Discard all the data before the updated |current_access_unit_pos_|
      -
      154  // since it won't be used again.
      -
      155  bool aud_found = FindAUD(&current_access_unit_pos_);
      -
      156  es_queue_->Trim(current_access_unit_pos_);
      -
      157  if (next_access_unit_pos_ < current_access_unit_pos_)
      -
      158  next_access_unit_pos_ = current_access_unit_pos_;
      -
      159 
      -
      160  // Resume parsing later if no AUD was found.
      -
      161  if (!aud_found)
      -
      162  return true;
      -
      163 
      -
      164  // Find the next AUD to make sure we have a complete access unit.
      -
      165  if (next_access_unit_pos_ < current_access_unit_pos_ + kMinAUDSize) {
      -
      166  next_access_unit_pos_ = current_access_unit_pos_ + kMinAUDSize;
      -
      167  DCHECK_LE(next_access_unit_pos_, es_queue_->tail());
      -
      168  }
      -
      169  if (!FindAUD(&next_access_unit_pos_))
      -
      170  return true;
      -
      171 
      -
      172  // At this point, we know we have a full access unit.
      -
      173  bool is_key_frame = false;
      -
      174  int pps_id_for_access_unit = -1;
      -
      175 
      -
      176  const uint8_t* es;
      -
      177  int size;
      -
      178  es_queue_->PeekAt(current_access_unit_pos_, &es, &size);
      -
      179  int access_unit_size = base::checked_cast<int, int64_t>(
      -
      180  next_access_unit_pos_ - current_access_unit_pos_);
      -
      181  DCHECK_LE(access_unit_size, size);
      -
      182  h264_parser_->SetStream(es, access_unit_size);
      -
      183 
      -
      184  while (true) {
      -
      185  bool is_eos = false;
      -
      186  H264NALU nalu;
      -
      187  switch (h264_parser_->AdvanceToNextNALU(&nalu)) {
      -
      188  case H264Parser::kOk:
      -
      189  break;
      -
      190  case H264Parser::kInvalidStream:
      -
      191  case H264Parser::kUnsupportedStream:
      -
      192  return false;
      -
      193  case H264Parser::kEOStream:
      -
      194  is_eos = true;
      -
      195  break;
      -
      196  }
      -
      197  if (is_eos)
      -
      198  break;
      -
      199 
      -
      200  switch (nalu.nal_unit_type) {
      -
      201  case H264NALU::kAUD: {
      -
      202  DVLOG(LOG_LEVEL_ES) << "NALU: AUD";
      -
      203  break;
      -
      204  }
      -
      205  case H264NALU::kSPS: {
      -
      206  DVLOG(LOG_LEVEL_ES) << "NALU: SPS";
      -
      207  int sps_id;
      -
      208  if (h264_parser_->ParseSPS(&sps_id) != H264Parser::kOk)
      -
      209  return false;
      -
      210  decoder_config_check_pending_ = true;
      -
      211  break;
      -
      212  }
      -
      213  case H264NALU::kPPS: {
      -
      214  DVLOG(LOG_LEVEL_ES) << "NALU: PPS";
      -
      215  int pps_id;
      -
      216  if (h264_parser_->ParsePPS(&pps_id) != H264Parser::kOk) {
      -
      217  // Allow PPS parsing to fail if waiting for SPS.
      -
      218  if (last_video_decoder_config_)
      -
      219  return false;
      -
      220  } else {
      -
      221  decoder_config_check_pending_ = true;
      -
      222  }
      -
      223  break;
      -
      224  }
      -
      225  case H264NALU::kIDRSlice:
      -
      226  case H264NALU::kNonIDRSlice: {
      -
      227  is_key_frame = (nalu.nal_unit_type == H264NALU::kIDRSlice);
      -
      228  DVLOG(LOG_LEVEL_ES) << "NALU: slice IDR=" << is_key_frame;
      -
      229  H264SliceHeader shdr;
      -
      230  if (h264_parser_->ParseSliceHeader(nalu, &shdr) != H264Parser::kOk) {
      -
      231  // Only accept an invalid SPS/PPS at the beginning when the stream
      -
      232  // does not necessarily start with an SPS/PPS/IDR.
      -
      233  if (last_video_decoder_config_)
      -
      234  return false;
      -
      235  } else {
      -
      236  pps_id_for_access_unit = shdr.pic_parameter_set_id;
      -
      237  }
      -
      238  break;
      -
      239  }
      -
      240  default: {
      -
      241  DVLOG(LOG_LEVEL_ES) << "NALU: " << nalu.nal_unit_type;
      -
      242  }
      -
      243  }
      -
      244  }
      -
      245 
      -
      246  if (waiting_for_key_frame_) {
      -
      247  waiting_for_key_frame_ = !is_key_frame;
      -
      248  }
      -
      249  if (!waiting_for_key_frame_) {
      -
      250  // Emit a frame and move the stream to the next AUD position.
      -
      251  RCHECK(EmitFrame(current_access_unit_pos_, access_unit_size,
      -
      252  is_key_frame, pps_id_for_access_unit));
      -
      253  }
      -
      254  current_access_unit_pos_ = next_access_unit_pos_;
      -
      255  es_queue_->Trim(current_access_unit_pos_);
      -
      256 
      -
      257  return true;
      -
      258 }
      -
      259 
      -
      260 bool EsParserH264::EmitFrame(int64_t access_unit_pos,
      -
      261  int access_unit_size,
      -
      262  bool is_key_frame,
      -
      263  int pps_id) {
      -
      264  // Get the access unit timing info.
      -
      265  TimingDesc current_timing_desc = {kNoTimestamp, kNoTimestamp};
      -
      266  while (!timing_desc_list_.empty() &&
      -
      267  timing_desc_list_.front().first <= access_unit_pos) {
      -
      268  current_timing_desc = timing_desc_list_.front().second;
      -
      269  timing_desc_list_.pop_front();
      -
      270  }
      -
      271  if (current_timing_desc.pts == kNoTimestamp)
      -
      272  return false;
      -
      273 
      -
      274  // Emit a frame.
      -
      275  DVLOG(LOG_LEVEL_ES) << "Emit frame: stream_pos=" << current_access_unit_pos_
      -
      276  << " size=" << access_unit_size;
      -
      277  int es_size;
      -
      278  const uint8_t* es;
      -
      279  es_queue_->PeekAt(current_access_unit_pos_, &es, &es_size);
      -
      280  CHECK_GE(es_size, access_unit_size);
      -
      281 
      -
      282  // Convert frame to unit stream format.
      -
      283  std::vector<uint8_t> converted_frame;
      -
      284  if (!stream_converter_->ConvertByteStreamToNalUnitStream(
      -
      285  es, access_unit_size, &converted_frame)) {
      -
      286  DLOG(ERROR) << "Failure to convert video frame to unit stream format.";
      -
      287  return false;
      -
      288  }
      -
      289 
      -
      290  if (decoder_config_check_pending_) {
      -
      291  // Update the video decoder configuration if needed.
      -
      292  const H264PPS* pps = h264_parser_->GetPPS(pps_id);
      -
      293  if (!pps) {
      -
      294  // Only accept an invalid PPS at the beginning when the stream
      -
      295  // does not necessarily start with an SPS/PPS/IDR.
      -
      296  // In this case, the initial frames are conveyed to the upper layer with
      -
      297  // an invalid VideoDecoderConfig and it's up to the upper layer
      -
      298  // to process this kind of frame accordingly.
      -
      299  if (last_video_decoder_config_)
      -
      300  return false;
      -
      301  } else {
      -
      302  const H264SPS* sps = h264_parser_->GetSPS(pps->seq_parameter_set_id);
      -
      303  if (!sps)
      -
      304  return false;
      -
      305  RCHECK(UpdateVideoDecoderConfig(sps));
      -
      306  decoder_config_check_pending_ = false;
      -
      307  }
      -
      308  }
      -
      309 
      -
      310  // Create the media sample, emitting always the previous sample after
      -
      311  // calculating its duration.
      -
      312  scoped_refptr<MediaSample> media_sample = MediaSample::CopyFrom(
      -
      313  converted_frame.data(), converted_frame.size(), is_key_frame);
      -
      314  media_sample->set_dts(current_timing_desc.dts);
      -
      315  media_sample->set_pts(current_timing_desc.pts);
      -
      316  if (pending_sample_) {
      -
      317  DCHECK_GT(media_sample->dts(), pending_sample_->dts());
      -
      318  pending_sample_duration_ = media_sample->dts() - pending_sample_->dts();
      -
      319  pending_sample_->set_duration(pending_sample_duration_);
      -
      320  emit_sample_cb_.Run(pid(), pending_sample_);
      -
      321  }
      -
      322  pending_sample_ = media_sample;
      -
      323 
      -
      324  return true;
      -
      325 }
      -
      326 
      -
      327 bool EsParserH264::UpdateVideoDecoderConfig(const H264SPS* sps) {
      -
      328  std::vector<uint8_t> decoder_config_record;
      -
      329  if (!stream_converter_->GetAVCDecoderConfigurationRecord(
      -
      330  &decoder_config_record)) {
      -
      331  DLOG(ERROR) << "Failure to construct an AVCDecoderConfigurationRecord";
      -
      332  return false;
      -
      333  }
      -
      334 
      -
      335  if (last_video_decoder_config_) {
      -
      336  if (last_video_decoder_config_->extra_data() != decoder_config_record) {
      -
      337  // Video configuration has changed. Issue warning.
      -
      338  // TODO(tinskip): Check the nature of the configuration change. Only
      -
      339  // minor configuration changes (such as frame ordering) can be handled
      -
      340  // gracefully by decoders without notification. Major changes (such as
      -
      341  // video resolution changes) should be treated as errors.
      -
      342  LOG(WARNING) << "H.264 decoder configuration has changed.";
      -
      343  last_video_decoder_config_->set_extra_data(decoder_config_record);
      -
      344  }
      -
      345  return true;
      -
      346  }
      -
      347 
      -
      348  uint32_t coded_width = 0;
      -
      349  uint32_t coded_height = 0;
      -
      350  uint32_t pixel_width = 0;
      -
      351  uint32_t pixel_height = 0;
      -
      352  if (!ExtractResolutionFromSps(*sps, &coded_width, &coded_height, &pixel_width,
      -
      353  &pixel_height)) {
      -
      354  LOG(ERROR) << "Failed to parse SPS.";
      -
      355  return false;
      -
      356  }
      -
      357 
      -
      358  last_video_decoder_config_ = scoped_refptr<StreamInfo>(
      -
      359  new VideoStreamInfo(
      -
      360  pid(),
      -
      361  kMpeg2Timescale,
      -
      362  kInfiniteDuration,
      -
      363  kCodecH264,
      - -
      365  decoder_config_record[1],
      -
      366  decoder_config_record[2],
      -
      367  decoder_config_record[3]),
      +
      15 #include "packager/media/filters/avc_decoder_configuration.h"
      +
      16 #include "packager/media/filters/h264_byte_to_unit_stream_converter.h"
      +
      17 #include "packager/media/filters/h264_parser.h"
      +
      18 #include "packager/media/formats/mp2t/mp2t_common.h"
      +
      19 
      +
      20 namespace edash_packager {
      +
      21 namespace media {
      +
      22 namespace mp2t {
      +
      23 
      +
      24 namespace {
      +
      25 
      +
      26 // An AUD NALU is at least 4 bytes:
      +
      27 // 3 bytes for the start code + 1 byte for the NALU type.
      +
      28 const int kMinAUDSize = 4;
      +
      29 
      +
      30 } // anonymous namespace
      +
      31 
      +
      32 EsParserH264::EsParserH264(uint32_t pid,
      +
      33  const NewStreamInfoCB& new_stream_info_cb,
      +
      34  const EmitSampleCB& emit_sample_cb)
      +
      35  : EsParser(pid),
      +
      36  new_stream_info_cb_(new_stream_info_cb),
      +
      37  emit_sample_cb_(emit_sample_cb),
      +
      38  es_queue_(new media::OffsetByteQueue()),
      +
      39  h264_parser_(new H264Parser()),
      +
      40  current_access_unit_pos_(0),
      +
      41  next_access_unit_pos_(0),
      +
      42  stream_converter_(new H264ByteToUnitStreamConverter),
      +
      43  decoder_config_check_pending_(false),
      +
      44  pending_sample_duration_(0),
      +
      45  waiting_for_key_frame_(true) {
      +
      46 }
      +
      47 
      +
      48 EsParserH264::~EsParserH264() {
      +
      49 }
      +
      50 
      +
      51 bool EsParserH264::Parse(const uint8_t* buf,
      +
      52  int size,
      +
      53  int64_t pts,
      +
      54  int64_t dts) {
      +
      55  // Note: Parse is invoked each time a PES packet has been reassembled.
      +
      56  // Unfortunately, a PES packet does not necessarily map
      +
      57  // to an h264 access unit, although the HLS recommendation is to use one PES
      +
      58  // for each access unit (but this is just a recommendation and some streams
      +
      59  // do not comply with this recommendation).
      +
      60 
      +
      61  // HLS recommendation: "In AVC video, you should have both a DTS and a
      +
      62  // PTS in each PES header".
      +
      63  // However, some streams do not comply with this recommendation.
      +
      64  DVLOG_IF(1, pts == kNoTimestamp) << "Each video PES should have a PTS";
      +
      65  if (pts != kNoTimestamp) {
      +
      66  TimingDesc timing_desc;
      +
      67  timing_desc.pts = pts;
      +
      68  timing_desc.dts = (dts != kNoTimestamp) ? dts : pts;
      +
      69 
      +
      70  // Link the end of the byte queue with the incoming timing descriptor.
      +
      71  timing_desc_list_.push_back(
      +
      72  std::pair<int64_t, TimingDesc>(es_queue_->tail(), timing_desc));
      +
      73  }
      +
      74 
      +
      75  // Add the incoming bytes to the ES queue.
      +
      76  es_queue_->Push(buf, size);
      +
      77  return ParseInternal();
      +
      78 }
      +
      79 
      +
      80 void EsParserH264::Flush() {
      +
      81  DVLOG(1) << "EsParserH264::Flush";
      +
      82 
      +
      83  if (FindAUD(&current_access_unit_pos_)) {
      +
      84  // Simulate an additional AUD to force emitting the last access unit
      +
      85  // which is assumed to be complete at this point.
      +
      86  uint8_t aud[] = {0x00, 0x00, 0x01, 0x09};
      +
      87  es_queue_->Push(aud, sizeof(aud));
      +
      88  ParseInternal();
      +
      89  }
      +
      90 
      +
      91  if (pending_sample_) {
      +
      92  // Flush pending sample.
      +
      93  DCHECK(pending_sample_duration_);
      +
      94  pending_sample_->set_duration(pending_sample_duration_);
      +
      95  emit_sample_cb_.Run(pid(), pending_sample_);
      +
      96  pending_sample_ = scoped_refptr<MediaSample>();
      +
      97  }
      +
      98 }
      +
      99 
      +
      100 void EsParserH264::Reset() {
      +
      101  DVLOG(1) << "EsParserH264::Reset";
      +
      102  es_queue_.reset(new media::OffsetByteQueue());
      +
      103  h264_parser_.reset(new H264Parser());
      +
      104  current_access_unit_pos_ = 0;
      +
      105  next_access_unit_pos_ = 0;
      +
      106  timing_desc_list_.clear();
      +
      107  last_video_decoder_config_ = scoped_refptr<StreamInfo>();
      +
      108  decoder_config_check_pending_ = false;
      +
      109  pending_sample_ = scoped_refptr<MediaSample>();
      +
      110  pending_sample_duration_ = 0;
      +
      111  waiting_for_key_frame_ = true;
      +
      112 }
      +
      113 
      +
      114 bool EsParserH264::FindAUD(int64_t* stream_pos) {
      +
      115  while (true) {
      +
      116  const uint8_t* es;
      +
      117  int size;
      +
      118  es_queue_->PeekAt(*stream_pos, &es, &size);
      +
      119 
      +
      120  // Find a start code and move the stream to the start code parser position.
      +
      121  off_t start_code_offset;
      +
      122  off_t start_code_size;
      +
      123  bool start_code_found = H264Parser::FindStartCode(
      +
      124  es, size, &start_code_offset, &start_code_size);
      +
      125  *stream_pos += start_code_offset;
      +
      126 
      +
      127  // No H264 start code found or NALU type not available yet.
      +
      128  if (!start_code_found || start_code_offset + start_code_size >= size)
      +
      129  return false;
      +
      130 
      +
      131  // Exit the parser loop when an AUD is found.
      +
      132  // Note: NALU header for an AUD:
      +
      133  // - nal_ref_idc must be 0
      +
      134  // - nal_unit_type must be H264NALU::kAUD
      +
      135  if (es[start_code_offset + start_code_size] == H264NALU::kAUD)
      +
      136  break;
      +
      137 
      +
      138  // The current NALU is not an AUD, skip the start code
      +
      139  // and continue parsing the stream.
      +
      140  *stream_pos += start_code_size;
      +
      141  }
      +
      142 
      +
      143  return true;
      +
      144 }
      +
      145 
      +
      146 bool EsParserH264::ParseInternal() {
      +
      147  DCHECK_LE(es_queue_->head(), current_access_unit_pos_);
      +
      148  DCHECK_LE(current_access_unit_pos_, next_access_unit_pos_);
      +
      149  DCHECK_LE(next_access_unit_pos_, es_queue_->tail());
      +
      150 
      +
      151  // Find the next AUD located at or after |current_access_unit_pos_|. This is
      +
      152  // needed since initially |current_access_unit_pos_| might not point to
      +
      153  // an AUD.
      +
      154  // Discard all the data before the updated |current_access_unit_pos_|
      +
      155  // since it won't be used again.
      +
      156  bool aud_found = FindAUD(&current_access_unit_pos_);
      +
      157  es_queue_->Trim(current_access_unit_pos_);
      +
      158  if (next_access_unit_pos_ < current_access_unit_pos_)
      +
      159  next_access_unit_pos_ = current_access_unit_pos_;
      +
      160 
      +
      161  // Resume parsing later if no AUD was found.
      +
      162  if (!aud_found)
      +
      163  return true;
      +
      164 
      +
      165  // Find the next AUD to make sure we have a complete access unit.
      +
      166  if (next_access_unit_pos_ < current_access_unit_pos_ + kMinAUDSize) {
      +
      167  next_access_unit_pos_ = current_access_unit_pos_ + kMinAUDSize;
      +
      168  DCHECK_LE(next_access_unit_pos_, es_queue_->tail());
      +
      169  }
      +
      170  if (!FindAUD(&next_access_unit_pos_))
      +
      171  return true;
      +
      172 
      +
      173  // At this point, we know we have a full access unit.
      +
      174  bool is_key_frame = false;
      +
      175  int pps_id_for_access_unit = -1;
      +
      176 
      +
      177  const uint8_t* es;
      +
      178  int size;
      +
      179  es_queue_->PeekAt(current_access_unit_pos_, &es, &size);
      +
      180  int access_unit_size = base::checked_cast<int, int64_t>(
      +
      181  next_access_unit_pos_ - current_access_unit_pos_);
      +
      182  DCHECK_LE(access_unit_size, size);
      +
      183  h264_parser_->SetStream(es, access_unit_size);
      +
      184 
      +
      185  while (true) {
      +
      186  bool is_eos = false;
      +
      187  H264NALU nalu;
      +
      188  switch (h264_parser_->AdvanceToNextNALU(&nalu)) {
      +
      189  case H264Parser::kOk:
      +
      190  break;
      +
      191  case H264Parser::kInvalidStream:
      +
      192  case H264Parser::kUnsupportedStream:
      +
      193  return false;
      +
      194  case H264Parser::kEOStream:
      +
      195  is_eos = true;
      +
      196  break;
      +
      197  }
      +
      198  if (is_eos)
      +
      199  break;
      +
      200 
      +
      201  switch (nalu.nal_unit_type) {
      +
      202  case H264NALU::kAUD: {
      +
      203  DVLOG(LOG_LEVEL_ES) << "NALU: AUD";
      +
      204  break;
      +
      205  }
      +
      206  case H264NALU::kSPS: {
      +
      207  DVLOG(LOG_LEVEL_ES) << "NALU: SPS";
      +
      208  int sps_id;
      +
      209  if (h264_parser_->ParseSPS(&sps_id) != H264Parser::kOk)
      +
      210  return false;
      +
      211  decoder_config_check_pending_ = true;
      +
      212  break;
      +
      213  }
      +
      214  case H264NALU::kPPS: {
      +
      215  DVLOG(LOG_LEVEL_ES) << "NALU: PPS";
      +
      216  int pps_id;
      +
      217  if (h264_parser_->ParsePPS(&pps_id) != H264Parser::kOk) {
      +
      218  // Allow PPS parsing to fail if waiting for SPS.
      +
      219  if (last_video_decoder_config_)
      +
      220  return false;
      +
      221  } else {
      +
      222  decoder_config_check_pending_ = true;
      +
      223  }
      +
      224  break;
      +
      225  }
      +
      226  case H264NALU::kIDRSlice:
      +
      227  case H264NALU::kNonIDRSlice: {
      +
      228  is_key_frame = (nalu.nal_unit_type == H264NALU::kIDRSlice);
      +
      229  DVLOG(LOG_LEVEL_ES) << "NALU: slice IDR=" << is_key_frame;
      +
      230  H264SliceHeader shdr;
      +
      231  if (h264_parser_->ParseSliceHeader(nalu, &shdr) != H264Parser::kOk) {
      +
      232  // Only accept an invalid SPS/PPS at the beginning when the stream
      +
      233  // does not necessarily start with an SPS/PPS/IDR.
      +
      234  if (last_video_decoder_config_)
      +
      235  return false;
      +
      236  } else {
      +
      237  pps_id_for_access_unit = shdr.pic_parameter_set_id;
      +
      238  }
      +
      239  break;
      +
      240  }
      +
      241  default: {
      +
      242  DVLOG(LOG_LEVEL_ES) << "NALU: " << nalu.nal_unit_type;
      +
      243  }
      +
      244  }
      +
      245  }
      +
      246 
      +
      247  if (waiting_for_key_frame_) {
      +
      248  waiting_for_key_frame_ = !is_key_frame;
      +
      249  }
      +
      250  if (!waiting_for_key_frame_) {
      +
      251  // Emit a frame and move the stream to the next AUD position.
      +
      252  RCHECK(EmitFrame(current_access_unit_pos_, access_unit_size,
      +
      253  is_key_frame, pps_id_for_access_unit));
      +
      254  }
      +
      255  current_access_unit_pos_ = next_access_unit_pos_;
      +
      256  es_queue_->Trim(current_access_unit_pos_);
      +
      257 
      +
      258  return true;
      +
      259 }
      +
      260 
      +
      261 bool EsParserH264::EmitFrame(int64_t access_unit_pos,
      +
      262  int access_unit_size,
      +
      263  bool is_key_frame,
      +
      264  int pps_id) {
      +
      265  // Get the access unit timing info.
      +
      266  TimingDesc current_timing_desc = {kNoTimestamp, kNoTimestamp};
      +
      267  while (!timing_desc_list_.empty() &&
      +
      268  timing_desc_list_.front().first <= access_unit_pos) {
      +
      269  current_timing_desc = timing_desc_list_.front().second;
      +
      270  timing_desc_list_.pop_front();
      +
      271  }
      +
      272  if (current_timing_desc.pts == kNoTimestamp)
      +
      273  return false;
      +
      274 
      +
      275  // Emit a frame.
      +
      276  DVLOG(LOG_LEVEL_ES) << "Emit frame: stream_pos=" << current_access_unit_pos_
      +
      277  << " size=" << access_unit_size;
      +
      278  int es_size;
      +
      279  const uint8_t* es;
      +
      280  es_queue_->PeekAt(current_access_unit_pos_, &es, &es_size);
      +
      281  CHECK_GE(es_size, access_unit_size);
      +
      282 
      +
      283  // Convert frame to unit stream format.
      +
      284  std::vector<uint8_t> converted_frame;
      +
      285  if (!stream_converter_->ConvertByteStreamToNalUnitStream(
      +
      286  es, access_unit_size, &converted_frame)) {
      +
      287  DLOG(ERROR) << "Failure to convert video frame to unit stream format.";
      +
      288  return false;
      +
      289  }
      +
      290 
      +
      291  if (decoder_config_check_pending_) {
      +
      292  // Update the video decoder configuration if needed.
      +
      293  const H264PPS* pps = h264_parser_->GetPPS(pps_id);
      +
      294  if (!pps) {
      +
      295  // Only accept an invalid PPS at the beginning when the stream
      +
      296  // does not necessarily start with an SPS/PPS/IDR.
      +
      297  // In this case, the initial frames are conveyed to the upper layer with
      +
      298  // an invalid VideoDecoderConfig and it's up to the upper layer
      +
      299  // to process this kind of frame accordingly.
      +
      300  if (last_video_decoder_config_)
      +
      301  return false;
      +
      302  } else {
      +
      303  const H264SPS* sps = h264_parser_->GetSPS(pps->seq_parameter_set_id);
      +
      304  if (!sps)
      +
      305  return false;
      +
      306  RCHECK(UpdateVideoDecoderConfig(sps));
      +
      307  decoder_config_check_pending_ = false;
      +
      308  }
      +
      309  }
      +
      310 
      +
      311  // Create the media sample, emitting always the previous sample after
      +
      312  // calculating its duration.
      +
      313  scoped_refptr<MediaSample> media_sample = MediaSample::CopyFrom(
      +
      314  converted_frame.data(), converted_frame.size(), is_key_frame);
      +
      315  media_sample->set_dts(current_timing_desc.dts);
      +
      316  media_sample->set_pts(current_timing_desc.pts);
      +
      317  if (pending_sample_) {
      +
      318  DCHECK_GT(media_sample->dts(), pending_sample_->dts());
      +
      319  pending_sample_duration_ = media_sample->dts() - pending_sample_->dts();
      +
      320  pending_sample_->set_duration(pending_sample_duration_);
      +
      321  emit_sample_cb_.Run(pid(), pending_sample_);
      +
      322  }
      +
      323  pending_sample_ = media_sample;
      +
      324 
      +
      325  return true;
      +
      326 }
      +
      327 
      +
      328 bool EsParserH264::UpdateVideoDecoderConfig(const H264SPS* sps) {
      +
      329  std::vector<uint8_t> decoder_config_record;
      +
      330  if (!stream_converter_->GetAVCDecoderConfigurationRecord(
      +
      331  &decoder_config_record)) {
      +
      332  DLOG(ERROR) << "Failure to construct an AVCDecoderConfigurationRecord";
      +
      333  return false;
      +
      334  }
      +
      335 
      +
      336  if (last_video_decoder_config_) {
      +
      337  if (last_video_decoder_config_->extra_data() != decoder_config_record) {
      +
      338  // Video configuration has changed. Issue warning.
      +
      339  // TODO(tinskip): Check the nature of the configuration change. Only
      +
      340  // minor configuration changes (such as frame ordering) can be handled
      +
      341  // gracefully by decoders without notification. Major changes (such as
      +
      342  // video resolution changes) should be treated as errors.
      +
      343  LOG(WARNING) << "H.264 decoder configuration has changed.";
      +
      344  last_video_decoder_config_->set_extra_data(decoder_config_record);
      +
      345  }
      +
      346  return true;
      +
      347  }
      +
      348 
      +
      349  uint32_t coded_width = 0;
      +
      350  uint32_t coded_height = 0;
      +
      351  uint32_t pixel_width = 0;
      +
      352  uint32_t pixel_height = 0;
      +
      353  if (!ExtractResolutionFromSps(*sps, &coded_width, &coded_height, &pixel_width,
      +
      354  &pixel_height)) {
      +
      355  LOG(ERROR) << "Failed to parse SPS.";
      +
      356  return false;
      +
      357  }
      +
      358 
      +
      359  last_video_decoder_config_ = scoped_refptr<StreamInfo>(
      +
      360  new VideoStreamInfo(
      +
      361  pid(),
      +
      362  kMpeg2Timescale,
      +
      363  kInfiniteDuration,
      +
      364  kCodecH264,
      +
      365  AVCDecoderConfiguration::GetCodecString(decoder_config_record[1],
      +
      366  decoder_config_record[2],
      +
      367  decoder_config_record[3]),
      368  std::string(),
      369  coded_width,
      370  coded_height,
      @@ -477,12 +477,12 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
      388 } // namespace mp2t
      389 } // namespace media
      390 } // namespace edash_packager
      +
      static scoped_refptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
      Definition: media_sample.cc:47
      -
      static std::string GetCodecString(VideoCodec codec, uint8_t profile, uint8_t compatible_profiles, uint8_t level)
      diff --git a/docs/d6/d19/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription-members.html b/docs/d6/d19/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription-members.html index 390035f2f1..0f898be6c6 100644 --- a/docs/d6/d19/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription-members.html +++ b/docs/d6/d19/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d1b/classedash__packager_1_1media_1_1ClosureThread-members.html b/docs/d6/d1b/classedash__packager_1_1media_1_1ClosureThread-members.html index 823c08b9ae..b121ef01cc 100644 --- a/docs/d6/d1b/classedash__packager_1_1media_1_1ClosureThread-members.html +++ b/docs/d6/d1b/classedash__packager_1_1media_1_1ClosureThread-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d2e/mpd__notifier__util_8cc_source.html b/docs/d6/d2e/mpd__notifier__util_8cc_source.html index 203e89b33f..563c98da9c 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/d35/webm__content__encodings_8cc_source.html b/docs/d6/d35/webm__content__encodings_8cc_source.html index a54dd307af..e75bfa5b96 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/d37/classedash__packager_1_1xml_1_1AdaptationSetXmlNode.html b/docs/d6/d37/classedash__packager_1_1xml_1_1AdaptationSetXmlNode.html index 1018b4de98..dfb72a3834 100644 --- a/docs/d6/d37/classedash__packager_1_1xml_1_1AdaptationSetXmlNode.html +++ b/docs/d6/d37/classedash__packager_1_1xml_1_1AdaptationSetXmlNode.html @@ -197,7 +197,7 @@ Additional Inherited Members diff --git a/docs/d6/d3a/classedash__packager_1_1media_1_1AesRequestSigner-members.html b/docs/d6/d3a/classedash__packager_1_1media_1_1AesRequestSigner-members.html index b0f90dbfda..d84cf62652 100644 --- a/docs/d6/d3a/classedash__packager_1_1media_1_1AesRequestSigner-members.html +++ b/docs/d6/d3a/classedash__packager_1_1media_1_1AesRequestSigner-members.html @@ -102,7 +102,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 4635a0ad3d..243cae16f3 100644 --- a/docs/d6/d3b/chunk__info__iterator_8cc_source.html +++ b/docs/d6/d3b/chunk__info__iterator_8cc_source.html @@ -162,7 +162,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
      73 } // namespace mp4
      74 } // namespace media
      75 } // namespace edash_packager
      - +
      uint32_t NumSamples(uint32_t start_chunk, uint32_t end_chunk) const
      ChunkInfoIterator(const SampleToChunk &sample_to_chunk)
      Create ChunkInfoIterator from sample to chunk box.
      @@ -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 51578c01d6..55d50e9a65 100644 --- a/docs/d6/d41/encrypting__fragmenter_8cc_source.html +++ b/docs/d6/d41/encrypting__fragmenter_8cc_source.html @@ -257,7 +257,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
      168 } // namespace mp4
      169 } // namespace media
      170 } // namespace edash_packager
      - + @@ -268,7 +268,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
      Status AddSample(scoped_refptr< MediaSample > sample) override
      void FinalizeFragment() override
      Finalize and optimize the fragment.
      - +
      virtual Status PrepareFragmentForEncryption(bool enable_encryption)
      EncryptingFragmenter(TrackFragment *traf, scoped_ptr< EncryptionKey > encryption_key, int64_t clear_time, uint8_t nalu_length_size)
      virtual void FinalizeFragmentForEncryption()
      Finalize current fragment for encryption.
      @@ -276,7 +276,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d48/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl-members.html b/docs/d6/d48/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl-members.html index 736405b6ca..ba56c7fc93 100644 --- a/docs/d6/d48/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl-members.html +++ b/docs/d6/d48/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d49/classedash__packager_1_1media_1_1AVCDecoderConfiguration.html b/docs/d6/d49/classedash__packager_1_1media_1_1AVCDecoderConfiguration.html new file mode 100644 index 0000000000..7650f6db28 --- /dev/null +++ b/docs/d6/d49/classedash__packager_1_1media_1_1AVCDecoderConfiguration.html @@ -0,0 +1,241 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::AVCDecoderConfiguration Class Reference + + + + + + + + + +
      +
      + + + + + + +
      +
      DASH Media Packaging SDK +
      +
      +
      + + + + + + + + + +
      + +
      + + +
      +
      + +
      +
      edash_packager::media::AVCDecoderConfiguration Class Reference
      +
      +
      + +

      Class for parsing AVC decoder configuration. + More...

      + +

      #include <avc_decoder_configuration.h>

      + + + + + + + + + + + + + + + + + + + + + + + + +

      +Public Member Functions

      bool Parse (const std::vector< uint8_t > &data)
       
      std::string GetCodecString () const
       
      +uint8_t version () const
       
      +uint8_t profile_indication () const
       
      +uint8_t profile_compatibility () const
       
      +uint8_t avc_level () const
       
      +uint8_t length_size () const
       
      +uint32_t coded_width () const
       
      +uint32_t coded_height () const
       
      +uint32_t pixel_width () const
       
      +uint32_t pixel_height () const
       
      + + + +

      +Static Public Member Functions

      static std::string GetCodecString (uint8_t profile_indication, uint8_t profile_compatibility, uint8_t avc_level)
       
      +

      Detailed Description

      +

      Class for parsing AVC decoder configuration.

      + +

      Definition at line 20 of file avc_decoder_configuration.h.

      +

      Member Function Documentation

      + +
      +
      + + + + + + + +
      std::string edash_packager::media::AVCDecoderConfiguration::GetCodecString () const
      +
      +
      Returns
      The codec string.
      + +

      Definition at line 61 of file avc_decoder_configuration.cc.

      + +
      +
      + +
      +
      + + + + + +
      + + + + + + + + + + + + + + + + + + + + + + + + +
      std::string edash_packager::media::AVCDecoderConfiguration::GetCodecString (uint8_t profile_indication,
      uint8_t profile_compatibility,
      uint8_t avc_level 
      )
      +
      +static
      +
      +

      Static version of GetCodecString.

      +
      Returns
      The codec string.
      + +

      Definition at line 66 of file avc_decoder_configuration.cc.

      + +
      +
      + +
      +
      + + + + + + + + +
      bool edash_packager::media::AVCDecoderConfiguration::Parse (const std::vector< uint8_t > & data)
      +
      +

      Parses input to extract AVC decoder configuration data.

      +
      Returns
      false if there is parsing errors.
      + +

      Definition at line 28 of file avc_decoder_configuration.cc.

      + +
      +
      +
      The documentation for this class was generated from the following files: +
      + + + + diff --git a/docs/d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html b/docs/d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html index 40fb6dde39..ce44e69d41 100644 --- a/docs/d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html +++ b/docs/d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html @@ -135,7 +135,7 @@ Additional Inherited Members

      Detailed Description

      -

      Definition at line 371 of file box_definitions.h.

      +

      Definition at line 361 of file box_definitions.h.

      Member Function Documentation

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

      Implements edash_packager::media::mp4::Box.

      -

      Definition at line 1269 of file box_definitions.cc.

      +

      Definition at line 1239 of file box_definitions.cc.

      @@ -172,7 +172,7 @@ Additional Inherited Members diff --git a/docs/d6/d5e/structedash__packager_1_1media_1_1H264SEIRecoveryPoint-members.html b/docs/d6/d5e/structedash__packager_1_1media_1_1H264SEIRecoveryPoint-members.html index 9ba1246937..819610efb6 100644 --- a/docs/d6/d5e/structedash__packager_1_1media_1_1H264SEIRecoveryPoint-members.html +++ b/docs/d6/d5e/structedash__packager_1_1media_1_1H264SEIRecoveryPoint-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html b/docs/d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html index 9d76604d0b..0c4a619b8c 100644 --- a/docs/d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html +++ b/docs/d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html @@ -143,7 +143,7 @@ Additional Inherited Members

      Detailed Description

      -

      Definition at line 358 of file box_definitions.h.

      +

      Definition at line 348 of file box_definitions.h.

      Member Function Documentation

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

      Implements edash_packager::media::mp4::Box.

      -

      Definition at line 1229 of file box_definitions.cc.

      +

      Definition at line 1199 of file box_definitions.cc.

      @@ -180,7 +180,7 @@ Additional Inherited Members diff --git a/docs/d6/d6e/ts__section__pes_8cc_source.html b/docs/d6/d6e/ts__section__pes_8cc_source.html index 07f5a266e3..06b646a4e1 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 d36cc5cb86..6f6cc2830c 100644 --- a/docs/d6/d71/scoped__xml__ptr_8h_source.html +++ b/docs/d6/d71/scoped__xml__ptr_8h_source.html @@ -136,7 +136,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 4c56c63d4d..8bc32d4e9c 100644 --- a/docs/d6/d77/dash__iop__mpd__notifier_8h_source.html +++ b/docs/d6/d77/dash__iop__mpd__notifier_8h_source.html @@ -217,7 +217,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html b/docs/d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html index ce841c6a7d..7e67103f2c 100644 --- a/docs/d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html +++ b/docs/d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html @@ -141,7 +141,7 @@ uint32_t flags

      Detailed Description

      -

      Definition at line 306 of file box_definitions.h.

      +

      Definition at line 296 of file box_definitions.h.

      Member Function Documentation

      @@ -167,7 +167,7 @@ uint32_t flagsReimplemented from edash_packager::media::mp4::ChunkLargeOffset.

      -

      Definition at line 652 of file box_definitions.cc.

      +

      Definition at line 654 of file box_definitions.cc.

      @@ -178,7 +178,7 @@ uint32_t flags diff --git a/docs/d6/d7b/webm__tracks__parser_8h_source.html b/docs/d6/d7b/webm__tracks__parser_8h_source.html index 2071330f8f..3927298852 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/d80/classedash__packager_1_1media_1_1Demuxer-members.html b/docs/d6/d80/classedash__packager_1_1media_1_1Demuxer-members.html index e1ca1048a7..e1cf6dc762 100644 --- a/docs/d6/d80/classedash__packager_1_1media_1_1Demuxer-members.html +++ b/docs/d6/d80/classedash__packager_1_1media_1_1Demuxer-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d81/classedash__packager_1_1media_1_1LibcryptoThreading-members.html b/docs/d6/d81/classedash__packager_1_1media_1_1LibcryptoThreading-members.html index 74a466618f..6b35d3dfaa 100644 --- a/docs/d6/d81/classedash__packager_1_1media_1_1LibcryptoThreading-members.html +++ b/docs/d6/d81/classedash__packager_1_1media_1_1LibcryptoThreading-members.html @@ -98,7 +98,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 0f5e414339..3241c8042f 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/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html b/docs/d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html index 6315bec87f..ead3d12dfd 100644 --- a/docs/d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html +++ b/docs/d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html @@ -138,7 +138,7 @@ Additional Inherited Members

      Detailed Description

      -

      Definition at line 419 of file box_definitions.h.

      +

      Definition at line 409 of file box_definitions.h.

      Member Function Documentation

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

      Implements edash_packager::media::mp4::Box.

      -

      Definition at line 1417 of file box_definitions.cc.

      +

      Definition at line 1387 of file box_definitions.cc.

      @@ -175,7 +175,7 @@ Additional Inherited Members diff --git a/docs/d6/d8f/structedash__packager_1_1media_1_1mp4_1_1FullBox.html b/docs/d6/d8f/structedash__packager_1_1media_1_1mp4_1_1FullBox.html index 2b87f1e754..b61d5dfc21 100644 --- a/docs/d6/d8f/structedash__packager_1_1media_1_1mp4_1_1FullBox.html +++ b/docs/d6/d8f/structedash__packager_1_1media_1_1mp4_1_1FullBox.html @@ -181,7 +181,7 @@ virtual FourCC BoxType diff --git a/docs/d6/d96/structedash__packager_1_1media_1_1mp4_1_1SampleDescription-members.html b/docs/d6/d96/structedash__packager_1_1media_1_1mp4_1_1SampleDescription-members.html index 78c439844d..573024b908 100644 --- a/docs/d6/d96/structedash__packager_1_1media_1_1mp4_1_1SampleDescription-members.html +++ b/docs/d6/d96/structedash__packager_1_1media_1_1mp4_1_1SampleDescription-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/d97/classedash__packager_1_1media_1_1UdpFile-members.html b/docs/d6/d97/classedash__packager_1_1media_1_1UdpFile-members.html index d92fdf625f..3671a3ac72 100644 --- a/docs/d6/d97/classedash__packager_1_1media_1_1UdpFile-members.html +++ b/docs/d6/d97/classedash__packager_1_1media_1_1UdpFile-members.html @@ -114,7 +114,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 580073afe3..a29edd063f 100644 --- a/docs/d6/d9b/h264__parser_8h_source.html +++ b/docs/d6/d9b/h264__parser_8h_source.html @@ -106,436 +106,417 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
      17 namespace edash_packager {
      18 namespace media {
      19 
      -
      20 // |avc_decoder_config_data| must be AVCDecoderConfigurationRecord specified
      -
      21 // in ISO/IEC 14496-15.
      -
      22 // On success, |coded_width| and |coded_height| contains coded resolution after
      -
      23 // cropping; |pixel_width:pixel_height| contains pixel aspect ratio, 1:1 is
      -
      24 // assigned if it is not present.
      -
      25 bool ExtractResolutionFromDecoderConfig(const uint8_t* avc_decoder_config_data,
      -
      26  size_t avc_decoder_config_data_size,
      -
      27  uint32_t* coded_width,
      -
      28  uint32_t* coded_height,
      -
      29  uint32_t* pixel_width,
      -
      30  uint32_t* pixel_height);
      -
      31 
      -
      32 // |sps_data| must be a valid SPS specified in ISO/IEC 14496-10.
      -
      33 // On success, |coded_width| and |coded_height| contains coded resolution after
      -
      34 // cropping; |pixel_width:pixel_height| contains pixel aspect ratio, 1:1 is
      -
      35 // assigned if it is not present in SPS.
      -
      36 bool ExtractResolutionFromSpsData(const uint8_t* sps_data,
      -
      37  size_t sps_data_size,
      -
      38  uint32_t* coded_width,
      -
      39  uint32_t* coded_height,
      -
      40  uint32_t* pixel_width,
      -
      41  uint32_t* pixel_height);
      -
      42 struct H264SPS;
      -
      43 bool ExtractResolutionFromSps(const H264SPS& sps,
      -
      44  uint32_t* coded_width,
      -
      45  uint32_t* coded_height,
      -
      46  uint32_t* pixel_width,
      -
      47  uint32_t* pixel_height);
      -
      48 
      -
      49 // For explanations of each struct and its members, see H.264 specification
      -
      50 // at http://www.itu.int/rec/T-REC-H.264.
      -
      51 struct H264NALU {
      -
      52  H264NALU();
      -
      53 
      -
      54  enum Type {
      -
      55  kUnspecified = 0,
      -
      56  kNonIDRSlice = 1,
      -
      57  kIDRSlice = 5,
      -
      58  kSEIMessage = 6,
      -
      59  kSPS = 7,
      -
      60  kPPS = 8,
      -
      61  kAUD = 9,
      -
      62  kEOSeq = 10,
      -
      63  kEOStream = 11,
      -
      64  kCodedSliceExtension = 20,
      -
      65  };
      -
      66 
      -
      67  // After (without) start code; we don't own the underlying memory
      -
      68  // and a shallow copy should be made when copying this struct.
      -
      69  const uint8_t* data;
      -
      70  off_t size; // From after start code to start code of next NALU (or EOS).
      -
      71 
      -
      72  int nal_ref_idc;
      -
      73  int nal_unit_type;
      -
      74 };
      -
      75 
      -
      76 enum {
      -
      77  kH264ScalingList4x4Length = 16,
      -
      78  kH264ScalingList8x8Length = 64,
      -
      79 };
      +
      20 // On success, |coded_width| and |coded_height| contains coded resolution after
      +
      21 // cropping; |pixel_width:pixel_height| contains pixel aspect ratio, 1:1 is
      +
      22 // assigned if it is not present in SPS.
      +
      23 struct H264SPS;
      +
      24 bool ExtractResolutionFromSps(const H264SPS& sps,
      +
      25  uint32_t* coded_width,
      +
      26  uint32_t* coded_height,
      +
      27  uint32_t* pixel_width,
      +
      28  uint32_t* pixel_height);
      +
      29 
      +
      30 // For explanations of each struct and its members, see H.264 specification
      +
      31 // at http://www.itu.int/rec/T-REC-H.264.
      +
      32 struct H264NALU {
      +
      33  H264NALU();
      +
      34 
      +
      35  enum Type {
      +
      36  kUnspecified = 0,
      +
      37  kNonIDRSlice = 1,
      +
      38  kIDRSlice = 5,
      +
      39  kSEIMessage = 6,
      +
      40  kSPS = 7,
      +
      41  kPPS = 8,
      +
      42  kAUD = 9,
      +
      43  kEOSeq = 10,
      +
      44  kEOStream = 11,
      +
      45  kCodedSliceExtension = 20,
      +
      46  };
      +
      47 
      +
      48  // After (without) start code; we don't own the underlying memory
      +
      49  // and a shallow copy should be made when copying this struct.
      +
      50  const uint8_t* data;
      +
      51  off_t size; // From after start code to start code of next NALU (or EOS).
      +
      52 
      +
      53  int nal_ref_idc;
      +
      54  int nal_unit_type;
      +
      55 };
      +
      56 
      +
      57 enum {
      +
      58  kH264ScalingList4x4Length = 16,
      +
      59  kH264ScalingList8x8Length = 64,
      +
      60 };
      +
      61 
      +
      62 struct H264SPS {
      +
      63  H264SPS();
      +
      64 
      +
      65  int profile_idc;
      +
      66  bool constraint_set0_flag;
      +
      67  bool constraint_set1_flag;
      +
      68  bool constraint_set2_flag;
      +
      69  bool constraint_set3_flag;
      +
      70  bool constraint_set4_flag;
      +
      71  bool constraint_set5_flag;
      +
      72  int level_idc;
      +
      73  int seq_parameter_set_id;
      +
      74 
      +
      75  int chroma_format_idc;
      +
      76  bool separate_colour_plane_flag;
      +
      77  int bit_depth_luma_minus8;
      +
      78  int bit_depth_chroma_minus8;
      +
      79  bool qpprime_y_zero_transform_bypass_flag;
      80 
      -
      81 struct H264SPS {
      -
      82  H264SPS();
      -
      83 
      -
      84  int profile_idc;
      -
      85  bool constraint_set0_flag;
      -
      86  bool constraint_set1_flag;
      -
      87  bool constraint_set2_flag;
      -
      88  bool constraint_set3_flag;
      -
      89  bool constraint_set4_flag;
      -
      90  bool constraint_set5_flag;
      -
      91  int level_idc;
      -
      92  int seq_parameter_set_id;
      -
      93 
      -
      94  int chroma_format_idc;
      -
      95  bool separate_colour_plane_flag;
      -
      96  int bit_depth_luma_minus8;
      -
      97  int bit_depth_chroma_minus8;
      -
      98  bool qpprime_y_zero_transform_bypass_flag;
      -
      99 
      -
      100  bool seq_scaling_matrix_present_flag;
      -
      101  int scaling_list4x4[6][kH264ScalingList4x4Length];
      -
      102  int scaling_list8x8[6][kH264ScalingList8x8Length];
      -
      103 
      -
      104  int log2_max_frame_num_minus4;
      -
      105  int pic_order_cnt_type;
      -
      106  int log2_max_pic_order_cnt_lsb_minus4;
      -
      107  bool delta_pic_order_always_zero_flag;
      -
      108  int offset_for_non_ref_pic;
      -
      109  int offset_for_top_to_bottom_field;
      -
      110  int num_ref_frames_in_pic_order_cnt_cycle;
      -
      111  int expected_delta_per_pic_order_cnt_cycle; // calculated
      -
      112  int offset_for_ref_frame[255];
      -
      113  int max_num_ref_frames;
      -
      114  bool gaps_in_frame_num_value_allowed_flag;
      -
      115  int pic_width_in_mbs_minus1;
      -
      116  int pic_height_in_map_units_minus1;
      -
      117  bool frame_mbs_only_flag;
      -
      118  bool mb_adaptive_frame_field_flag;
      -
      119  bool direct_8x8_inference_flag;
      -
      120  bool frame_cropping_flag;
      -
      121  int frame_crop_left_offset;
      -
      122  int frame_crop_right_offset;
      -
      123  int frame_crop_top_offset;
      -
      124  int frame_crop_bottom_offset;
      -
      125 
      -
      126  bool vui_parameters_present_flag;
      -
      127  int sar_width; // Set to 0 when not specified.
      -
      128  int sar_height; // Set to 0 when not specified.
      -
      129  bool bitstream_restriction_flag;
      -
      130  int max_num_reorder_frames;
      -
      131  int max_dec_frame_buffering;
      -
      132 
      -
      133  int chroma_array_type;
      -
      134 };
      -
      135 
      -
      136 struct H264PPS {
      -
      137  H264PPS();
      -
      138 
      -
      139  int pic_parameter_set_id;
      -
      140  int seq_parameter_set_id;
      -
      141  bool entropy_coding_mode_flag;
      -
      142  bool bottom_field_pic_order_in_frame_present_flag;
      -
      143  int num_slice_groups_minus1;
      -
      144  int num_ref_idx_l0_default_active_minus1;
      -
      145  int num_ref_idx_l1_default_active_minus1;
      -
      146  bool weighted_pred_flag;
      -
      147  int weighted_bipred_idc;
      -
      148  int pic_init_qp_minus26;
      -
      149  int pic_init_qs_minus26;
      -
      150  int chroma_qp_index_offset;
      -
      151  bool deblocking_filter_control_present_flag;
      -
      152  bool constrained_intra_pred_flag;
      -
      153  bool redundant_pic_cnt_present_flag;
      -
      154  bool transform_8x8_mode_flag;
      -
      155 
      -
      156  bool pic_scaling_matrix_present_flag;
      -
      157  int scaling_list4x4[6][kH264ScalingList4x4Length];
      -
      158  int scaling_list8x8[6][kH264ScalingList8x8Length];
      -
      159 
      -
      160  int second_chroma_qp_index_offset;
      -
      161 };
      -
      162 
      - -
      164  int modification_of_pic_nums_idc;
      -
      165  union {
      -
      166  int abs_diff_pic_num_minus1;
      -
      167  int long_term_pic_num;
      -
      168  };
      -
      169 };
      -
      170 
      - -
      172  bool luma_weight_flag;
      -
      173  bool chroma_weight_flag;
      -
      174  int luma_weight[32];
      -
      175  int luma_offset[32];
      -
      176  int chroma_weight[32][2];
      -
      177  int chroma_offset[32][2];
      -
      178 };
      -
      179 
      - -
      181  int memory_mgmnt_control_operation;
      -
      182  int difference_of_pic_nums_minus1;
      -
      183  int long_term_pic_num;
      -
      184  int long_term_frame_idx;
      -
      185  int max_long_term_frame_idx_plus1;
      -
      186 };
      -
      187 
      - -
      189  H264SliceHeader();
      +
      81  bool seq_scaling_matrix_present_flag;
      +
      82  int scaling_list4x4[6][kH264ScalingList4x4Length];
      +
      83  int scaling_list8x8[6][kH264ScalingList8x8Length];
      +
      84 
      +
      85  int log2_max_frame_num_minus4;
      +
      86  int pic_order_cnt_type;
      +
      87  int log2_max_pic_order_cnt_lsb_minus4;
      +
      88  bool delta_pic_order_always_zero_flag;
      +
      89  int offset_for_non_ref_pic;
      +
      90  int offset_for_top_to_bottom_field;
      +
      91  int num_ref_frames_in_pic_order_cnt_cycle;
      +
      92  int expected_delta_per_pic_order_cnt_cycle; // calculated
      +
      93  int offset_for_ref_frame[255];
      +
      94  int max_num_ref_frames;
      +
      95  bool gaps_in_frame_num_value_allowed_flag;
      +
      96  int pic_width_in_mbs_minus1;
      +
      97  int pic_height_in_map_units_minus1;
      +
      98  bool frame_mbs_only_flag;
      +
      99  bool mb_adaptive_frame_field_flag;
      +
      100  bool direct_8x8_inference_flag;
      +
      101  bool frame_cropping_flag;
      +
      102  int frame_crop_left_offset;
      +
      103  int frame_crop_right_offset;
      +
      104  int frame_crop_top_offset;
      +
      105  int frame_crop_bottom_offset;
      +
      106 
      +
      107  bool vui_parameters_present_flag;
      +
      108  int sar_width; // Set to 0 when not specified.
      +
      109  int sar_height; // Set to 0 when not specified.
      +
      110  bool bitstream_restriction_flag;
      +
      111  int max_num_reorder_frames;
      +
      112  int max_dec_frame_buffering;
      +
      113 
      +
      114  int chroma_array_type;
      +
      115 };
      +
      116 
      +
      117 struct H264PPS {
      +
      118  H264PPS();
      +
      119 
      +
      120  int pic_parameter_set_id;
      +
      121  int seq_parameter_set_id;
      +
      122  bool entropy_coding_mode_flag;
      +
      123  bool bottom_field_pic_order_in_frame_present_flag;
      +
      124  int num_slice_groups_minus1;
      +
      125  int num_ref_idx_l0_default_active_minus1;
      +
      126  int num_ref_idx_l1_default_active_minus1;
      +
      127  bool weighted_pred_flag;
      +
      128  int weighted_bipred_idc;
      +
      129  int pic_init_qp_minus26;
      +
      130  int pic_init_qs_minus26;
      +
      131  int chroma_qp_index_offset;
      +
      132  bool deblocking_filter_control_present_flag;
      +
      133  bool constrained_intra_pred_flag;
      +
      134  bool redundant_pic_cnt_present_flag;
      +
      135  bool transform_8x8_mode_flag;
      +
      136 
      +
      137  bool pic_scaling_matrix_present_flag;
      +
      138  int scaling_list4x4[6][kH264ScalingList4x4Length];
      +
      139  int scaling_list8x8[6][kH264ScalingList8x8Length];
      +
      140 
      +
      141  int second_chroma_qp_index_offset;
      +
      142 };
      +
      143 
      + +
      145  int modification_of_pic_nums_idc;
      +
      146  union {
      +
      147  int abs_diff_pic_num_minus1;
      +
      148  int long_term_pic_num;
      +
      149  };
      +
      150 };
      +
      151 
      + +
      153  bool luma_weight_flag;
      +
      154  bool chroma_weight_flag;
      +
      155  int luma_weight[32];
      +
      156  int luma_offset[32];
      +
      157  int chroma_weight[32][2];
      +
      158  int chroma_offset[32][2];
      +
      159 };
      +
      160 
      + +
      162  int memory_mgmnt_control_operation;
      +
      163  int difference_of_pic_nums_minus1;
      +
      164  int long_term_pic_num;
      +
      165  int long_term_frame_idx;
      +
      166  int max_long_term_frame_idx_plus1;
      +
      167 };
      +
      168 
      + +
      170  H264SliceHeader();
      +
      171 
      +
      172  enum {
      +
      173  kRefListSize = 32,
      +
      174  kRefListModSize = kRefListSize
      +
      175  };
      +
      176 
      +
      177  enum Type {
      +
      178  kPSlice = 0,
      +
      179  kBSlice = 1,
      +
      180  kISlice = 2,
      +
      181  kSPSlice = 3,
      +
      182  kSISlice = 4,
      +
      183  };
      +
      184 
      +
      185  bool IsPSlice() const;
      +
      186  bool IsBSlice() const;
      +
      187  bool IsISlice() const;
      +
      188  bool IsSPSlice() const;
      +
      189  bool IsSISlice() const;
      190 
      -
      191  enum {
      -
      192  kRefListSize = 32,
      -
      193  kRefListModSize = kRefListSize
      -
      194  };
      -
      195 
      -
      196  enum Type {
      -
      197  kPSlice = 0,
      -
      198  kBSlice = 1,
      -
      199  kISlice = 2,
      -
      200  kSPSlice = 3,
      -
      201  kSISlice = 4,
      -
      202  };
      -
      203 
      -
      204  bool IsPSlice() const;
      -
      205  bool IsBSlice() const;
      -
      206  bool IsISlice() const;
      -
      207  bool IsSPSlice() const;
      -
      208  bool IsSISlice() const;
      -
      209 
      -
      210  bool idr_pic_flag; // from NAL header
      -
      211  int nal_ref_idc; // from NAL header
      -
      212  const uint8_t* nalu_data; // from NAL header
      -
      213  off_t nalu_size; // from NAL header
      -
      214  off_t header_bit_size; // calculated
      -
      215 
      -
      216  int first_mb_in_slice;
      -
      217  int slice_type;
      -
      218  int pic_parameter_set_id;
      -
      219  int colour_plane_id;
      -
      220  int frame_num;
      -
      221  bool field_pic_flag;
      -
      222  bool bottom_field_flag;
      -
      223  int idr_pic_id;
      -
      224  int pic_order_cnt_lsb;
      -
      225  int delta_pic_order_cnt_bottom;
      -
      226  int delta_pic_order_cnt[2];
      -
      227  int redundant_pic_cnt;
      -
      228  bool direct_spatial_mv_pred_flag;
      +
      191  bool idr_pic_flag; // from NAL header
      +
      192  int nal_ref_idc; // from NAL header
      +
      193  const uint8_t* nalu_data; // from NAL header
      +
      194  off_t nalu_size; // from NAL header
      +
      195  off_t header_bit_size; // calculated
      +
      196 
      +
      197  int first_mb_in_slice;
      +
      198  int slice_type;
      +
      199  int pic_parameter_set_id;
      +
      200  int colour_plane_id;
      +
      201  int frame_num;
      +
      202  bool field_pic_flag;
      +
      203  bool bottom_field_flag;
      +
      204  int idr_pic_id;
      +
      205  int pic_order_cnt_lsb;
      +
      206  int delta_pic_order_cnt_bottom;
      +
      207  int delta_pic_order_cnt[2];
      +
      208  int redundant_pic_cnt;
      +
      209  bool direct_spatial_mv_pred_flag;
      +
      210 
      +
      211  bool num_ref_idx_active_override_flag;
      +
      212  int num_ref_idx_l0_active_minus1;
      +
      213  int num_ref_idx_l1_active_minus1;
      +
      214  bool ref_pic_list_modification_flag_l0;
      +
      215  bool ref_pic_list_modification_flag_l1;
      +
      216  H264ModificationOfPicNum ref_list_l0_modifications[kRefListModSize];
      +
      217  H264ModificationOfPicNum ref_list_l1_modifications[kRefListModSize];
      +
      218 
      +
      219  int luma_log2_weight_denom;
      +
      220  int chroma_log2_weight_denom;
      +
      221 
      +
      222  bool luma_weight_l0_flag;
      +
      223  bool chroma_weight_l0_flag;
      +
      224  H264WeightingFactors pred_weight_table_l0;
      +
      225 
      +
      226  bool luma_weight_l1_flag;
      +
      227  bool chroma_weight_l1_flag;
      +
      228  H264WeightingFactors pred_weight_table_l1;
      229 
      -
      230  bool num_ref_idx_active_override_flag;
      -
      231  int num_ref_idx_l0_active_minus1;
      -
      232  int num_ref_idx_l1_active_minus1;
      -
      233  bool ref_pic_list_modification_flag_l0;
      -
      234  bool ref_pic_list_modification_flag_l1;
      -
      235  H264ModificationOfPicNum ref_list_l0_modifications[kRefListModSize];
      -
      236  H264ModificationOfPicNum ref_list_l1_modifications[kRefListModSize];
      -
      237 
      -
      238  int luma_log2_weight_denom;
      -
      239  int chroma_log2_weight_denom;
      -
      240 
      -
      241  bool luma_weight_l0_flag;
      -
      242  bool chroma_weight_l0_flag;
      -
      243  H264WeightingFactors pred_weight_table_l0;
      +
      230  bool no_output_of_prior_pics_flag;
      +
      231  bool long_term_reference_flag;
      +
      232 
      +
      233  bool adaptive_ref_pic_marking_mode_flag;
      +
      234  H264DecRefPicMarking ref_pic_marking[kRefListSize];
      +
      235 
      +
      236  int cabac_init_idc;
      +
      237  int slice_qp_delta;
      +
      238  bool sp_for_switch_flag;
      +
      239  int slice_qs_delta;
      +
      240  int disable_deblocking_filter_idc;
      +
      241  int slice_alpha_c0_offset_div2;
      +
      242  int slice_beta_offset_div2;
      +
      243 };
      244 
      -
      245  bool luma_weight_l1_flag;
      -
      246  bool chroma_weight_l1_flag;
      -
      247  H264WeightingFactors pred_weight_table_l1;
      -
      248 
      -
      249  bool no_output_of_prior_pics_flag;
      -
      250  bool long_term_reference_flag;
      + +
      246  int recovery_frame_cnt;
      +
      247  bool exact_match_flag;
      +
      248  bool broken_link_flag;
      +
      249  int changing_slice_group_idc;
      +
      250 };
      251 
      -
      252  bool adaptive_ref_pic_marking_mode_flag;
      -
      253  H264DecRefPicMarking ref_pic_marking[kRefListSize];
      + +
      253  H264SEIMessage();
      254 
      -
      255  int cabac_init_idc;
      -
      256  int slice_qp_delta;
      -
      257  bool sp_for_switch_flag;
      -
      258  int slice_qs_delta;
      -
      259  int disable_deblocking_filter_idc;
      -
      260  int slice_alpha_c0_offset_div2;
      -
      261  int slice_beta_offset_div2;
      -
      262 };
      -
      263 
      - -
      265  int recovery_frame_cnt;
      -
      266  bool exact_match_flag;
      -
      267  bool broken_link_flag;
      -
      268  int changing_slice_group_idc;
      -
      269 };
      -
      270 
      - -
      272  H264SEIMessage();
      -
      273 
      -
      274  enum Type {
      -
      275  kSEIRecoveryPoint = 6,
      -
      276  };
      -
      277 
      -
      278  int type;
      -
      279  int payload_size;
      -
      280  union {
      -
      281  // Placeholder; in future more supported types will contribute to more
      -
      282  // union members here.
      -
      283  H264SEIRecoveryPoint recovery_point;
      -
      284  };
      -
      285 };
      -
      286 
      -
      287 // Class to parse an Annex-B H.264 stream,
      -
      288 // as specified in chapters 7 and Annex B of the H.264 spec.
      -
      289 class H264Parser {
      -
      290  public:
      -
      291  enum Result {
      -
      292  kOk,
      -
      293  kInvalidStream, // error in stream
      -
      294  kUnsupportedStream, // stream not supported by the parser
      -
      295  kEOStream, // end of stream
      -
      296  };
      +
      255  enum Type {
      +
      256  kSEIRecoveryPoint = 6,
      +
      257  };
      +
      258 
      +
      259  int type;
      +
      260  int payload_size;
      +
      261  union {
      +
      262  // Placeholder; in future more supported types will contribute to more
      +
      263  // union members here.
      +
      264  H264SEIRecoveryPoint recovery_point;
      +
      265  };
      +
      266 };
      +
      267 
      +
      268 // Class to parse an Annex-B H.264 stream,
      +
      269 // as specified in chapters 7 and Annex B of the H.264 spec.
      +
      270 class H264Parser {
      +
      271  public:
      +
      272  enum Result {
      +
      273  kOk,
      +
      274  kInvalidStream, // error in stream
      +
      275  kUnsupportedStream, // stream not supported by the parser
      +
      276  kEOStream, // end of stream
      +
      277  };
      +
      278 
      +
      279  // Find offset from start of data to next NALU start code
      +
      280  // and size of found start code (3 or 4 bytes).
      +
      281  // If no start code is found, offset is pointing to the first unprocessed byte
      +
      282  // (i.e. the first byte that was not considered as a possible start of a start
      +
      283  // code) and |*start_code_size| is set to 0.
      +
      284  // Preconditions:
      +
      285  // - |data_size| >= 0
      +
      286  // Postconditions:
      +
      287  // - |*offset| is between 0 and |data_size| included.
      +
      288  // It is strictly less than |data_size| if |data_size| > 0.
      +
      289  // - |*start_code_size| is either 0, 3 or 4.
      +
      290  static bool FindStartCode(const uint8_t* data,
      +
      291  off_t data_size,
      +
      292  off_t* offset,
      +
      293  off_t* start_code_size);
      +
      294 
      +
      295  H264Parser();
      +
      296  ~H264Parser();
      297 
      -
      298  // Find offset from start of data to next NALU start code
      -
      299  // and size of found start code (3 or 4 bytes).
      -
      300  // If no start code is found, offset is pointing to the first unprocessed byte
      -
      301  // (i.e. the first byte that was not considered as a possible start of a start
      -
      302  // code) and |*start_code_size| is set to 0.
      -
      303  // Preconditions:
      -
      304  // - |data_size| >= 0
      -
      305  // Postconditions:
      -
      306  // - |*offset| is between 0 and |data_size| included.
      -
      307  // It is strictly less than |data_size| if |data_size| > 0.
      -
      308  // - |*start_code_size| is either 0, 3 or 4.
      -
      309  static bool FindStartCode(const uint8_t* data,
      -
      310  off_t data_size,
      -
      311  off_t* offset,
      -
      312  off_t* start_code_size);
      +
      298  void Reset();
      +
      299  // Set current stream pointer to |stream| of |stream_size| in bytes,
      +
      300  // |stream| owned by caller.
      +
      301  void SetStream(const uint8_t* stream, off_t stream_size);
      +
      302 
      +
      303  // Read the stream to find the next NALU, identify it and return
      +
      304  // that information in |*nalu|. This advances the stream to the beginning
      +
      305  // of this NALU, but not past it, so subsequent calls to NALU-specific
      +
      306  // parsing functions (ParseSPS, etc.) will parse this NALU.
      +
      307  // If the caller wishes to skip the current NALU, it can call this function
      +
      308  // again, instead of any NALU-type specific parse functions below.
      +
      309  Result AdvanceToNextNALU(H264NALU* nalu);
      +
      310 
      +
      311  // NALU-specific parsing functions.
      +
      312  // These should be called after AdvanceToNextNALU().
      313 
      -
      314  H264Parser();
      -
      315  ~H264Parser();
      -
      316 
      -
      317  void Reset();
      -
      318  // Set current stream pointer to |stream| of |stream_size| in bytes,
      -
      319  // |stream| owned by caller.
      -
      320  void SetStream(const uint8_t* stream, off_t stream_size);
      -
      321 
      -
      322  // Read the stream to find the next NALU, identify it and return
      -
      323  // that information in |*nalu|. This advances the stream to the beginning
      -
      324  // of this NALU, but not past it, so subsequent calls to NALU-specific
      -
      325  // parsing functions (ParseSPS, etc.) will parse this NALU.
      -
      326  // If the caller wishes to skip the current NALU, it can call this function
      -
      327  // again, instead of any NALU-type specific parse functions below.
      -
      328  Result AdvanceToNextNALU(H264NALU* nalu);
      -
      329 
      -
      330  // NALU-specific parsing functions.
      -
      331  // These should be called after AdvanceToNextNALU().
      -
      332 
      -
      333  // SPSes and PPSes are owned by the parser class and the memory for their
      -
      334  // structures is managed here, not by the caller, as they are reused
      -
      335  // across NALUs.
      -
      336  //
      -
      337  // Parse an SPS/PPS NALU and save their data in the parser, returning id
      -
      338  // of the parsed structure in |*pps_id|/|*sps_id|.
      -
      339  // To get a pointer to a given SPS/PPS structure, use GetSPS()/GetPPS(),
      -
      340  // passing the returned |*sps_id|/|*pps_id| as parameter.
      -
      341  // methods with a scoped_ptr and adding an AtEOS() function to check for EOS
      -
      342  // if Parse*() return NULL.
      -
      343  Result ParseSPS(int* sps_id);
      -
      344  Result ParsePPS(int* pps_id);
      +
      314  // SPSes and PPSes are owned by the parser class and the memory for their
      +
      315  // structures is managed here, not by the caller, as they are reused
      +
      316  // across NALUs.
      +
      317  //
      +
      318  // Parse an SPS/PPS NALU and save their data in the parser, returning id
      +
      319  // of the parsed structure in |*pps_id|/|*sps_id|.
      +
      320  // To get a pointer to a given SPS/PPS structure, use GetSPS()/GetPPS(),
      +
      321  // passing the returned |*sps_id|/|*pps_id| as parameter.
      +
      322  // methods with a scoped_ptr and adding an AtEOS() function to check for EOS
      +
      323  // if Parse*() return NULL.
      +
      324  Result ParseSPS(int* sps_id);
      +
      325  Result ParsePPS(int* pps_id);
      +
      326 
      +
      327  // Samme as ParseSPS but instead uses |sps_data|.
      +
      328  Result ParseSPSFromArray(const uint8_t* sps_data,
      +
      329  size_t sps_data_size,
      +
      330  int* sps_id);
      +
      331 
      +
      332  // Return a pointer to SPS/PPS with given |sps_id|/|pps_id| or NULL if not
      +
      333  // present.
      +
      334  const H264SPS* GetSPS(int sps_id);
      +
      335  const H264PPS* GetPPS(int pps_id);
      +
      336 
      +
      337  // Slice headers and SEI messages are not used across NALUs by the parser
      +
      338  // and can be discarded after current NALU, so the parser does not store
      +
      339  // them, nor does it manage their memory.
      +
      340  // The caller has to provide and manage it instead.
      +
      341 
      +
      342  // Parse a slice header, returning it in |*shdr|. |*nalu| must be set to
      +
      343  // the NALU returned from AdvanceToNextNALU() and corresponding to |*shdr|.
      +
      344  Result ParseSliceHeader(const H264NALU& nalu, H264SliceHeader* shdr);
      345 
      -
      346  // Samme as ParseSPS but instead uses |sps_data|.
      -
      347  Result ParseSPSFromArray(const uint8_t* sps_data,
      -
      348  size_t sps_data_size,
      -
      349  int* sps_id);
      -
      350 
      -
      351  // Return a pointer to SPS/PPS with given |sps_id|/|pps_id| or NULL if not
      -
      352  // present.
      -
      353  const H264SPS* GetSPS(int sps_id);
      -
      354  const H264PPS* GetPPS(int pps_id);
      -
      355 
      -
      356  // Slice headers and SEI messages are not used across NALUs by the parser
      -
      357  // and can be discarded after current NALU, so the parser does not store
      -
      358  // them, nor does it manage their memory.
      -
      359  // The caller has to provide and manage it instead.
      -
      360 
      -
      361  // Parse a slice header, returning it in |*shdr|. |*nalu| must be set to
      -
      362  // the NALU returned from AdvanceToNextNALU() and corresponding to |*shdr|.
      -
      363  Result ParseSliceHeader(const H264NALU& nalu, H264SliceHeader* shdr);
      -
      364 
      -
      365  // Parse a SEI message, returning it in |*sei_msg|, provided and managed
      -
      366  // by the caller.
      -
      367  Result ParseSEI(H264SEIMessage* sei_msg);
      -
      368 
      -
      369  private:
      -
      370  // Move the stream pointer to the beginning of the next NALU,
      -
      371  // i.e. pointing at the next start code.
      -
      372  // Return true if a NALU has been found.
      -
      373  // If a NALU is found:
      -
      374  // - its size in bytes is returned in |*nalu_size| and includes
      -
      375  // the start code as well as the trailing zero bits.
      -
      376  // - the size in bytes of the start code is returned in |*start_code_size|.
      -
      377  bool LocateNALU(off_t* nalu_size, off_t* start_code_size);
      -
      378 
      -
      379  // Exp-Golomb code parsing as specified in chapter 9.1 of the spec.
      -
      380  // Read one unsigned exp-Golomb code from the stream and return in |*val|.
      -
      381  Result ReadUE(int* val);
      -
      382 
      -
      383  // Read one signed exp-Golomb code from the stream and return in |*val|.
      -
      384  Result ReadSE(int* val);
      -
      385 
      -
      386  // Parse scaling lists (see spec).
      -
      387  Result ParseScalingList(int size, int* scaling_list, bool* use_default);
      -
      388  Result ParseSPSScalingLists(H264SPS* sps);
      -
      389  Result ParsePPSScalingLists(const H264SPS& sps, H264PPS* pps);
      -
      390 
      -
      391  // Parse optional VUI parameters in SPS (see spec).
      -
      392  Result ParseVUIParameters(H264SPS* sps);
      -
      393  // Set |hrd_parameters_present| to true only if they are present.
      -
      394  Result ParseAndIgnoreHRDParameters(bool* hrd_parameters_present);
      -
      395 
      -
      396  // Parse reference picture lists' modifications (see spec).
      -
      397  Result ParseRefPicListModifications(H264SliceHeader* shdr);
      -
      398  Result ParseRefPicListModification(int num_ref_idx_active_minus1,
      -
      399  H264ModificationOfPicNum* ref_list_mods);
      +
      346  // Parse a SEI message, returning it in |*sei_msg|, provided and managed
      +
      347  // by the caller.
      +
      348  Result ParseSEI(H264SEIMessage* sei_msg);
      +
      349 
      +
      350  private:
      +
      351  // Move the stream pointer to the beginning of the next NALU,
      +
      352  // i.e. pointing at the next start code.
      +
      353  // Return true if a NALU has been found.
      +
      354  // If a NALU is found:
      +
      355  // - its size in bytes is returned in |*nalu_size| and includes
      +
      356  // the start code as well as the trailing zero bits.
      +
      357  // - the size in bytes of the start code is returned in |*start_code_size|.
      +
      358  bool LocateNALU(off_t* nalu_size, off_t* start_code_size);
      +
      359 
      +
      360  // Exp-Golomb code parsing as specified in chapter 9.1 of the spec.
      +
      361  // Read one unsigned exp-Golomb code from the stream and return in |*val|.
      +
      362  Result ReadUE(int* val);
      +
      363 
      +
      364  // Read one signed exp-Golomb code from the stream and return in |*val|.
      +
      365  Result ReadSE(int* val);
      +
      366 
      +
      367  // Parse scaling lists (see spec).
      +
      368  Result ParseScalingList(int size, int* scaling_list, bool* use_default);
      +
      369  Result ParseSPSScalingLists(H264SPS* sps);
      +
      370  Result ParsePPSScalingLists(const H264SPS& sps, H264PPS* pps);
      +
      371 
      +
      372  // Parse optional VUI parameters in SPS (see spec).
      +
      373  Result ParseVUIParameters(H264SPS* sps);
      +
      374  // Set |hrd_parameters_present| to true only if they are present.
      +
      375  Result ParseAndIgnoreHRDParameters(bool* hrd_parameters_present);
      +
      376 
      +
      377  // Parse reference picture lists' modifications (see spec).
      +
      378  Result ParseRefPicListModifications(H264SliceHeader* shdr);
      +
      379  Result ParseRefPicListModification(int num_ref_idx_active_minus1,
      +
      380  H264ModificationOfPicNum* ref_list_mods);
      +
      381 
      +
      382  // Parse prediction weight table (see spec).
      +
      383  Result ParsePredWeightTable(const H264SPS& sps, H264SliceHeader* shdr);
      +
      384 
      +
      385  // Parse weighting factors (see spec).
      +
      386  Result ParseWeightingFactors(int num_ref_idx_active_minus1,
      +
      387  int chroma_array_type,
      +
      388  int luma_log2_weight_denom,
      +
      389  int chroma_log2_weight_denom,
      +
      390  H264WeightingFactors* w_facts);
      +
      391 
      +
      392  // Parse decoded reference picture marking information (see spec).
      +
      393  Result ParseDecRefPicMarking(H264SliceHeader* shdr);
      +
      394 
      +
      395  // Pointer to the current NALU in the stream.
      +
      396  const uint8_t* stream_;
      +
      397 
      +
      398  // Bytes left in the stream after the current NALU.
      +
      399  off_t bytes_left_;
      400 
      -
      401  // Parse prediction weight table (see spec).
      -
      402  Result ParsePredWeightTable(const H264SPS& sps, H264SliceHeader* shdr);
      -
      403 
      -
      404  // Parse weighting factors (see spec).
      -
      405  Result ParseWeightingFactors(int num_ref_idx_active_minus1,
      -
      406  int chroma_array_type,
      -
      407  int luma_log2_weight_denom,
      -
      408  int chroma_log2_weight_denom,
      -
      409  H264WeightingFactors* w_facts);
      -
      410 
      -
      411  // Parse decoded reference picture marking information (see spec).
      -
      412  Result ParseDecRefPicMarking(H264SliceHeader* shdr);
      -
      413 
      -
      414  // Pointer to the current NALU in the stream.
      -
      415  const uint8_t* stream_;
      -
      416 
      -
      417  // Bytes left in the stream after the current NALU.
      -
      418  off_t bytes_left_;
      -
      419 
      -
      420  H264BitReader br_;
      -
      421 
      -
      422  // PPSes and SPSes stored for future reference.
      -
      423  typedef std::map<int, H264SPS*> SPSById;
      -
      424  typedef std::map<int, H264PPS*> PPSById;
      -
      425  SPSById active_SPSes_;
      -
      426  PPSById active_PPSes_;
      -
      427 
      -
      428  DISALLOW_COPY_AND_ASSIGN(H264Parser);
      -
      429 };
      -
      430 
      -
      431 } // namespace media
      -
      432 } // namespace edash_packager
      -
      433 
      -
      434 #endif // MEDIA_FILTERS_H264_PARSER_H_
      +
      401  H264BitReader br_;
      +
      402 
      +
      403  // PPSes and SPSes stored for future reference.
      +
      404  typedef std::map<int, H264SPS*> SPSById;
      +
      405  typedef std::map<int, H264PPS*> PPSById;
      +
      406  SPSById active_SPSes_;
      +
      407  PPSById active_PPSes_;
      +
      408 
      +
      409  DISALLOW_COPY_AND_ASSIGN(H264Parser);
      +
      410 };
      +
      411 
      +
      412 } // namespace media
      +
      413 } // namespace edash_packager
      +
      414 
      +
      415 #endif // MEDIA_FILTERS_H264_PARSER_H_
      - - - - - - - - - - + + + + + + + + + + diff --git a/docs/d6/d9c/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes-members.html b/docs/d6/d9c/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes-members.html index 05effb45e6..8672b5dfd7 100644 --- a/docs/d6/d9c/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes-members.html +++ b/docs/d6/d9c/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes-members.html @@ -108,7 +108,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 4c3b1dfc3e..8e48abe678 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/da2/classedash__packager_1_1media_1_1AesCbcCtsEncryptor.html b/docs/d6/da2/classedash__packager_1_1media_1_1AesCbcCtsEncryptor.html index e483af0aac..0c24412321 100644 --- a/docs/d6/da2/classedash__packager_1_1media_1_1AesCbcCtsEncryptor.html +++ b/docs/d6/da2/classedash__packager_1_1media_1_1AesCbcCtsEncryptor.html @@ -258,7 +258,7 @@ const std::vector< uint8_t > &  diff --git a/docs/d6/da3/classedash__packager_1_1media_1_1H264Parser.html b/docs/d6/da3/classedash__packager_1_1media_1_1H264Parser.html index 859262ae72..c3349ff08a 100644 --- a/docs/d6/da3/classedash__packager_1_1media_1_1H264Parser.html +++ b/docs/d6/da3/classedash__packager_1_1media_1_1H264Parser.html @@ -146,7 +146,7 @@ static bool FindStartCode<

      Detailed Description

      -

      Definition at line 289 of file h264_parser.h.

      +

      Definition at line 270 of file h264_parser.h.


      The documentation for this class was generated from the following files:
      • media/filters/h264_parser.h
      • media/filters/h264_parser.cc
      • @@ -154,7 +154,7 @@ static bool FindStartCode< diff --git a/docs/d6/da3/mpd__builder_8h_source.html b/docs/d6/da3/mpd__builder_8h_source.html index b918176ec5..c6b3b69765 100644 --- a/docs/d6/da3/mpd__builder_8h_source.html +++ b/docs/d6/da3/mpd__builder_8h_source.html @@ -537,7 +537,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/da8/classedash__packager_1_1media_1_1WebMWebVTTParser-members.html b/docs/d6/da8/classedash__packager_1_1media_1_1WebMWebVTTParser-members.html index 13aefa21e8..1a631c905c 100644 --- a/docs/d6/da8/classedash__packager_1_1media_1_1WebMWebVTTParser-members.html +++ b/docs/d6/da8/classedash__packager_1_1media_1_1WebMWebVTTParser-members.html @@ -97,7 +97,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dba/classedash__packager_1_1media_1_1ThreadedIoFile-members.html b/docs/d6/dba/classedash__packager_1_1media_1_1ThreadedIoFile-members.html index a3beb48df6..b9e6ce1628 100644 --- a/docs/d6/dba/classedash__packager_1_1media_1_1ThreadedIoFile-members.html +++ b/docs/d6/dba/classedash__packager_1_1media_1_1ThreadedIoFile-members.html @@ -119,7 +119,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dbb/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset-members.html b/docs/d6/dbb/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset-members.html index 061125f83b..4f12139b0f 100644 --- a/docs/d6/dbb/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset-members.html +++ b/docs/d6/dbb/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dc2/classedash__packager_1_1media_1_1TextTrackConfig-members.html b/docs/d6/dc2/classedash__packager_1_1media_1_1TextTrackConfig-members.html index ec96349a43..494f84f22c 100644 --- a/docs/d6/dc2/classedash__packager_1_1media_1_1TextTrackConfig-members.html +++ b/docs/d6/dc2/classedash__packager_1_1media_1_1TextTrackConfig-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/dc4/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor.html b/docs/d6/dc4/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor.html index bfcfb165ad..478e9a10c2 100644 --- a/docs/d6/dc4/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor.html +++ b/docs/d6/dc4/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor.html @@ -208,7 +208,7 @@ const std::vector< uint8_t > &  diff --git a/docs/d6/dd6/classedash__packager_1_1media_1_1WebMListParser.html b/docs/d6/dd6/classedash__packager_1_1media_1_1WebMListParser.html index 08fd758e05..eba7da16ab 100644 --- a/docs/d6/dd6/classedash__packager_1_1media_1_1WebMListParser.html +++ b/docs/d6/dd6/classedash__packager_1_1media_1_1WebMListParser.html @@ -210,7 +210,7 @@ void  diff --git a/docs/d6/de6/classedash__packager_1_1media_1_1KeyFetcher-members.html b/docs/d6/de6/classedash__packager_1_1media_1_1KeyFetcher-members.html index ea7ae6e7f7..6d9d691b52 100644 --- a/docs/d6/de6/classedash__packager_1_1media_1_1KeyFetcher-members.html +++ b/docs/d6/de6/classedash__packager_1_1media_1_1KeyFetcher-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d6/de7/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor-members.html b/docs/d6/de7/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor-members.html index 91de437145..8fb2bfe209 100644 --- a/docs/d6/de7/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor-members.html +++ b/docs/d6/de7/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor-members.html @@ -102,7 +102,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 a5ef48ad2f..9f07a5dae9 100644 --- a/docs/d6/de8/local__file_8cc_source.html +++ b/docs/d6/de8/local__file_8cc_source.html @@ -191,7 +191,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 8dea2642b8..b07bc1581f 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/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html b/docs/d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html index 01e094ceb8..b4601e2972 100644 --- a/docs/d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html +++ b/docs/d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html @@ -145,7 +145,7 @@ Additional Inherited Members

        Detailed Description

        -

        Definition at line 426 of file box_definitions.h.

        +

        Definition at line 416 of file box_definitions.h.

        Member Function Documentation

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

        Implements edash_packager::media::mp4::Box.

        -

        Definition at line 1451 of file box_definitions.cc.

        +

        Definition at line 1421 of file box_definitions.cc.

        @@ -182,7 +182,7 @@ Additional Inherited Members diff --git a/docs/d6/ded/ts__packet_8h_source.html b/docs/d6/ded/ts__packet_8h_source.html index c38f07be76..34301dd46c 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 3318b7daf4..6dff96d034 100644 --- a/docs/d6/def/sync__sample__iterator_8cc_source.html +++ b/docs/d6/def/sync__sample__iterator_8cc_source.html @@ -134,13 +134,13 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
        45 } // namespace media
        46 } // namespace edash_packager
        SyncSampleIterator(const SyncSample &sync_sample)
        Create a new SyncSampleIterator from sync sample box.
        - + diff --git a/docs/d6/df9/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser-members.html b/docs/d6/df9/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser-members.html index ab7c699c9d..d4b0aa9ab9 100644 --- a/docs/d6/df9/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser-members.html +++ b/docs/d6/df9/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); 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 f41c3613b0..b6ae7db14a 100644 --- a/docs/d7/d0b/muxer__listener__test__helper_8h_source.html +++ b/docs/d7/d0b/muxer__listener__test__helper_8h_source.html @@ -196,7 +196,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html b/docs/d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html index da7696593a..9be3b400e6 100644 --- a/docs/d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html +++ b/docs/d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html @@ -143,7 +143,7 @@ Additional Inherited Members

        Detailed Description

        -

        Definition at line 364 of file box_definitions.h.

        +

        Definition at line 354 of file box_definitions.h.

        Member Function Documentation

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

        Implements edash_packager::media::mp4::Box.

        -

        Definition at line 1251 of file box_definitions.cc.

        +

        Definition at line 1221 of file box_definitions.cc.

        @@ -180,7 +180,7 @@ Additional Inherited Members diff --git a/docs/d7/d12/media__parser_8h_source.html b/docs/d7/d12/media__parser_8h_source.html index 034c861963..6a394f9cc9 100644 --- a/docs/d7/d12/media__parser_8h_source.html +++ b/docs/d7/d12/media__parser_8h_source.html @@ -149,7 +149,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d15/classedash__packager_1_1Representation.html b/docs/d7/d15/classedash__packager_1_1Representation.html index 8248efaeda..69145bc0af 100644 --- a/docs/d7/d15/classedash__packager_1_1Representation.html +++ b/docs/d7/d15/classedash__packager_1_1Representation.html @@ -422,7 +422,7 @@ class AdaptationSet diff --git a/docs/d7/d15/mpd__notifier_8h_source.html b/docs/d7/d15/mpd__notifier_8h_source.html index 7d0b38af20..72d3cbcc05 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/d1c/structedash__packager_1_1media_1_1mp4_1_1DecodingTime.html b/docs/d7/d1c/structedash__packager_1_1media_1_1mp4_1_1DecodingTime.html index 750b1f6099..ecac569926 100644 --- a/docs/d7/d1c/structedash__packager_1_1media_1_1mp4_1_1DecodingTime.html +++ b/docs/d7/d1c/structedash__packager_1_1media_1_1mp4_1_1DecodingTime.html @@ -105,14 +105,14 @@ uint32_t sample_delta<

        Detailed Description

        -

        Definition at line 241 of file box_definitions.h.

        +

        Definition at line 231 of file box_definitions.h.


        The documentation for this struct was generated from the following file: diff --git a/docs/d7/d22/libcrypto__threading_8h_source.html b/docs/d7/d22/libcrypto__threading_8h_source.html index c79288c086..ff7ab3f1e6 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/d2a/classedash__packager_1_1media_1_1DecryptorSource-members.html b/docs/d7/d2a/classedash__packager_1_1media_1_1DecryptorSource-members.html index 6178dc56da..55fc40deb0 100644 --- a/docs/d7/d2a/classedash__packager_1_1media_1_1DecryptorSource-members.html +++ b/docs/d7/d2a/classedash__packager_1_1media_1_1DecryptorSource-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d39/structedash__packager_1_1media_1_1mp4_1_1Movie-members.html b/docs/d7/d39/structedash__packager_1_1media_1_1mp4_1_1Movie-members.html index e75e37d883..7069ca9244 100644 --- a/docs/d7/d39/structedash__packager_1_1media_1_1mp4_1_1Movie-members.html +++ b/docs/d7/d39/structedash__packager_1_1media_1_1mp4_1_1Movie-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html b/docs/d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html index 688ef3151e..6d9b3f2c0c 100644 --- a/docs/d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html +++ b/docs/d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html @@ -88,7 +88,6 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
        edash_packager::media::VideoStreamInfo Class Reference
        @@ -189,11 +188,6 @@ void set_codec_string void set_language (const std::string &language)   - - - -

        -Static Public Member Functions

        static std::string GetCodecString (VideoCodec codec, uint8_t profile, uint8_t compatible_profiles, uint8_t level)
         

        Detailed Description

        Holds video stream information.

        @@ -301,7 +295,7 @@ Static Public Member Functions
        -

        Construct an initialized video stream info object. If codec is kCodecH264 and either and is 0 (unknown), then this tries to parse to extract the pixel width and height from it.

        +

        Construct an initialized video stream info object.

        Parameters
        @@ -315,61 +309,6 @@ Static Public Member Functions

        Member Function Documentation

        - -
        -
        -
        pixel_widthis the width of the pixel. 0 if unknown.
        - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        std::string edash_packager::media::VideoStreamInfo::GetCodecString (VideoCodec codec,
        uint8_t profile,
        uint8_t compatible_profiles,
        uint8_t level 
        )
        -
        -static
        -
        -
        Parameters
        - - -
        profile,compatible_profiles,levelare only used by H.264 codec.
        -
        -
        -
        Returns
        The codec string.
        - -

        Definition at line 95 of file video_stream_info.cc.

        - -
        -
        @@ -421,7 +360,7 @@ Static Public Member Functions

        Returns the pixel height.

        Returns
        0 if unknown.
        -

        Definition at line 66 of file video_stream_info.h.

        +

        Definition at line 63 of file video_stream_info.h.

        @@ -448,7 +387,7 @@ Static Public Member Functions

        Returns the pixel width.

        Returns
        0 if unknown.
        -

        Definition at line 63 of file video_stream_info.h.

        +

        Definition at line 60 of file video_stream_info.h.

        @@ -487,7 +426,7 @@ Static Public Member Functions diff --git a/docs/d7/d40/classedash__packager_1_1media_1_1WebMClusterParser-members.html b/docs/d7/d40/classedash__packager_1_1media_1_1WebMClusterParser-members.html index 14b3af7c20..ae58c89712 100644 --- a/docs/d7/d40/classedash__packager_1_1media_1_1WebMClusterParser-members.html +++ b/docs/d7/d40/classedash__packager_1_1media_1_1WebMClusterParser-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d44/classedash__packager_1_1MockMpdNotifier.html b/docs/d7/d44/classedash__packager_1_1MockMpdNotifier.html index 336c2f4682..bfa1e2d86f 100644 --- a/docs/d7/d44/classedash__packager_1_1MockMpdNotifier.html +++ b/docs/d7/d44/classedash__packager_1_1MockMpdNotifier.html @@ -160,7 +160,7 @@ Public Member Functions diff --git a/docs/d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html b/docs/d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html index 870d261975..b01869ef31 100644 --- a/docs/d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html +++ b/docs/d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html @@ -135,7 +135,7 @@ Additional Inherited Members

        Detailed Description

        -

        Definition at line 156 of file box_definitions.h.

        +

        Definition at line 155 of file box_definitions.h.

        Member Function Documentation

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

        Implements edash_packager::media::mp4::Box.

        -

        Definition at line 821 of file box_definitions.cc.

        +

        Definition at line 823 of file box_definitions.cc.

        @@ -172,7 +172,7 @@ Additional Inherited Members diff --git a/docs/d7/d50/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter-members.html b/docs/d7/d50/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter-members.html index 766d495b6e..7b6877ae66 100644 --- a/docs/d7/d50/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter-members.html +++ b/docs/d7/d50/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter-members.html @@ -119,7 +119,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d51/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord-members.html b/docs/d7/d51/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord-members.html deleted file mode 100644 index d02047dbab..0000000000 --- a/docs/d7/d51/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord-members.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - -DASH Media Packaging SDK: Member List - - - - - - - - - -
        -
        - - - - - - -
        -
        DASH Media Packaging SDK -
        -
        -
        - - - - - - - - - -
        - -
        - - -
        -
        -
        -
        edash_packager::media::mp4::AVCDecoderConfigurationRecord Member List
        -
        -
        - -

        This is the complete list of members for edash_packager::media::mp4::AVCDecoderConfigurationRecord, including all inherited members.

        - - - - - - - - - - - - - - - - - - - - - - -
        atom_sizeedash_packager::media::mp4::Boxprotected
        avc_level (defined in edash_packager::media::mp4::AVCDecoderConfigurationRecord)edash_packager::media::mp4::AVCDecoderConfigurationRecord
        AVCDecoderConfigurationRecord() (defined in edash_packager::media::mp4::AVCDecoderConfigurationRecord)edash_packager::media::mp4::AVCDecoderConfigurationRecord
        Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
        BoxType() const override (defined in edash_packager::media::mp4::AVCDecoderConfigurationRecord)edash_packager::media::mp4::AVCDecoderConfigurationRecordvirtual
        ComputeSize() overrideedash_packager::media::mp4::AVCDecoderConfigurationRecordvirtual
        data (defined in edash_packager::media::mp4::AVCDecoderConfigurationRecord)edash_packager::media::mp4::AVCDecoderConfigurationRecord
        length_size (defined in edash_packager::media::mp4::AVCDecoderConfigurationRecord)edash_packager::media::mp4::AVCDecoderConfigurationRecord
        Parse(BoxReader *reader)edash_packager::media::mp4::Box
        ParseData(BufferReader *reader) (defined in edash_packager::media::mp4::AVCDecoderConfigurationRecord)edash_packager::media::mp4::AVCDecoderConfigurationRecord
        PPS typedef (defined in edash_packager::media::mp4::AVCDecoderConfigurationRecord)edash_packager::media::mp4::AVCDecoderConfigurationRecord
        pps_list (defined in edash_packager::media::mp4::AVCDecoderConfigurationRecord)edash_packager::media::mp4::AVCDecoderConfigurationRecord
        profile_compatibility (defined in edash_packager::media::mp4::AVCDecoderConfigurationRecord)edash_packager::media::mp4::AVCDecoderConfigurationRecord
        profile_indication (defined in edash_packager::media::mp4::AVCDecoderConfigurationRecord)edash_packager::media::mp4::AVCDecoderConfigurationRecord
        ReadWrite(BoxBuffer *buffer) overrideedash_packager::media::mp4::AVCDecoderConfigurationRecordvirtual
        SPS typedef (defined in edash_packager::media::mp4::AVCDecoderConfigurationRecord)edash_packager::media::mp4::AVCDecoderConfigurationRecord
        sps_list (defined in edash_packager::media::mp4::AVCDecoderConfigurationRecord)edash_packager::media::mp4::AVCDecoderConfigurationRecord
        version (defined in edash_packager::media::mp4::AVCDecoderConfigurationRecord)edash_packager::media::mp4::AVCDecoderConfigurationRecord
        Write(BufferWriter *writer)edash_packager::media::mp4::Box
        ~AVCDecoderConfigurationRecord() override (defined in edash_packager::media::mp4::AVCDecoderConfigurationRecord)edash_packager::media::mp4::AVCDecoderConfigurationRecord
        ~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
        - - - - diff --git a/docs/d7/d52/classedash__packager_1_1media_1_1WebMListParser-members.html b/docs/d7/d52/classedash__packager_1_1media_1_1WebMListParser-members.html index 881578528a..33858323b0 100644 --- a/docs/d7/d52/classedash__packager_1_1media_1_1WebMListParser-members.html +++ b/docs/d7/d52/classedash__packager_1_1media_1_1WebMListParser-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d55/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry.html b/docs/d7/d55/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry.html index b19b37460b..3dac431970 100644 --- a/docs/d7/d55/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry.html +++ b/docs/d7/d55/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry.html @@ -108,7 +108,7 @@ std::vector< uint8_t > 

        Detailed Description

        -

        Definition at line 515 of file box_definitions.h.

        +

        Definition at line 505 of file box_definitions.h.


        The documentation for this struct was generated from the following files:
        • media/formats/mp4/box_definitions.h
        • media/formats/mp4/box_definitions.cc
        • @@ -116,7 +116,7 @@ std::vector< uint8_t >  diff --git a/docs/d7/d79/structedash__packager_1_1media_1_1mp4_1_1MediaData-members.html b/docs/d7/d79/structedash__packager_1_1media_1_1mp4_1_1MediaData-members.html index 72e56bf9aa..9b03ecd90d 100644 --- a/docs/d7/d79/structedash__packager_1_1media_1_1mp4_1_1MediaData-members.html +++ b/docs/d7/d79/structedash__packager_1_1media_1_1mp4_1_1MediaData-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d7b/structedash__packager_1_1media_1_1mp4_1_1DecodingTime-members.html b/docs/d7/d7b/structedash__packager_1_1media_1_1mp4_1_1DecodingTime-members.html index 7c5e0d3e44..7ef9523365 100644 --- a/docs/d7/d7b/structedash__packager_1_1media_1_1mp4_1_1DecodingTime-members.html +++ b/docs/d7/d7b/structedash__packager_1_1media_1_1mp4_1_1DecodingTime-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/d82/classedash__packager_1_1MpdBuilder-members.html b/docs/d7/d82/classedash__packager_1_1MpdBuilder-members.html index c6649fe505..1e0621bf3c 100644 --- a/docs/d7/d82/classedash__packager_1_1MpdBuilder-members.html +++ b/docs/d7/d82/classedash__packager_1_1MpdBuilder-members.html @@ -108,7 +108,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 a0cd2e99e6..b89e1de141 100644 --- a/docs/d7/d87/video__stream__info_8h_source.html +++ b/docs/d7/d87/video__stream__info_8h_source.html @@ -115,82 +115,76 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
          26 
          28 class VideoStreamInfo : public StreamInfo {
          29  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* extra_data,
          -
          49  size_t extra_data_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_width(uint32_t width) { width_ = width; }
          -
          71  void set_height(uint32_t height) { height_ = height; }
          -
          72  void set_pixel_width(uint32_t pixel_width) { pixel_width_ = pixel_width; }
          -
          73  void set_pixel_height(uint32_t pixel_height) { pixel_height_ = pixel_height; }
          +
          33  VideoStreamInfo(int track_id,
          +
          34  uint32_t time_scale,
          +
          35  uint64_t duration,
          +
          36  VideoCodec codec,
          +
          37  const std::string& codec_string,
          +
          38  const std::string& language,
          +
          39  uint16_t width,
          +
          40  uint16_t height,
          +
          41  uint32_t pixel_width,
          +
          42  uint32_t pixel_height,
          +
          43  int16_t trick_play_rate,
          +
          44  uint8_t nalu_length_size,
          +
          45  const uint8_t* extra_data,
          +
          46  size_t extra_data_size,
          +
          47  bool is_encrypted);
          +
          48 
          +
          51  bool IsValidConfig() const override;
          +
          52  std::string ToString() const override;
          +
          54 
          +
          55  VideoCodec codec() const { return codec_; }
          +
          56  uint16_t width() const { return width_; }
          +
          57  uint16_t height() const { return height_; }
          +
          60  uint32_t pixel_width() const { return pixel_width_; }
          +
          63  uint32_t pixel_height() const { return pixel_height_; }
          +
          64  uint8_t nalu_length_size() const { return nalu_length_size_; }
          +
          65  int16_t trick_play_rate() const { return trick_play_rate_; }
          +
          66 
          +
          67  void set_width(uint32_t width) { width_ = width; }
          +
          68  void set_height(uint32_t height) { height_ = height; }
          +
          69  void set_pixel_width(uint32_t pixel_width) { pixel_width_ = pixel_width; }
          +
          70  void set_pixel_height(uint32_t pixel_height) { pixel_height_ = pixel_height; }
          +
          71 
          +
          72  private:
          +
          73  ~VideoStreamInfo() override;
          74 
          -
          77  static std::string GetCodecString(VideoCodec codec,
          -
          78  uint8_t profile,
          -
          79  uint8_t compatible_profiles,
          -
          80  uint8_t level);
          -
          81 
          -
          82  private:
          -
          83  ~VideoStreamInfo() override;
          +
          75  VideoCodec codec_;
          +
          76  uint16_t width_;
          +
          77  uint16_t height_;
          +
          78 
          +
          79  // pixel_width_:pixel_height_ is the sample aspect ratio.
          +
          80  // 0 means unknown.
          +
          81  uint32_t pixel_width_;
          +
          82  uint32_t pixel_height_;
          +
          83  int16_t trick_play_rate_; // Non-zero for trick-play streams.
          84 
          -
          85  VideoCodec codec_;
          -
          86  uint16_t width_;
          -
          87  uint16_t height_;
          -
          88 
          -
          89  // pixel_width_:pixel_height_ is the sample aspect ratio.
          -
          90  // 0 means unknown.
          -
          91  uint32_t pixel_width_;
          -
          92  uint32_t pixel_height_;
          -
          93  int16_t trick_play_rate_; // Non-zero for trick-play streams.
          +
          85  // Specifies the normalized size of the NAL unit length field. Can be 1, 2 or
          +
          86  // 4 bytes, or 0 if the size if unknown or the stream is not a AVC stream
          +
          87  // (H.264).
          +
          88  uint8_t nalu_length_size_;
          +
          89 
          +
          90  // Not using DISALLOW_COPY_AND_ASSIGN here intentionally to allow the compiler
          +
          91  // generated copy constructor and assignment operator. Since the extra data is
          +
          92  // typically small, the performance impact is minimal.
          +
          93 };
          94 
          -
          95  // Specifies the normalized size of the NAL unit length field. Can be 1, 2 or
          -
          96  // 4 bytes, or 0 if the size if unknown or the stream is not a AVC stream
          -
          97  // (H.264).
          -
          98  uint8_t nalu_length_size_;
          -
          99 
          -
          100  // Not using DISALLOW_COPY_AND_ASSIGN here intentionally to allow the compiler
          -
          101  // generated copy constructor and assignment operator. Since the extra data is
          -
          102  // typically small, the performance impact is minimal.
          -
          103 };
          -
          104 
          -
          105 } // namespace media
          -
          106 } // namespace edash_packager
          -
          107 
          -
          108 #endif // MEDIA_BASE_VIDEO_STREAM_INFO_H_
          - +
          95 } // namespace media
          +
          96 } // namespace edash_packager
          +
          97 
          +
          98 #endif // MEDIA_BASE_VIDEO_STREAM_INFO_H_
          +
          std::string ToString() const override
          Abstract class holds stream information.
          Definition: stream_info.h:26
          -
          static std::string GetCodecString(VideoCodec codec, uint8_t profile, uint8_t compatible_profiles, uint8_t level)
          Holds video stream information.
          - +
          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 *extra_data, size_t extra_data_size, bool is_encrypted)
          diff --git a/docs/d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html b/docs/d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html index 6710364f8f..d3635bc533 100644 --- a/docs/d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html +++ b/docs/d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html @@ -104,25 +104,25 @@ Inheritance diagram for edash_packager::media::mp4::Box:
          -edash_packager::media::mp4::AudioSampleEntry -edash_packager::media::mp4::AVCDecoderConfigurationRecord -edash_packager::media::mp4::DataInformation -edash_packager::media::mp4::Edit -edash_packager::media::mp4::FileType -edash_packager::media::mp4::FullBox -edash_packager::media::mp4::Media -edash_packager::media::mp4::MediaInformation -edash_packager::media::mp4::Movie -edash_packager::media::mp4::MovieExtends -edash_packager::media::mp4::MovieFragment -edash_packager::media::mp4::OriginalFormat -edash_packager::media::mp4::PixelAspectRatioBox -edash_packager::media::mp4::ProtectionSchemeInfo -edash_packager::media::mp4::SampleTable -edash_packager::media::mp4::SchemeInfo -edash_packager::media::mp4::Track -edash_packager::media::mp4::TrackFragment -edash_packager::media::mp4::VideoSampleEntry +edash_packager::media::mp4::AudioSampleEntry +edash_packager::media::mp4::CodecConfigurationRecord +edash_packager::media::mp4::DataInformation +edash_packager::media::mp4::Edit +edash_packager::media::mp4::FileType +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Media +edash_packager::media::mp4::MediaInformation +edash_packager::media::mp4::Movie +edash_packager::media::mp4::MovieExtends +edash_packager::media::mp4::MovieFragment +edash_packager::media::mp4::OriginalFormat +edash_packager::media::mp4::PixelAspectRatioBox +edash_packager::media::mp4::ProtectionSchemeInfo +edash_packager::media::mp4::SampleTable +edash_packager::media::mp4::SchemeInfo +edash_packager::media::mp4::Track +edash_packager::media::mp4::TrackFragment +edash_packager::media::mp4::VideoSampleEntry
          @@ -183,7 +183,7 @@ class 

          Compute the size of this box. The calculated size will be saved in |atom_size| for later consumption.

          -

          Implemented in edash_packager::media::mp4::SegmentIndex, edash_packager::media::mp4::MovieFragment, edash_packager::media::mp4::TrackFragment, edash_packager::media::mp4::SampleGroupDescription, edash_packager::media::mp4::SampleToGroup, edash_packager::media::mp4::TrackFragmentRun, edash_packager::media::mp4::TrackFragmentHeader, edash_packager::media::mp4::MovieFragmentHeader, edash_packager::media::mp4::TrackFragmentDecodeTime, edash_packager::media::mp4::Movie, edash_packager::media::mp4::MovieExtends, edash_packager::media::mp4::TrackExtends, edash_packager::media::mp4::MovieExtendsHeader, edash_packager::media::mp4::Track, edash_packager::media::mp4::Media, edash_packager::media::mp4::MediaInformation, edash_packager::media::mp4::DataInformation, edash_packager::media::mp4::DataReference, edash_packager::media::mp4::DataEntryUrl, edash_packager::media::mp4::SoundMediaHeader, edash_packager::media::mp4::VideoMediaHeader, edash_packager::media::mp4::MediaHeader, edash_packager::media::mp4::SampleTable, edash_packager::media::mp4::SyncSample, edash_packager::media::mp4::ChunkOffset, edash_packager::media::mp4::ChunkLargeOffset, edash_packager::media::mp4::CompactSampleSize, edash_packager::media::mp4::SampleSize, edash_packager::media::mp4::SampleToChunk, edash_packager::media::mp4::CompositionTimeToSample, edash_packager::media::mp4::DecodingTimeToSample, edash_packager::media::mp4::SampleDescription, edash_packager::media::mp4::AudioSampleEntry, edash_packager::media::mp4::ElementaryStreamDescriptor, edash_packager::media::mp4::VideoSampleEntry, edash_packager::media::mp4::PixelAspectRatioBox, edash_packager::media::mp4::AVCDecoderConfigurationRecord, edash_packager::media::mp4::HandlerReference, edash_packager::media::mp4::Edit, edash_packager::media::mp4::EditList, edash_packager::media::mp4::TrackHeader, edash_packager::media::mp4::MovieHeader, edash_packager::media::mp4::ProtectionSchemeInfo, edash_packager::media::mp4::SchemeInfo, edash_packager::media::mp4::TrackEncryption, edash_packager::media::mp4::SchemeType, edash_packager::media::mp4::OriginalFormat, edash_packager::media::mp4::SampleAuxiliaryInformationSize, edash_packager::media::mp4::SampleAuxiliaryInformationOffset, edash_packager::media::mp4::ProtectionSystemSpecificHeader, edash_packager::media::mp4::SegmentType, and edash_packager::media::mp4::FileType.

          +

          Implemented in edash_packager::media::mp4::SegmentIndex, edash_packager::media::mp4::MovieFragment, edash_packager::media::mp4::TrackFragment, edash_packager::media::mp4::SampleGroupDescription, edash_packager::media::mp4::SampleToGroup, edash_packager::media::mp4::TrackFragmentRun, edash_packager::media::mp4::TrackFragmentHeader, edash_packager::media::mp4::MovieFragmentHeader, edash_packager::media::mp4::TrackFragmentDecodeTime, edash_packager::media::mp4::Movie, edash_packager::media::mp4::MovieExtends, edash_packager::media::mp4::TrackExtends, edash_packager::media::mp4::MovieExtendsHeader, edash_packager::media::mp4::Track, edash_packager::media::mp4::Media, edash_packager::media::mp4::MediaInformation, edash_packager::media::mp4::DataInformation, edash_packager::media::mp4::DataReference, edash_packager::media::mp4::DataEntryUrl, edash_packager::media::mp4::SoundMediaHeader, edash_packager::media::mp4::VideoMediaHeader, edash_packager::media::mp4::MediaHeader, edash_packager::media::mp4::SampleTable, edash_packager::media::mp4::SyncSample, edash_packager::media::mp4::ChunkOffset, edash_packager::media::mp4::ChunkLargeOffset, edash_packager::media::mp4::CompactSampleSize, edash_packager::media::mp4::SampleSize, edash_packager::media::mp4::SampleToChunk, edash_packager::media::mp4::CompositionTimeToSample, edash_packager::media::mp4::DecodingTimeToSample, edash_packager::media::mp4::SampleDescription, edash_packager::media::mp4::AudioSampleEntry, edash_packager::media::mp4::ElementaryStreamDescriptor, edash_packager::media::mp4::VideoSampleEntry, edash_packager::media::mp4::PixelAspectRatioBox, edash_packager::media::mp4::CodecConfigurationRecord, edash_packager::media::mp4::HandlerReference, edash_packager::media::mp4::Edit, edash_packager::media::mp4::EditList, edash_packager::media::mp4::TrackHeader, edash_packager::media::mp4::MovieHeader, edash_packager::media::mp4::ProtectionSchemeInfo, edash_packager::media::mp4::SchemeInfo, edash_packager::media::mp4::TrackEncryption, edash_packager::media::mp4::SchemeType, edash_packager::media::mp4::OriginalFormat, edash_packager::media::mp4::SampleAuxiliaryInformationSize, edash_packager::media::mp4::SampleAuxiliaryInformationOffset, edash_packager::media::mp4::ProtectionSystemSpecificHeader, edash_packager::media::mp4::SegmentType, and edash_packager::media::mp4::FileType.

          @@ -268,7 +268,7 @@ class  diff --git a/docs/d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.png b/docs/d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.png index f386d4e99b..b9b4ba759d 100644 Binary files a/docs/d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.png and b/docs/d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.png differ diff --git a/docs/d7/d9d/progress__listener_8h_source.html b/docs/d7/d9d/progress__listener_8h_source.html index 2963750502..e421e96508 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 ac0ee27f39..aa4f3404d3 100644 --- a/docs/d7/da4/track__run__iterator_8h_source.html +++ b/docs/d7/da4/track__run__iterator_8h_source.html @@ -178,26 +178,26 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
          129 #endif // MEDIA_FORMATS_MP4_TRACK_RUN_ITERATOR_H_
          const VideoSampleEntry & video_description() const
          Only valid if is_video() is true.
          - +
          scoped_ptr< DecryptConfig > GetDecryptConfig()
          bool CacheAuxInfo(const uint8_t *buf, int size)
          const AudioSampleEntry & audio_description() const
          Only valid if is_audio() is true.
          - + - - + + - + diff --git a/docs/d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html b/docs/d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html index fa3c0fe07c..87f10e1598 100644 --- a/docs/d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html +++ b/docs/d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html @@ -149,7 +149,7 @@ Additional Inherited Members
          BoxBuffer BoxBuffer

          Detailed Description

          -

          Definition at line 282 of file box_definitions.h.

          +

          Definition at line 272 of file box_definitions.h.

          Member Function Documentation

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

          Implements edash_packager::media::mp4::Box.

          -

          Definition at line 575 of file box_definitions.cc.

          +

          Definition at line 577 of file box_definitions.cc.

          @@ -186,7 +186,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 cec27a507b..7565552e32 100644 --- a/docs/d7/db0/mpd__writer_8h_source.html +++ b/docs/d7/db0/mpd__writer_8h_source.html @@ -184,7 +184,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/db3/structedash__packager_1_1Element-members.html b/docs/d7/db3/structedash__packager_1_1Element-members.html index 8c2213e4e8..74286a11b9 100644 --- a/docs/d7/db3/structedash__packager_1_1Element-members.html +++ b/docs/d7/db3/structedash__packager_1_1Element-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/dc6/byte__queue_8h_source.html b/docs/d7/dc6/byte__queue_8h_source.html index b954aa9c6d..b0281d620c 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 06351bb721..de59b34c4c 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 ddb1f9311f..4f199b5b65 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/dd6/key__source_8cc_source.html b/docs/d7/dd6/key__source_8cc_source.html index db6d047682..31969cbc67 100644 --- a/docs/d7/dd6/key__source_8cc_source.html +++ b/docs/d7/dd6/key__source_8cc_source.html @@ -296,7 +296,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/de3/structedash__packager_1_1xml_1_1XmlDeleter.html b/docs/d7/de3/structedash__packager_1_1xml_1_1XmlDeleter.html index 39a2001756..2da735bf20 100644 --- a/docs/d7/de3/structedash__packager_1_1xml_1_1XmlDeleter.html +++ b/docs/d7/de3/structedash__packager_1_1xml_1_1XmlDeleter.html @@ -127,7 +127,7 @@ void operator() (xmlCh 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 779a58e5fd..a396a8e89d 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 @@ -139,7 +139,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html b/docs/d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html index 2f61b65e1e..2f4c3e1dfa 100644 --- a/docs/d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html +++ b/docs/d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html @@ -155,7 +155,7 @@ Additional Inherited Members

          Detailed Description

          -

          Definition at line 332 of file box_definitions.h.

          +

          Definition at line 322 of file box_definitions.h.

          Member Function Documentation

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

          Implements edash_packager::media::mp4::Box.

          -

          Definition at line 1168 of file box_definitions.cc.

          +

          Definition at line 1138 of file box_definitions.cc.

          @@ -192,7 +192,7 @@ Additional Inherited Members diff --git a/docs/d7/dee/mpd__generator_8cc_source.html b/docs/d7/dee/mpd__generator_8cc_source.html index bcf327a7bd..00dbde2a5e 100644 --- a/docs/d7/dee/mpd__generator_8cc_source.html +++ b/docs/d7/dee/mpd__generator_8cc_source.html @@ -188,7 +188,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 b8cf81b81a..c908f7b64f 100644 --- a/docs/d7/def/mp4__media__parser_8cc_source.html +++ b/docs/d7/def/mp4__media__parser_8cc_source.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
          20 #include "packager/media/base/video_stream_info.h"
          21 #include "packager/media/file/file.h"
          22 #include "packager/media/file/file_closer.h"
          -
          23 #include "packager/media/filters/h264_parser.h"
          +
          23 #include "packager/media/filters/avc_decoder_configuration.h"
          24 #include "packager/media/formats/mp4/box_definitions.h"
          25 #include "packager/media/formats/mp4/box_reader.h"
          26 #include "packager/media/formats/mp4/es_descriptor.h"
          @@ -444,317 +444,314 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
          355  desc_idx = 0;
          356  const VideoSampleEntry& entry = samp_descr.video_entries[desc_idx];
          357 
          -
          358  if (!(entry.format == FOURCC_AVC1 ||
          -
          359  (entry.format == FOURCC_ENCV &&
          -
          360  entry.sinf.format.format == FOURCC_AVC1))) {
          -
          361  LOG(ERROR) << "Unsupported video format 0x"
          -
          362  << std::hex << entry.format << " in stsd box.";
          -
          363  return false;
          -
          364  }
          -
          365 
          -
          366  const std::string codec_string =
          - -
          368  entry.avcc.profile_indication,
          -
          369  entry.avcc.profile_compatibility,
          -
          370  entry.avcc.avc_level);
          -
          371 
          -
          372  uint32_t coded_width = 0;
          -
          373  uint32_t coded_height = 0;
          -
          374  uint32_t pixel_width = 0;
          -
          375  uint32_t pixel_height = 0;
          -
          376 
          -
          377  if (entry.avcc.sps_list.empty()) {
          -
          378  LOG(ERROR) << "Cannot find sps in avc decoder configuration record.";
          -
          379  return false;
          -
          380  }
          -
          381  const std::vector<uint8_t>& sps = entry.avcc.sps_list[0];
          -
          382  if (!ExtractResolutionFromSpsData(&sps[0], sps.size(), &coded_width,
          -
          383  &coded_height, &pixel_width,
          -
          384  &pixel_height)) {
          -
          385  LOG(ERROR) << "Failed to parse SPS.";
          -
          386  return false;
          -
          387  }
          -
          388 
          -
          389  LOG_IF(WARNING,
          -
          390  entry.width != coded_width || entry.height != coded_height)
          -
          391  << "Resolution in VisualSampleEntry (" << entry.width << ","
          -
          392  << entry.height << ") does not match with resolution in "
          -
          393  "AVCDecoderConfigurationRecord ("
          -
          394  << coded_width << "," << coded_height
          -
          395  << "). Use AVCDecoderConfigurationRecord.";
          -
          396 
          -
          397  if (entry.pixel_aspect.h_spacing != 0 || entry.pixel_aspect.v_spacing != 0) {
          -
          398  LOG_IF(WARNING, entry.pixel_aspect.h_spacing != pixel_width ||
          -
          399  entry.pixel_aspect.v_spacing != pixel_height)
          -
          400  << "Pixel aspect ratio in PASP box ("
          -
          401  << entry.pixel_aspect.h_spacing << ","
          -
          402  << entry.pixel_aspect.v_spacing
          -
          403  << ") does not match with SAR in AVCDecoderConfigurationRecord ("
          -
          404  << pixel_width << "," << pixel_height
          -
          405  << "). Use AVCDecoderConfigurationRecord.";
          -
          406  }
          -
          407 
          -
          408  bool is_encrypted = entry.sinf.info.track_encryption.is_encrypted;
          -
          409  DVLOG(1) << "is_video_track_encrypted_: " << is_encrypted;
          -
          410  streams.push_back(new VideoStreamInfo(track->header.track_id,
          -
          411  timescale,
          -
          412  duration,
          -
          413  kCodecH264,
          -
          414  codec_string,
          -
          415  track->media.header.language,
          -
          416  coded_width,
          -
          417  coded_height,
          -
          418  pixel_width,
          -
          419  pixel_height,
          -
          420  0, // trick_play_rate
          -
          421  entry.avcc.length_size,
          -
          422  &entry.avcc.data[0],
          -
          423  entry.avcc.data.size(),
          -
          424  is_encrypted));
          -
          425  }
          -
          426  }
          -
          427 
          -
          428  init_cb_.Run(streams);
          -
          429  if (!FetchKeysIfNecessary(moov_->pssh))
          -
          430  return false;
          -
          431  runs_.reset(new TrackRunIterator(moov_.get()));
          -
          432  RCHECK(runs_->Init());
          -
          433  ChangeState(kEmittingSamples);
          -
          434  return true;
          -
          435 }
          -
          436 
          -
          437 bool MP4MediaParser::ParseMoof(BoxReader* reader) {
          -
          438  // Must already have initialization segment.
          -
          439  RCHECK(moov_.get());
          -
          440  MovieFragment moof;
          -
          441  RCHECK(moof.Parse(reader));
          -
          442  if (!runs_)
          -
          443  runs_.reset(new TrackRunIterator(moov_.get()));
          -
          444  RCHECK(runs_->Init(moof));
          -
          445  if (!FetchKeysIfNecessary(moof.pssh))
          -
          446  return false;
          -
          447  ChangeState(kEmittingSamples);
          -
          448  return true;
          -
          449 }
          -
          450 
          -
          451 bool MP4MediaParser::FetchKeysIfNecessary(
          -
          452  const std::vector<ProtectionSystemSpecificHeader>& headers) {
          -
          453  if (headers.empty())
          -
          454  return true;
          -
          455 
          -
          456  // An error will be returned later if the samples need to be decrypted.
          -
          457  if (!decryption_key_source_)
          -
          458  return true;
          -
          459 
          -
          460  // TODO(tinskip): Pass in raw 'pssh' boxes to FetchKeys. This will allow
          -
          461  // supporting multiple keysystems. Move this to KeySource.
          -
          462  std::vector<uint8_t> widevine_system_id;
          -
          463  base::HexStringToBytes(kWidevineKeySystemId, &widevine_system_id);
          -
          464  for (std::vector<ProtectionSystemSpecificHeader>::const_iterator iter =
          -
          465  headers.begin(); iter != headers.end(); ++iter) {
          -
          466  if (iter->system_id == widevine_system_id) {
          -
          467  Status status = decryption_key_source_->FetchKeys(iter->data);
          -
          468  if (!status.ok()) {
          -
          469  LOG(ERROR) << "Error fetching decryption keys: " << status;
          -
          470  return false;
          -
          471  }
          -
          472  return true;
          -
          473  }
          -
          474  }
          -
          475 
          -
          476  LOG(ERROR) << "No viable 'pssh' box found for content decryption.";
          -
          477  return false;
          -
          478 }
          -
          479 
          -
          480 bool MP4MediaParser::EnqueueSample(bool* err) {
          -
          481  if (!runs_->IsRunValid()) {
          -
          482  // Remain in kEnqueueingSamples state, discarding data, until the end of
          -
          483  // the current 'mdat' box has been appended to the queue.
          -
          484  if (!queue_.Trim(mdat_tail_))
          -
          485  return false;
          -
          486 
          -
          487  ChangeState(kParsingBoxes);
          -
          488  return true;
          -
          489  }
          -
          490 
          -
          491  if (!runs_->IsSampleValid()) {
          -
          492  runs_->AdvanceRun();
          -
          493  return true;
          -
          494  }
          -
          495 
          -
          496  DCHECK(!(*err));
          -
          497 
          -
          498  const uint8_t* buf;
          -
          499  int buf_size;
          -
          500  queue_.Peek(&buf, &buf_size);
          -
          501  if (!buf_size)
          -
          502  return false;
          -
          503 
          -
          504  // Skip this entire track if it is not audio nor video.
          -
          505  if (!runs_->is_audio() && !runs_->is_video())
          -
          506  runs_->AdvanceRun();
          -
          507 
          -
          508  // Attempt to cache the auxiliary information first. Aux info is usually
          -
          509  // placed in a contiguous block before the sample data, rather than being
          -
          510  // interleaved. If we didn't cache it, this would require that we retain the
          -
          511  // start of the segment buffer while reading samples. Aux info is typically
          -
          512  // quite small compared to sample data, so this pattern is useful on
          -
          513  // memory-constrained devices where the source buffer consumes a substantial
          -
          514  // portion of the total system memory.
          -
          515  if (runs_->AuxInfoNeedsToBeCached()) {
          -
          516  queue_.PeekAt(runs_->aux_info_offset() + moof_head_, &buf, &buf_size);
          -
          517  if (buf_size < runs_->aux_info_size())
          -
          518  return false;
          -
          519  *err = !runs_->CacheAuxInfo(buf, buf_size);
          -
          520  return !*err;
          -
          521  }
          -
          522 
          -
          523  int64_t sample_offset = runs_->sample_offset() + moof_head_;
          -
          524  queue_.PeekAt(sample_offset, &buf, &buf_size);
          -
          525  if (buf_size < runs_->sample_size()) {
          -
          526  if (sample_offset < queue_.head()) {
          -
          527  LOG(ERROR) << "Incorrect sample offset " << sample_offset
          -
          528  << " < " << queue_.head();
          -
          529  *err = true;
          -
          530  }
          -
          531  return false;
          -
          532  }
          -
          533 
          -
          534  scoped_refptr<MediaSample> stream_sample(MediaSample::CopyFrom(
          -
          535  buf, runs_->sample_size(), runs_->is_keyframe()));
          -
          536  if (runs_->is_encrypted()) {
          -
          537  scoped_ptr<DecryptConfig> decrypt_config = runs_->GetDecryptConfig();
          -
          538  if (!decrypt_config ||
          -
          539  !DecryptSampleBuffer(decrypt_config.get(),
          -
          540  stream_sample->writable_data(),
          -
          541  stream_sample->data_size())) {
          -
          542  *err = true;
          -
          543  LOG(ERROR) << "Cannot decrypt samples.";
          -
          544  return false;
          -
          545  }
          -
          546  }
          -
          547 
          -
          548  stream_sample->set_dts(runs_->dts());
          -
          549  stream_sample->set_pts(runs_->cts());
          -
          550  stream_sample->set_duration(runs_->duration());
          -
          551 
          -
          552  DVLOG(3) << "Pushing frame: "
          -
          553  << ", key=" << runs_->is_keyframe()
          -
          554  << ", dur=" << runs_->duration()
          -
          555  << ", dts=" << runs_->dts()
          -
          556  << ", cts=" << runs_->cts()
          -
          557  << ", size=" << runs_->sample_size();
          -
          558 
          -
          559  if (!new_sample_cb_.Run(runs_->track_id(), stream_sample)) {
          -
          560  *err = true;
          -
          561  LOG(ERROR) << "Failed to process the sample.";
          -
          562  return false;
          -
          563  }
          -
          564 
          -
          565  runs_->AdvanceSample();
          -
          566  return true;
          -
          567 }
          -
          568 
          -
          569 bool MP4MediaParser::DecryptSampleBuffer(const DecryptConfig* decrypt_config,
          -
          570  uint8_t* buffer,
          -
          571  size_t buffer_size) {
          -
          572  DCHECK(decrypt_config);
          -
          573  DCHECK(buffer);
          -
          574 
          -
          575  if (!decryption_key_source_) {
          -
          576  LOG(ERROR) << "Encrypted media sample encountered, but decryption is not "
          -
          577  "enabled";
          -
          578  return false;
          -
          579  }
          -
          580 
          -
          581  // Get the encryptor object.
          -
          582  AesCtrEncryptor* encryptor;
          -
          583  DecryptorMap::iterator found = decryptor_map_.find(decrypt_config->key_id());
          -
          584  if (found == decryptor_map_.end()) {
          -
          585  // Create new AesCtrEncryptor
          -
          586  EncryptionKey key;
          -
          587  Status status(decryption_key_source_->GetKey(decrypt_config->key_id(),
          -
          588  &key));
          -
          589  if (!status.ok()) {
          -
          590  LOG(ERROR) << "Error retrieving decryption key: " << status;
          -
          591  return false;
          -
          592  }
          -
          593  scoped_ptr<AesCtrEncryptor> new_encryptor(new AesCtrEncryptor);
          -
          594  if (!new_encryptor->InitializeWithIv(key.key, decrypt_config->iv())) {
          -
          595  LOG(ERROR) << "Failed to initialize AesCtrEncryptor for decryption.";
          -
          596  return false;
          -
          597  }
          -
          598  encryptor = new_encryptor.release();
          -
          599  decryptor_map_[decrypt_config->key_id()] = encryptor;
          -
          600  } else {
          -
          601  encryptor = found->second;
          -
          602  }
          -
          603  if (!encryptor->SetIv(decrypt_config->iv())) {
          -
          604  LOG(ERROR) << "Invalid initialization vector.";
          -
          605  return false;
          -
          606  }
          -
          607 
          -
          608  if (decrypt_config->subsamples().empty()) {
          -
          609  // Sample not encrypted using subsample encryption. Decrypt whole.
          -
          610  if (!encryptor->Decrypt(buffer, buffer_size, buffer)) {
          -
          611  LOG(ERROR) << "Error during bulk sample decryption.";
          -
          612  return false;
          -
          613  }
          -
          614  return true;
          -
          615  }
          -
          616 
          -
          617  // Subsample decryption.
          -
          618  const std::vector<SubsampleEntry>& subsamples = decrypt_config->subsamples();
          -
          619  uint8_t* current_ptr = buffer;
          -
          620  const uint8_t* buffer_end = buffer + buffer_size;
          -
          621  current_ptr += decrypt_config->data_offset();
          -
          622  if (current_ptr > buffer_end) {
          -
          623  LOG(ERROR) << "Subsample data_offset too large.";
          -
          624  return false;
          -
          625  }
          -
          626  for (std::vector<SubsampleEntry>::const_iterator iter = subsamples.begin();
          -
          627  iter != subsamples.end();
          -
          628  ++iter) {
          -
          629  if ((current_ptr + iter->clear_bytes + iter->cipher_bytes) > buffer_end) {
          -
          630  LOG(ERROR) << "Subsamples overflow sample buffer.";
          -
          631  return false;
          -
          632  }
          -
          633  current_ptr += iter->clear_bytes;
          -
          634  if (!encryptor->Decrypt(current_ptr, iter->cipher_bytes, current_ptr)) {
          -
          635  LOG(ERROR) << "Error decrypting subsample buffer.";
          -
          636  return false;
          -
          637  }
          -
          638  current_ptr += iter->cipher_bytes;
          -
          639  }
          -
          640  return true;
          -
          641 }
          -
          642 
          -
          643 bool MP4MediaParser::ReadAndDiscardMDATsUntil(const int64_t offset) {
          -
          644  bool err = false;
          -
          645  while (mdat_tail_ < offset) {
          -
          646  const uint8_t* buf;
          -
          647  int size;
          -
          648  queue_.PeekAt(mdat_tail_, &buf, &size);
          -
          649 
          -
          650  FourCC type;
          -
          651  uint64_t box_sz;
          -
          652  if (!BoxReader::StartTopLevelBox(buf, size, &type, &box_sz, &err))
          -
          653  break;
          -
          654 
          -
          655  mdat_tail_ += box_sz;
          -
          656  }
          -
          657  queue_.Trim(std::min(mdat_tail_, offset));
          -
          658  return !err;
          -
          659 }
          -
          660 
          -
          661 void MP4MediaParser::ChangeState(State new_state) {
          -
          662  DVLOG(2) << "Changing state: " << new_state;
          -
          663  state_ = new_state;
          -
          664 }
          -
          665 
          -
          666 } // namespace mp4
          -
          667 } // namespace media
          -
          668 } // namespace edash_packager
          +
          358  uint32_t coded_width = entry.width;
          +
          359  uint32_t coded_height = entry.height;
          +
          360  uint32_t pixel_width = entry.pixel_aspect.h_spacing;
          +
          361  uint32_t pixel_height = entry.pixel_aspect.v_spacing;
          +
          362  if (pixel_width == 0 && pixel_height == 0) {
          +
          363  pixel_width = 1;
          +
          364  pixel_height = 1;
          +
          365  }
          +
          366  std::string codec_string;
          +
          367  uint8_t nalu_length_size = 0;
          +
          368 
          +
          369  const FourCC actual_format = entry.GetActualFormat();
          +
          370  switch (actual_format) {
          +
          371  case FOURCC_AVC1: {
          +
          372  AVCDecoderConfiguration avc_config;
          +
          373  if (!avc_config.Parse(entry.codec_config_record.data)) {
          +
          374  LOG(ERROR) << "Failed to parse avcc.";
          +
          375  return false;
          +
          376  }
          +
          377  codec_string = avc_config.GetCodecString();
          +
          378  nalu_length_size = avc_config.length_size();
          +
          379 
          +
          380  if (coded_width != avc_config.coded_width() ||
          +
          381  coded_height != avc_config.coded_height()) {
          +
          382  LOG(WARNING) << "Resolution in VisualSampleEntry (" << coded_width
          +
          383  << "," << coded_height
          +
          384  << ") does not match with resolution in "
          +
          385  "AVCDecoderConfigurationRecord ("
          +
          386  << avc_config.coded_width() << ","
          +
          387  << avc_config.coded_height()
          +
          388  << "). Use AVCDecoderConfigurationRecord.";
          +
          389  coded_width = avc_config.coded_width();
          +
          390  coded_height = avc_config.coded_height();
          +
          391  }
          +
          392 
          +
          393  if (pixel_width != avc_config.pixel_width() ||
          +
          394  pixel_height != avc_config.pixel_height()) {
          +
          395  LOG_IF(WARNING, pixel_width != 1 || pixel_height != 1)
          +
          396  << "Pixel aspect ratio in PASP box (" << pixel_width << ","
          +
          397  << pixel_height
          +
          398  << ") does not match with SAR in AVCDecoderConfigurationRecord "
          +
          399  "("
          +
          400  << avc_config.pixel_width() << "," << avc_config.pixel_height()
          +
          401  << "). Use AVCDecoderConfigurationRecord.";
          +
          402  pixel_width = avc_config.pixel_width();
          +
          403  pixel_height = avc_config.pixel_height();
          +
          404  }
          +
          405  break;
          +
          406  }
          +
          407  default:
          +
          408  LOG(ERROR) << "Unsupported video format "
          +
          409  << FourCCToString(actual_format) << " in stsd box.";
          +
          410  return false;
          +
          411  }
          +
          412 
          +
          413  bool is_encrypted = entry.sinf.info.track_encryption.is_encrypted;
          +
          414  DVLOG(1) << "is_video_track_encrypted_: " << is_encrypted;
          +
          415  streams.push_back(new VideoStreamInfo(
          +
          416  track->header.track_id, timescale, duration, kCodecH264,
          +
          417  codec_string, track->media.header.language, coded_width, coded_height,
          +
          418  pixel_width, pixel_height,
          +
          419  0, // trick_play_rate
          +
          420  nalu_length_size, vector_as_array(&entry.codec_config_record.data),
          +
          421  entry.codec_config_record.data.size(), is_encrypted));
          +
          422  }
          +
          423  }
          +
          424 
          +
          425  init_cb_.Run(streams);
          +
          426  if (!FetchKeysIfNecessary(moov_->pssh))
          +
          427  return false;
          +
          428  runs_.reset(new TrackRunIterator(moov_.get()));
          +
          429  RCHECK(runs_->Init());
          +
          430  ChangeState(kEmittingSamples);
          +
          431  return true;
          +
          432 }
          +
          433 
          +
          434 bool MP4MediaParser::ParseMoof(BoxReader* reader) {
          +
          435  // Must already have initialization segment.
          +
          436  RCHECK(moov_.get());
          +
          437  MovieFragment moof;
          +
          438  RCHECK(moof.Parse(reader));
          +
          439  if (!runs_)
          +
          440  runs_.reset(new TrackRunIterator(moov_.get()));
          +
          441  RCHECK(runs_->Init(moof));
          +
          442  if (!FetchKeysIfNecessary(moof.pssh))
          +
          443  return false;
          +
          444  ChangeState(kEmittingSamples);
          +
          445  return true;
          +
          446 }
          +
          447 
          +
          448 bool MP4MediaParser::FetchKeysIfNecessary(
          +
          449  const std::vector<ProtectionSystemSpecificHeader>& headers) {
          +
          450  if (headers.empty())
          +
          451  return true;
          +
          452 
          +
          453  // An error will be returned later if the samples need to be decrypted.
          +
          454  if (!decryption_key_source_)
          +
          455  return true;
          +
          456 
          +
          457  // TODO(tinskip): Pass in raw 'pssh' boxes to FetchKeys. This will allow
          +
          458  // supporting multiple keysystems. Move this to KeySource.
          +
          459  std::vector<uint8_t> widevine_system_id;
          +
          460  base::HexStringToBytes(kWidevineKeySystemId, &widevine_system_id);
          +
          461  for (std::vector<ProtectionSystemSpecificHeader>::const_iterator iter =
          +
          462  headers.begin(); iter != headers.end(); ++iter) {
          +
          463  if (iter->system_id == widevine_system_id) {
          +
          464  Status status = decryption_key_source_->FetchKeys(iter->data);
          +
          465  if (!status.ok()) {
          +
          466  LOG(ERROR) << "Error fetching decryption keys: " << status;
          +
          467  return false;
          +
          468  }
          +
          469  return true;
          +
          470  }
          +
          471  }
          +
          472 
          +
          473  LOG(ERROR) << "No viable 'pssh' box found for content decryption.";
          +
          474  return false;
          +
          475 }
          +
          476 
          +
          477 bool MP4MediaParser::EnqueueSample(bool* err) {
          +
          478  if (!runs_->IsRunValid()) {
          +
          479  // Remain in kEnqueueingSamples state, discarding data, until the end of
          +
          480  // the current 'mdat' box has been appended to the queue.
          +
          481  if (!queue_.Trim(mdat_tail_))
          +
          482  return false;
          +
          483 
          +
          484  ChangeState(kParsingBoxes);
          +
          485  return true;
          +
          486  }
          +
          487 
          +
          488  if (!runs_->IsSampleValid()) {
          +
          489  runs_->AdvanceRun();
          +
          490  return true;
          +
          491  }
          +
          492 
          +
          493  DCHECK(!(*err));
          +
          494 
          +
          495  const uint8_t* buf;
          +
          496  int buf_size;
          +
          497  queue_.Peek(&buf, &buf_size);
          +
          498  if (!buf_size)
          +
          499  return false;
          +
          500 
          +
          501  // Skip this entire track if it is not audio nor video.
          +
          502  if (!runs_->is_audio() && !runs_->is_video())
          +
          503  runs_->AdvanceRun();
          +
          504 
          +
          505  // Attempt to cache the auxiliary information first. Aux info is usually
          +
          506  // placed in a contiguous block before the sample data, rather than being
          +
          507  // interleaved. If we didn't cache it, this would require that we retain the
          +
          508  // start of the segment buffer while reading samples. Aux info is typically
          +
          509  // quite small compared to sample data, so this pattern is useful on
          +
          510  // memory-constrained devices where the source buffer consumes a substantial
          +
          511  // portion of the total system memory.
          +
          512  if (runs_->AuxInfoNeedsToBeCached()) {
          +
          513  queue_.PeekAt(runs_->aux_info_offset() + moof_head_, &buf, &buf_size);
          +
          514  if (buf_size < runs_->aux_info_size())
          +
          515  return false;
          +
          516  *err = !runs_->CacheAuxInfo(buf, buf_size);
          +
          517  return !*err;
          +
          518  }
          +
          519 
          +
          520  int64_t sample_offset = runs_->sample_offset() + moof_head_;
          +
          521  queue_.PeekAt(sample_offset, &buf, &buf_size);
          +
          522  if (buf_size < runs_->sample_size()) {
          +
          523  if (sample_offset < queue_.head()) {
          +
          524  LOG(ERROR) << "Incorrect sample offset " << sample_offset
          +
          525  << " < " << queue_.head();
          +
          526  *err = true;
          +
          527  }
          +
          528  return false;
          +
          529  }
          +
          530 
          +
          531  scoped_refptr<MediaSample> stream_sample(MediaSample::CopyFrom(
          +
          532  buf, runs_->sample_size(), runs_->is_keyframe()));
          +
          533  if (runs_->is_encrypted()) {
          +
          534  scoped_ptr<DecryptConfig> decrypt_config = runs_->GetDecryptConfig();
          +
          535  if (!decrypt_config ||
          +
          536  !DecryptSampleBuffer(decrypt_config.get(),
          +
          537  stream_sample->writable_data(),
          +
          538  stream_sample->data_size())) {
          +
          539  *err = true;
          +
          540  LOG(ERROR) << "Cannot decrypt samples.";
          +
          541  return false;
          +
          542  }
          +
          543  }
          +
          544 
          +
          545  stream_sample->set_dts(runs_->dts());
          +
          546  stream_sample->set_pts(runs_->cts());
          +
          547  stream_sample->set_duration(runs_->duration());
          +
          548 
          +
          549  DVLOG(3) << "Pushing frame: "
          +
          550  << ", key=" << runs_->is_keyframe()
          +
          551  << ", dur=" << runs_->duration()
          +
          552  << ", dts=" << runs_->dts()
          +
          553  << ", cts=" << runs_->cts()
          +
          554  << ", size=" << runs_->sample_size();
          +
          555 
          +
          556  if (!new_sample_cb_.Run(runs_->track_id(), stream_sample)) {
          +
          557  *err = true;
          +
          558  LOG(ERROR) << "Failed to process the sample.";
          +
          559  return false;
          +
          560  }
          +
          561 
          +
          562  runs_->AdvanceSample();
          +
          563  return true;
          +
          564 }
          +
          565 
          +
          566 bool MP4MediaParser::DecryptSampleBuffer(const DecryptConfig* decrypt_config,
          +
          567  uint8_t* buffer,
          +
          568  size_t buffer_size) {
          +
          569  DCHECK(decrypt_config);
          +
          570  DCHECK(buffer);
          +
          571 
          +
          572  if (!decryption_key_source_) {
          +
          573  LOG(ERROR) << "Encrypted media sample encountered, but decryption is not "
          +
          574  "enabled";
          +
          575  return false;
          +
          576  }
          +
          577 
          +
          578  // Get the encryptor object.
          +
          579  AesCtrEncryptor* encryptor;
          +
          580  DecryptorMap::iterator found = decryptor_map_.find(decrypt_config->key_id());
          +
          581  if (found == decryptor_map_.end()) {
          +
          582  // Create new AesCtrEncryptor
          +
          583  EncryptionKey key;
          +
          584  Status status(decryption_key_source_->GetKey(decrypt_config->key_id(),
          +
          585  &key));
          +
          586  if (!status.ok()) {
          +
          587  LOG(ERROR) << "Error retrieving decryption key: " << status;
          +
          588  return false;
          +
          589  }
          +
          590  scoped_ptr<AesCtrEncryptor> new_encryptor(new AesCtrEncryptor);
          +
          591  if (!new_encryptor->InitializeWithIv(key.key, decrypt_config->iv())) {
          +
          592  LOG(ERROR) << "Failed to initialize AesCtrEncryptor for decryption.";
          +
          593  return false;
          +
          594  }
          +
          595  encryptor = new_encryptor.release();
          +
          596  decryptor_map_[decrypt_config->key_id()] = encryptor;
          +
          597  } else {
          +
          598  encryptor = found->second;
          +
          599  }
          +
          600  if (!encryptor->SetIv(decrypt_config->iv())) {
          +
          601  LOG(ERROR) << "Invalid initialization vector.";
          +
          602  return false;
          +
          603  }
          +
          604 
          +
          605  if (decrypt_config->subsamples().empty()) {
          +
          606  // Sample not encrypted using subsample encryption. Decrypt whole.
          +
          607  if (!encryptor->Decrypt(buffer, buffer_size, buffer)) {
          +
          608  LOG(ERROR) << "Error during bulk sample decryption.";
          +
          609  return false;
          +
          610  }
          +
          611  return true;
          +
          612  }
          +
          613 
          +
          614  // Subsample decryption.
          +
          615  const std::vector<SubsampleEntry>& subsamples = decrypt_config->subsamples();
          +
          616  uint8_t* current_ptr = buffer;
          +
          617  const uint8_t* buffer_end = buffer + buffer_size;
          +
          618  current_ptr += decrypt_config->data_offset();
          +
          619  if (current_ptr > buffer_end) {
          +
          620  LOG(ERROR) << "Subsample data_offset too large.";
          +
          621  return false;
          +
          622  }
          +
          623  for (std::vector<SubsampleEntry>::const_iterator iter = subsamples.begin();
          +
          624  iter != subsamples.end();
          +
          625  ++iter) {
          +
          626  if ((current_ptr + iter->clear_bytes + iter->cipher_bytes) > buffer_end) {
          +
          627  LOG(ERROR) << "Subsamples overflow sample buffer.";
          +
          628  return false;
          +
          629  }
          +
          630  current_ptr += iter->clear_bytes;
          +
          631  if (!encryptor->Decrypt(current_ptr, iter->cipher_bytes, current_ptr)) {
          +
          632  LOG(ERROR) << "Error decrypting subsample buffer.";
          +
          633  return false;
          +
          634  }
          +
          635  current_ptr += iter->cipher_bytes;
          +
          636  }
          +
          637  return true;
          +
          638 }
          +
          639 
          +
          640 bool MP4MediaParser::ReadAndDiscardMDATsUntil(const int64_t offset) {
          +
          641  bool err = false;
          +
          642  while (mdat_tail_ < offset) {
          +
          643  const uint8_t* buf;
          +
          644  int size;
          +
          645  queue_.PeekAt(mdat_tail_, &buf, &size);
          +
          646 
          +
          647  FourCC type;
          +
          648  uint64_t box_sz;
          +
          649  if (!BoxReader::StartTopLevelBox(buf, size, &type, &box_sz, &err))
          +
          650  break;
          +
          651 
          +
          652  mdat_tail_ += box_sz;
          +
          653  }
          +
          654  queue_.Trim(std::min(mdat_tail_, offset));
          +
          655  return !err;
          +
          656 }
          +
          657 
          +
          658 void MP4MediaParser::ChangeState(State new_state) {
          +
          659  DVLOG(2) << "Changing state: " << new_state;
          +
          660  state_ = new_state;
          +
          661 }
          +
          662 
          +
          663 } // namespace mp4
          +
          664 } // namespace media
          +
          665 } // namespace edash_packager
          static BoxReader * ReadTopLevelBox(const uint8_t *buf, const size_t buf_size, bool *err)
          Definition: box_reader.cc:37
          virtual Status GetKey(TrackType track_type, EncryptionKey *key)
          Definition: key_source.cc:46
          @@ -767,14 +764,13 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
          KeySource is responsible for encryption key acquisition.
          Definition: key_source.h:29
          static bool StartTopLevelBox(const uint8_t *buf, const size_t buf_size, FourCC *type, uint64_t *box_size, bool *err) WARN_UNUSED_RESULT
          Definition: box_reader.cc:60
          void Init(const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source) override
          -
          static std::string GetCodecString(VideoCodec codec, uint8_t profile, uint8_t compatible_profiles, uint8_t level)
          static File * OpenWithNoBuffering(const char *file_name, const char *mode)
          Definition: file.cc:127
          static std::string GetCodecString(AudioCodec codec, uint8_t audio_object_type)
          diff --git a/docs/d7/df1/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex-members.html b/docs/d7/df1/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex-members.html index 5e2d5f1ad1..e5d61840e7 100644 --- a/docs/d7/df1/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex-members.html +++ b/docs/d7/df1/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/df3/classedash__packager_1_1media_1_1File-members.html b/docs/d7/df3/classedash__packager_1_1media_1_1File-members.html index 0f6458df85..0daf14689b 100644 --- a/docs/d7/df3/classedash__packager_1_1media_1_1File-members.html +++ b/docs/d7/df3/classedash__packager_1_1media_1_1File-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d7/df9/byte__queue_8cc_source.html b/docs/d7/df9/byte__queue_8cc_source.html index 809ac6a956..effef5a89a 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/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.html b/docs/d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.html index 24f41ce9e1..35af86a791 100644 --- a/docs/d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.html +++ b/docs/d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.html @@ -284,7 +284,7 @@ track_id, const scoped_refptr
          diff --git a/docs/d8/d0d/media__sample_8cc_source.html b/docs/d8/d0d/media__sample_8cc_source.html index 979ee59f05..d49d05298a 100644 --- a/docs/d8/d0d/media__sample_8cc_source.html +++ b/docs/d8/d0d/media__sample_8cc_source.html @@ -189,7 +189,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d19/bandwidth__estimator_8h_source.html b/docs/d8/d19/bandwidth__estimator_8h_source.html index 493faa3bc2..b2f56f11d1 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/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html b/docs/d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html index e3e91978b0..cc98d6de2e 100644 --- a/docs/d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html +++ b/docs/d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html @@ -370,7 +370,7 @@ void set_encryption_key diff --git a/docs/d8/d21/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo.html b/docs/d8/d21/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo.html index 246f06cd41..ad893b9cb1 100644 --- a/docs/d8/d21/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo.html +++ b/docs/d8/d21/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo.html @@ -108,14 +108,14 @@ uint32_t sample_descriptio

          Detailed Description

          -

          Definition at line 268 of file box_definitions.h.

          +

          Definition at line 258 of file box_definitions.h.


          The documentation for this struct was generated from the following file: diff --git a/docs/d8/d22/classedash__packager_1_1media_1_1HttpKeyFetcher-members.html b/docs/d8/d22/classedash__packager_1_1media_1_1HttpKeyFetcher-members.html index 8b01bb9c73..7bdfef3e26 100644 --- a/docs/d8/d22/classedash__packager_1_1media_1_1HttpKeyFetcher-members.html +++ b/docs/d8/d22/classedash__packager_1_1media_1_1HttpKeyFetcher-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d25/classedash__packager_1_1media_1_1ProducerConsumerQueue-members.html b/docs/d8/d25/classedash__packager_1_1media_1_1ProducerConsumerQueue-members.html index 3631a37aac..3743cfd16f 100644 --- a/docs/d8/d25/classedash__packager_1_1media_1_1ProducerConsumerQueue-members.html +++ b/docs/d8/d25/classedash__packager_1_1media_1_1ProducerConsumerQueue-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d26/structedash__packager_1_1media_1_1mp4_1_1SegmentType-members.html b/docs/d8/d26/structedash__packager_1_1media_1_1mp4_1_1SegmentType-members.html index 3942b72cc5..b8ae653144 100644 --- a/docs/d8/d26/structedash__packager_1_1media_1_1mp4_1_1SegmentType-members.html +++ b/docs/d8/d26/structedash__packager_1_1media_1_1mp4_1_1SegmentType-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d2e/classedash__packager_1_1media_1_1ByteQueue.html b/docs/d8/d2e/classedash__packager_1_1media_1_1ByteQueue.html index 9833e37455..f827a1a0c7 100644 --- a/docs/d8/d2e/classedash__packager_1_1media_1_1ByteQueue.html +++ b/docs/d8/d2e/classedash__packager_1_1media_1_1ByteQueue.html @@ -177,7 +177,7 @@ void  diff --git a/docs/d8/d32/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize-members.html b/docs/d8/d32/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize-members.html index 281b0f0927..2b181c51de 100644 --- a/docs/d8/d32/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize-members.html +++ b/docs/d8/d32/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize-members.html @@ -112,7 +112,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 6869252fd4..a151777150 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/d34/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor-members.html b/docs/d8/d34/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor-members.html index b2d157d940..64f0d5b132 100644 --- a/docs/d8/d34/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor-members.html +++ b/docs/d8/d34/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html b/docs/d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html index aa43c70758..cf43430172 100644 --- a/docs/d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html +++ b/docs/d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html @@ -143,7 +143,7 @@ Additional Inherited Members

          Detailed Description

          -

          Definition at line 150 of file box_definitions.h.

          +

          Definition at line 149 of file box_definitions.h.

          Member Function Documentation

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

          Implements edash_packager::media::mp4::Box.

          -

          Definition at line 792 of file box_definitions.cc.

          +

          Definition at line 794 of file box_definitions.cc.

          @@ -180,7 +180,7 @@ Additional Inherited Members diff --git a/docs/d8/d6a/classedash__packager_1_1media_1_1AudioStreamInfo-members.html b/docs/d8/d6a/classedash__packager_1_1media_1_1AudioStreamInfo-members.html index aae4c589b4..037b53c606 100644 --- a/docs/d8/d6a/classedash__packager_1_1media_1_1AudioStreamInfo-members.html +++ b/docs/d8/d6a/classedash__packager_1_1media_1_1AudioStreamInfo-members.html @@ -121,7 +121,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d6c/classedash__packager_1_1media_1_1MediaSample.html b/docs/d8/d6c/classedash__packager_1_1media_1_1MediaSample.html index 6fc68accd6..38e55d7df6 100644 --- a/docs/d8/d6c/classedash__packager_1_1media_1_1MediaSample.html +++ b/docs/d8/d6c/classedash__packager_1_1media_1_1MediaSample.html @@ -356,7 +356,7 @@ class base::RefCountedThre diff --git a/docs/d8/d6f/classedash__packager_1_1MockAdaptationSet-members.html b/docs/d8/d6f/classedash__packager_1_1MockAdaptationSet-members.html index 483fa8ef8d..06c5f5464a 100644 --- a/docs/d8/d6f/classedash__packager_1_1MockAdaptationSet-members.html +++ b/docs/d8/d6f/classedash__packager_1_1MockAdaptationSet-members.html @@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d6f/structedash__packager_1_1media_1_1mp4_1_1TrackFragment-members.html b/docs/d8/d6f/structedash__packager_1_1media_1_1mp4_1_1TrackFragment-members.html index 731e99752a..b274369aaf 100644 --- a/docs/d8/d6f/structedash__packager_1_1media_1_1mp4_1_1TrackFragment-members.html +++ b/docs/d8/d6f/structedash__packager_1_1media_1_1mp4_1_1TrackFragment-members.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html b/docs/d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html index dff38a8227..6621ce78a3 100644 --- a/docs/d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html +++ b/docs/d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html @@ -320,7 +320,7 @@ Public Member Functions diff --git a/docs/d8/d74/classedash__packager_1_1Representation-members.html b/docs/d8/d74/classedash__packager_1_1Representation-members.html index 14af57529f..18a9e0e578 100644 --- a/docs/d8/d74/classedash__packager_1_1Representation-members.html +++ b/docs/d8/d74/classedash__packager_1_1Representation-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d75/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo-members.html b/docs/d8/d75/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo-members.html index 5f740262f3..09054de551 100644 --- a/docs/d8/d75/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo-members.html +++ b/docs/d8/d75/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d78/classedash__packager_1_1MockAdaptationSet.html b/docs/d8/d78/classedash__packager_1_1MockAdaptationSet.html index 795439aa0d..d861434e3d 100644 --- a/docs/d8/d78/classedash__packager_1_1MockAdaptationSet.html +++ b/docs/d8/d78/classedash__packager_1_1MockAdaptationSet.html @@ -180,7 +180,7 @@ Additional Inherited Members diff --git a/docs/d8/d78/classedash__packager_1_1media_1_1WebMContentEncodingsClient.html b/docs/d8/d78/classedash__packager_1_1media_1_1WebMContentEncodingsClient.html index 0d6613c824..431e4c95b7 100644 --- a/docs/d8/d78/classedash__packager_1_1media_1_1WebMContentEncodingsClient.html +++ b/docs/d8/d78/classedash__packager_1_1media_1_1WebMContentEncodingsClient.html @@ -152,7 +152,7 @@ Additional Inherited Members diff --git a/docs/d8/d82/classedash__packager_1_1media_1_1MpdNotifyMuxerListener-members.html b/docs/d8/d82/classedash__packager_1_1media_1_1MpdNotifyMuxerListener-members.html index 1cd11dc060..4fad2ea50c 100644 --- a/docs/d8/d82/classedash__packager_1_1media_1_1MpdNotifyMuxerListener-members.html +++ b/docs/d8/d82/classedash__packager_1_1media_1_1MpdNotifyMuxerListener-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/d8e/classedash__packager_1_1media_1_1mp2t_1_1TsSection.html b/docs/d8/d8e/classedash__packager_1_1media_1_1mp2t_1_1TsSection.html index 4dcfa3e4ed..002d34af19 100644 --- a/docs/d8/d8e/classedash__packager_1_1media_1_1mp2t_1_1TsSection.html +++ b/docs/d8/d8e/classedash__packager_1_1media_1_1mp2t_1_1TsSection.html @@ -141,7 +141,7 @@ virtual void Reset ()= diff --git a/docs/d8/d94/adts__constants_8cc_source.html b/docs/d8/d94/adts__constants_8cc_source.html index 12e6609ade..55fe90d62d 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/d97/structedash__packager_1_1ContentProtectionElement-members.html b/docs/d8/d97/structedash__packager_1_1ContentProtectionElement-members.html index 7438dd8032..cab28db890 100644 --- a/docs/d8/d97/structedash__packager_1_1ContentProtectionElement-members.html +++ b/docs/d8/d97/structedash__packager_1_1ContentProtectionElement-members.html @@ -102,7 +102,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 5900e266d7..74b91caa73 100644 --- a/docs/d8/d9a/fragmenter_8cc_source.html +++ b/docs/d8/d9a/fragmenter_8cc_source.html @@ -241,15 +241,15 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
          virtual Status InitializeFragment(int64_t first_sample_dts)
          Definition: fragmenter.cc:73
          virtual Status AddSample(scoped_refptr< MediaSample > sample)
          Definition: fragmenter.cc:36
          - +
          bool OptimizeSampleEntries(std::vector< T > *entries, T *default_value)
          Definition: fragmenter.h:90
          - +
          virtual void FinalizeFragment()
          Finalize and optimize the fragment.
          Definition: fragmenter.cc:91
          diff --git a/docs/d8/d9c/webm__tracks__parser_8cc_source.html b/docs/d8/d9c/webm__tracks__parser_8cc_source.html index b4972533b6..57b7238e37 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 aa6a12a824..e51e1f4316 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/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.html b/docs/d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.html index a7970a732e..5ad3d35a09 100644 --- a/docs/d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.html +++ b/docs/d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.html @@ -255,7 +255,7 @@ track_id, const scoped_refptr
          diff --git a/docs/d8/da1/classedash__packager_1_1media_1_1WidevineKeySource-members.html b/docs/d8/da1/classedash__packager_1_1media_1_1WidevineKeySource-members.html index 798718e7c3..1d157f3f3f 100644 --- a/docs/d8/da1/classedash__packager_1_1media_1_1WidevineKeySource-members.html +++ b/docs/d8/da1/classedash__packager_1_1media_1_1WidevineKeySource-members.html @@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/da6/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader-members.html b/docs/d8/da6/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader-members.html index 0356a2bce8..78b4da3300 100644 --- a/docs/d8/da6/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader-members.html +++ b/docs/d8/da6/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader-members.html @@ -111,7 +111,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 94b033c88b..a317151b16 100644 --- a/docs/d8/daa/stream__info_8h_source.html +++ b/docs/d8/daa/stream__info_8h_source.html @@ -185,7 +185,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/db0/structedash__packager_1_1media_1_1H264SPS.html b/docs/d8/db0/structedash__packager_1_1media_1_1H264SPS.html index 25f70cfa9a..36752ea1ae 100644 --- a/docs/d8/db0/structedash__packager_1_1media_1_1H264SPS.html +++ b/docs/d8/db0/structedash__packager_1_1media_1_1H264SPS.html @@ -234,7 +234,7 @@ int chroma_array_type<

          Detailed Description

          -

          Definition at line 81 of file h264_parser.h.

          +

          Definition at line 62 of file h264_parser.h.


          The documentation for this struct was generated from the following files:
          • media/filters/h264_parser.h
          • media/filters/h264_parser.cc
          • @@ -242,7 +242,7 @@ int chroma_array_type< diff --git a/docs/d8/dbb/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord.png b/docs/d8/dbb/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord.png deleted file mode 100644 index c1d5399e89..0000000000 Binary files a/docs/d8/dbb/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord.png and /dev/null differ diff --git a/docs/d8/dbb/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData-members.html b/docs/d8/dbb/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData-members.html index 8a8fb4a159..a31e6640a6 100644 --- a/docs/d8/dbb/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData-members.html +++ b/docs/d8/dbb/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/dc7/classedash__packager_1_1media_1_1UdpFile.html b/docs/d8/dc7/classedash__packager_1_1media_1_1UdpFile.html index 70e28cdf58..ebf9d1720b 100644 --- a/docs/d8/dc7/classedash__packager_1_1media_1_1UdpFile.html +++ b/docs/d8/dc7/classedash__packager_1_1media_1_1UdpFile.html @@ -457,7 +457,7 @@ Additional Inherited Members diff --git a/docs/d8/dca/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor-members.html b/docs/d8/dca/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor-members.html index 03c8fc649d..df9aea83f4 100644 --- a/docs/d8/dca/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor-members.html +++ b/docs/d8/dca/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/dcc/classedash__packager_1_1media_1_1AesRequestSigner.html b/docs/d8/dcc/classedash__packager_1_1media_1_1AesRequestSigner.html index 5f782fae29..183576d2ca 100644 --- a/docs/d8/dcc/classedash__packager_1_1media_1_1AesRequestSigner.html +++ b/docs/d8/dcc/classedash__packager_1_1media_1_1AesRequestSigner.html @@ -188,7 +188,7 @@ Additional Inherited Members diff --git a/docs/d8/dcf/classedash__packager_1_1media_1_1RsaRequestSigner-members.html b/docs/d8/dcf/classedash__packager_1_1media_1_1RsaRequestSigner-members.html index 60c671d9cd..d50ad6646d 100644 --- a/docs/d8/dcf/classedash__packager_1_1media_1_1RsaRequestSigner-members.html +++ b/docs/d8/dcf/classedash__packager_1_1media_1_1RsaRequestSigner-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/de6/webm__crypto__helpers_8h_source.html b/docs/d8/de6/webm__crypto__helpers_8h_source.html index c47d1abdbf..27802716a7 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/df1/classedash__packager_1_1MpdWriter-members.html b/docs/d8/df1/classedash__packager_1_1MpdWriter-members.html index 9ab9bd7a0b..7c83491ebd 100644 --- a/docs/d8/df1/classedash__packager_1_1MpdWriter-members.html +++ b/docs/d8/df1/classedash__packager_1_1MpdWriter-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d8/df3/structedash__packager_1_1xml_1_1ScopedXmlPtr.html b/docs/d8/df3/structedash__packager_1_1xml_1_1ScopedXmlPtr.html index 4f4488633d..9f0a965127 100644 --- a/docs/d8/df3/structedash__packager_1_1xml_1_1ScopedXmlPtr.html +++ b/docs/d8/df3/structedash__packager_1_1xml_1_1ScopedXmlPtr.html @@ -119,7 +119,7 @@ struct edash_packager::xml::ScopedXmlPtr< XmlType > diff --git a/docs/d9/d08/mock__mpd__builder_8h_source.html b/docs/d9/d08/mock__mpd__builder_8h_source.html index f04644fa98..c26ee50508 100644 --- a/docs/d9/d08/mock__mpd__builder_8h_source.html +++ b/docs/d9/d08/mock__mpd__builder_8h_source.html @@ -177,7 +177,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d15/key__rotation__fragmenter_8cc_source.html b/docs/d9/d15/key__rotation__fragmenter_8cc_source.html index 5cd4ea09d0..067c5287d3 100644 --- a/docs/d9/d15/key__rotation__fragmenter_8cc_source.html +++ b/docs/d9/d15/key__rotation__fragmenter_8cc_source.html @@ -221,14 +221,14 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
            virtual std::string UUID()
            Definition: key_source.cc:92
            KeySource is responsible for encryption key acquisition.
            Definition: key_source.h:29
            - - + +
            virtual std::string SystemName()
            Definition: key_source.cc:96
            virtual void FinalizeFragmentForEncryption()
            Finalize current fragment for encryption.
            diff --git a/docs/d9/d17/classedash__packager_1_1DashIopMpdNotifier-members.html b/docs/d9/d17/classedash__packager_1_1DashIopMpdNotifier-members.html index 59b015122b..671847399f 100644 --- a/docs/d9/d17/classedash__packager_1_1DashIopMpdNotifier-members.html +++ b/docs/d9/d17/classedash__packager_1_1DashIopMpdNotifier-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html b/docs/d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html index 20b696956d..90752a9604 100644 --- a/docs/d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html +++ b/docs/d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html @@ -143,7 +143,7 @@ Additional Inherited Members

            Detailed Description

            -

            Definition at line 311 of file box_definitions.h.

            +

            Definition at line 301 of file box_definitions.h.

            Member Function Documentation

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

            Implements edash_packager::media::mp4::Box.

            -

            Definition at line 710 of file box_definitions.cc.

            +

            Definition at line 712 of file box_definitions.cc.

            @@ -180,7 +180,7 @@ Additional Inherited Members diff --git a/docs/d9/d2c/classedash__packager_1_1media_1_1ProgressListener.html b/docs/d9/d2c/classedash__packager_1_1media_1_1ProgressListener.html index 1db1395ab1..b48f110764 100644 --- a/docs/d9/d2c/classedash__packager_1_1media_1_1ProgressListener.html +++ b/docs/d9/d2c/classedash__packager_1_1media_1_1ProgressListener.html @@ -146,7 +146,7 @@ Public Member Functions diff --git a/docs/d9/d3b/webm__content__encodings_8h_source.html b/docs/d9/d3b/webm__content__encodings_8h_source.html index f827b238ac..6fcc6e9775 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/d46/classedash__packager_1_1media_1_1BufferReader.html b/docs/d9/d46/classedash__packager_1_1media_1_1BufferReader.html index 52d90d9400..0fe03227a8 100644 --- a/docs/d9/d46/classedash__packager_1_1media_1_1BufferReader.html +++ b/docs/d9/d46/classedash__packager_1_1media_1_1BufferReader.html @@ -273,7 +273,7 @@ bool ReadNBytesInto8s diff --git a/docs/d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html b/docs/d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html index 83aecf19c9..7052ca175d 100644 --- a/docs/d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html +++ b/docs/d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html @@ -183,7 +183,7 @@ Additional Inherited Members

            Detailed Description

            -

            Definition at line 447 of file box_definitions.h.

            +

            Definition at line 437 of file box_definitions.h.

            Member Function Documentation

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

            Implements edash_packager::media::mp4::Box.

            -

            Definition at line 1539 of file box_definitions.cc.

            +

            Definition at line 1509 of file box_definitions.cc.

            @@ -220,7 +220,7 @@ Additional Inherited Members diff --git a/docs/d9/d5b/structedash__packager_1_1SegmentInfo-members.html b/docs/d9/d5b/structedash__packager_1_1SegmentInfo-members.html index 509d3ea880..9b7af86d3f 100644 --- a/docs/d9/d5b/structedash__packager_1_1SegmentInfo-members.html +++ b/docs/d9/d5b/structedash__packager_1_1SegmentInfo-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d65/classedash__packager_1_1media_1_1TextTrack-members.html b/docs/d9/d65/classedash__packager_1_1media_1_1TextTrack-members.html index 9494559978..b67be611df 100644 --- a/docs/d9/d65/classedash__packager_1_1media_1_1TextTrack-members.html +++ b/docs/d9/d65/classedash__packager_1_1media_1_1TextTrack-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d76/structedash__packager_1_1media_1_1H264ModificationOfPicNum.html b/docs/d9/d76/structedash__packager_1_1media_1_1H264ModificationOfPicNum.html index fca419876e..8babac04df 100644 --- a/docs/d9/d76/structedash__packager_1_1media_1_1H264ModificationOfPicNum.html +++ b/docs/d9/d76/structedash__packager_1_1media_1_1H264ModificationOfPicNum.html @@ -112,14 +112,14 @@ union {

            Detailed Description

            -

            Definition at line 163 of file h264_parser.h.

            +

            Definition at line 144 of file h264_parser.h.


            The documentation for this struct was generated from the following file: diff --git a/docs/d9/d7b/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData.html b/docs/d9/d7b/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData.html index e0149b40d9..0736db471c 100644 --- a/docs/d9/d7b/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData.html +++ b/docs/d9/d7b/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData.html @@ -132,7 +132,7 @@ int64_t video_sample_durat diff --git a/docs/d9/d86/limits_8h_source.html b/docs/d9/d86/limits_8h_source.html index deb54c44e8..2ad3e71c76 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/d8b/classedash__packager_1_1media_1_1KeySource.html b/docs/d9/d8b/classedash__packager_1_1media_1_1KeySource.html index 3f080b46bb..63833e8155 100644 --- a/docs/d9/d8b/classedash__packager_1_1media_1_1KeySource.html +++ b/docs/d9/d8b/classedash__packager_1_1media_1_1KeySource.html @@ -582,7 +582,7 @@ Static Protected Member Functions diff --git a/docs/d9/d90/text__track_8h_source.html b/docs/d9/d90/text__track_8h_source.html index 49babc0036..485755fe6a 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/d91/h264__bit__reader_8h_source.html b/docs/d9/d91/h264__bit__reader_8h_source.html index 6e4953a6a5..43fb716ae9 100644 --- a/docs/d9/d91/h264__bit__reader_8h_source.html +++ b/docs/d9/d91/h264__bit__reader_8h_source.html @@ -170,7 +170,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 538900367e..fc76319071 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/d95/classedash__packager_1_1media_1_1MediaStream-members.html b/docs/d9/d95/classedash__packager_1_1media_1_1MediaStream-members.html index f00e122918..ef3c7ae63d 100644 --- a/docs/d9/d95/classedash__packager_1_1media_1_1MediaStream-members.html +++ b/docs/d9/d95/classedash__packager_1_1media_1_1MediaStream-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d99/classedash__packager_1_1media_1_1DecryptConfig-members.html b/docs/d9/d99/classedash__packager_1_1media_1_1DecryptConfig-members.html index 1ac37f854f..c15f5956d2 100644 --- a/docs/d9/d99/classedash__packager_1_1media_1_1DecryptConfig-members.html +++ b/docs/d9/d99/classedash__packager_1_1media_1_1DecryptConfig-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/d9b/structedash__packager_1_1SegmentInfo.html b/docs/d9/d9b/structedash__packager_1_1SegmentInfo.html index 78a5a7a64e..947b8ab31e 100644 --- a/docs/d9/d9b/structedash__packager_1_1SegmentInfo.html +++ b/docs/d9/d9b/structedash__packager_1_1SegmentInfo.html @@ -118,7 +118,7 @@ uint64_t repeat diff --git a/docs/d9/da4/stream__descriptor_8h_source.html b/docs/d9/da4/stream__descriptor_8h_source.html index 9d57e90ee7..2bb41b9c62 100644 --- a/docs/d9/da4/stream__descriptor_8h_source.html +++ b/docs/d9/da4/stream__descriptor_8h_source.html @@ -138,7 +138,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/db4/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener.html b/docs/d9/db4/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener.html index a1e905b0b0..56b2f063c4 100644 --- a/docs/d9/db4/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener.html +++ b/docs/d9/db4/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener.html @@ -201,7 +201,7 @@ Additional Inherited Members diff --git a/docs/d9/db9/content__protection__element_8cc_source.html b/docs/d9/db9/content__protection__element_8cc_source.html index d4f8b8815f..69667e1a20 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 95df8f66fc..cc4b95c637 100644 --- a/docs/d9/db9/muxer_8cc_source.html +++ b/docs/d9/db9/muxer_8cc_source.html @@ -214,7 +214,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 91acecf72c..8381de004b 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/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html b/docs/d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html index aada5170b3..d29eb9d7f4 100644 --- a/docs/d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html +++ b/docs/d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html @@ -146,7 +146,7 @@ Additional Inherited Members

            Detailed Description

            -

            Definition at line 213 of file box_definitions.h.

            +

            Definition at line 199 of file box_definitions.h.

            Member Function Documentation

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

            Implements edash_packager::media::mp4::Box.

            -

            Definition at line 1051 of file box_definitions.cc.

            +

            Definition at line 1021 of file box_definitions.cc.

            @@ -183,7 +183,7 @@ Additional Inherited Members diff --git a/docs/d9/dcc/webm__video__client_8h_source.html b/docs/d9/dcc/webm__video__client_8h_source.html index c4d7e84c92..a921f64fc5 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 0dc93c7ee5..beefc0505e 100644 --- a/docs/d9/de3/muxer__listener__internal_8cc_source.html +++ b/docs/d9/de3/muxer__listener__internal_8cc_source.html @@ -326,7 +326,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/d9/dec/classedash__packager_1_1media_1_1RequestSigner-members.html b/docs/d9/dec/classedash__packager_1_1media_1_1RequestSigner-members.html index dab6d061d0..b8eb3d9f6a 100644 --- a/docs/d9/dec/classedash__packager_1_1media_1_1RequestSigner-members.html +++ b/docs/d9/dec/classedash__packager_1_1media_1_1RequestSigner-members.html @@ -100,7 +100,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 4952a84411..b5017a3f9a 100644 --- a/docs/d9/ded/aac__audio__specific__config_8cc_source.html +++ b/docs/d9/ded/aac__audio__specific__config_8cc_source.html @@ -357,7 +357,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d02/structedash__packager_1_1media_1_1H264WeightingFactors-members.html b/docs/da/d02/structedash__packager_1_1media_1_1H264WeightingFactors-members.html index 2bfee41cac..66e2cf5f3e 100644 --- a/docs/da/d02/structedash__packager_1_1media_1_1H264WeightingFactors-members.html +++ b/docs/da/d02/structedash__packager_1_1media_1_1H264WeightingFactors-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d02/structedash__packager_1_1media_1_1mp4_1_1SyncSample-members.html b/docs/da/d02/structedash__packager_1_1media_1_1mp4_1_1SyncSample-members.html index c9244056e7..afb665a5c5 100644 --- a/docs/da/d02/structedash__packager_1_1media_1_1mp4_1_1SyncSample-members.html +++ b/docs/da/d02/structedash__packager_1_1media_1_1mp4_1_1SyncSample-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d04/audio__stream__info_8cc_source.html b/docs/da/d04/audio__stream__info_8cc_source.html index 6a3d7303e7..280b635133 100644 --- a/docs/da/d04/audio__stream__info_8cc_source.html +++ b/docs/da/d04/audio__stream__info_8cc_source.html @@ -210,7 +210,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d15/structedash__packager_1_1media_1_1mp4_1_1HandlerReference-members.html b/docs/da/d15/structedash__packager_1_1media_1_1mp4_1_1HandlerReference-members.html index 3c4a9f98c1..8153189d4a 100644 --- a/docs/da/d15/structedash__packager_1_1media_1_1mp4_1_1HandlerReference-members.html +++ b/docs/da/d15/structedash__packager_1_1media_1_1mp4_1_1HandlerReference-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html b/docs/da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html index 0f28e61da9..6b5633db61 100644 --- a/docs/da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html +++ b/docs/da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html @@ -143,7 +143,7 @@ Additional Inherited Members

            Detailed Description

            -

            Definition at line 403 of file box_definitions.h.

            +

            Definition at line 393 of file box_definitions.h.

            Member Function Documentation

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

            Implements edash_packager::media::mp4::Box.

            -

            Definition at line 1362 of file box_definitions.cc.

            +

            Definition at line 1332 of file box_definitions.cc.

            @@ -180,7 +180,7 @@ Additional Inherited Members diff --git a/docs/da/d1e/classedash__packager_1_1media_1_1StreamInfo-members.html b/docs/da/d1e/classedash__packager_1_1media_1_1StreamInfo-members.html index b227ff14bf..16b5474aa2 100644 --- a/docs/da/d1e/classedash__packager_1_1media_1_1StreamInfo-members.html +++ b/docs/da/d1e/classedash__packager_1_1media_1_1StreamInfo-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d22/key__rotation__fragmenter_8h_source.html b/docs/da/d22/key__rotation__fragmenter_8h_source.html index eb485f753c..ddc2fb26e2 100644 --- a/docs/da/d22/key__rotation__fragmenter_8h_source.html +++ b/docs/da/d22/key__rotation__fragmenter_8h_source.html @@ -149,12 +149,12 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
            KeySource is responsible for encryption key acquisition.
            Definition: key_source.h:29
            - - + + diff --git a/docs/da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html b/docs/da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html index c7f6ef5592..016e12d20d 100644 --- a/docs/da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html +++ b/docs/da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html @@ -298,7 +298,7 @@ Static Public Member Functions diff --git a/docs/da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html b/docs/da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html index f213422574..10ea0842b4 100644 --- a/docs/da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html +++ b/docs/da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html @@ -149,7 +149,7 @@ Additional Inherited Members

            Detailed Description

            -

            Definition at line 51 of file box_definitions.h.

            +

            Definition at line 50 of file box_definitions.h.

            Member Function Documentation

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

            Implements edash_packager::media::mp4::Box.

            -

            Definition at line 130 of file box_definitions.cc.

            +

            Definition at line 132 of file box_definitions.cc.

            @@ -186,7 +186,7 @@ Additional Inherited Members diff --git a/docs/da/d37/classedash__packager_1_1media_1_1IoCache-members.html b/docs/da/d37/classedash__packager_1_1media_1_1IoCache-members.html index 7041732bd2..b0881de355 100644 --- a/docs/da/d37/classedash__packager_1_1media_1_1IoCache-members.html +++ b/docs/da/d37/classedash__packager_1_1media_1_1IoCache-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d38/classedash__packager_1_1MpdNotifier.html b/docs/da/d38/classedash__packager_1_1MpdNotifier.html index acf128efd2..92a0039079 100644 --- a/docs/da/d38/classedash__packager_1_1MpdNotifier.html +++ b/docs/da/d38/classedash__packager_1_1MpdNotifier.html @@ -472,7 +472,7 @@ Public Member Functions diff --git a/docs/da/d40/classedash__packager_1_1media_1_1RsaPrivateKey-members.html b/docs/da/d40/classedash__packager_1_1media_1_1RsaPrivateKey-members.html index 15259fef5e..78def7d191 100644 --- a/docs/da/d40/classedash__packager_1_1media_1_1RsaPrivateKey-members.html +++ b/docs/da/d40/classedash__packager_1_1media_1_1RsaPrivateKey-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d47/structedash__packager_1_1media_1_1H264PPS-members.html b/docs/da/d47/structedash__packager_1_1media_1_1H264PPS-members.html index 4da6c2ecc3..15ce746ec0 100644 --- a/docs/da/d47/structedash__packager_1_1media_1_1H264PPS-members.html +++ b/docs/da/d47/structedash__packager_1_1media_1_1H264PPS-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d49/classedash__packager_1_1DashIopMpdNotifier.html b/docs/da/d49/classedash__packager_1_1DashIopMpdNotifier.html index 1471843bf5..044ed30610 100644 --- a/docs/da/d49/classedash__packager_1_1DashIopMpdNotifier.html +++ b/docs/da/d49/classedash__packager_1_1DashIopMpdNotifier.html @@ -473,7 +473,7 @@ class DashIopMpdNotifierTe diff --git a/docs/da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html b/docs/da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html index 2687bb8686..0a6c2462a1 100644 --- a/docs/da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html +++ b/docs/da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html @@ -135,7 +135,7 @@ Additional Inherited Members

            Detailed Description

            -

            Definition at line 73 of file box_definitions.h.

            +

            Definition at line 72 of file box_definitions.h.

            Member Function Documentation

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

            Implements edash_packager::media::mp4::Box.

            -

            Definition at line 205 of file box_definitions.cc.

            +

            Definition at line 207 of file box_definitions.cc.

            @@ -172,7 +172,7 @@ Additional Inherited Members diff --git a/docs/da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html b/docs/da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html index e24f12c2ea..bd36248103 100644 --- a/docs/da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html +++ b/docs/da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html @@ -143,7 +143,7 @@ Additional Inherited Members

            Detailed Description

            -

            Definition at line 262 of file box_definitions.h.

            +

            Definition at line 252 of file box_definitions.h.

            Member Function Documentation

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

            Implements edash_packager::media::mp4::Box.

            -

            Definition at line 514 of file box_definitions.cc.

            +

            Definition at line 516 of file box_definitions.cc.

            @@ -180,7 +180,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 dda0827ec1..503cc06cff 100644 --- a/docs/da/d5c/widevine__key__source_8h_source.html +++ b/docs/da/d5c/widevine__key__source_8h_source.html @@ -217,7 +217,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d60/structedash__packager_1_1media_1_1EncryptionKey-members.html b/docs/da/d60/structedash__packager_1_1media_1_1EncryptionKey-members.html index 6a1d9f9f87..a957d25c2d 100644 --- a/docs/da/d60/structedash__packager_1_1media_1_1EncryptionKey-members.html +++ b/docs/da/d60/structedash__packager_1_1media_1_1EncryptionKey-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d72/classedash__packager_1_1media_1_1mp2t_1_1EsParser-members.html b/docs/da/d72/classedash__packager_1_1media_1_1mp2t_1_1EsParser-members.html index a43d2bf380..20a459c95f 100644 --- a/docs/da/d72/classedash__packager_1_1media_1_1mp2t_1_1EsParser-members.html +++ b/docs/da/d72/classedash__packager_1_1media_1_1mp2t_1_1EsParser-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/d75/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html b/docs/da/d75/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html index 5cfe9faa33..aa0ba41d02 100644 --- a/docs/da/d75/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html +++ b/docs/da/d75/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html @@ -259,7 +259,7 @@ void set_progress_target diff --git a/docs/da/d7a/classedash__packager_1_1media_1_1AVCDecoderConfiguration-members.html b/docs/da/d7a/classedash__packager_1_1media_1_1AVCDecoderConfiguration-members.html new file mode 100644 index 0000000000..bd0dd67094 --- /dev/null +++ b/docs/da/d7a/classedash__packager_1_1media_1_1AVCDecoderConfiguration-members.html @@ -0,0 +1,118 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
            +
            + + + + + + +
            +
            DASH Media Packaging SDK +
            +
            +
            + + + + + + + + + +
            + +
            + + +
            +
            +
            +
            edash_packager::media::AVCDecoderConfiguration Member List
            +
            +
            + +

            This is the complete list of members for edash_packager::media::AVCDecoderConfiguration, including all inherited members.

            + + + + + + + + + + + + + + + +
            avc_level() const (defined in edash_packager::media::AVCDecoderConfiguration)edash_packager::media::AVCDecoderConfigurationinline
            AVCDecoderConfiguration() (defined in edash_packager::media::AVCDecoderConfiguration)edash_packager::media::AVCDecoderConfiguration
            coded_height() const (defined in edash_packager::media::AVCDecoderConfiguration)edash_packager::media::AVCDecoderConfigurationinline
            coded_width() const (defined in edash_packager::media::AVCDecoderConfiguration)edash_packager::media::AVCDecoderConfigurationinline
            GetCodecString() const edash_packager::media::AVCDecoderConfiguration
            GetCodecString(uint8_t profile_indication, uint8_t profile_compatibility, uint8_t avc_level)edash_packager::media::AVCDecoderConfigurationstatic
            length_size() const (defined in edash_packager::media::AVCDecoderConfiguration)edash_packager::media::AVCDecoderConfigurationinline
            Parse(const std::vector< uint8_t > &data)edash_packager::media::AVCDecoderConfiguration
            pixel_height() const (defined in edash_packager::media::AVCDecoderConfiguration)edash_packager::media::AVCDecoderConfigurationinline
            pixel_width() const (defined in edash_packager::media::AVCDecoderConfiguration)edash_packager::media::AVCDecoderConfigurationinline
            profile_compatibility() const (defined in edash_packager::media::AVCDecoderConfiguration)edash_packager::media::AVCDecoderConfigurationinline
            profile_indication() const (defined in edash_packager::media::AVCDecoderConfiguration)edash_packager::media::AVCDecoderConfigurationinline
            version() const (defined in edash_packager::media::AVCDecoderConfiguration)edash_packager::media::AVCDecoderConfigurationinline
            ~AVCDecoderConfiguration() (defined in edash_packager::media::AVCDecoderConfiguration)edash_packager::media::AVCDecoderConfiguration
            + + + + 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 60fdfe3de5..6606082511 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/d7d/classedash__packager_1_1media_1_1StreamDescriptorCompareFn.html b/docs/da/d7d/classedash__packager_1_1media_1_1StreamDescriptorCompareFn.html index 23da30f3ab..e25b556d83 100644 --- a/docs/da/d7d/classedash__packager_1_1media_1_1StreamDescriptorCompareFn.html +++ b/docs/da/d7d/classedash__packager_1_1media_1_1StreamDescriptorCompareFn.html @@ -109,7 +109,7 @@ bool operator() (const diff --git a/docs/da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html b/docs/da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html index 933deb5921..a95addcbeb 100644 --- a/docs/da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html +++ b/docs/da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html @@ -144,7 +144,7 @@ Additional Inherited Members

            Detailed Description

            -

            Definition at line 299 of file box_definitions.h.

            +

            Definition at line 289 of file box_definitions.h.

            Member Function Documentation

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

            Reimplemented in edash_packager::media::mp4::ChunkOffset.

            -

            Definition at line 686 of file box_definitions.cc.

            +

            Definition at line 688 of file box_definitions.cc.

            @@ -183,7 +183,7 @@ Additional Inherited Members diff --git a/docs/da/d88/mp4__muxer_8cc_source.html b/docs/da/d88/mp4__muxer_8cc_source.html index 29cbb0f39c..d7d2e6fd28 100644 --- a/docs/da/d88/mp4__muxer_8cc_source.html +++ b/docs/da/d88/mp4__muxer_8cc_source.html @@ -268,7 +268,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
            179  video.format = FOURCC_AVC1;
            180  video.width = video_info->width();
            181  video.height = video_info->height();
            -
            182  video.avcc.data = video_info->extra_data();
            +
            182  video.codec_config_record.data = video_info->extra_data();
            183  if (pixel_width != 1 || pixel_height != 1) {
            184  video.pixel_aspect.h_spacing = pixel_width;
            185  video.pixel_aspect.v_spacing = pixel_height;
            @@ -404,7 +404,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 0d00a8e8de..a876b1b5bc 100644 --- a/docs/da/d8e/container__names_8cc_source.html +++ b/docs/da/d8e/container__names_8cc_source.html @@ -1763,7 +1763,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html b/docs/da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html index 2b03d30ae4..f161e90fdc 100644 --- a/docs/da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html +++ b/docs/da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html @@ -143,7 +143,7 @@ Additional Inherited Members

            Detailed Description

            -

            Definition at line 352 of file box_definitions.h.

            +

            Definition at line 342 of file box_definitions.h.

            Member Function Documentation

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

            Implements edash_packager::media::mp4::Box.

            -

            Definition at line 1208 of file box_definitions.cc.

            +

            Definition at line 1178 of file box_definitions.cc.

            @@ -180,7 +180,7 @@ Additional Inherited Members diff --git a/docs/da/dc3/status_8cc_source.html b/docs/da/dc3/status_8cc_source.html index 9c2cdc7ce6..909bd23e86 100644 --- a/docs/da/dc3/status_8cc_source.html +++ b/docs/da/dc3/status_8cc_source.html @@ -167,7 +167,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/dcb/es__descriptor_8h_source.html b/docs/da/dcb/es__descriptor_8h_source.html index 18e3cdc6cd..a55f8824a6 100644 --- a/docs/da/dcb/es__descriptor_8h_source.html +++ b/docs/da/dcb/es__descriptor_8h_source.html @@ -172,7 +172,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/da/dd0/webm__info__parser_8h_source.html b/docs/da/dd0/webm__info__parser_8h_source.html index 5941fc136c..768460361e 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 9f5444abbf..96b62de4af 100644 --- a/docs/da/dd1/fragmenter_8h_source.html +++ b/docs/da/dd1/fragmenter_8h_source.html @@ -190,15 +190,15 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
            virtual Status InitializeFragment(int64_t first_sample_dts)
            Definition: fragmenter.cc:73
            virtual Status AddSample(scoped_refptr< MediaSample > sample)
            Definition: fragmenter.cc:36
            - +
            bool OptimizeSampleEntries(std::vector< T > *entries, T *default_value)
            Definition: fragmenter.h:90
            - +
            virtual void FinalizeFragment()
            Finalize and optimize the fragment.
            Definition: fragmenter.cc:91
            diff --git a/docs/da/de2/mock__mpd__builder_8cc_source.html b/docs/da/de2/mock__mpd__builder_8cc_source.html index c1930262cd..05517b38c6 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/classedash__packager_1_1media_1_1AudioTimestampHelper.html b/docs/da/de4/classedash__packager_1_1media_1_1AudioTimestampHelper.html index da6c0f26e8..11f1a67a95 100644 --- a/docs/da/de4/classedash__packager_1_1media_1_1AudioTimestampHelper.html +++ b/docs/da/de4/classedash__packager_1_1media_1_1AudioTimestampHelper.html @@ -131,7 +131,7 @@ int64_t GetFramesToTarget< diff --git a/docs/da/dfe/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset.html b/docs/da/dfe/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset.html index 94f7fef01b..db23d9f690 100644 --- a/docs/da/dfe/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset.html +++ b/docs/da/dfe/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset.html @@ -105,14 +105,14 @@ int64_t sample_offset<

            Detailed Description

            -

            Definition at line 253 of file box_definitions.h.

            +

            Definition at line 243 of file box_definitions.h.


            The documentation for this struct was generated from the following file: diff --git a/docs/db/d01/avc__decoder__configuration_8cc_source.html b/docs/db/d01/avc__decoder__configuration_8cc_source.html new file mode 100644 index 0000000000..aea047db6a --- /dev/null +++ b/docs/db/d01/avc__decoder__configuration_8cc_source.html @@ -0,0 +1,179 @@ + + + + + + +DASH Media Packaging SDK: media/filters/avc_decoder_configuration.cc Source File + + + + + + + + + +
            +
            + + + + + + +
            +
            DASH Media Packaging SDK +
            +
            +
            + + + + + + + + + +
            + +
            + + +
            +
            +
            +
            avc_decoder_configuration.cc
            +
            +
            +
            1 // Copyright 2015 Google Inc. All rights reserved.
            +
            2 //
            +
            3 // Use of this source code is governed by a BSD-style
            +
            4 // license that can be found in the LICENSE file or at
            +
            5 // https://developers.google.com/open-source/licenses/bsd
            +
            6 
            +
            7 #include "packager/media/filters/avc_decoder_configuration.h"
            +
            8 
            +
            9 #include "packager/base/stl_util.h"
            +
            10 #include "packager/base/strings/string_number_conversions.h"
            +
            11 #include "packager/base/strings/string_util.h"
            +
            12 #include "packager/media/base/buffer_reader.h"
            +
            13 #include "packager/media/filters/h264_parser.h"
            +
            14 #include "packager/media/formats/mp4/rcheck.h"
            +
            15 
            +
            16 namespace edash_packager {
            +
            17 namespace media {
            +
            18 
            +
            19 AVCDecoderConfiguration::AVCDecoderConfiguration()
            +
            20  : version_(0),
            +
            21  profile_indication_(0),
            +
            22  profile_compatibility_(0),
            +
            23  avc_level_(0),
            +
            24  length_size_(0) {}
            +
            25 
            +
            26 AVCDecoderConfiguration::~AVCDecoderConfiguration() {}
            +
            27 
            +
            28 bool AVCDecoderConfiguration::Parse(const std::vector<uint8_t>& data) {
            +
            29  BufferReader reader(vector_as_array(&data), data.size());
            +
            30  RCHECK(reader.Read1(&version_) && version_ == 1 &&
            +
            31  reader.Read1(&profile_indication_) &&
            +
            32  reader.Read1(&profile_compatibility_) && reader.Read1(&avc_level_));
            +
            33 
            +
            34  uint8_t length_size_minus_one;
            +
            35  RCHECK(reader.Read1(&length_size_minus_one));
            +
            36  length_size_ = (length_size_minus_one & 0x3) + 1;
            +
            37 
            +
            38  uint8_t num_sps;
            +
            39  RCHECK(reader.Read1(&num_sps));
            +
            40  num_sps &= 0x1f;
            +
            41  if (num_sps < 1) {
            +
            42  LOG(ERROR) << "No SPS found.";
            +
            43  return false;
            +
            44  }
            +
            45 
            +
            46  uint16_t sps_length = 0;
            +
            47  RCHECK(reader.Read2(&sps_length));
            +
            48 
            +
            49  H264Parser parser;
            +
            50  int sps_id = 0;
            +
            51  RCHECK(parser.ParseSPSFromArray(reader.data() + reader.pos(), sps_length,
            +
            52  &sps_id) == H264Parser::kOk);
            +
            53  return ExtractResolutionFromSps(*parser.GetSPS(sps_id), &coded_width_,
            +
            54  &coded_height_, &pixel_width_,
            +
            55  &pixel_height_);
            +
            56  // It is unlikely to have more than one SPS in practice. Also there's
            +
            57  // no way to change the {coded,pixel}_{width,height} dynamically from
            +
            58  // VideoStreamInfo. So skip the rest (if there are any).
            +
            59 }
            +
            60 
            + +
            62  return GetCodecString(profile_indication_, profile_compatibility_,
            +
            63  avc_level_);
            +
            64 }
            +
            65 
            + +
            67  uint8_t profile_indication,
            +
            68  uint8_t profile_compatibility,
            +
            69  uint8_t avc_level) {
            +
            70  const uint8_t bytes[] = {profile_indication, profile_compatibility,
            +
            71  avc_level};
            +
            72  return "avc1." +
            +
            73  base::StringToLowerASCII(base::HexEncode(bytes, arraysize(bytes)));
            +
            74 }
            +
            75 
            +
            76 } // namespace media
            +
            77 } // namespace edash_packager
            + + +
            bool Parse(const std::vector< uint8_t > &data)
            + +
            + + + + diff --git a/docs/db/d01/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator.html b/docs/db/d01/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator.html index 933184266d..5643698d5f 100644 --- a/docs/db/d01/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator.html +++ b/docs/db/d01/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator.html @@ -177,7 +177,7 @@ Public Member Functions diff --git a/docs/db/d09/namespaceedash__packager.html b/docs/db/d09/namespaceedash__packager.html index d62ab0994f..2023698652 100644 --- a/docs/db/d09/namespaceedash__packager.html +++ b/docs/db/d09/namespaceedash__packager.html @@ -550,7 +550,7 @@ const char kEncryptedMp4Va diff --git a/docs/db/d11/classedash__packager_1_1media_1_1ContentEncoding-members.html b/docs/db/d11/classedash__packager_1_1media_1_1ContentEncoding-members.html index 5bb22f66b5..89594cac0f 100644 --- a/docs/db/d11/classedash__packager_1_1media_1_1ContentEncoding-members.html +++ b/docs/db/d11/classedash__packager_1_1media_1_1ContentEncoding-members.html @@ -132,7 +132,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d15/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample-members.html b/docs/db/d15/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample-members.html index 24ac0bdc02..60c703549d 100644 --- a/docs/db/d15/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample-members.html +++ b/docs/db/d15/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d23/classedash__packager_1_1media_1_1WebMTracksParser.html b/docs/db/d23/classedash__packager_1_1media_1_1WebMTracksParser.html index 4f334c504f..99ec39f066 100644 --- a/docs/db/d23/classedash__packager_1_1media_1_1WebMTracksParser.html +++ b/docs/db/d23/classedash__packager_1_1media_1_1WebMTracksParser.html @@ -225,7 +225,7 @@ The number of bytes parsed on success. diff --git a/docs/db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html b/docs/db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html index a202533f4a..9d67a5b7a3 100644 --- a/docs/db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html +++ b/docs/db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html @@ -412,7 +412,7 @@ bool is_keyframe () co diff --git a/docs/db/d2e/classedash__packager_1_1MockMpdBuilder.html b/docs/db/d2e/classedash__packager_1_1MockMpdBuilder.html index 531be5642d..2b5bd373eb 100644 --- a/docs/db/d2e/classedash__packager_1_1MockMpdBuilder.html +++ b/docs/db/d2e/classedash__packager_1_1MockMpdBuilder.html @@ -149,7 +149,7 @@ Additional Inherited Members diff --git a/docs/db/d31/track__run__iterator_8cc_source.html b/docs/db/d31/track__run__iterator_8cc_source.html index fd19c9dd07..80c89f9333 100644 --- a/docs/db/d31/track__run__iterator_8cc_source.html +++ b/docs/db/d31/track__run__iterator_8cc_source.html @@ -656,7 +656,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); - +
            scoped_ptr< DecryptConfig > GetDecryptConfig()
            @@ -667,39 +667,39 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); - +
            uint32_t NumSamples(uint32_t start_chunk, uint32_t end_chunk) const
            - + - + - - + + - + - + - - + + diff --git a/docs/db/d44/structedash__packager_1_1media_1_1mp4_1_1DataReference-members.html b/docs/db/d44/structedash__packager_1_1media_1_1mp4_1_1DataReference-members.html index cfd061cd3d..2d12511d6f 100644 --- a/docs/db/d44/structedash__packager_1_1media_1_1mp4_1_1DataReference-members.html +++ b/docs/db/d44/structedash__packager_1_1media_1_1mp4_1_1DataReference-members.html @@ -111,7 +111,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 0ba7b7c96d..c095c46ed1 100644 --- a/docs/db/d45/mpd__notify__muxer__listener_8h_source.html +++ b/docs/db/d45/mpd__notify__muxer__listener_8h_source.html @@ -186,7 +186,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d49/multi__segment__segmenter_8h_source.html b/docs/db/d49/multi__segment__segmenter_8h_source.html index a9f076fce4..f67e7cecc7 100644 --- a/docs/db/d49/multi__segment__segmenter_8h_source.html +++ b/docs/db/d49/multi__segment__segmenter_8h_source.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d4e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi.html b/docs/db/d4e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi.html index 792cd6f63e..9668a4fc69 100644 --- a/docs/db/d4e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi.html +++ b/docs/db/d4e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi.html @@ -147,7 +147,7 @@ Additional Inherited Members diff --git a/docs/db/d51/mp2t__media__parser_8h_source.html b/docs/db/d51/mp2t__media__parser_8h_source.html index 9742d31073..c6de661744 100644 --- a/docs/db/d51/mp2t__media__parser_8h_source.html +++ b/docs/db/d51/mp2t__media__parser_8h_source.html @@ -195,7 +195,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d56/classedash__packager_1_1SimpleMpdNotifier.html b/docs/db/d56/classedash__packager_1_1SimpleMpdNotifier.html index 355d34eafe..190a08f347 100644 --- a/docs/db/d56/classedash__packager_1_1SimpleMpdNotifier.html +++ b/docs/db/d56/classedash__packager_1_1SimpleMpdNotifier.html @@ -471,7 +471,7 @@ class SimpleMpdNotifierTes diff --git a/docs/db/d60/mpd__options_8h_source.html b/docs/db/d60/mpd__options_8h_source.html index 0e152c4084..e1e13eca79 100644 --- a/docs/db/d60/mpd__options_8h_source.html +++ b/docs/db/d60/mpd__options_8h_source.html @@ -124,7 +124,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d61/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter-members.html b/docs/db/d61/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter-members.html index fb8925a1d4..56ffe1a1c2 100644 --- a/docs/db/d61/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter-members.html +++ b/docs/db/d61/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter-members.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html b/docs/db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html index fab51626d4..cbf9c43f6e 100644 --- a/docs/db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html +++ b/docs/db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html @@ -336,7 +336,7 @@ Static Public Member Functions diff --git a/docs/db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html b/docs/db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html index 8d73a22cc5..434e06c48d 100644 --- a/docs/db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html +++ b/docs/db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html @@ -494,7 +494,7 @@ template<typename T > diff --git a/docs/db/d71/http__key__fetcher_8h_source.html b/docs/db/d71/http__key__fetcher_8h_source.html index 1d7d76865d..d0a888de50 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/d79/structedash__packager_1_1media_1_1mp4_1_1EditListEntry-members.html b/docs/db/d79/structedash__packager_1_1media_1_1mp4_1_1EditListEntry-members.html index 1c6b03b9a4..f08d8a427e 100644 --- a/docs/db/d79/structedash__packager_1_1media_1_1mp4_1_1EditListEntry-members.html +++ b/docs/db/d79/structedash__packager_1_1media_1_1mp4_1_1EditListEntry-members.html @@ -100,7 +100,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 d5783ccca6..6b63f2ac19 100644 --- a/docs/db/d7e/muxer__options_8cc_source.html +++ b/docs/db/d7e/muxer__options_8cc_source.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html b/docs/db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html index ac3a8c8069..691c9f5aee 100644 --- a/docs/db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html +++ b/docs/db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html @@ -146,7 +146,7 @@ Additional Inherited Members

            Detailed Description

            -

            Definition at line 291 of file box_definitions.h.

            +

            Definition at line 281 of file box_definitions.h.

            Member Function Documentation

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

            Implements edash_packager::media::mp4::Box.

            -

            Definition at line 631 of file box_definitions.cc.

            +

            Definition at line 633 of file box_definitions.cc.

            @@ -183,7 +183,7 @@ Additional Inherited Members diff --git a/docs/db/d8f/mp4__muxer_8h_source.html b/docs/db/d8f/mp4__muxer_8h_source.html index b18ec31e5d..96137d57f8 100644 --- a/docs/db/d8f/mp4__muxer_8h_source.html +++ b/docs/db/d8f/mp4__muxer_8h_source.html @@ -169,13 +169,13 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
            Holds video stream information.
            - +
            This structure contains the list of configuration options for Muxer.
            Definition: muxer_options.h:18
            diff --git a/docs/db/d96/wvm__media__parser_8h_source.html b/docs/db/d96/wvm__media__parser_8h_source.html index 8e6fdc5def..b77b142f91 100644 --- a/docs/db/d96/wvm__media__parser_8h_source.html +++ b/docs/db/d96/wvm__media__parser_8h_source.html @@ -365,7 +365,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/d97/classedash__packager_1_1media_1_1WebMContentEncodingsClient-members.html b/docs/db/d97/classedash__packager_1_1media_1_1WebMContentEncodingsClient-members.html index 1dfc2c6ff5..470330d551 100644 --- a/docs/db/d97/classedash__packager_1_1media_1_1WebMContentEncodingsClient-members.html +++ b/docs/db/d97/classedash__packager_1_1media_1_1WebMContentEncodingsClient-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/da0/classedash__packager_1_1media_1_1WebMClusterParser.html b/docs/db/da0/classedash__packager_1_1media_1_1WebMClusterParser.html index dbf5f42788..3339bffd26 100644 --- a/docs/db/da0/classedash__packager_1_1media_1_1WebMClusterParser.html +++ b/docs/db/da0/classedash__packager_1_1media_1_1WebMClusterParser.html @@ -272,7 +272,7 @@ The number of bytes parsed on success. diff --git a/docs/db/da4/classBandwidthEstimator-members.html b/docs/db/da4/classBandwidthEstimator-members.html index a2303bca7a..100d7508bc 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/da4/classedash__packager_1_1media_1_1WidevineKeySource.html b/docs/db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html index 6d603f76b0..b9a456264b 100644 --- a/docs/db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html +++ b/docs/db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html @@ -559,7 +559,7 @@ static std::string  diff --git a/docs/db/da5/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry-members.html b/docs/db/da5/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry-members.html index 70b75cd4b9..26629b7a32 100644 --- a/docs/db/da5/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry-members.html +++ b/docs/db/da5/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html b/docs/db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html index 8d15be7639..078fa90c16 100644 --- a/docs/db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html +++ b/docs/db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html @@ -302,7 +302,7 @@ template<typename T > diff --git a/docs/db/dc8/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt-members.html b/docs/db/dc8/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt-members.html index 7dfdd4e0bb..88896bbc1d 100644 --- a/docs/db/dc8/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt-members.html +++ b/docs/db/dc8/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dd2/chunk__info__iterator_8h_source.html b/docs/db/dd2/chunk__info__iterator_8h_source.html index 8bf5346d4d..685471f2ab 100644 --- a/docs/db/dd2/chunk__info__iterator_8h_source.html +++ b/docs/db/dd2/chunk__info__iterator_8h_source.html @@ -148,7 +148,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
            74 
            75 #endif // MEDIA_FORMATS_MP4_CHUNK_INFO_ITERATOR_H_
            - +
            uint32_t NumSamples(uint32_t start_chunk, uint32_t end_chunk) const
            @@ -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 2e28da36e2..56a8db5d89 100644 --- a/docs/db/dd9/sync__sample__iterator_8h_source.html +++ b/docs/db/dd9/sync__sample__iterator_8h_source.html @@ -133,14 +133,14 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
            51 
            52 #endif // MEDIA_FORMATS_MP4_SYNC_SAMPLE_ITERATOR_H_
            SyncSampleIterator(const SyncSample &sync_sample)
            Create a new SyncSampleIterator from sync sample box.
            - + diff --git a/docs/db/de4/classedash__packager_1_1AdaptationSet.html b/docs/db/de4/classedash__packager_1_1AdaptationSet.html index cd56398a35..9602409f8a 100644 --- a/docs/db/de4/classedash__packager_1_1AdaptationSet.html +++ b/docs/db/de4/classedash__packager_1_1AdaptationSet.html @@ -570,7 +570,7 @@ class MpdBuilder< diff --git a/docs/db/de9/classedash__packager_1_1media_1_1StreamDescriptorCompareFn-members.html b/docs/db/de9/classedash__packager_1_1media_1_1StreamDescriptorCompareFn-members.html index c4bc6740e4..b4b9d9b382 100644 --- a/docs/db/de9/classedash__packager_1_1media_1_1StreamDescriptorCompareFn-members.html +++ b/docs/db/de9/classedash__packager_1_1media_1_1StreamDescriptorCompareFn-members.html @@ -97,7 +97,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 a0200b9f75..94c58a9b31 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/ded/opus__packet__builder_8cc_source.html b/docs/db/ded/opus__packet__builder_8cc_source.html index 4fa1af0375..03d80745a6 100644 --- a/docs/db/ded/opus__packet__builder_8cc_source.html +++ b/docs/db/ded/opus__packet__builder_8cc_source.html @@ -182,7 +182,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/df2/classedash__packager_1_1media_1_1mp2t_1_1EsParser.html b/docs/db/df2/classedash__packager_1_1media_1_1mp2t_1_1EsParser.html index 5bd9ad15af..d1e99e2cae 100644 --- a/docs/db/df2/classedash__packager_1_1media_1_1mp2t_1_1EsParser.html +++ b/docs/db/df2/classedash__packager_1_1media_1_1mp2t_1_1EsParser.html @@ -144,7 +144,7 @@ uint32_t pid () diff --git a/docs/db/df6/muxer_8h_source.html b/docs/db/df6/muxer_8h_source.html index 4f95692bc4..6d01d7d000 100644 --- a/docs/db/df6/muxer_8h_source.html +++ b/docs/db/df6/muxer_8h_source.html @@ -208,7 +208,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/df7/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi-members.html b/docs/db/df7/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi-members.html index d4f9544419..ec64f040b6 100644 --- a/docs/db/df7/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi-members.html +++ b/docs/db/df7/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html b/docs/db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html index 2d8745c307..f3f9d2cffc 100644 --- a/docs/db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html +++ b/docs/db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html @@ -152,7 +152,7 @@ Additional Inherited Members

            Detailed Description

            -

            Definition at line 343 of file box_definitions.h.

            +

            Definition at line 333 of file box_definitions.h.

            Member Function Documentation

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

            Implements edash_packager::media::mp4::Box.

            -

            Definition at line 1192 of file box_definitions.cc.

            +

            Definition at line 1162 of file box_definitions.cc.

            @@ -189,7 +189,7 @@ Additional Inherited Members diff --git a/docs/db/dfb/mpd__utils_8cc_source.html b/docs/db/dfb/mpd__utils_8cc_source.html index 5556a9c8dc..80cf6167d0 100644 --- a/docs/db/dfb/mpd__utils_8cc_source.html +++ b/docs/db/dfb/mpd__utils_8cc_source.html @@ -358,7 +358,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 9da43b73d6..715312b041 100644 --- a/docs/db/dfc/mpd__notify__muxer__listener_8cc_source.html +++ b/docs/db/dfc/mpd__notify__muxer__listener_8cc_source.html @@ -265,7 +265,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/db/dfe/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor.html b/docs/db/dfe/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor.html index 88fd521f71..5e44bd1eb7 100644 --- a/docs/db/dfe/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor.html +++ b/docs/db/dfe/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor.html @@ -209,7 +209,7 @@ const std::vector< uint8_t > &  diff --git a/docs/dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.html b/docs/dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.html index fb2a0ac18a..6b3c783c78 100644 --- a/docs/dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.html +++ b/docs/dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.html @@ -286,7 +286,7 @@ Additional Inherited Members diff --git a/docs/dc/d0c/classedash__packager_1_1media_1_1WebMVideoClient.html b/docs/dc/d0c/classedash__packager_1_1media_1_1WebMVideoClient.html index 142dd04ee2..266b84d1dd 100644 --- a/docs/dc/d0c/classedash__packager_1_1media_1_1WebMVideoClient.html +++ b/docs/dc/d0c/classedash__packager_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/dc/d0d/structedash__packager_1_1media_1_1mp4_1_1EditListEntry.html b/docs/dc/d0d/structedash__packager_1_1media_1_1mp4_1_1EditListEntry.html index a23c196b79..50d842162e 100644 --- a/docs/dc/d0d/structedash__packager_1_1media_1_1mp4_1_1EditListEntry.html +++ b/docs/dc/d0d/structedash__packager_1_1media_1_1mp4_1_1EditListEntry.html @@ -111,14 +111,14 @@ int16_t media_rate_fractio

            Detailed Description

            -

            Definition at line 143 of file box_definitions.h.

            +

            Definition at line 142 of file box_definitions.h.


            The documentation for this struct was generated from the following file: diff --git a/docs/dc/d19/box_8h_source.html b/docs/dc/d19/box_8h_source.html index 59917f0560..32dcec2739 100644 --- a/docs/dc/d19/box_8h_source.html +++ b/docs/dc/d19/box_8h_source.html @@ -158,7 +158,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 4f23467b3a..99304c3af1 100644 --- a/docs/dc/d22/dash__iop__mpd__notifier_8cc_source.html +++ b/docs/dc/d22/dash__iop__mpd__notifier_8cc_source.html @@ -397,7 +397,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d23/classedash__packager_1_1MockMpdNotifier-members.html b/docs/dc/d23/classedash__packager_1_1MockMpdNotifier-members.html index c3cd457f7b..0918084c41 100644 --- a/docs/dc/d23/classedash__packager_1_1MockMpdNotifier-members.html +++ b/docs/dc/d23/classedash__packager_1_1MockMpdNotifier-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d2f/classedash__packager_1_1media_1_1KeySource-members.html b/docs/dc/d2f/classedash__packager_1_1media_1_1KeySource-members.html index 3a9fd34e82..02b94d265a 100644 --- a/docs/dc/d2f/classedash__packager_1_1media_1_1KeySource-members.html +++ b/docs/dc/d2f/classedash__packager_1_1media_1_1KeySource-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d31/classedash__packager_1_1media_1_1ClusterBuilder-members.html b/docs/dc/d31/classedash__packager_1_1media_1_1ClusterBuilder-members.html index 35d18d15e7..6b5c1f4aba 100644 --- a/docs/dc/d31/classedash__packager_1_1media_1_1ClusterBuilder-members.html +++ b/docs/dc/d31/classedash__packager_1_1media_1_1ClusterBuilder-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d35/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser-members.html b/docs/dc/d35/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser-members.html index 4dd071c1de..a6adf8447b 100644 --- a/docs/dc/d35/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser-members.html +++ b/docs/dc/d35/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser-members.html @@ -105,7 +105,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 ce72288053..c20ec7b0bd 100644 --- a/docs/dc/d3b/fixed__key__encryption__flags_8cc_source.html +++ b/docs/dc/d3b/fixed__key__encryption__flags_8cc_source.html @@ -153,7 +153,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 5d0bf77e56..1ad4a8661c 100644 --- a/docs/dc/d3c/webm__cluster__parser_8h_source.html +++ b/docs/dc/d3c/webm__cluster__parser_8h_source.html @@ -312,7 +312,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d3f/key__source_8h_source.html b/docs/dc/d3f/key__source_8h_source.html index 7e390c6783..310727c6c7 100644 --- a/docs/dc/d3f/key__source_8h_source.html +++ b/docs/dc/d3f/key__source_8h_source.html @@ -189,7 +189,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d41/classedash__packager_1_1xml_1_1RepresentationXmlNode-members.html b/docs/dc/d41/classedash__packager_1_1xml_1_1RepresentationXmlNode-members.html index ab95015951..fa1b9a571b 100644 --- a/docs/dc/d41/classedash__packager_1_1xml_1_1RepresentationXmlNode-members.html +++ b/docs/dc/d41/classedash__packager_1_1xml_1_1RepresentationXmlNode-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d44/classedash__packager_1_1xml_1_1XmlNode-members.html b/docs/dc/d44/classedash__packager_1_1xml_1_1XmlNode-members.html index 2bed81e419..92d9a119fb 100644 --- a/docs/dc/d44/classedash__packager_1_1xml_1_1XmlNode-members.html +++ b/docs/dc/d44/classedash__packager_1_1xml_1_1XmlNode-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d46/classedash__packager_1_1media_1_1Cluster-members.html b/docs/dc/d46/classedash__packager_1_1media_1_1Cluster-members.html index 8103ad3d85..f9949c74dc 100644 --- a/docs/dc/d46/classedash__packager_1_1media_1_1Cluster-members.html +++ b/docs/dc/d46/classedash__packager_1_1media_1_1Cluster-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d48/classedash__packager_1_1media_1_1MediaParser.html b/docs/dc/d48/classedash__packager_1_1media_1_1MediaParser.html index 75e860e6e6..720f06acdc 100644 --- a/docs/dc/d48/classedash__packager_1_1media_1_1MediaParser.html +++ b/docs/dc/d48/classedash__packager_1_1media_1_1MediaParser.html @@ -296,7 +296,7 @@ Public Member Functions diff --git a/docs/dc/d52/decoding__time__iterator_8h_source.html b/docs/dc/d52/decoding__time__iterator_8h_source.html index bb450a9d12..22d066be08 100644 --- a/docs/dc/d52/decoding__time__iterator_8h_source.html +++ b/docs/dc/d52/decoding__time__iterator_8h_source.html @@ -142,12 +142,12 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); - +
            uint64_t Duration(uint32_t start_sample, uint32_t end_sample) const
            diff --git a/docs/dc/d55/structedash__packager_1_1media_1_1H264SEIMessage-members.html b/docs/dc/d55/structedash__packager_1_1media_1_1H264SEIMessage-members.html index d06d456da9..f3385ca376 100644 --- a/docs/dc/d55/structedash__packager_1_1media_1_1H264SEIMessage-members.html +++ b/docs/dc/d55/structedash__packager_1_1media_1_1H264SEIMessage-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d58/webm__media__parser_8h_source.html b/docs/dc/d58/webm__media__parser_8h_source.html index 24f30c772d..d0b2a2fb62 100644 --- a/docs/dc/d58/webm__media__parser_8h_source.html +++ b/docs/dc/d58/webm__media__parser_8h_source.html @@ -177,7 +177,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/d73/classedash__packager_1_1media_1_1RequestSigner.html b/docs/dc/d73/classedash__packager_1_1media_1_1RequestSigner.html index 7470bfb4cc..347bfe5312 100644 --- a/docs/dc/d73/classedash__packager_1_1media_1_1RequestSigner.html +++ b/docs/dc/d73/classedash__packager_1_1media_1_1RequestSigner.html @@ -180,7 +180,7 @@ Protected Member Functions diff --git a/docs/dc/d7a/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html b/docs/dc/d7a/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html index 9a638ad6a9..733b497bc0 100644 --- a/docs/dc/d7a/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html +++ b/docs/dc/d7a/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html @@ -259,7 +259,7 @@ void set_progress_target diff --git a/docs/dc/d7b/closure__thread_8cc_source.html b/docs/dc/d7b/closure__thread_8cc_source.html index 9fa112e2ee..71aacdc5ae 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 a7072215f8..bd9072fbc9 100644 --- a/docs/dc/d7b/h264__parser_8cc_source.html +++ b/docs/dc/d7b/h264__parser_8cc_source.html @@ -101,1410 +101,1352 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
            12 namespace edash_packager {
            13 namespace media {
            14 
            -
            15 #define RCHECK(x) \
            -
            16  do { \
            -
            17  if (!(x)) { \
            -
            18  LOG(ERROR) << "Failure while parsing AVCDecoderConfig: " << #x; \
            -
            19  return false; \
            -
            20  } \
            -
            21  } while (0)
            -
            22 
            -
            23 bool ExtractResolutionFromDecoderConfig(const uint8_t* avc_decoder_config_data,
            -
            24  size_t avc_decoder_config_data_size,
            -
            25  uint32_t* coded_width,
            -
            26  uint32_t* coded_height,
            -
            27  uint32_t* pixel_width,
            -
            28  uint32_t* pixel_height) {
            -
            29  BufferReader reader(avc_decoder_config_data, avc_decoder_config_data_size);
            -
            30  uint8_t value = 0;
            -
            31  // version check, must be 1.
            -
            32  RCHECK(reader.Read1(&value));
            -
            33  RCHECK(value == 1);
            -
            34 
            -
            35  // Skip avc profile, profile compatibility, avc level, and length size.
            -
            36  RCHECK(reader.SkipBytes(4));
            -
            37 
            -
            38  // Reserved and num sps.
            -
            39  RCHECK(reader.Read1(&value));
            -
            40 
            -
            41  const uint8_t num_sps = value & 0x1F;
            -
            42  if (num_sps < 1) {
            -
            43  LOG(ERROR) << "No SPS found.";
            -
            44  return false;
            -
            45  }
            -
            46  uint16_t sps_length = 0;
            -
            47  RCHECK(reader.Read2(&sps_length));
            -
            48 
            -
            49  return ExtractResolutionFromSpsData(reader.data() + reader.pos(), sps_length,
            -
            50  coded_width, coded_height, pixel_width,
            -
            51  pixel_height);
            -
            52  // It is unlikely to have more than one SPS in practice. Also there's
            -
            53  // no way to change the {coded,pixel}_{width,height} dynamically from
            -
            54  // VideoStreamInfo. So skip the rest (if there are any).
            -
            55 }
            -
            56 
            -
            57 bool ExtractResolutionFromSpsData(const uint8_t* sps_data,
            -
            58  size_t sps_data_size,
            -
            59  uint32_t* coded_width,
            -
            60  uint32_t* coded_height,
            -
            61  uint32_t* pixel_width,
            -
            62  uint32_t* pixel_height) {
            -
            63  H264Parser parser;
            -
            64  int sps_id;
            -
            65  RCHECK(parser.ParseSPSFromArray(sps_data, sps_data_size, &sps_id) ==
            -
            66  H264Parser::kOk);
            -
            67  return ExtractResolutionFromSps(*parser.GetSPS(sps_id), coded_width,
            -
            68  coded_height, pixel_width, pixel_height);
            -
            69 }
            -
            70 
            -
            71 // Implemented according to ISO/IEC 14496-10:2005 7.4.2.1 Sequence parameter set
            -
            72 // RBSP semantics.
            -
            73 bool ExtractResolutionFromSps(const H264SPS& sps,
            -
            74  uint32_t* coded_width,
            -
            75  uint32_t* coded_height,
            -
            76  uint32_t* pixel_width,
            -
            77  uint32_t* pixel_height) {
            -
            78  int crop_x = 0;
            -
            79  int crop_y = 0;
            -
            80  if (sps.frame_cropping_flag) {
            -
            81  int sub_width_c = 0;
            -
            82  int sub_height_c = 0;
            -
            83  // Table 6-1.
            -
            84  switch (sps.chroma_format_idc) {
            -
            85  case 0: // monochrome
            -
            86  // SubWidthC and SubHeightC are not defined for monochrome. For ease of
            -
            87  // computation afterwards, assign both to 1.
            -
            88  sub_width_c = 1;
            -
            89  sub_height_c = 1;
            -
            90  break;
            -
            91  case 1: // 4:2:0
            -
            92  sub_width_c = 2;
            -
            93  sub_height_c = 2;
            -
            94  break;
            -
            95  case 2: // 4:2:2
            -
            96  sub_width_c = 2;
            -
            97  sub_height_c = 1;
            -
            98  break;
            -
            99  case 3: // 4:4:4
            -
            100  sub_width_c = 1;
            -
            101  sub_height_c = 1;
            -
            102  break;
            -
            103  default:
            -
            104  LOG(ERROR) << "Unexpected chroma_format_idc " << sps.chroma_format_idc;
            -
            105  return false;
            -
            106  }
            +
            15 // Implemented according to ISO/IEC 14496-10:2005 7.4.2.1 Sequence parameter set
            +
            16 // RBSP semantics.
            +
            17 bool ExtractResolutionFromSps(const H264SPS& sps,
            +
            18  uint32_t* coded_width,
            +
            19  uint32_t* coded_height,
            +
            20  uint32_t* pixel_width,
            +
            21  uint32_t* pixel_height) {
            +
            22  int crop_x = 0;
            +
            23  int crop_y = 0;
            +
            24  if (sps.frame_cropping_flag) {
            +
            25  int sub_width_c = 0;
            +
            26  int sub_height_c = 0;
            +
            27  // Table 6-1.
            +
            28  switch (sps.chroma_format_idc) {
            +
            29  case 0: // monochrome
            +
            30  // SubWidthC and SubHeightC are not defined for monochrome. For ease of
            +
            31  // computation afterwards, assign both to 1.
            +
            32  sub_width_c = 1;
            +
            33  sub_height_c = 1;
            +
            34  break;
            +
            35  case 1: // 4:2:0
            +
            36  sub_width_c = 2;
            +
            37  sub_height_c = 2;
            +
            38  break;
            +
            39  case 2: // 4:2:2
            +
            40  sub_width_c = 2;
            +
            41  sub_height_c = 1;
            +
            42  break;
            +
            43  case 3: // 4:4:4
            +
            44  sub_width_c = 1;
            +
            45  sub_height_c = 1;
            +
            46  break;
            +
            47  default:
            +
            48  LOG(ERROR) << "Unexpected chroma_format_idc " << sps.chroma_format_idc;
            +
            49  return false;
            +
            50  }
            +
            51 
            +
            52  // Formula 7-16, 7-17, 7-18, 7-19.
            +
            53  int crop_unit_x = sub_width_c;
            +
            54  int crop_unit_y = sub_height_c * (2 - (sps.frame_mbs_only_flag ? 1 : 0));
            +
            55  crop_x = crop_unit_x *
            +
            56  (sps.frame_crop_left_offset + sps.frame_crop_right_offset);
            +
            57  crop_y = crop_unit_y *
            +
            58  (sps.frame_crop_top_offset + sps.frame_crop_bottom_offset);
            +
            59  }
            +
            60 
            +
            61  // Formula 7-10, 7-11.
            +
            62  int pic_width_in_mbs = sps.pic_width_in_mbs_minus1 + 1;
            +
            63  *coded_width = pic_width_in_mbs * 16 - crop_x;
            +
            64 
            +
            65  // Formula 7-13, 7-15.
            +
            66  int pic_height_in_mbs = (2 - (sps.frame_mbs_only_flag ? 1 : 0)) *
            +
            67  (sps.pic_height_in_map_units_minus1 + 1);
            +
            68  *coded_height = pic_height_in_mbs * 16 - crop_y;
            +
            69 
            +
            70  // 0 means it wasn't in the SPS and therefore assume 1.
            +
            71  *pixel_width = sps.sar_width == 0 ? 1 : sps.sar_width;
            +
            72  *pixel_height = sps.sar_height == 0 ? 1 : sps.sar_height;
            +
            73  DVLOG(2) << "Found coded_width: " << *coded_width
            +
            74  << " coded_height: " << *coded_height
            +
            75  << " pixel_width: " << *pixel_width
            +
            76  << " pixel_height: " << *pixel_height;
            +
            77  return true;
            +
            78 }
            +
            79 
            +
            80 bool H264SliceHeader::IsPSlice() const {
            +
            81  return (slice_type % 5 == kPSlice);
            +
            82 }
            +
            83 
            +
            84 bool H264SliceHeader::IsBSlice() const {
            +
            85  return (slice_type % 5 == kBSlice);
            +
            86 }
            +
            87 
            +
            88 bool H264SliceHeader::IsISlice() const {
            +
            89  return (slice_type % 5 == kISlice);
            +
            90 }
            +
            91 
            +
            92 bool H264SliceHeader::IsSPSlice() const {
            +
            93  return (slice_type % 5 == kSPSlice);
            +
            94 }
            +
            95 
            +
            96 bool H264SliceHeader::IsSISlice() const {
            +
            97  return (slice_type % 5 == kSISlice);
            +
            98 }
            +
            99 
            +
            100 H264NALU::H264NALU() {
            +
            101  memset(this, 0, sizeof(*this));
            +
            102 }
            +
            103 
            +
            104 H264SPS::H264SPS() {
            +
            105  memset(this, 0, sizeof(*this));
            +
            106 }
            107 
            -
            108  // Formula 7-16, 7-17, 7-18, 7-19.
            -
            109  int crop_unit_x = sub_width_c;
            -
            110  int crop_unit_y = sub_height_c * (2 - (sps.frame_mbs_only_flag ? 1 : 0));
            -
            111  crop_x = crop_unit_x *
            -
            112  (sps.frame_crop_left_offset + sps.frame_crop_right_offset);
            -
            113  crop_y = crop_unit_y *
            -
            114  (sps.frame_crop_top_offset + sps.frame_crop_bottom_offset);
            -
            115  }
            -
            116 
            -
            117  // Formula 7-10, 7-11.
            -
            118  int pic_width_in_mbs = sps.pic_width_in_mbs_minus1 + 1;
            -
            119  *coded_width = pic_width_in_mbs * 16 - crop_x;
            -
            120 
            -
            121  // Formula 7-13, 7-15.
            -
            122  int pic_height_in_mbs = (2 - (sps.frame_mbs_only_flag ? 1 : 0)) *
            -
            123  (sps.pic_height_in_map_units_minus1 + 1);
            -
            124  *coded_height = pic_height_in_mbs * 16 - crop_y;
            -
            125 
            -
            126  // 0 means it wasn't in the SPS and therefore assume 1.
            -
            127  *pixel_width = sps.sar_width == 0 ? 1 : sps.sar_width;
            -
            128  *pixel_height = sps.sar_height == 0 ? 1 : sps.sar_height;
            -
            129  DVLOG(2) << "Found coded_width: " << *coded_width
            -
            130  << " coded_height: " << *coded_height
            -
            131  << " pixel_width: " << *pixel_width
            -
            132  << " pixel_height: " << *pixel_height;
            -
            133  return true;
            -
            134 }
            -
            135 
            -
            136 #undef RCHECK
            -
            137 
            -
            138 bool H264SliceHeader::IsPSlice() const {
            -
            139  return (slice_type % 5 == kPSlice);
            -
            140 }
            -
            141 
            -
            142 bool H264SliceHeader::IsBSlice() const {
            -
            143  return (slice_type % 5 == kBSlice);
            -
            144 }
            -
            145 
            -
            146 bool H264SliceHeader::IsISlice() const {
            -
            147  return (slice_type % 5 == kISlice);
            -
            148 }
            -
            149 
            -
            150 bool H264SliceHeader::IsSPSlice() const {
            -
            151  return (slice_type % 5 == kSPSlice);
            -
            152 }
            -
            153 
            -
            154 bool H264SliceHeader::IsSISlice() const {
            -
            155  return (slice_type % 5 == kSISlice);
            -
            156 }
            -
            157 
            -
            158 H264NALU::H264NALU() {
            -
            159  memset(this, 0, sizeof(*this));
            -
            160 }
            -
            161 
            -
            162 H264SPS::H264SPS() {
            -
            163  memset(this, 0, sizeof(*this));
            -
            164 }
            -
            165 
            -
            166 H264PPS::H264PPS() {
            -
            167  memset(this, 0, sizeof(*this));
            -
            168 }
            -
            169 
            -
            170 H264SliceHeader::H264SliceHeader() {
            -
            171  memset(this, 0, sizeof(*this));
            -
            172 }
            -
            173 
            -
            174 H264SEIMessage::H264SEIMessage() {
            -
            175  memset(this, 0, sizeof(*this));
            -
            176 }
            -
            177 
            -
            178 #define READ_BITS_OR_RETURN(num_bits, out) \
            -
            179  do { \
            -
            180  int _out; \
            -
            181  if (!br_.ReadBits(num_bits, &_out)) { \
            -
            182  DVLOG(1) \
            -
            183  << "Error in stream: unexpected EOS while trying to read " #out; \
            -
            184  return kInvalidStream; \
            -
            185  } \
            -
            186  *out = _out; \
            -
            187  } while (0)
            -
            188 
            -
            189 #define READ_BOOL_OR_RETURN(out) \
            -
            190  do { \
            -
            191  int _out; \
            -
            192  if (!br_.ReadBits(1, &_out)) { \
            -
            193  DVLOG(1) \
            -
            194  << "Error in stream: unexpected EOS while trying to read " #out; \
            -
            195  return kInvalidStream; \
            -
            196  } \
            -
            197  *out = _out != 0; \
            -
            198  } while (0)
            -
            199 
            -
            200 #define READ_UE_OR_RETURN(out) \
            -
            201  do { \
            -
            202  if (ReadUE(out) != kOk) { \
            -
            203  DVLOG(1) << "Error in stream: invalid value while trying to read " #out; \
            -
            204  return kInvalidStream; \
            -
            205  } \
            -
            206  } while (0)
            -
            207 
            -
            208 #define READ_SE_OR_RETURN(out) \
            -
            209  do { \
            -
            210  if (ReadSE(out) != kOk) { \
            -
            211  DVLOG(1) << "Error in stream: invalid value while trying to read " #out; \
            -
            212  return kInvalidStream; \
            -
            213  } \
            -
            214  } while (0)
            -
            215 
            -
            216 #define IN_RANGE_OR_RETURN(val, min, max) \
            -
            217  do { \
            -
            218  if ((val) < (min) || (val) > (max)) { \
            -
            219  DVLOG(1) << "Error in stream: invalid value, expected " #val " to be" \
            -
            220  << " in range [" << (min) << ":" << (max) << "]" \
            -
            221  << " found " << (val) << " instead"; \
            -
            222  return kInvalidStream; \
            -
            223  } \
            -
            224  } while (0)
            -
            225 
            -
            226 #define TRUE_OR_RETURN(a) \
            -
            227  do { \
            -
            228  if (!(a)) { \
            -
            229  DVLOG(1) << "Error in stream: invalid value, expected " << #a; \
            -
            230  return kInvalidStream; \
            -
            231  } \
            -
            232  } while (0)
            -
            233 
            -
            234 enum AspectRatioIdc {
            -
            235  kExtendedSar = 255,
            -
            236 };
            -
            237 
            -
            238 // ISO 14496 part 10
            -
            239 // VUI parameters: Table E-1 "Meaning of sample aspect ratio indicator"
            -
            240 static const int kTableSarWidth[] = {
            -
            241  0, 1, 12, 10, 16, 40, 24, 20, 32, 80, 18, 15, 64, 160, 4, 3, 2
            -
            242 };
            -
            243 static const int kTableSarHeight[] = {
            -
            244  0, 1, 11, 11, 11, 33, 11, 11, 11, 33, 11, 11, 33, 99, 3, 2, 1
            -
            245 };
            -
            246 COMPILE_ASSERT(arraysize(kTableSarWidth) == arraysize(kTableSarHeight),
            -
            247  sar_tables_must_have_same_size);
            +
            108 H264PPS::H264PPS() {
            +
            109  memset(this, 0, sizeof(*this));
            +
            110 }
            +
            111 
            +
            112 H264SliceHeader::H264SliceHeader() {
            +
            113  memset(this, 0, sizeof(*this));
            +
            114 }
            +
            115 
            +
            116 H264SEIMessage::H264SEIMessage() {
            +
            117  memset(this, 0, sizeof(*this));
            +
            118 }
            +
            119 
            +
            120 #define READ_BITS_OR_RETURN(num_bits, out) \
            +
            121  do { \
            +
            122  int _out; \
            +
            123  if (!br_.ReadBits(num_bits, &_out)) { \
            +
            124  DVLOG(1) \
            +
            125  << "Error in stream: unexpected EOS while trying to read " #out; \
            +
            126  return kInvalidStream; \
            +
            127  } \
            +
            128  *out = _out; \
            +
            129  } while (0)
            +
            130 
            +
            131 #define READ_BOOL_OR_RETURN(out) \
            +
            132  do { \
            +
            133  int _out; \
            +
            134  if (!br_.ReadBits(1, &_out)) { \
            +
            135  DVLOG(1) \
            +
            136  << "Error in stream: unexpected EOS while trying to read " #out; \
            +
            137  return kInvalidStream; \
            +
            138  } \
            +
            139  *out = _out != 0; \
            +
            140  } while (0)
            +
            141 
            +
            142 #define READ_UE_OR_RETURN(out) \
            +
            143  do { \
            +
            144  if (ReadUE(out) != kOk) { \
            +
            145  DVLOG(1) << "Error in stream: invalid value while trying to read " #out; \
            +
            146  return kInvalidStream; \
            +
            147  } \
            +
            148  } while (0)
            +
            149 
            +
            150 #define READ_SE_OR_RETURN(out) \
            +
            151  do { \
            +
            152  if (ReadSE(out) != kOk) { \
            +
            153  DVLOG(1) << "Error in stream: invalid value while trying to read " #out; \
            +
            154  return kInvalidStream; \
            +
            155  } \
            +
            156  } while (0)
            +
            157 
            +
            158 #define IN_RANGE_OR_RETURN(val, min, max) \
            +
            159  do { \
            +
            160  if ((val) < (min) || (val) > (max)) { \
            +
            161  DVLOG(1) << "Error in stream: invalid value, expected " #val " to be" \
            +
            162  << " in range [" << (min) << ":" << (max) << "]" \
            +
            163  << " found " << (val) << " instead"; \
            +
            164  return kInvalidStream; \
            +
            165  } \
            +
            166  } while (0)
            +
            167 
            +
            168 #define TRUE_OR_RETURN(a) \
            +
            169  do { \
            +
            170  if (!(a)) { \
            +
            171  DVLOG(1) << "Error in stream: invalid value, expected " << #a; \
            +
            172  return kInvalidStream; \
            +
            173  } \
            +
            174  } while (0)
            +
            175 
            +
            176 enum AspectRatioIdc {
            +
            177  kExtendedSar = 255,
            +
            178 };
            +
            179 
            +
            180 // ISO 14496 part 10
            +
            181 // VUI parameters: Table E-1 "Meaning of sample aspect ratio indicator"
            +
            182 static const int kTableSarWidth[] = {
            +
            183  0, 1, 12, 10, 16, 40, 24, 20, 32, 80, 18, 15, 64, 160, 4, 3, 2
            +
            184 };
            +
            185 static const int kTableSarHeight[] = {
            +
            186  0, 1, 11, 11, 11, 33, 11, 11, 11, 33, 11, 11, 33, 99, 3, 2, 1
            +
            187 };
            +
            188 COMPILE_ASSERT(arraysize(kTableSarWidth) == arraysize(kTableSarHeight),
            +
            189  sar_tables_must_have_same_size);
            +
            190 
            +
            191 H264Parser::H264Parser() {
            +
            192  Reset();
            +
            193 }
            +
            194 
            +
            195 H264Parser::~H264Parser() {
            +
            196  STLDeleteValues(&active_SPSes_);
            +
            197  STLDeleteValues(&active_PPSes_);
            +
            198 }
            +
            199 
            +
            200 void H264Parser::Reset() {
            +
            201  stream_ = NULL;
            +
            202  bytes_left_ = 0;
            +
            203 }
            +
            204 
            +
            205 void H264Parser::SetStream(const uint8_t* stream, off_t stream_size) {
            +
            206  DCHECK(stream);
            +
            207  DCHECK_GT(stream_size, 0);
            +
            208 
            +
            209  stream_ = stream;
            +
            210  bytes_left_ = stream_size;
            +
            211 }
            +
            212 
            +
            213 const H264PPS* H264Parser::GetPPS(int pps_id) {
            +
            214  return active_PPSes_[pps_id];
            +
            215 }
            +
            216 
            +
            217 const H264SPS* H264Parser::GetSPS(int sps_id) {
            +
            218  return active_SPSes_[sps_id];
            +
            219 }
            +
            220 
            +
            221 static inline bool IsStartCode(const uint8_t* data) {
            +
            222  return data[0] == 0x00 && data[1] == 0x00 && data[2] == 0x01;
            +
            223 }
            +
            224 
            +
            225 // static
            +
            226 bool H264Parser::FindStartCode(const uint8_t* data,
            +
            227  off_t data_size,
            +
            228  off_t* offset,
            +
            229  off_t* start_code_size) {
            +
            230  DCHECK_GE(data_size, 0);
            +
            231  off_t bytes_left = data_size;
            +
            232 
            +
            233  while (bytes_left >= 3) {
            +
            234  if (IsStartCode(data)) {
            +
            235  // Found three-byte start code, set pointer at its beginning.
            +
            236  *offset = data_size - bytes_left;
            +
            237  *start_code_size = 3;
            +
            238 
            +
            239  // If there is a zero byte before this start code,
            +
            240  // then it's actually a four-byte start code, so backtrack one byte.
            +
            241  if (*offset > 0 && *(data - 1) == 0x00) {
            +
            242  --(*offset);
            +
            243  ++(*start_code_size);
            +
            244  }
            +
            245 
            +
            246  return true;
            +
            247  }
            248 
            -
            249 H264Parser::H264Parser() {
            -
            250  Reset();
            -
            251 }
            +
            249  ++data;
            +
            250  --bytes_left;
            +
            251  }
            252 
            -
            253 H264Parser::~H264Parser() {
            -
            254  STLDeleteValues(&active_SPSes_);
            -
            255  STLDeleteValues(&active_PPSes_);
            -
            256 }
            -
            257 
            -
            258 void H264Parser::Reset() {
            -
            259  stream_ = NULL;
            -
            260  bytes_left_ = 0;
            +
            253  // End of data: offset is pointing to the first byte that was not considered
            +
            254  // as a possible start of a start code.
            +
            255  // Note: there is no security issue when receiving a negative |data_size|
            +
            256  // since in this case, |bytes_left| is equal to |data_size| and thus
            +
            257  // |*offset| is equal to 0 (valid offset).
            +
            258  *offset = data_size - bytes_left;
            +
            259  *start_code_size = 0;
            +
            260  return false;
            261 }
            262 
            -
            263 void H264Parser::SetStream(const uint8_t* stream, off_t stream_size) {
            -
            264  DCHECK(stream);
            -
            265  DCHECK_GT(stream_size, 0);
            -
            266 
            -
            267  stream_ = stream;
            -
            268  bytes_left_ = stream_size;
            -
            269 }
            -
            270 
            -
            271 const H264PPS* H264Parser::GetPPS(int pps_id) {
            -
            272  return active_PPSes_[pps_id];
            -
            273 }
            -
            274 
            -
            275 const H264SPS* H264Parser::GetSPS(int sps_id) {
            -
            276  return active_SPSes_[sps_id];
            -
            277 }
            -
            278 
            -
            279 static inline bool IsStartCode(const uint8_t* data) {
            -
            280  return data[0] == 0x00 && data[1] == 0x00 && data[2] == 0x01;
            -
            281 }
            -
            282 
            -
            283 // static
            -
            284 bool H264Parser::FindStartCode(const uint8_t* data,
            -
            285  off_t data_size,
            -
            286  off_t* offset,
            -
            287  off_t* start_code_size) {
            -
            288  DCHECK_GE(data_size, 0);
            -
            289  off_t bytes_left = data_size;
            -
            290 
            -
            291  while (bytes_left >= 3) {
            -
            292  if (IsStartCode(data)) {
            -
            293  // Found three-byte start code, set pointer at its beginning.
            -
            294  *offset = data_size - bytes_left;
            -
            295  *start_code_size = 3;
            -
            296 
            -
            297  // If there is a zero byte before this start code,
            -
            298  // then it's actually a four-byte start code, so backtrack one byte.
            -
            299  if (*offset > 0 && *(data - 1) == 0x00) {
            -
            300  --(*offset);
            -
            301  ++(*start_code_size);
            -
            302  }
            -
            303 
            -
            304  return true;
            -
            305  }
            -
            306 
            -
            307  ++data;
            -
            308  --bytes_left;
            -
            309  }
            -
            310 
            -
            311  // End of data: offset is pointing to the first byte that was not considered
            -
            312  // as a possible start of a start code.
            -
            313  // Note: there is no security issue when receiving a negative |data_size|
            -
            314  // since in this case, |bytes_left| is equal to |data_size| and thus
            -
            315  // |*offset| is equal to 0 (valid offset).
            -
            316  *offset = data_size - bytes_left;
            -
            317  *start_code_size = 0;
            -
            318  return false;
            -
            319 }
            -
            320 
            -
            321 bool H264Parser::LocateNALU(off_t* nalu_size, off_t* start_code_size) {
            -
            322  // Find the start code of next NALU.
            -
            323  off_t nalu_start_off = 0;
            -
            324  off_t annexb_start_code_size = 0;
            -
            325  if (!FindStartCode(stream_, bytes_left_,
            -
            326  &nalu_start_off, &annexb_start_code_size)) {
            -
            327  DVLOG(4) << "Could not find start code, end of stream?";
            -
            328  return false;
            -
            329  }
            -
            330 
            -
            331  // Move the stream to the beginning of the NALU (pointing at the start code).
            -
            332  stream_ += nalu_start_off;
            -
            333  bytes_left_ -= nalu_start_off;
            +
            263 bool H264Parser::LocateNALU(off_t* nalu_size, off_t* start_code_size) {
            +
            264  // Find the start code of next NALU.
            +
            265  off_t nalu_start_off = 0;
            +
            266  off_t annexb_start_code_size = 0;
            +
            267  if (!FindStartCode(stream_, bytes_left_,
            +
            268  &nalu_start_off, &annexb_start_code_size)) {
            +
            269  DVLOG(4) << "Could not find start code, end of stream?";
            +
            270  return false;
            +
            271  }
            +
            272 
            +
            273  // Move the stream to the beginning of the NALU (pointing at the start code).
            +
            274  stream_ += nalu_start_off;
            +
            275  bytes_left_ -= nalu_start_off;
            +
            276 
            +
            277  const uint8_t* nalu_data = stream_ + annexb_start_code_size;
            +
            278  off_t max_nalu_data_size = bytes_left_ - annexb_start_code_size;
            +
            279  if (max_nalu_data_size <= 0) {
            +
            280  DVLOG(3) << "End of stream";
            +
            281  return false;
            +
            282  }
            +
            283 
            +
            284  // Find the start code of next NALU;
            +
            285  // if successful, |nalu_size_without_start_code| is the number of bytes from
            +
            286  // after previous start code to before this one;
            +
            287  // if next start code is not found, it is still a valid NALU since there
            +
            288  // are some bytes left after the first start code: all the remaining bytes
            +
            289  // belong to the current NALU.
            +
            290  off_t next_start_code_size = 0;
            +
            291  off_t nalu_size_without_start_code = 0;
            +
            292  if (!FindStartCode(nalu_data, max_nalu_data_size,
            +
            293  &nalu_size_without_start_code, &next_start_code_size)) {
            +
            294  nalu_size_without_start_code = max_nalu_data_size;
            +
            295  }
            +
            296  *nalu_size = nalu_size_without_start_code + annexb_start_code_size;
            +
            297  *start_code_size = annexb_start_code_size;
            +
            298  return true;
            +
            299 }
            +
            300 
            +
            301 H264Parser::Result H264Parser::ReadUE(int* val) {
            +
            302  int num_bits = -1;
            +
            303  int bit;
            +
            304  int rest;
            +
            305 
            +
            306  // Count the number of contiguous zero bits.
            +
            307  do {
            +
            308  READ_BITS_OR_RETURN(1, &bit);
            +
            309  num_bits++;
            +
            310  } while (bit == 0);
            +
            311 
            +
            312  if (num_bits > 31)
            +
            313  return kInvalidStream;
            +
            314 
            +
            315  // Calculate exp-Golomb code value of size num_bits.
            +
            316  *val = (1 << num_bits) - 1;
            +
            317 
            +
            318  if (num_bits > 0) {
            +
            319  READ_BITS_OR_RETURN(num_bits, &rest);
            +
            320  *val += rest;
            +
            321  }
            +
            322 
            +
            323  return kOk;
            +
            324 }
            +
            325 
            +
            326 H264Parser::Result H264Parser::ReadSE(int* val) {
            +
            327  int ue;
            +
            328  Result res;
            +
            329 
            +
            330  // See Chapter 9 in the spec.
            +
            331  res = ReadUE(&ue);
            +
            332  if (res != kOk)
            +
            333  return res;
            334 
            -
            335  const uint8_t* nalu_data = stream_ + annexb_start_code_size;
            -
            336  off_t max_nalu_data_size = bytes_left_ - annexb_start_code_size;
            -
            337  if (max_nalu_data_size <= 0) {
            -
            338  DVLOG(3) << "End of stream";
            -
            339  return false;
            -
            340  }
            -
            341 
            -
            342  // Find the start code of next NALU;
            -
            343  // if successful, |nalu_size_without_start_code| is the number of bytes from
            -
            344  // after previous start code to before this one;
            -
            345  // if next start code is not found, it is still a valid NALU since there
            -
            346  // are some bytes left after the first start code: all the remaining bytes
            -
            347  // belong to the current NALU.
            -
            348  off_t next_start_code_size = 0;
            -
            349  off_t nalu_size_without_start_code = 0;
            -
            350  if (!FindStartCode(nalu_data, max_nalu_data_size,
            -
            351  &nalu_size_without_start_code, &next_start_code_size)) {
            -
            352  nalu_size_without_start_code = max_nalu_data_size;
            -
            353  }
            -
            354  *nalu_size = nalu_size_without_start_code + annexb_start_code_size;
            -
            355  *start_code_size = annexb_start_code_size;
            -
            356  return true;
            -
            357 }
            -
            358 
            -
            359 H264Parser::Result H264Parser::ReadUE(int* val) {
            -
            360  int num_bits = -1;
            -
            361  int bit;
            -
            362  int rest;
            -
            363 
            -
            364  // Count the number of contiguous zero bits.
            -
            365  do {
            -
            366  READ_BITS_OR_RETURN(1, &bit);
            -
            367  num_bits++;
            -
            368  } while (bit == 0);
            -
            369 
            -
            370  if (num_bits > 31)
            -
            371  return kInvalidStream;
            -
            372 
            -
            373  // Calculate exp-Golomb code value of size num_bits.
            -
            374  *val = (1 << num_bits) - 1;
            -
            375 
            -
            376  if (num_bits > 0) {
            -
            377  READ_BITS_OR_RETURN(num_bits, &rest);
            -
            378  *val += rest;
            -
            379  }
            -
            380 
            -
            381  return kOk;
            -
            382 }
            -
            383 
            -
            384 H264Parser::Result H264Parser::ReadSE(int* val) {
            -
            385  int ue;
            -
            386  Result res;
            -
            387 
            -
            388  // See Chapter 9 in the spec.
            -
            389  res = ReadUE(&ue);
            -
            390  if (res != kOk)
            -
            391  return res;
            -
            392 
            -
            393  if (ue % 2 == 0)
            -
            394  *val = -(ue / 2);
            -
            395  else
            -
            396  *val = ue / 2 + 1;
            -
            397 
            -
            398  return kOk;
            -
            399 }
            -
            400 
            -
            401 H264Parser::Result H264Parser::AdvanceToNextNALU(H264NALU* nalu) {
            -
            402  off_t start_code_size;
            -
            403  off_t nalu_size_with_start_code;
            -
            404  if (!LocateNALU(&nalu_size_with_start_code, &start_code_size)) {
            -
            405  DVLOG(4) << "Could not find next NALU, bytes left in stream: "
            -
            406  << bytes_left_;
            -
            407  return kEOStream;
            -
            408  }
            -
            409 
            -
            410  nalu->data = stream_ + start_code_size;
            -
            411  nalu->size = nalu_size_with_start_code - start_code_size;
            -
            412  DVLOG(4) << "NALU found: size=" << nalu_size_with_start_code;
            -
            413 
            -
            414  // Initialize bit reader at the start of found NALU.
            -
            415  if (!br_.Initialize(nalu->data, nalu->size))
            -
            416  return kEOStream;
            +
            335  if (ue % 2 == 0)
            +
            336  *val = -(ue / 2);
            +
            337  else
            +
            338  *val = ue / 2 + 1;
            +
            339 
            +
            340  return kOk;
            +
            341 }
            +
            342 
            +
            343 H264Parser::Result H264Parser::AdvanceToNextNALU(H264NALU* nalu) {
            +
            344  off_t start_code_size;
            +
            345  off_t nalu_size_with_start_code;
            +
            346  if (!LocateNALU(&nalu_size_with_start_code, &start_code_size)) {
            +
            347  DVLOG(4) << "Could not find next NALU, bytes left in stream: "
            +
            348  << bytes_left_;
            +
            349  return kEOStream;
            +
            350  }
            +
            351 
            +
            352  nalu->data = stream_ + start_code_size;
            +
            353  nalu->size = nalu_size_with_start_code - start_code_size;
            +
            354  DVLOG(4) << "NALU found: size=" << nalu_size_with_start_code;
            +
            355 
            +
            356  // Initialize bit reader at the start of found NALU.
            +
            357  if (!br_.Initialize(nalu->data, nalu->size))
            +
            358  return kEOStream;
            +
            359 
            +
            360  // Move parser state to after this NALU, so next time AdvanceToNextNALU
            +
            361  // is called, we will effectively be skipping it;
            +
            362  // other parsing functions will use the position saved
            +
            363  // in bit reader for parsing, so we don't have to remember it here.
            +
            364  stream_ += nalu_size_with_start_code;
            +
            365  bytes_left_ -= nalu_size_with_start_code;
            +
            366 
            +
            367  // Read NALU header, skip the forbidden_zero_bit, but check for it.
            +
            368  int data;
            +
            369  READ_BITS_OR_RETURN(1, &data);
            +
            370  TRUE_OR_RETURN(data == 0);
            +
            371 
            +
            372  READ_BITS_OR_RETURN(2, &nalu->nal_ref_idc);
            +
            373  READ_BITS_OR_RETURN(5, &nalu->nal_unit_type);
            +
            374 
            +
            375  DVLOG(4) << "NALU type: " << static_cast<int>(nalu->nal_unit_type)
            +
            376  << " at: " << reinterpret_cast<const void*>(nalu->data)
            +
            377  << " size: " << nalu->size
            +
            378  << " ref: " << static_cast<int>(nalu->nal_ref_idc);
            +
            379 
            +
            380  return kOk;
            +
            381 }
            +
            382 
            +
            383 // Default scaling lists (per spec).
            +
            384 static const int kDefault4x4Intra[kH264ScalingList4x4Length] = {
            +
            385  6, 13, 13, 20, 20, 20, 28, 28, 28, 28, 32, 32, 32, 37, 37, 42, };
            +
            386 
            +
            387 static const int kDefault4x4Inter[kH264ScalingList4x4Length] = {
            +
            388  10, 14, 14, 20, 20, 20, 24, 24, 24, 24, 27, 27, 27, 30, 30, 34, };
            +
            389 
            +
            390 static const int kDefault8x8Intra[kH264ScalingList8x8Length] = {
            +
            391  6, 10, 10, 13, 11, 13, 16, 16, 16, 16, 18, 18, 18, 18, 18, 23,
            +
            392  23, 23, 23, 23, 23, 25, 25, 25, 25, 25, 25, 25, 27, 27, 27, 27,
            +
            393  27, 27, 27, 27, 29, 29, 29, 29, 29, 29, 29, 31, 31, 31, 31, 31,
            +
            394  31, 33, 33, 33, 33, 33, 36, 36, 36, 36, 38, 38, 38, 40, 40, 42, };
            +
            395 
            +
            396 static const int kDefault8x8Inter[kH264ScalingList8x8Length] = {
            +
            397  9, 13, 13, 15, 13, 15, 17, 17, 17, 17, 19, 19, 19, 19, 19, 21,
            +
            398  21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 24, 24, 24, 24,
            +
            399  24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 27, 27, 27, 27, 27,
            +
            400  27, 28, 28, 28, 28, 28, 30, 30, 30, 30, 32, 32, 32, 33, 33, 35, };
            +
            401 
            +
            402 static inline void DefaultScalingList4x4(
            +
            403  int i,
            +
            404  int scaling_list4x4[][kH264ScalingList4x4Length]) {
            +
            405  DCHECK_LT(i, 6);
            +
            406 
            +
            407  if (i < 3)
            +
            408  memcpy(scaling_list4x4[i], kDefault4x4Intra, sizeof(kDefault4x4Intra));
            +
            409  else if (i < 6)
            +
            410  memcpy(scaling_list4x4[i], kDefault4x4Inter, sizeof(kDefault4x4Inter));
            +
            411 }
            +
            412 
            +
            413 static inline void DefaultScalingList8x8(
            +
            414  int i,
            +
            415  int scaling_list8x8[][kH264ScalingList8x8Length]) {
            +
            416  DCHECK_LT(i, 6);
            417 
            -
            418  // Move parser state to after this NALU, so next time AdvanceToNextNALU
            -
            419  // is called, we will effectively be skipping it;
            -
            420  // other parsing functions will use the position saved
            -
            421  // in bit reader for parsing, so we don't have to remember it here.
            -
            422  stream_ += nalu_size_with_start_code;
            -
            423  bytes_left_ -= nalu_size_with_start_code;
            -
            424 
            -
            425  // Read NALU header, skip the forbidden_zero_bit, but check for it.
            -
            426  int data;
            -
            427  READ_BITS_OR_RETURN(1, &data);
            -
            428  TRUE_OR_RETURN(data == 0);
            -
            429 
            -
            430  READ_BITS_OR_RETURN(2, &nalu->nal_ref_idc);
            -
            431  READ_BITS_OR_RETURN(5, &nalu->nal_unit_type);
            -
            432 
            -
            433  DVLOG(4) << "NALU type: " << static_cast<int>(nalu->nal_unit_type)
            -
            434  << " at: " << reinterpret_cast<const void*>(nalu->data)
            -
            435  << " size: " << nalu->size
            -
            436  << " ref: " << static_cast<int>(nalu->nal_ref_idc);
            +
            418  if (i % 2 == 0)
            +
            419  memcpy(scaling_list8x8[i], kDefault8x8Intra, sizeof(kDefault8x8Intra));
            +
            420  else
            +
            421  memcpy(scaling_list8x8[i], kDefault8x8Inter, sizeof(kDefault8x8Inter));
            +
            422 }
            +
            423 
            +
            424 static void FallbackScalingList4x4(
            +
            425  int i,
            +
            426  const int default_scaling_list_intra[],
            +
            427  const int default_scaling_list_inter[],
            +
            428  int scaling_list4x4[][kH264ScalingList4x4Length]) {
            +
            429  static const int kScalingList4x4ByteSize =
            +
            430  sizeof(scaling_list4x4[0][0]) * kH264ScalingList4x4Length;
            +
            431 
            +
            432  switch (i) {
            +
            433  case 0:
            +
            434  memcpy(scaling_list4x4[i], default_scaling_list_intra,
            +
            435  kScalingList4x4ByteSize);
            +
            436  break;
            437 
            -
            438  return kOk;
            -
            439 }
            -
            440 
            -
            441 // Default scaling lists (per spec).
            -
            442 static const int kDefault4x4Intra[kH264ScalingList4x4Length] = {
            -
            443  6, 13, 13, 20, 20, 20, 28, 28, 28, 28, 32, 32, 32, 37, 37, 42, };
            -
            444 
            -
            445 static const int kDefault4x4Inter[kH264ScalingList4x4Length] = {
            -
            446  10, 14, 14, 20, 20, 20, 24, 24, 24, 24, 27, 27, 27, 30, 30, 34, };
            -
            447 
            -
            448 static const int kDefault8x8Intra[kH264ScalingList8x8Length] = {
            -
            449  6, 10, 10, 13, 11, 13, 16, 16, 16, 16, 18, 18, 18, 18, 18, 23,
            -
            450  23, 23, 23, 23, 23, 25, 25, 25, 25, 25, 25, 25, 27, 27, 27, 27,
            -
            451  27, 27, 27, 27, 29, 29, 29, 29, 29, 29, 29, 31, 31, 31, 31, 31,
            -
            452  31, 33, 33, 33, 33, 33, 36, 36, 36, 36, 38, 38, 38, 40, 40, 42, };
            -
            453 
            -
            454 static const int kDefault8x8Inter[kH264ScalingList8x8Length] = {
            -
            455  9, 13, 13, 15, 13, 15, 17, 17, 17, 17, 19, 19, 19, 19, 19, 21,
            -
            456  21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 24, 24, 24, 24,
            -
            457  24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 27, 27, 27, 27, 27,
            -
            458  27, 28, 28, 28, 28, 28, 30, 30, 30, 30, 32, 32, 32, 33, 33, 35, };
            -
            459 
            -
            460 static inline void DefaultScalingList4x4(
            -
            461  int i,
            -
            462  int scaling_list4x4[][kH264ScalingList4x4Length]) {
            -
            463  DCHECK_LT(i, 6);
            +
            438  case 1:
            +
            439  memcpy(scaling_list4x4[i], scaling_list4x4[0], kScalingList4x4ByteSize);
            +
            440  break;
            +
            441 
            +
            442  case 2:
            +
            443  memcpy(scaling_list4x4[i], scaling_list4x4[1], kScalingList4x4ByteSize);
            +
            444  break;
            +
            445 
            +
            446  case 3:
            +
            447  memcpy(scaling_list4x4[i], default_scaling_list_inter,
            +
            448  kScalingList4x4ByteSize);
            +
            449  break;
            +
            450 
            +
            451  case 4:
            +
            452  memcpy(scaling_list4x4[i], scaling_list4x4[3], kScalingList4x4ByteSize);
            +
            453  break;
            +
            454 
            +
            455  case 5:
            +
            456  memcpy(scaling_list4x4[i], scaling_list4x4[4], kScalingList4x4ByteSize);
            +
            457  break;
            +
            458 
            +
            459  default:
            +
            460  NOTREACHED();
            +
            461  break;
            +
            462  }
            +
            463 }
            464 
            -
            465  if (i < 3)
            -
            466  memcpy(scaling_list4x4[i], kDefault4x4Intra, sizeof(kDefault4x4Intra));
            -
            467  else if (i < 6)
            -
            468  memcpy(scaling_list4x4[i], kDefault4x4Inter, sizeof(kDefault4x4Inter));
            -
            469 }
            -
            470 
            -
            471 static inline void DefaultScalingList8x8(
            -
            472  int i,
            -
            473  int scaling_list8x8[][kH264ScalingList8x8Length]) {
            -
            474  DCHECK_LT(i, 6);
            -
            475 
            -
            476  if (i % 2 == 0)
            -
            477  memcpy(scaling_list8x8[i], kDefault8x8Intra, sizeof(kDefault8x8Intra));
            -
            478  else
            -
            479  memcpy(scaling_list8x8[i], kDefault8x8Inter, sizeof(kDefault8x8Inter));
            -
            480 }
            -
            481 
            -
            482 static void FallbackScalingList4x4(
            -
            483  int i,
            -
            484  const int default_scaling_list_intra[],
            -
            485  const int default_scaling_list_inter[],
            -
            486  int scaling_list4x4[][kH264ScalingList4x4Length]) {
            -
            487  static const int kScalingList4x4ByteSize =
            -
            488  sizeof(scaling_list4x4[0][0]) * kH264ScalingList4x4Length;
            -
            489 
            -
            490  switch (i) {
            -
            491  case 0:
            -
            492  memcpy(scaling_list4x4[i], default_scaling_list_intra,
            -
            493  kScalingList4x4ByteSize);
            +
            465 static void FallbackScalingList8x8(
            +
            466  int i,
            +
            467  const int default_scaling_list_intra[],
            +
            468  const int default_scaling_list_inter[],
            +
            469  int scaling_list8x8[][kH264ScalingList8x8Length]) {
            +
            470  static const int kScalingList8x8ByteSize =
            +
            471  sizeof(scaling_list8x8[0][0]) * kH264ScalingList8x8Length;
            +
            472 
            +
            473  switch (i) {
            +
            474  case 0:
            +
            475  memcpy(scaling_list8x8[i], default_scaling_list_intra,
            +
            476  kScalingList8x8ByteSize);
            +
            477  break;
            +
            478 
            +
            479  case 1:
            +
            480  memcpy(scaling_list8x8[i], default_scaling_list_inter,
            +
            481  kScalingList8x8ByteSize);
            +
            482  break;
            +
            483 
            +
            484  case 2:
            +
            485  memcpy(scaling_list8x8[i], scaling_list8x8[0], kScalingList8x8ByteSize);
            +
            486  break;
            +
            487 
            +
            488  case 3:
            +
            489  memcpy(scaling_list8x8[i], scaling_list8x8[1], kScalingList8x8ByteSize);
            +
            490  break;
            +
            491 
            +
            492  case 4:
            +
            493  memcpy(scaling_list8x8[i], scaling_list8x8[2], kScalingList8x8ByteSize);
            494  break;
            495 
            -
            496  case 1:
            -
            497  memcpy(scaling_list4x4[i], scaling_list4x4[0], kScalingList4x4ByteSize);
            +
            496  case 5:
            +
            497  memcpy(scaling_list8x8[i], scaling_list8x8[3], kScalingList8x8ByteSize);
            498  break;
            499 
            -
            500  case 2:
            -
            501  memcpy(scaling_list4x4[i], scaling_list4x4[1], kScalingList4x4ByteSize);
            +
            500  default:
            +
            501  NOTREACHED();
            502  break;
            -
            503 
            -
            504  case 3:
            -
            505  memcpy(scaling_list4x4[i], default_scaling_list_inter,
            -
            506  kScalingList4x4ByteSize);
            -
            507  break;
            -
            508 
            -
            509  case 4:
            -
            510  memcpy(scaling_list4x4[i], scaling_list4x4[3], kScalingList4x4ByteSize);
            -
            511  break;
            -
            512 
            -
            513  case 5:
            -
            514  memcpy(scaling_list4x4[i], scaling_list4x4[4], kScalingList4x4ByteSize);
            -
            515  break;
            -
            516 
            -
            517  default:
            -
            518  NOTREACHED();
            -
            519  break;
            -
            520  }
            -
            521 }
            -
            522 
            -
            523 static void FallbackScalingList8x8(
            -
            524  int i,
            -
            525  const int default_scaling_list_intra[],
            -
            526  const int default_scaling_list_inter[],
            -
            527  int scaling_list8x8[][kH264ScalingList8x8Length]) {
            -
            528  static const int kScalingList8x8ByteSize =
            -
            529  sizeof(scaling_list8x8[0][0]) * kH264ScalingList8x8Length;
            -
            530 
            -
            531  switch (i) {
            -
            532  case 0:
            -
            533  memcpy(scaling_list8x8[i], default_scaling_list_intra,
            -
            534  kScalingList8x8ByteSize);
            -
            535  break;
            -
            536 
            -
            537  case 1:
            -
            538  memcpy(scaling_list8x8[i], default_scaling_list_inter,
            -
            539  kScalingList8x8ByteSize);
            -
            540  break;
            -
            541 
            -
            542  case 2:
            -
            543  memcpy(scaling_list8x8[i], scaling_list8x8[0], kScalingList8x8ByteSize);
            -
            544  break;
            -
            545 
            -
            546  case 3:
            -
            547  memcpy(scaling_list8x8[i], scaling_list8x8[1], kScalingList8x8ByteSize);
            -
            548  break;
            -
            549 
            -
            550  case 4:
            -
            551  memcpy(scaling_list8x8[i], scaling_list8x8[2], kScalingList8x8ByteSize);
            -
            552  break;
            -
            553 
            -
            554  case 5:
            -
            555  memcpy(scaling_list8x8[i], scaling_list8x8[3], kScalingList8x8ByteSize);
            -
            556  break;
            -
            557 
            -
            558  default:
            -
            559  NOTREACHED();
            -
            560  break;
            -
            561  }
            -
            562 }
            -
            563 
            -
            564 H264Parser::Result H264Parser::ParseScalingList(int size,
            -
            565  int* scaling_list,
            -
            566  bool* use_default) {
            -
            567  // See chapter 7.3.2.1.1.1.
            -
            568  int last_scale = 8;
            -
            569  int next_scale = 8;
            -
            570  int delta_scale;
            +
            503  }
            +
            504 }
            +
            505 
            +
            506 H264Parser::Result H264Parser::ParseScalingList(int size,
            +
            507  int* scaling_list,
            +
            508  bool* use_default) {
            +
            509  // See chapter 7.3.2.1.1.1.
            +
            510  int last_scale = 8;
            +
            511  int next_scale = 8;
            +
            512  int delta_scale;
            +
            513 
            +
            514  *use_default = false;
            +
            515 
            +
            516  for (int j = 0; j < size; ++j) {
            +
            517  if (next_scale != 0) {
            +
            518  READ_SE_OR_RETURN(&delta_scale);
            +
            519  IN_RANGE_OR_RETURN(delta_scale, -128, 127);
            +
            520  next_scale = (last_scale + delta_scale + 256) & 0xff;
            +
            521 
            +
            522  if (j == 0 && next_scale == 0) {
            +
            523  *use_default = true;
            +
            524  return kOk;
            +
            525  }
            +
            526  }
            +
            527 
            +
            528  scaling_list[j] = (next_scale == 0) ? last_scale : next_scale;
            +
            529  last_scale = scaling_list[j];
            +
            530  }
            +
            531 
            +
            532  return kOk;
            +
            533 }
            +
            534 
            +
            535 H264Parser::Result H264Parser::ParseSPSScalingLists(H264SPS* sps) {
            +
            536  // See 7.4.2.1.1.
            +
            537  bool seq_scaling_list_present_flag;
            +
            538  bool use_default;
            +
            539  Result res;
            +
            540 
            +
            541  // Parse scaling_list4x4.
            +
            542  for (int i = 0; i < 6; ++i) {
            +
            543  READ_BOOL_OR_RETURN(&seq_scaling_list_present_flag);
            +
            544 
            +
            545  if (seq_scaling_list_present_flag) {
            +
            546  res = ParseScalingList(arraysize(sps->scaling_list4x4[i]),
            +
            547  sps->scaling_list4x4[i],
            +
            548  &use_default);
            +
            549  if (res != kOk)
            +
            550  return res;
            +
            551 
            +
            552  if (use_default)
            +
            553  DefaultScalingList4x4(i, sps->scaling_list4x4);
            +
            554 
            +
            555  } else {
            +
            556  FallbackScalingList4x4(
            +
            557  i, kDefault4x4Intra, kDefault4x4Inter, sps->scaling_list4x4);
            +
            558  }
            +
            559  }
            +
            560 
            +
            561  // Parse scaling_list8x8.
            +
            562  for (int i = 0; i < ((sps->chroma_format_idc != 3) ? 2 : 6); ++i) {
            +
            563  READ_BOOL_OR_RETURN(&seq_scaling_list_present_flag);
            +
            564 
            +
            565  if (seq_scaling_list_present_flag) {
            +
            566  res = ParseScalingList(arraysize(sps->scaling_list8x8[i]),
            +
            567  sps->scaling_list8x8[i],
            +
            568  &use_default);
            +
            569  if (res != kOk)
            +
            570  return res;
            571 
            -
            572  *use_default = false;
            -
            573 
            -
            574  for (int j = 0; j < size; ++j) {
            -
            575  if (next_scale != 0) {
            -
            576  READ_SE_OR_RETURN(&delta_scale);
            -
            577  IN_RANGE_OR_RETURN(delta_scale, -128, 127);
            -
            578  next_scale = (last_scale + delta_scale + 256) & 0xff;
            -
            579 
            -
            580  if (j == 0 && next_scale == 0) {
            -
            581  *use_default = true;
            -
            582  return kOk;
            -
            583  }
            -
            584  }
            -
            585 
            -
            586  scaling_list[j] = (next_scale == 0) ? last_scale : next_scale;
            -
            587  last_scale = scaling_list[j];
            -
            588  }
            -
            589 
            -
            590  return kOk;
            -
            591 }
            -
            592 
            -
            593 H264Parser::Result H264Parser::ParseSPSScalingLists(H264SPS* sps) {
            -
            594  // See 7.4.2.1.1.
            -
            595  bool seq_scaling_list_present_flag;
            -
            596  bool use_default;
            -
            597  Result res;
            -
            598 
            -
            599  // Parse scaling_list4x4.
            -
            600  for (int i = 0; i < 6; ++i) {
            -
            601  READ_BOOL_OR_RETURN(&seq_scaling_list_present_flag);
            -
            602 
            -
            603  if (seq_scaling_list_present_flag) {
            -
            604  res = ParseScalingList(arraysize(sps->scaling_list4x4[i]),
            -
            605  sps->scaling_list4x4[i],
            -
            606  &use_default);
            -
            607  if (res != kOk)
            -
            608  return res;
            -
            609 
            -
            610  if (use_default)
            -
            611  DefaultScalingList4x4(i, sps->scaling_list4x4);
            -
            612 
            -
            613  } else {
            -
            614  FallbackScalingList4x4(
            -
            615  i, kDefault4x4Intra, kDefault4x4Inter, sps->scaling_list4x4);
            +
            572  if (use_default)
            +
            573  DefaultScalingList8x8(i, sps->scaling_list8x8);
            +
            574 
            +
            575  } else {
            +
            576  FallbackScalingList8x8(
            +
            577  i, kDefault8x8Intra, kDefault8x8Inter, sps->scaling_list8x8);
            +
            578  }
            +
            579  }
            +
            580 
            +
            581  return kOk;
            +
            582 }
            +
            583 
            +
            584 H264Parser::Result H264Parser::ParsePPSScalingLists(const H264SPS& sps,
            +
            585  H264PPS* pps) {
            +
            586  // See 7.4.2.2.
            +
            587  bool pic_scaling_list_present_flag;
            +
            588  bool use_default;
            +
            589  Result res;
            +
            590 
            +
            591  for (int i = 0; i < 6; ++i) {
            +
            592  READ_BOOL_OR_RETURN(&pic_scaling_list_present_flag);
            +
            593 
            +
            594  if (pic_scaling_list_present_flag) {
            +
            595  res = ParseScalingList(arraysize(pps->scaling_list4x4[i]),
            +
            596  pps->scaling_list4x4[i],
            +
            597  &use_default);
            +
            598  if (res != kOk)
            +
            599  return res;
            +
            600 
            +
            601  if (use_default)
            +
            602  DefaultScalingList4x4(i, pps->scaling_list4x4);
            +
            603 
            +
            604  } else {
            +
            605  if (sps.seq_scaling_matrix_present_flag) {
            +
            606  // Table 7-2 fallback rule A in spec.
            +
            607  FallbackScalingList4x4(
            +
            608  i, kDefault4x4Intra, kDefault4x4Inter, pps->scaling_list4x4);
            +
            609  } else {
            +
            610  // Table 7-2 fallback rule B in spec.
            +
            611  FallbackScalingList4x4(i,
            +
            612  sps.scaling_list4x4[0],
            +
            613  sps.scaling_list4x4[3],
            +
            614  pps->scaling_list4x4);
            +
            615  }
            616  }
            617  }
            618 
            -
            619  // Parse scaling_list8x8.
            -
            620  for (int i = 0; i < ((sps->chroma_format_idc != 3) ? 2 : 6); ++i) {
            -
            621  READ_BOOL_OR_RETURN(&seq_scaling_list_present_flag);
            +
            619  if (pps->transform_8x8_mode_flag) {
            +
            620  for (int i = 0; i < ((sps.chroma_format_idc != 3) ? 2 : 6); ++i) {
            +
            621  READ_BOOL_OR_RETURN(&pic_scaling_list_present_flag);
            622 
            -
            623  if (seq_scaling_list_present_flag) {
            -
            624  res = ParseScalingList(arraysize(sps->scaling_list8x8[i]),
            -
            625  sps->scaling_list8x8[i],
            -
            626  &use_default);
            -
            627  if (res != kOk)
            -
            628  return res;
            +
            623  if (pic_scaling_list_present_flag) {
            +
            624  res = ParseScalingList(arraysize(pps->scaling_list8x8[i]),
            +
            625  pps->scaling_list8x8[i],
            +
            626  &use_default);
            +
            627  if (res != kOk)
            +
            628  return res;
            629 
            -
            630  if (use_default)
            -
            631  DefaultScalingList8x8(i, sps->scaling_list8x8);
            +
            630  if (use_default)
            +
            631  DefaultScalingList8x8(i, pps->scaling_list8x8);
            632 
            -
            633  } else {
            -
            634  FallbackScalingList8x8(
            -
            635  i, kDefault8x8Intra, kDefault8x8Inter, sps->scaling_list8x8);
            -
            636  }
            -
            637  }
            -
            638 
            -
            639  return kOk;
            -
            640 }
            -
            641 
            -
            642 H264Parser::Result H264Parser::ParsePPSScalingLists(const H264SPS& sps,
            -
            643  H264PPS* pps) {
            -
            644  // See 7.4.2.2.
            -
            645  bool pic_scaling_list_present_flag;
            -
            646  bool use_default;
            -
            647  Result res;
            -
            648 
            -
            649  for (int i = 0; i < 6; ++i) {
            -
            650  READ_BOOL_OR_RETURN(&pic_scaling_list_present_flag);
            -
            651 
            -
            652  if (pic_scaling_list_present_flag) {
            -
            653  res = ParseScalingList(arraysize(pps->scaling_list4x4[i]),
            -
            654  pps->scaling_list4x4[i],
            -
            655  &use_default);
            -
            656  if (res != kOk)
            -
            657  return res;
            -
            658 
            -
            659  if (use_default)
            -
            660  DefaultScalingList4x4(i, pps->scaling_list4x4);
            -
            661 
            -
            662  } else {
            -
            663  if (sps.seq_scaling_matrix_present_flag) {
            -
            664  // Table 7-2 fallback rule A in spec.
            -
            665  FallbackScalingList4x4(
            -
            666  i, kDefault4x4Intra, kDefault4x4Inter, pps->scaling_list4x4);
            -
            667  } else {
            -
            668  // Table 7-2 fallback rule B in spec.
            -
            669  FallbackScalingList4x4(i,
            -
            670  sps.scaling_list4x4[0],
            -
            671  sps.scaling_list4x4[3],
            -
            672  pps->scaling_list4x4);
            -
            673  }
            -
            674  }
            -
            675  }
            -
            676 
            -
            677  if (pps->transform_8x8_mode_flag) {
            -
            678  for (int i = 0; i < ((sps.chroma_format_idc != 3) ? 2 : 6); ++i) {
            -
            679  READ_BOOL_OR_RETURN(&pic_scaling_list_present_flag);
            -
            680 
            -
            681  if (pic_scaling_list_present_flag) {
            -
            682  res = ParseScalingList(arraysize(pps->scaling_list8x8[i]),
            -
            683  pps->scaling_list8x8[i],
            -
            684  &use_default);
            -
            685  if (res != kOk)
            -
            686  return res;
            -
            687 
            -
            688  if (use_default)
            -
            689  DefaultScalingList8x8(i, pps->scaling_list8x8);
            +
            633  } else {
            +
            634  if (sps.seq_scaling_matrix_present_flag) {
            +
            635  // Table 7-2 fallback rule A in spec.
            +
            636  FallbackScalingList8x8(
            +
            637  i, kDefault8x8Intra, kDefault8x8Inter, pps->scaling_list8x8);
            +
            638  } else {
            +
            639  // Table 7-2 fallback rule B in spec.
            +
            640  FallbackScalingList8x8(i,
            +
            641  sps.scaling_list8x8[0],
            +
            642  sps.scaling_list8x8[1],
            +
            643  pps->scaling_list8x8);
            +
            644  }
            +
            645  }
            +
            646  }
            +
            647  }
            +
            648  return kOk;
            +
            649 }
            +
            650 
            +
            651 H264Parser::Result H264Parser::ParseAndIgnoreHRDParameters(
            +
            652  bool* hrd_parameters_present) {
            +
            653  int data;
            +
            654  READ_BOOL_OR_RETURN(&data); // {nal,vcl}_hrd_parameters_present_flag
            +
            655  if (!data)
            +
            656  return kOk;
            +
            657 
            +
            658  *hrd_parameters_present = true;
            +
            659 
            +
            660  int cpb_cnt_minus1;
            +
            661  READ_UE_OR_RETURN(&cpb_cnt_minus1);
            +
            662  IN_RANGE_OR_RETURN(cpb_cnt_minus1, 0, 31);
            +
            663  READ_BITS_OR_RETURN(8, &data); // bit_rate_scale, cpb_size_scale
            +
            664  for (int i = 0; i <= cpb_cnt_minus1; ++i) {
            +
            665  READ_UE_OR_RETURN(&data); // bit_rate_value_minus1[i]
            +
            666  READ_UE_OR_RETURN(&data); // cpb_size_value_minus1[i]
            +
            667  READ_BOOL_OR_RETURN(&data); // cbr_flag
            +
            668  }
            +
            669  READ_BITS_OR_RETURN(20, &data); // cpb/dpb delays, etc.
            +
            670 
            +
            671  return kOk;
            +
            672 }
            +
            673 
            +
            674 H264Parser::Result H264Parser::ParseVUIParameters(H264SPS* sps) {
            +
            675  bool aspect_ratio_info_present_flag;
            +
            676  READ_BOOL_OR_RETURN(&aspect_ratio_info_present_flag);
            +
            677  if (aspect_ratio_info_present_flag) {
            +
            678  int aspect_ratio_idc;
            +
            679  READ_BITS_OR_RETURN(8, &aspect_ratio_idc);
            +
            680  if (aspect_ratio_idc == kExtendedSar) {
            +
            681  READ_BITS_OR_RETURN(16, &sps->sar_width);
            +
            682  READ_BITS_OR_RETURN(16, &sps->sar_height);
            +
            683  } else {
            +
            684  const int max_aspect_ratio_idc = arraysize(kTableSarWidth) - 1;
            +
            685  IN_RANGE_OR_RETURN(aspect_ratio_idc, 0, max_aspect_ratio_idc);
            +
            686  sps->sar_width = kTableSarWidth[aspect_ratio_idc];
            +
            687  sps->sar_height = kTableSarHeight[aspect_ratio_idc];
            +
            688  }
            +
            689  }
            690 
            -
            691  } else {
            -
            692  if (sps.seq_scaling_matrix_present_flag) {
            -
            693  // Table 7-2 fallback rule A in spec.
            -
            694  FallbackScalingList8x8(
            -
            695  i, kDefault8x8Intra, kDefault8x8Inter, pps->scaling_list8x8);
            -
            696  } else {
            -
            697  // Table 7-2 fallback rule B in spec.
            -
            698  FallbackScalingList8x8(i,
            -
            699  sps.scaling_list8x8[0],
            -
            700  sps.scaling_list8x8[1],
            -
            701  pps->scaling_list8x8);
            -
            702  }
            -
            703  }
            -
            704  }
            -
            705  }
            -
            706  return kOk;
            -
            707 }
            -
            708 
            -
            709 H264Parser::Result H264Parser::ParseAndIgnoreHRDParameters(
            -
            710  bool* hrd_parameters_present) {
            -
            711  int data;
            -
            712  READ_BOOL_OR_RETURN(&data); // {nal,vcl}_hrd_parameters_present_flag
            -
            713  if (!data)
            -
            714  return kOk;
            -
            715 
            -
            716  *hrd_parameters_present = true;
            -
            717 
            -
            718  int cpb_cnt_minus1;
            -
            719  READ_UE_OR_RETURN(&cpb_cnt_minus1);
            -
            720  IN_RANGE_OR_RETURN(cpb_cnt_minus1, 0, 31);
            -
            721  READ_BITS_OR_RETURN(8, &data); // bit_rate_scale, cpb_size_scale
            -
            722  for (int i = 0; i <= cpb_cnt_minus1; ++i) {
            -
            723  READ_UE_OR_RETURN(&data); // bit_rate_value_minus1[i]
            -
            724  READ_UE_OR_RETURN(&data); // cpb_size_value_minus1[i]
            -
            725  READ_BOOL_OR_RETURN(&data); // cbr_flag
            -
            726  }
            -
            727  READ_BITS_OR_RETURN(20, &data); // cpb/dpb delays, etc.
            -
            728 
            -
            729  return kOk;
            -
            730 }
            -
            731 
            -
            732 H264Parser::Result H264Parser::ParseVUIParameters(H264SPS* sps) {
            -
            733  bool aspect_ratio_info_present_flag;
            -
            734  READ_BOOL_OR_RETURN(&aspect_ratio_info_present_flag);
            -
            735  if (aspect_ratio_info_present_flag) {
            -
            736  int aspect_ratio_idc;
            -
            737  READ_BITS_OR_RETURN(8, &aspect_ratio_idc);
            -
            738  if (aspect_ratio_idc == kExtendedSar) {
            -
            739  READ_BITS_OR_RETURN(16, &sps->sar_width);
            -
            740  READ_BITS_OR_RETURN(16, &sps->sar_height);
            -
            741  } else {
            -
            742  const int max_aspect_ratio_idc = arraysize(kTableSarWidth) - 1;
            -
            743  IN_RANGE_OR_RETURN(aspect_ratio_idc, 0, max_aspect_ratio_idc);
            -
            744  sps->sar_width = kTableSarWidth[aspect_ratio_idc];
            -
            745  sps->sar_height = kTableSarHeight[aspect_ratio_idc];
            -
            746  }
            -
            747  }
            -
            748 
            -
            749  int data;
            -
            750  // Read and ignore overscan and video signal type info.
            -
            751  READ_BOOL_OR_RETURN(&data); // overscan_info_present_flag
            -
            752  if (data)
            -
            753  READ_BOOL_OR_RETURN(&data); // overscan_appropriate_flag
            -
            754 
            -
            755  READ_BOOL_OR_RETURN(&data); // video_signal_type_present_flag
            -
            756  if (data) {
            -
            757  READ_BITS_OR_RETURN(3, &data); // video_format
            -
            758  READ_BOOL_OR_RETURN(&data); // video_full_range_flag
            -
            759  READ_BOOL_OR_RETURN(&data); // colour_description_present_flag
            -
            760  if (data)
            -
            761  READ_BITS_OR_RETURN(24, &data); // color description syntax elements
            -
            762  }
            +
            691  int data;
            +
            692  // Read and ignore overscan and video signal type info.
            +
            693  READ_BOOL_OR_RETURN(&data); // overscan_info_present_flag
            +
            694  if (data)
            +
            695  READ_BOOL_OR_RETURN(&data); // overscan_appropriate_flag
            +
            696 
            +
            697  READ_BOOL_OR_RETURN(&data); // video_signal_type_present_flag
            +
            698  if (data) {
            +
            699  READ_BITS_OR_RETURN(3, &data); // video_format
            +
            700  READ_BOOL_OR_RETURN(&data); // video_full_range_flag
            +
            701  READ_BOOL_OR_RETURN(&data); // colour_description_present_flag
            +
            702  if (data)
            +
            703  READ_BITS_OR_RETURN(24, &data); // color description syntax elements
            +
            704  }
            +
            705 
            +
            706  READ_BOOL_OR_RETURN(&data); // chroma_loc_info_present_flag
            +
            707  if (data) {
            +
            708  READ_UE_OR_RETURN(&data); // chroma_sample_loc_type_top_field
            +
            709  READ_UE_OR_RETURN(&data); // chroma_sample_loc_type_bottom_field
            +
            710  }
            +
            711 
            +
            712  // Read and ignore timing info.
            +
            713  READ_BOOL_OR_RETURN(&data); // timing_info_present_flag
            +
            714  if (data) {
            +
            715  READ_BITS_OR_RETURN(16, &data); // num_units_in_tick
            +
            716  READ_BITS_OR_RETURN(16, &data); // num_units_in_tick
            +
            717  READ_BITS_OR_RETURN(16, &data); // time_scale
            +
            718  READ_BITS_OR_RETURN(16, &data); // time_scale
            +
            719  READ_BOOL_OR_RETURN(&data); // fixed_frame_rate_flag
            +
            720  }
            +
            721 
            +
            722  // Read and ignore NAL HRD parameters, if present.
            +
            723  bool hrd_parameters_present = false;
            +
            724  Result res = ParseAndIgnoreHRDParameters(&hrd_parameters_present);
            +
            725  if (res != kOk)
            +
            726  return res;
            +
            727 
            +
            728  // Read and ignore VCL HRD parameters, if present.
            +
            729  res = ParseAndIgnoreHRDParameters(&hrd_parameters_present);
            +
            730  if (res != kOk)
            +
            731  return res;
            +
            732 
            +
            733  if (hrd_parameters_present) // One of NAL or VCL params present is enough.
            +
            734  READ_BOOL_OR_RETURN(&data); // low_delay_hrd_flag
            +
            735 
            +
            736  READ_BOOL_OR_RETURN(&data); // pic_struct_present_flag
            +
            737  READ_BOOL_OR_RETURN(&sps->bitstream_restriction_flag);
            +
            738  if (sps->bitstream_restriction_flag) {
            +
            739  READ_BOOL_OR_RETURN(&data); // motion_vectors_over_pic_boundaries_flag
            +
            740  READ_UE_OR_RETURN(&data); // max_bytes_per_pic_denom
            +
            741  READ_UE_OR_RETURN(&data); // max_bits_per_mb_denom
            +
            742  READ_UE_OR_RETURN(&data); // log2_max_mv_length_horizontal
            +
            743  READ_UE_OR_RETURN(&data); // log2_max_mv_length_vertical
            +
            744  READ_UE_OR_RETURN(&sps->max_num_reorder_frames);
            +
            745  READ_UE_OR_RETURN(&sps->max_dec_frame_buffering);
            +
            746  TRUE_OR_RETURN(sps->max_dec_frame_buffering >= sps->max_num_ref_frames);
            +
            747  IN_RANGE_OR_RETURN(
            +
            748  sps->max_num_reorder_frames, 0, sps->max_dec_frame_buffering);
            +
            749  }
            +
            750 
            +
            751  return kOk;
            +
            752 }
            +
            753 
            +
            754 static void FillDefaultSeqScalingLists(H264SPS* sps) {
            +
            755  for (int i = 0; i < 6; ++i)
            +
            756  for (int j = 0; j < kH264ScalingList4x4Length; ++j)
            +
            757  sps->scaling_list4x4[i][j] = 16;
            +
            758 
            +
            759  for (int i = 0; i < 6; ++i)
            +
            760  for (int j = 0; j < kH264ScalingList8x8Length; ++j)
            +
            761  sps->scaling_list8x8[i][j] = 16;
            +
            762 }
            763 
            -
            764  READ_BOOL_OR_RETURN(&data); // chroma_loc_info_present_flag
            -
            765  if (data) {
            -
            766  READ_UE_OR_RETURN(&data); // chroma_sample_loc_type_top_field
            -
            767  READ_UE_OR_RETURN(&data); // chroma_sample_loc_type_bottom_field
            -
            768  }
            -
            769 
            -
            770  // Read and ignore timing info.
            -
            771  READ_BOOL_OR_RETURN(&data); // timing_info_present_flag
            -
            772  if (data) {
            -
            773  READ_BITS_OR_RETURN(16, &data); // num_units_in_tick
            -
            774  READ_BITS_OR_RETURN(16, &data); // num_units_in_tick
            -
            775  READ_BITS_OR_RETURN(16, &data); // time_scale
            -
            776  READ_BITS_OR_RETURN(16, &data); // time_scale
            -
            777  READ_BOOL_OR_RETURN(&data); // fixed_frame_rate_flag
            -
            778  }
            -
            779 
            -
            780  // Read and ignore NAL HRD parameters, if present.
            -
            781  bool hrd_parameters_present = false;
            -
            782  Result res = ParseAndIgnoreHRDParameters(&hrd_parameters_present);
            -
            783  if (res != kOk)
            -
            784  return res;
            -
            785 
            -
            786  // Read and ignore VCL HRD parameters, if present.
            -
            787  res = ParseAndIgnoreHRDParameters(&hrd_parameters_present);
            -
            788  if (res != kOk)
            -
            789  return res;
            -
            790 
            -
            791  if (hrd_parameters_present) // One of NAL or VCL params present is enough.
            -
            792  READ_BOOL_OR_RETURN(&data); // low_delay_hrd_flag
            -
            793 
            -
            794  READ_BOOL_OR_RETURN(&data); // pic_struct_present_flag
            -
            795  READ_BOOL_OR_RETURN(&sps->bitstream_restriction_flag);
            -
            796  if (sps->bitstream_restriction_flag) {
            -
            797  READ_BOOL_OR_RETURN(&data); // motion_vectors_over_pic_boundaries_flag
            -
            798  READ_UE_OR_RETURN(&data); // max_bytes_per_pic_denom
            -
            799  READ_UE_OR_RETURN(&data); // max_bits_per_mb_denom
            -
            800  READ_UE_OR_RETURN(&data); // log2_max_mv_length_horizontal
            -
            801  READ_UE_OR_RETURN(&data); // log2_max_mv_length_vertical
            -
            802  READ_UE_OR_RETURN(&sps->max_num_reorder_frames);
            -
            803  READ_UE_OR_RETURN(&sps->max_dec_frame_buffering);
            -
            804  TRUE_OR_RETURN(sps->max_dec_frame_buffering >= sps->max_num_ref_frames);
            -
            805  IN_RANGE_OR_RETURN(
            -
            806  sps->max_num_reorder_frames, 0, sps->max_dec_frame_buffering);
            -
            807  }
            -
            808 
            -
            809  return kOk;
            -
            810 }
            -
            811 
            -
            812 static void FillDefaultSeqScalingLists(H264SPS* sps) {
            -
            813  for (int i = 0; i < 6; ++i)
            -
            814  for (int j = 0; j < kH264ScalingList4x4Length; ++j)
            -
            815  sps->scaling_list4x4[i][j] = 16;
            -
            816 
            -
            817  for (int i = 0; i < 6; ++i)
            -
            818  for (int j = 0; j < kH264ScalingList8x8Length; ++j)
            -
            819  sps->scaling_list8x8[i][j] = 16;
            -
            820 }
            -
            821 
            -
            822 H264Parser::Result H264Parser::ParseSPS(int* sps_id) {
            -
            823  // See 7.4.2.1.
            -
            824  int data;
            -
            825  Result res;
            -
            826 
            -
            827  *sps_id = -1;
            +
            764 H264Parser::Result H264Parser::ParseSPS(int* sps_id) {
            +
            765  // See 7.4.2.1.
            +
            766  int data;
            +
            767  Result res;
            +
            768 
            +
            769  *sps_id = -1;
            +
            770 
            +
            771  scoped_ptr<H264SPS> sps(new H264SPS());
            +
            772 
            +
            773  READ_BITS_OR_RETURN(8, &sps->profile_idc);
            +
            774  READ_BOOL_OR_RETURN(&sps->constraint_set0_flag);
            +
            775  READ_BOOL_OR_RETURN(&sps->constraint_set1_flag);
            +
            776  READ_BOOL_OR_RETURN(&sps->constraint_set2_flag);
            +
            777  READ_BOOL_OR_RETURN(&sps->constraint_set3_flag);
            +
            778  READ_BOOL_OR_RETURN(&sps->constraint_set4_flag);
            +
            779  READ_BOOL_OR_RETURN(&sps->constraint_set5_flag);
            +
            780  READ_BITS_OR_RETURN(2, &data); // reserved_zero_2bits
            +
            781  READ_BITS_OR_RETURN(8, &sps->level_idc);
            +
            782  READ_UE_OR_RETURN(&sps->seq_parameter_set_id);
            +
            783  TRUE_OR_RETURN(sps->seq_parameter_set_id < 32);
            +
            784 
            +
            785  if (sps->profile_idc == 100 || sps->profile_idc == 110 ||
            +
            786  sps->profile_idc == 122 || sps->profile_idc == 244 ||
            +
            787  sps->profile_idc == 44 || sps->profile_idc == 83 ||
            +
            788  sps->profile_idc == 86 || sps->profile_idc == 118 ||
            +
            789  sps->profile_idc == 128) {
            +
            790  READ_UE_OR_RETURN(&sps->chroma_format_idc);
            +
            791  TRUE_OR_RETURN(sps->chroma_format_idc < 4);
            +
            792 
            +
            793  if (sps->chroma_format_idc == 3)
            +
            794  READ_BOOL_OR_RETURN(&sps->separate_colour_plane_flag);
            +
            795 
            +
            796  READ_UE_OR_RETURN(&sps->bit_depth_luma_minus8);
            +
            797  TRUE_OR_RETURN(sps->bit_depth_luma_minus8 < 7);
            +
            798 
            +
            799  READ_UE_OR_RETURN(&sps->bit_depth_chroma_minus8);
            +
            800  TRUE_OR_RETURN(sps->bit_depth_chroma_minus8 < 7);
            +
            801 
            +
            802  READ_BOOL_OR_RETURN(&sps->qpprime_y_zero_transform_bypass_flag);
            +
            803  READ_BOOL_OR_RETURN(&sps->seq_scaling_matrix_present_flag);
            +
            804 
            +
            805  if (sps->seq_scaling_matrix_present_flag) {
            +
            806  DVLOG(4) << "Scaling matrix present";
            +
            807  res = ParseSPSScalingLists(sps.get());
            +
            808  if (res != kOk)
            +
            809  return res;
            +
            810  } else {
            +
            811  FillDefaultSeqScalingLists(sps.get());
            +
            812  }
            +
            813  } else {
            +
            814  sps->chroma_format_idc = 1;
            +
            815  FillDefaultSeqScalingLists(sps.get());
            +
            816  }
            +
            817 
            +
            818  if (sps->separate_colour_plane_flag)
            +
            819  sps->chroma_array_type = 0;
            +
            820  else
            +
            821  sps->chroma_array_type = sps->chroma_format_idc;
            +
            822 
            +
            823  READ_UE_OR_RETURN(&sps->log2_max_frame_num_minus4);
            +
            824  TRUE_OR_RETURN(sps->log2_max_frame_num_minus4 < 13);
            +
            825 
            +
            826  READ_UE_OR_RETURN(&sps->pic_order_cnt_type);
            +
            827  TRUE_OR_RETURN(sps->pic_order_cnt_type < 3);
            828 
            -
            829  scoped_ptr<H264SPS> sps(new H264SPS());
            -
            830 
            -
            831  READ_BITS_OR_RETURN(8, &sps->profile_idc);
            -
            832  READ_BOOL_OR_RETURN(&sps->constraint_set0_flag);
            -
            833  READ_BOOL_OR_RETURN(&sps->constraint_set1_flag);
            -
            834  READ_BOOL_OR_RETURN(&sps->constraint_set2_flag);
            -
            835  READ_BOOL_OR_RETURN(&sps->constraint_set3_flag);
            -
            836  READ_BOOL_OR_RETURN(&sps->constraint_set4_flag);
            -
            837  READ_BOOL_OR_RETURN(&sps->constraint_set5_flag);
            -
            838  READ_BITS_OR_RETURN(2, &data); // reserved_zero_2bits
            -
            839  READ_BITS_OR_RETURN(8, &sps->level_idc);
            -
            840  READ_UE_OR_RETURN(&sps->seq_parameter_set_id);
            -
            841  TRUE_OR_RETURN(sps->seq_parameter_set_id < 32);
            -
            842 
            -
            843  if (sps->profile_idc == 100 || sps->profile_idc == 110 ||
            -
            844  sps->profile_idc == 122 || sps->profile_idc == 244 ||
            -
            845  sps->profile_idc == 44 || sps->profile_idc == 83 ||
            -
            846  sps->profile_idc == 86 || sps->profile_idc == 118 ||
            -
            847  sps->profile_idc == 128) {
            -
            848  READ_UE_OR_RETURN(&sps->chroma_format_idc);
            -
            849  TRUE_OR_RETURN(sps->chroma_format_idc < 4);
            -
            850 
            -
            851  if (sps->chroma_format_idc == 3)
            -
            852  READ_BOOL_OR_RETURN(&sps->separate_colour_plane_flag);
            -
            853 
            -
            854  READ_UE_OR_RETURN(&sps->bit_depth_luma_minus8);
            -
            855  TRUE_OR_RETURN(sps->bit_depth_luma_minus8 < 7);
            -
            856 
            -
            857  READ_UE_OR_RETURN(&sps->bit_depth_chroma_minus8);
            -
            858  TRUE_OR_RETURN(sps->bit_depth_chroma_minus8 < 7);
            +
            829  sps->expected_delta_per_pic_order_cnt_cycle = 0;
            +
            830  if (sps->pic_order_cnt_type == 0) {
            +
            831  READ_UE_OR_RETURN(&sps->log2_max_pic_order_cnt_lsb_minus4);
            +
            832  TRUE_OR_RETURN(sps->log2_max_pic_order_cnt_lsb_minus4 < 13);
            +
            833  } else if (sps->pic_order_cnt_type == 1) {
            +
            834  READ_BOOL_OR_RETURN(&sps->delta_pic_order_always_zero_flag);
            +
            835  READ_SE_OR_RETURN(&sps->offset_for_non_ref_pic);
            +
            836  READ_SE_OR_RETURN(&sps->offset_for_top_to_bottom_field);
            +
            837  READ_UE_OR_RETURN(&sps->num_ref_frames_in_pic_order_cnt_cycle);
            +
            838  TRUE_OR_RETURN(sps->num_ref_frames_in_pic_order_cnt_cycle < 255);
            +
            839 
            +
            840  for (int i = 0; i < sps->num_ref_frames_in_pic_order_cnt_cycle; ++i) {
            +
            841  READ_SE_OR_RETURN(&sps->offset_for_ref_frame[i]);
            +
            842  sps->expected_delta_per_pic_order_cnt_cycle +=
            +
            843  sps->offset_for_ref_frame[i];
            +
            844  }
            +
            845  }
            +
            846 
            +
            847  READ_UE_OR_RETURN(&sps->max_num_ref_frames);
            +
            848  READ_BOOL_OR_RETURN(&sps->gaps_in_frame_num_value_allowed_flag);
            +
            849 
            +
            850  if (sps->gaps_in_frame_num_value_allowed_flag)
            +
            851  return kUnsupportedStream;
            +
            852 
            +
            853  READ_UE_OR_RETURN(&sps->pic_width_in_mbs_minus1);
            +
            854  READ_UE_OR_RETURN(&sps->pic_height_in_map_units_minus1);
            +
            855 
            +
            856  READ_BOOL_OR_RETURN(&sps->frame_mbs_only_flag);
            +
            857  if (!sps->frame_mbs_only_flag)
            +
            858  READ_BOOL_OR_RETURN(&sps->mb_adaptive_frame_field_flag);
            859 
            -
            860  READ_BOOL_OR_RETURN(&sps->qpprime_y_zero_transform_bypass_flag);
            -
            861  READ_BOOL_OR_RETURN(&sps->seq_scaling_matrix_present_flag);
            -
            862 
            -
            863  if (sps->seq_scaling_matrix_present_flag) {
            -
            864  DVLOG(4) << "Scaling matrix present";
            -
            865  res = ParseSPSScalingLists(sps.get());
            -
            866  if (res != kOk)
            -
            867  return res;
            -
            868  } else {
            -
            869  FillDefaultSeqScalingLists(sps.get());
            -
            870  }
            -
            871  } else {
            -
            872  sps->chroma_format_idc = 1;
            -
            873  FillDefaultSeqScalingLists(sps.get());
            -
            874  }
            -
            875 
            -
            876  if (sps->separate_colour_plane_flag)
            -
            877  sps->chroma_array_type = 0;
            -
            878  else
            -
            879  sps->chroma_array_type = sps->chroma_format_idc;
            -
            880 
            -
            881  READ_UE_OR_RETURN(&sps->log2_max_frame_num_minus4);
            -
            882  TRUE_OR_RETURN(sps->log2_max_frame_num_minus4 < 13);
            -
            883 
            -
            884  READ_UE_OR_RETURN(&sps->pic_order_cnt_type);
            -
            885  TRUE_OR_RETURN(sps->pic_order_cnt_type < 3);
            -
            886 
            -
            887  sps->expected_delta_per_pic_order_cnt_cycle = 0;
            -
            888  if (sps->pic_order_cnt_type == 0) {
            -
            889  READ_UE_OR_RETURN(&sps->log2_max_pic_order_cnt_lsb_minus4);
            -
            890  TRUE_OR_RETURN(sps->log2_max_pic_order_cnt_lsb_minus4 < 13);
            -
            891  } else if (sps->pic_order_cnt_type == 1) {
            -
            892  READ_BOOL_OR_RETURN(&sps->delta_pic_order_always_zero_flag);
            -
            893  READ_SE_OR_RETURN(&sps->offset_for_non_ref_pic);
            -
            894  READ_SE_OR_RETURN(&sps->offset_for_top_to_bottom_field);
            -
            895  READ_UE_OR_RETURN(&sps->num_ref_frames_in_pic_order_cnt_cycle);
            -
            896  TRUE_OR_RETURN(sps->num_ref_frames_in_pic_order_cnt_cycle < 255);
            -
            897 
            -
            898  for (int i = 0; i < sps->num_ref_frames_in_pic_order_cnt_cycle; ++i) {
            -
            899  READ_SE_OR_RETURN(&sps->offset_for_ref_frame[i]);
            -
            900  sps->expected_delta_per_pic_order_cnt_cycle +=
            -
            901  sps->offset_for_ref_frame[i];
            -
            902  }
            -
            903  }
            +
            860  READ_BOOL_OR_RETURN(&sps->direct_8x8_inference_flag);
            +
            861 
            +
            862  READ_BOOL_OR_RETURN(&sps->frame_cropping_flag);
            +
            863  if (sps->frame_cropping_flag) {
            +
            864  READ_UE_OR_RETURN(&sps->frame_crop_left_offset);
            +
            865  READ_UE_OR_RETURN(&sps->frame_crop_right_offset);
            +
            866  READ_UE_OR_RETURN(&sps->frame_crop_top_offset);
            +
            867  READ_UE_OR_RETURN(&sps->frame_crop_bottom_offset);
            +
            868  }
            +
            869 
            +
            870  READ_BOOL_OR_RETURN(&sps->vui_parameters_present_flag);
            +
            871  if (sps->vui_parameters_present_flag) {
            +
            872  DVLOG(4) << "VUI parameters present";
            +
            873  res = ParseVUIParameters(sps.get());
            +
            874  if (res != kOk)
            +
            875  return res;
            +
            876  }
            +
            877 
            +
            878  // If an SPS with the same id already exists, replace it.
            +
            879  *sps_id = sps->seq_parameter_set_id;
            +
            880  delete active_SPSes_[*sps_id];
            +
            881  active_SPSes_[*sps_id] = sps.release();
            +
            882 
            +
            883  return kOk;
            +
            884 }
            +
            885 
            +
            886 H264Parser::Result H264Parser::ParsePPS(int* pps_id) {
            +
            887  // See 7.4.2.2.
            +
            888  const H264SPS* sps;
            +
            889  Result res;
            +
            890 
            +
            891  *pps_id = -1;
            +
            892 
            +
            893  scoped_ptr<H264PPS> pps(new H264PPS());
            +
            894 
            +
            895  READ_UE_OR_RETURN(&pps->pic_parameter_set_id);
            +
            896  READ_UE_OR_RETURN(&pps->seq_parameter_set_id);
            +
            897  TRUE_OR_RETURN(pps->seq_parameter_set_id < 32);
            +
            898 
            +
            899  sps = GetSPS(pps->seq_parameter_set_id);
            +
            900  TRUE_OR_RETURN(sps);
            +
            901 
            +
            902  READ_BOOL_OR_RETURN(&pps->entropy_coding_mode_flag);
            +
            903  READ_BOOL_OR_RETURN(&pps->bottom_field_pic_order_in_frame_present_flag);
            904 
            -
            905  READ_UE_OR_RETURN(&sps->max_num_ref_frames);
            -
            906  READ_BOOL_OR_RETURN(&sps->gaps_in_frame_num_value_allowed_flag);
            -
            907 
            -
            908  if (sps->gaps_in_frame_num_value_allowed_flag)
            -
            909  return kUnsupportedStream;
            +
            905  READ_UE_OR_RETURN(&pps->num_slice_groups_minus1);
            +
            906  if (pps->num_slice_groups_minus1 > 1) {
            +
            907  DVLOG(1) << "Slice groups not supported";
            +
            908  return kUnsupportedStream;
            +
            909  }
            910 
            -
            911  READ_UE_OR_RETURN(&sps->pic_width_in_mbs_minus1);
            -
            912  READ_UE_OR_RETURN(&sps->pic_height_in_map_units_minus1);
            +
            911  READ_UE_OR_RETURN(&pps->num_ref_idx_l0_default_active_minus1);
            +
            912  TRUE_OR_RETURN(pps->num_ref_idx_l0_default_active_minus1 < 32);
            913 
            -
            914  READ_BOOL_OR_RETURN(&sps->frame_mbs_only_flag);
            -
            915  if (!sps->frame_mbs_only_flag)
            -
            916  READ_BOOL_OR_RETURN(&sps->mb_adaptive_frame_field_flag);
            -
            917 
            -
            918  READ_BOOL_OR_RETURN(&sps->direct_8x8_inference_flag);
            -
            919 
            -
            920  READ_BOOL_OR_RETURN(&sps->frame_cropping_flag);
            -
            921  if (sps->frame_cropping_flag) {
            -
            922  READ_UE_OR_RETURN(&sps->frame_crop_left_offset);
            -
            923  READ_UE_OR_RETURN(&sps->frame_crop_right_offset);
            -
            924  READ_UE_OR_RETURN(&sps->frame_crop_top_offset);
            -
            925  READ_UE_OR_RETURN(&sps->frame_crop_bottom_offset);
            -
            926  }
            -
            927 
            -
            928  READ_BOOL_OR_RETURN(&sps->vui_parameters_present_flag);
            -
            929  if (sps->vui_parameters_present_flag) {
            -
            930  DVLOG(4) << "VUI parameters present";
            -
            931  res = ParseVUIParameters(sps.get());
            -
            932  if (res != kOk)
            -
            933  return res;
            -
            934  }
            -
            935 
            -
            936  // If an SPS with the same id already exists, replace it.
            -
            937  *sps_id = sps->seq_parameter_set_id;
            -
            938  delete active_SPSes_[*sps_id];
            -
            939  active_SPSes_[*sps_id] = sps.release();
            -
            940 
            -
            941  return kOk;
            -
            942 }
            -
            943 
            -
            944 H264Parser::Result H264Parser::ParsePPS(int* pps_id) {
            -
            945  // See 7.4.2.2.
            -
            946  const H264SPS* sps;
            -
            947  Result res;
            +
            914  READ_UE_OR_RETURN(&pps->num_ref_idx_l1_default_active_minus1);
            +
            915  TRUE_OR_RETURN(pps->num_ref_idx_l1_default_active_minus1 < 32);
            +
            916 
            +
            917  READ_BOOL_OR_RETURN(&pps->weighted_pred_flag);
            +
            918  READ_BITS_OR_RETURN(2, &pps->weighted_bipred_idc);
            +
            919  TRUE_OR_RETURN(pps->weighted_bipred_idc < 3);
            +
            920 
            +
            921  READ_SE_OR_RETURN(&pps->pic_init_qp_minus26);
            +
            922  IN_RANGE_OR_RETURN(pps->pic_init_qp_minus26, -26, 25);
            +
            923 
            +
            924  READ_SE_OR_RETURN(&pps->pic_init_qs_minus26);
            +
            925  IN_RANGE_OR_RETURN(pps->pic_init_qs_minus26, -26, 25);
            +
            926 
            +
            927  READ_SE_OR_RETURN(&pps->chroma_qp_index_offset);
            +
            928  IN_RANGE_OR_RETURN(pps->chroma_qp_index_offset, -12, 12);
            +
            929  pps->second_chroma_qp_index_offset = pps->chroma_qp_index_offset;
            +
            930 
            +
            931  READ_BOOL_OR_RETURN(&pps->deblocking_filter_control_present_flag);
            +
            932  READ_BOOL_OR_RETURN(&pps->constrained_intra_pred_flag);
            +
            933  READ_BOOL_OR_RETURN(&pps->redundant_pic_cnt_present_flag);
            +
            934 
            +
            935  if (br_.HasMoreRBSPData()) {
            +
            936  READ_BOOL_OR_RETURN(&pps->transform_8x8_mode_flag);
            +
            937  READ_BOOL_OR_RETURN(&pps->pic_scaling_matrix_present_flag);
            +
            938 
            +
            939  if (pps->pic_scaling_matrix_present_flag) {
            +
            940  DVLOG(4) << "Picture scaling matrix present";
            +
            941  res = ParsePPSScalingLists(*sps, pps.get());
            +
            942  if (res != kOk)
            +
            943  return res;
            +
            944  }
            +
            945 
            +
            946  READ_SE_OR_RETURN(&pps->second_chroma_qp_index_offset);
            +
            947  }
            948 
            -
            949  *pps_id = -1;
            -
            950 
            -
            951  scoped_ptr<H264PPS> pps(new H264PPS());
            -
            952 
            -
            953  READ_UE_OR_RETURN(&pps->pic_parameter_set_id);
            -
            954  READ_UE_OR_RETURN(&pps->seq_parameter_set_id);
            -
            955  TRUE_OR_RETURN(pps->seq_parameter_set_id < 32);
            +
            949  // If a PPS with the same id already exists, replace it.
            +
            950  *pps_id = pps->pic_parameter_set_id;
            +
            951  delete active_PPSes_[*pps_id];
            +
            952  active_PPSes_[*pps_id] = pps.release();
            +
            953 
            +
            954  return kOk;
            +
            955 }
            956 
            -
            957  sps = GetSPS(pps->seq_parameter_set_id);
            -
            958  TRUE_OR_RETURN(sps);
            -
            959 
            -
            960  READ_BOOL_OR_RETURN(&pps->entropy_coding_mode_flag);
            -
            961  READ_BOOL_OR_RETURN(&pps->bottom_field_pic_order_in_frame_present_flag);
            +
            957 H264Parser::Result H264Parser::ParseSPSFromArray(
            +
            958  const uint8_t* sps_data,
            +
            959  size_t sps_data_length,
            +
            960  int* sps_id) {
            +
            961  br_.Initialize(sps_data, sps_data_length);
            962 
            -
            963  READ_UE_OR_RETURN(&pps->num_slice_groups_minus1);
            -
            964  if (pps->num_slice_groups_minus1 > 1) {
            -
            965  DVLOG(1) << "Slice groups not supported";
            -
            966  return kUnsupportedStream;
            -
            967  }
            -
            968 
            -
            969  READ_UE_OR_RETURN(&pps->num_ref_idx_l0_default_active_minus1);
            -
            970  TRUE_OR_RETURN(pps->num_ref_idx_l0_default_active_minus1 < 32);
            -
            971 
            -
            972  READ_UE_OR_RETURN(&pps->num_ref_idx_l1_default_active_minus1);
            -
            973  TRUE_OR_RETURN(pps->num_ref_idx_l1_default_active_minus1 < 32);
            -
            974 
            -
            975  READ_BOOL_OR_RETURN(&pps->weighted_pred_flag);
            -
            976  READ_BITS_OR_RETURN(2, &pps->weighted_bipred_idc);
            -
            977  TRUE_OR_RETURN(pps->weighted_bipred_idc < 3);
            +
            963  int data;
            +
            964  READ_BITS_OR_RETURN(1, &data);
            +
            965  // First bit must be 0.
            +
            966  TRUE_OR_RETURN(data == 0);
            +
            967  int nal_ref_idc;
            +
            968  READ_BITS_OR_RETURN(2, &nal_ref_idc);
            +
            969  // From the spec "nal_ref_idc shall not be equal to 0 for sequence parameter
            +
            970  // set".
            +
            971  TRUE_OR_RETURN(nal_ref_idc != 0);
            +
            972  int nal_unit_type;
            +
            973  READ_BITS_OR_RETURN(5, &nal_unit_type);
            +
            974  TRUE_OR_RETURN(nal_unit_type == H264NALU::kSPS);
            +
            975 
            +
            976  return ParseSPS(sps_id);
            +
            977 }
            978 
            -
            979  READ_SE_OR_RETURN(&pps->pic_init_qp_minus26);
            -
            980  IN_RANGE_OR_RETURN(pps->pic_init_qp_minus26, -26, 25);
            -
            981 
            -
            982  READ_SE_OR_RETURN(&pps->pic_init_qs_minus26);
            -
            983  IN_RANGE_OR_RETURN(pps->pic_init_qs_minus26, -26, 25);
            -
            984 
            -
            985  READ_SE_OR_RETURN(&pps->chroma_qp_index_offset);
            -
            986  IN_RANGE_OR_RETURN(pps->chroma_qp_index_offset, -12, 12);
            -
            987  pps->second_chroma_qp_index_offset = pps->chroma_qp_index_offset;
            -
            988 
            -
            989  READ_BOOL_OR_RETURN(&pps->deblocking_filter_control_present_flag);
            -
            990  READ_BOOL_OR_RETURN(&pps->constrained_intra_pred_flag);
            -
            991  READ_BOOL_OR_RETURN(&pps->redundant_pic_cnt_present_flag);
            -
            992 
            -
            993  if (br_.HasMoreRBSPData()) {
            -
            994  READ_BOOL_OR_RETURN(&pps->transform_8x8_mode_flag);
            -
            995  READ_BOOL_OR_RETURN(&pps->pic_scaling_matrix_present_flag);
            -
            996 
            -
            997  if (pps->pic_scaling_matrix_present_flag) {
            -
            998  DVLOG(4) << "Picture scaling matrix present";
            -
            999  res = ParsePPSScalingLists(*sps, pps.get());
            -
            1000  if (res != kOk)
            -
            1001  return res;
            -
            1002  }
            -
            1003 
            -
            1004  READ_SE_OR_RETURN(&pps->second_chroma_qp_index_offset);
            -
            1005  }
            -
            1006 
            -
            1007  // If a PPS with the same id already exists, replace it.
            -
            1008  *pps_id = pps->pic_parameter_set_id;
            -
            1009  delete active_PPSes_[*pps_id];
            -
            1010  active_PPSes_[*pps_id] = pps.release();
            -
            1011 
            -
            1012  return kOk;
            -
            1013 }
            -
            1014 
            -
            1015 H264Parser::Result H264Parser::ParseSPSFromArray(
            -
            1016  const uint8_t* sps_data,
            -
            1017  size_t sps_data_length,
            -
            1018  int* sps_id) {
            -
            1019  br_.Initialize(sps_data, sps_data_length);
            -
            1020 
            -
            1021  int data;
            -
            1022  READ_BITS_OR_RETURN(1, &data);
            -
            1023  // First bit must be 0.
            -
            1024  TRUE_OR_RETURN(data == 0);
            -
            1025  int nal_ref_idc;
            -
            1026  READ_BITS_OR_RETURN(2, &nal_ref_idc);
            -
            1027  // From the spec "nal_ref_idc shall not be equal to 0 for sequence parameter
            -
            1028  // set".
            -
            1029  TRUE_OR_RETURN(nal_ref_idc != 0);
            -
            1030  int nal_unit_type;
            -
            1031  READ_BITS_OR_RETURN(5, &nal_unit_type);
            -
            1032  TRUE_OR_RETURN(nal_unit_type == H264NALU::kSPS);
            -
            1033 
            -
            1034  return ParseSPS(sps_id);
            -
            1035 }
            -
            1036 
            -
            1037 H264Parser::Result H264Parser::ParseRefPicListModification(
            -
            1038  int num_ref_idx_active_minus1,
            -
            1039  H264ModificationOfPicNum* ref_list_mods) {
            -
            1040  H264ModificationOfPicNum* pic_num_mod;
            -
            1041 
            -
            1042  if (num_ref_idx_active_minus1 >= 32)
            -
            1043  return kInvalidStream;
            -
            1044 
            -
            1045  for (int i = 0; i < 32; ++i) {
            -
            1046  pic_num_mod = &ref_list_mods[i];
            -
            1047  READ_UE_OR_RETURN(&pic_num_mod->modification_of_pic_nums_idc);
            -
            1048  TRUE_OR_RETURN(pic_num_mod->modification_of_pic_nums_idc < 4);
            -
            1049 
            -
            1050  switch (pic_num_mod->modification_of_pic_nums_idc) {
            -
            1051  case 0:
            -
            1052  case 1:
            -
            1053  READ_UE_OR_RETURN(&pic_num_mod->abs_diff_pic_num_minus1);
            -
            1054  break;
            +
            979 H264Parser::Result H264Parser::ParseRefPicListModification(
            +
            980  int num_ref_idx_active_minus1,
            +
            981  H264ModificationOfPicNum* ref_list_mods) {
            +
            982  H264ModificationOfPicNum* pic_num_mod;
            +
            983 
            +
            984  if (num_ref_idx_active_minus1 >= 32)
            +
            985  return kInvalidStream;
            +
            986 
            +
            987  for (int i = 0; i < 32; ++i) {
            +
            988  pic_num_mod = &ref_list_mods[i];
            +
            989  READ_UE_OR_RETURN(&pic_num_mod->modification_of_pic_nums_idc);
            +
            990  TRUE_OR_RETURN(pic_num_mod->modification_of_pic_nums_idc < 4);
            +
            991 
            +
            992  switch (pic_num_mod->modification_of_pic_nums_idc) {
            +
            993  case 0:
            +
            994  case 1:
            +
            995  READ_UE_OR_RETURN(&pic_num_mod->abs_diff_pic_num_minus1);
            +
            996  break;
            +
            997 
            +
            998  case 2:
            +
            999  READ_UE_OR_RETURN(&pic_num_mod->long_term_pic_num);
            +
            1000  break;
            +
            1001 
            +
            1002  case 3:
            +
            1003  // Per spec, list cannot be empty.
            +
            1004  if (i == 0)
            +
            1005  return kInvalidStream;
            +
            1006  return kOk;
            +
            1007 
            +
            1008  default:
            +
            1009  return kInvalidStream;
            +
            1010  }
            +
            1011  }
            +
            1012 
            +
            1013  // If we got here, we didn't get loop end marker prematurely,
            +
            1014  // so make sure it is there for our client.
            +
            1015  int modification_of_pic_nums_idc;
            +
            1016  READ_UE_OR_RETURN(&modification_of_pic_nums_idc);
            +
            1017  TRUE_OR_RETURN(modification_of_pic_nums_idc == 3);
            +
            1018 
            +
            1019  return kOk;
            +
            1020 }
            +
            1021 
            +
            1022 H264Parser::Result H264Parser::ParseRefPicListModifications(
            +
            1023  H264SliceHeader* shdr) {
            +
            1024  Result res;
            +
            1025 
            +
            1026  if (!shdr->IsISlice() && !shdr->IsSISlice()) {
            +
            1027  READ_BOOL_OR_RETURN(&shdr->ref_pic_list_modification_flag_l0);
            +
            1028  if (shdr->ref_pic_list_modification_flag_l0) {
            +
            1029  res = ParseRefPicListModification(shdr->num_ref_idx_l0_active_minus1,
            +
            1030  shdr->ref_list_l0_modifications);
            +
            1031  if (res != kOk)
            +
            1032  return res;
            +
            1033  }
            +
            1034  }
            +
            1035 
            +
            1036  if (shdr->IsBSlice()) {
            +
            1037  READ_BOOL_OR_RETURN(&shdr->ref_pic_list_modification_flag_l1);
            +
            1038  if (shdr->ref_pic_list_modification_flag_l1) {
            +
            1039  res = ParseRefPicListModification(shdr->num_ref_idx_l1_active_minus1,
            +
            1040  shdr->ref_list_l1_modifications);
            +
            1041  if (res != kOk)
            +
            1042  return res;
            +
            1043  }
            +
            1044  }
            +
            1045 
            +
            1046  return kOk;
            +
            1047 }
            +
            1048 
            +
            1049 H264Parser::Result H264Parser::ParseWeightingFactors(
            +
            1050  int num_ref_idx_active_minus1,
            +
            1051  int chroma_array_type,
            +
            1052  int luma_log2_weight_denom,
            +
            1053  int chroma_log2_weight_denom,
            +
            1054  H264WeightingFactors* w_facts) {
            1055 
            -
            1056  case 2:
            -
            1057  READ_UE_OR_RETURN(&pic_num_mod->long_term_pic_num);
            -
            1058  break;
            -
            1059 
            -
            1060  case 3:
            -
            1061  // Per spec, list cannot be empty.
            -
            1062  if (i == 0)
            -
            1063  return kInvalidStream;
            -
            1064  return kOk;
            -
            1065 
            -
            1066  default:
            -
            1067  return kInvalidStream;
            -
            1068  }
            -
            1069  }
            -
            1070 
            -
            1071  // If we got here, we didn't get loop end marker prematurely,
            -
            1072  // so make sure it is there for our client.
            -
            1073  int modification_of_pic_nums_idc;
            -
            1074  READ_UE_OR_RETURN(&modification_of_pic_nums_idc);
            -
            1075  TRUE_OR_RETURN(modification_of_pic_nums_idc == 3);
            -
            1076 
            -
            1077  return kOk;
            -
            1078 }
            -
            1079 
            -
            1080 H264Parser::Result H264Parser::ParseRefPicListModifications(
            -
            1081  H264SliceHeader* shdr) {
            -
            1082  Result res;
            -
            1083 
            -
            1084  if (!shdr->IsISlice() && !shdr->IsSISlice()) {
            -
            1085  READ_BOOL_OR_RETURN(&shdr->ref_pic_list_modification_flag_l0);
            -
            1086  if (shdr->ref_pic_list_modification_flag_l0) {
            -
            1087  res = ParseRefPicListModification(shdr->num_ref_idx_l0_active_minus1,
            -
            1088  shdr->ref_list_l0_modifications);
            -
            1089  if (res != kOk)
            -
            1090  return res;
            -
            1091  }
            -
            1092  }
            +
            1056  int def_luma_weight = 1 << luma_log2_weight_denom;
            +
            1057  int def_chroma_weight = 1 << chroma_log2_weight_denom;
            +
            1058 
            +
            1059  for (int i = 0; i < num_ref_idx_active_minus1 + 1; ++i) {
            +
            1060  READ_BOOL_OR_RETURN(&w_facts->luma_weight_flag);
            +
            1061  if (w_facts->luma_weight_flag) {
            +
            1062  READ_SE_OR_RETURN(&w_facts->luma_weight[i]);
            +
            1063  IN_RANGE_OR_RETURN(w_facts->luma_weight[i], -128, 127);
            +
            1064 
            +
            1065  READ_SE_OR_RETURN(&w_facts->luma_offset[i]);
            +
            1066  IN_RANGE_OR_RETURN(w_facts->luma_offset[i], -128, 127);
            +
            1067  } else {
            +
            1068  w_facts->luma_weight[i] = def_luma_weight;
            +
            1069  w_facts->luma_offset[i] = 0;
            +
            1070  }
            +
            1071 
            +
            1072  if (chroma_array_type != 0) {
            +
            1073  READ_BOOL_OR_RETURN(&w_facts->chroma_weight_flag);
            +
            1074  if (w_facts->chroma_weight_flag) {
            +
            1075  for (int j = 0; j < 2; ++j) {
            +
            1076  READ_SE_OR_RETURN(&w_facts->chroma_weight[i][j]);
            +
            1077  IN_RANGE_OR_RETURN(w_facts->chroma_weight[i][j], -128, 127);
            +
            1078 
            +
            1079  READ_SE_OR_RETURN(&w_facts->chroma_offset[i][j]);
            +
            1080  IN_RANGE_OR_RETURN(w_facts->chroma_offset[i][j], -128, 127);
            +
            1081  }
            +
            1082  } else {
            +
            1083  for (int j = 0; j < 2; ++j) {
            +
            1084  w_facts->chroma_weight[i][j] = def_chroma_weight;
            +
            1085  w_facts->chroma_offset[i][j] = 0;
            +
            1086  }
            +
            1087  }
            +
            1088  }
            +
            1089  }
            +
            1090 
            +
            1091  return kOk;
            +
            1092 }
            1093 
            -
            1094  if (shdr->IsBSlice()) {
            -
            1095  READ_BOOL_OR_RETURN(&shdr->ref_pic_list_modification_flag_l1);
            -
            1096  if (shdr->ref_pic_list_modification_flag_l1) {
            -
            1097  res = ParseRefPicListModification(shdr->num_ref_idx_l1_active_minus1,
            -
            1098  shdr->ref_list_l1_modifications);
            -
            1099  if (res != kOk)
            -
            1100  return res;
            -
            1101  }
            -
            1102  }
            -
            1103 
            -
            1104  return kOk;
            -
            1105 }
            -
            1106 
            -
            1107 H264Parser::Result H264Parser::ParseWeightingFactors(
            -
            1108  int num_ref_idx_active_minus1,
            -
            1109  int chroma_array_type,
            -
            1110  int luma_log2_weight_denom,
            -
            1111  int chroma_log2_weight_denom,
            -
            1112  H264WeightingFactors* w_facts) {
            -
            1113 
            -
            1114  int def_luma_weight = 1 << luma_log2_weight_denom;
            -
            1115  int def_chroma_weight = 1 << chroma_log2_weight_denom;
            -
            1116 
            -
            1117  for (int i = 0; i < num_ref_idx_active_minus1 + 1; ++i) {
            -
            1118  READ_BOOL_OR_RETURN(&w_facts->luma_weight_flag);
            -
            1119  if (w_facts->luma_weight_flag) {
            -
            1120  READ_SE_OR_RETURN(&w_facts->luma_weight[i]);
            -
            1121  IN_RANGE_OR_RETURN(w_facts->luma_weight[i], -128, 127);
            -
            1122 
            -
            1123  READ_SE_OR_RETURN(&w_facts->luma_offset[i]);
            -
            1124  IN_RANGE_OR_RETURN(w_facts->luma_offset[i], -128, 127);
            -
            1125  } else {
            -
            1126  w_facts->luma_weight[i] = def_luma_weight;
            -
            1127  w_facts->luma_offset[i] = 0;
            -
            1128  }
            -
            1129 
            -
            1130  if (chroma_array_type != 0) {
            -
            1131  READ_BOOL_OR_RETURN(&w_facts->chroma_weight_flag);
            -
            1132  if (w_facts->chroma_weight_flag) {
            -
            1133  for (int j = 0; j < 2; ++j) {
            -
            1134  READ_SE_OR_RETURN(&w_facts->chroma_weight[i][j]);
            -
            1135  IN_RANGE_OR_RETURN(w_facts->chroma_weight[i][j], -128, 127);
            +
            1094 H264Parser::Result H264Parser::ParsePredWeightTable(const H264SPS& sps,
            +
            1095  H264SliceHeader* shdr) {
            +
            1096  READ_UE_OR_RETURN(&shdr->luma_log2_weight_denom);
            +
            1097  TRUE_OR_RETURN(shdr->luma_log2_weight_denom < 8);
            +
            1098 
            +
            1099  if (sps.chroma_array_type != 0)
            +
            1100  READ_UE_OR_RETURN(&shdr->chroma_log2_weight_denom);
            +
            1101  TRUE_OR_RETURN(shdr->chroma_log2_weight_denom < 8);
            +
            1102 
            +
            1103  Result res = ParseWeightingFactors(shdr->num_ref_idx_l0_active_minus1,
            +
            1104  sps.chroma_array_type,
            +
            1105  shdr->luma_log2_weight_denom,
            +
            1106  shdr->chroma_log2_weight_denom,
            +
            1107  &shdr->pred_weight_table_l0);
            +
            1108  if (res != kOk)
            +
            1109  return res;
            +
            1110 
            +
            1111  if (shdr->IsBSlice()) {
            +
            1112  res = ParseWeightingFactors(shdr->num_ref_idx_l1_active_minus1,
            +
            1113  sps.chroma_array_type,
            +
            1114  shdr->luma_log2_weight_denom,
            +
            1115  shdr->chroma_log2_weight_denom,
            +
            1116  &shdr->pred_weight_table_l1);
            +
            1117  if (res != kOk)
            +
            1118  return res;
            +
            1119  }
            +
            1120 
            +
            1121  return kOk;
            +
            1122 }
            +
            1123 
            +
            1124 H264Parser::Result H264Parser::ParseDecRefPicMarking(H264SliceHeader* shdr) {
            +
            1125  if (shdr->idr_pic_flag) {
            +
            1126  READ_BOOL_OR_RETURN(&shdr->no_output_of_prior_pics_flag);
            +
            1127  READ_BOOL_OR_RETURN(&shdr->long_term_reference_flag);
            +
            1128  } else {
            +
            1129  READ_BOOL_OR_RETURN(&shdr->adaptive_ref_pic_marking_mode_flag);
            +
            1130 
            +
            1131  H264DecRefPicMarking* marking;
            +
            1132  if (shdr->adaptive_ref_pic_marking_mode_flag) {
            +
            1133  size_t i;
            +
            1134  for (i = 0; i < arraysize(shdr->ref_pic_marking); ++i) {
            +
            1135  marking = &shdr->ref_pic_marking[i];
            1136 
            -
            1137  READ_SE_OR_RETURN(&w_facts->chroma_offset[i][j]);
            -
            1138  IN_RANGE_OR_RETURN(w_facts->chroma_offset[i][j], -128, 127);
            -
            1139  }
            -
            1140  } else {
            -
            1141  for (int j = 0; j < 2; ++j) {
            -
            1142  w_facts->chroma_weight[i][j] = def_chroma_weight;
            -
            1143  w_facts->chroma_offset[i][j] = 0;
            -
            1144  }
            -
            1145  }
            -
            1146  }
            -
            1147  }
            -
            1148 
            -
            1149  return kOk;
            -
            1150 }
            +
            1137  READ_UE_OR_RETURN(&marking->memory_mgmnt_control_operation);
            +
            1138  if (marking->memory_mgmnt_control_operation == 0)
            +
            1139  break;
            +
            1140 
            +
            1141  if (marking->memory_mgmnt_control_operation == 1 ||
            +
            1142  marking->memory_mgmnt_control_operation == 3)
            +
            1143  READ_UE_OR_RETURN(&marking->difference_of_pic_nums_minus1);
            +
            1144 
            +
            1145  if (marking->memory_mgmnt_control_operation == 2)
            +
            1146  READ_UE_OR_RETURN(&marking->long_term_pic_num);
            +
            1147 
            +
            1148  if (marking->memory_mgmnt_control_operation == 3 ||
            +
            1149  marking->memory_mgmnt_control_operation == 6)
            +
            1150  READ_UE_OR_RETURN(&marking->long_term_frame_idx);
            1151 
            -
            1152 H264Parser::Result H264Parser::ParsePredWeightTable(const H264SPS& sps,
            -
            1153  H264SliceHeader* shdr) {
            -
            1154  READ_UE_OR_RETURN(&shdr->luma_log2_weight_denom);
            -
            1155  TRUE_OR_RETURN(shdr->luma_log2_weight_denom < 8);
            -
            1156 
            -
            1157  if (sps.chroma_array_type != 0)
            -
            1158  READ_UE_OR_RETURN(&shdr->chroma_log2_weight_denom);
            -
            1159  TRUE_OR_RETURN(shdr->chroma_log2_weight_denom < 8);
            -
            1160 
            -
            1161  Result res = ParseWeightingFactors(shdr->num_ref_idx_l0_active_minus1,
            -
            1162  sps.chroma_array_type,
            -
            1163  shdr->luma_log2_weight_denom,
            -
            1164  shdr->chroma_log2_weight_denom,
            -
            1165  &shdr->pred_weight_table_l0);
            -
            1166  if (res != kOk)
            -
            1167  return res;
            +
            1152  if (marking->memory_mgmnt_control_operation == 4)
            +
            1153  READ_UE_OR_RETURN(&marking->max_long_term_frame_idx_plus1);
            +
            1154 
            +
            1155  if (marking->memory_mgmnt_control_operation > 6)
            +
            1156  return kInvalidStream;
            +
            1157  }
            +
            1158 
            +
            1159  if (i == arraysize(shdr->ref_pic_marking)) {
            +
            1160  DVLOG(1) << "Ran out of dec ref pic marking fields";
            +
            1161  return kUnsupportedStream;
            +
            1162  }
            +
            1163  }
            +
            1164  }
            +
            1165 
            +
            1166  return kOk;
            +
            1167 }
            1168 
            -
            1169  if (shdr->IsBSlice()) {
            -
            1170  res = ParseWeightingFactors(shdr->num_ref_idx_l1_active_minus1,
            -
            1171  sps.chroma_array_type,
            -
            1172  shdr->luma_log2_weight_denom,
            -
            1173  shdr->chroma_log2_weight_denom,
            -
            1174  &shdr->pred_weight_table_l1);
            -
            1175  if (res != kOk)
            -
            1176  return res;
            -
            1177  }
            -
            1178 
            -
            1179  return kOk;
            -
            1180 }
            -
            1181 
            -
            1182 H264Parser::Result H264Parser::ParseDecRefPicMarking(H264SliceHeader* shdr) {
            -
            1183  if (shdr->idr_pic_flag) {
            -
            1184  READ_BOOL_OR_RETURN(&shdr->no_output_of_prior_pics_flag);
            -
            1185  READ_BOOL_OR_RETURN(&shdr->long_term_reference_flag);
            -
            1186  } else {
            -
            1187  READ_BOOL_OR_RETURN(&shdr->adaptive_ref_pic_marking_mode_flag);
            +
            1169 H264Parser::Result H264Parser::ParseSliceHeader(const H264NALU& nalu,
            +
            1170  H264SliceHeader* shdr) {
            +
            1171  // See 7.4.3.
            +
            1172  const H264SPS* sps;
            +
            1173  const H264PPS* pps;
            +
            1174  Result res;
            +
            1175 
            +
            1176  memset(shdr, 0, sizeof(*shdr));
            +
            1177 
            +
            1178  shdr->idr_pic_flag = (nalu.nal_unit_type == 5);
            +
            1179  shdr->nal_ref_idc = nalu.nal_ref_idc;
            +
            1180  shdr->nalu_data = nalu.data;
            +
            1181  shdr->nalu_size = nalu.size;
            +
            1182 
            +
            1183  READ_UE_OR_RETURN(&shdr->first_mb_in_slice);
            +
            1184  READ_UE_OR_RETURN(&shdr->slice_type);
            +
            1185  TRUE_OR_RETURN(shdr->slice_type < 10);
            +
            1186 
            +
            1187  READ_UE_OR_RETURN(&shdr->pic_parameter_set_id);
            1188 
            -
            1189  H264DecRefPicMarking* marking;
            -
            1190  if (shdr->adaptive_ref_pic_marking_mode_flag) {
            -
            1191  size_t i;
            -
            1192  for (i = 0; i < arraysize(shdr->ref_pic_marking); ++i) {
            -
            1193  marking = &shdr->ref_pic_marking[i];
            +
            1189  pps = GetPPS(shdr->pic_parameter_set_id);
            +
            1190  TRUE_OR_RETURN(pps);
            +
            1191 
            +
            1192  sps = GetSPS(pps->seq_parameter_set_id);
            +
            1193  TRUE_OR_RETURN(sps);
            1194 
            -
            1195  READ_UE_OR_RETURN(&marking->memory_mgmnt_control_operation);
            -
            1196  if (marking->memory_mgmnt_control_operation == 0)
            -
            1197  break;
            -
            1198 
            -
            1199  if (marking->memory_mgmnt_control_operation == 1 ||
            -
            1200  marking->memory_mgmnt_control_operation == 3)
            -
            1201  READ_UE_OR_RETURN(&marking->difference_of_pic_nums_minus1);
            -
            1202 
            -
            1203  if (marking->memory_mgmnt_control_operation == 2)
            -
            1204  READ_UE_OR_RETURN(&marking->long_term_pic_num);
            -
            1205 
            -
            1206  if (marking->memory_mgmnt_control_operation == 3 ||
            -
            1207  marking->memory_mgmnt_control_operation == 6)
            -
            1208  READ_UE_OR_RETURN(&marking->long_term_frame_idx);
            -
            1209 
            -
            1210  if (marking->memory_mgmnt_control_operation == 4)
            -
            1211  READ_UE_OR_RETURN(&marking->max_long_term_frame_idx_plus1);
            -
            1212 
            -
            1213  if (marking->memory_mgmnt_control_operation > 6)
            -
            1214  return kInvalidStream;
            -
            1215  }
            -
            1216 
            -
            1217  if (i == arraysize(shdr->ref_pic_marking)) {
            -
            1218  DVLOG(1) << "Ran out of dec ref pic marking fields";
            -
            1219  return kUnsupportedStream;
            -
            1220  }
            -
            1221  }
            -
            1222  }
            -
            1223 
            -
            1224  return kOk;
            -
            1225 }
            +
            1195  if (sps->separate_colour_plane_flag) {
            +
            1196  DVLOG(1) << "Interlaced streams not supported";
            +
            1197  return kUnsupportedStream;
            +
            1198  }
            +
            1199 
            +
            1200  READ_BITS_OR_RETURN(sps->log2_max_frame_num_minus4 + 4, &shdr->frame_num);
            +
            1201  if (!sps->frame_mbs_only_flag) {
            +
            1202  READ_BOOL_OR_RETURN(&shdr->field_pic_flag);
            +
            1203  if (shdr->field_pic_flag) {
            +
            1204  DVLOG(1) << "Interlaced streams not supported";
            +
            1205  return kUnsupportedStream;
            +
            1206  }
            +
            1207  }
            +
            1208 
            +
            1209  if (shdr->idr_pic_flag)
            +
            1210  READ_UE_OR_RETURN(&shdr->idr_pic_id);
            +
            1211 
            +
            1212  if (sps->pic_order_cnt_type == 0) {
            +
            1213  READ_BITS_OR_RETURN(sps->log2_max_pic_order_cnt_lsb_minus4 + 4,
            +
            1214  &shdr->pic_order_cnt_lsb);
            +
            1215  if (pps->bottom_field_pic_order_in_frame_present_flag &&
            +
            1216  !shdr->field_pic_flag)
            +
            1217  READ_SE_OR_RETURN(&shdr->delta_pic_order_cnt_bottom);
            +
            1218  }
            +
            1219 
            +
            1220  if (sps->pic_order_cnt_type == 1 && !sps->delta_pic_order_always_zero_flag) {
            +
            1221  READ_SE_OR_RETURN(&shdr->delta_pic_order_cnt[0]);
            +
            1222  if (pps->bottom_field_pic_order_in_frame_present_flag &&
            +
            1223  !shdr->field_pic_flag)
            +
            1224  READ_SE_OR_RETURN(&shdr->delta_pic_order_cnt[1]);
            +
            1225  }
            1226 
            -
            1227 H264Parser::Result H264Parser::ParseSliceHeader(const H264NALU& nalu,
            -
            1228  H264SliceHeader* shdr) {
            -
            1229  // See 7.4.3.
            -
            1230  const H264SPS* sps;
            -
            1231  const H264PPS* pps;
            -
            1232  Result res;
            -
            1233 
            -
            1234  memset(shdr, 0, sizeof(*shdr));
            -
            1235 
            -
            1236  shdr->idr_pic_flag = (nalu.nal_unit_type == 5);
            -
            1237  shdr->nal_ref_idc = nalu.nal_ref_idc;
            -
            1238  shdr->nalu_data = nalu.data;
            -
            1239  shdr->nalu_size = nalu.size;
            -
            1240 
            -
            1241  READ_UE_OR_RETURN(&shdr->first_mb_in_slice);
            -
            1242  READ_UE_OR_RETURN(&shdr->slice_type);
            -
            1243  TRUE_OR_RETURN(shdr->slice_type < 10);
            -
            1244 
            -
            1245  READ_UE_OR_RETURN(&shdr->pic_parameter_set_id);
            -
            1246 
            -
            1247  pps = GetPPS(shdr->pic_parameter_set_id);
            -
            1248  TRUE_OR_RETURN(pps);
            -
            1249 
            -
            1250  sps = GetSPS(pps->seq_parameter_set_id);
            -
            1251  TRUE_OR_RETURN(sps);
            -
            1252 
            -
            1253  if (sps->separate_colour_plane_flag) {
            -
            1254  DVLOG(1) << "Interlaced streams not supported";
            -
            1255  return kUnsupportedStream;
            +
            1227  if (pps->redundant_pic_cnt_present_flag) {
            +
            1228  READ_UE_OR_RETURN(&shdr->redundant_pic_cnt);
            +
            1229  TRUE_OR_RETURN(shdr->redundant_pic_cnt < 128);
            +
            1230  }
            +
            1231 
            +
            1232  if (shdr->IsBSlice())
            +
            1233  READ_BOOL_OR_RETURN(&shdr->direct_spatial_mv_pred_flag);
            +
            1234 
            +
            1235  if (shdr->IsPSlice() || shdr->IsSPSlice() || shdr->IsBSlice()) {
            +
            1236  READ_BOOL_OR_RETURN(&shdr->num_ref_idx_active_override_flag);
            +
            1237  if (shdr->num_ref_idx_active_override_flag) {
            +
            1238  READ_UE_OR_RETURN(&shdr->num_ref_idx_l0_active_minus1);
            +
            1239  if (shdr->IsBSlice())
            +
            1240  READ_UE_OR_RETURN(&shdr->num_ref_idx_l1_active_minus1);
            +
            1241  } else {
            +
            1242  shdr->num_ref_idx_l0_active_minus1 =
            +
            1243  pps->num_ref_idx_l0_default_active_minus1;
            +
            1244  if (shdr->IsBSlice()) {
            +
            1245  shdr->num_ref_idx_l1_active_minus1 =
            +
            1246  pps->num_ref_idx_l1_default_active_minus1;
            +
            1247  }
            +
            1248  }
            +
            1249  }
            +
            1250  if (shdr->field_pic_flag) {
            +
            1251  TRUE_OR_RETURN(shdr->num_ref_idx_l0_active_minus1 < 32);
            +
            1252  TRUE_OR_RETURN(shdr->num_ref_idx_l1_active_minus1 < 32);
            +
            1253  } else {
            +
            1254  TRUE_OR_RETURN(shdr->num_ref_idx_l0_active_minus1 < 16);
            +
            1255  TRUE_OR_RETURN(shdr->num_ref_idx_l1_active_minus1 < 16);
            1256  }
            1257 
            -
            1258  READ_BITS_OR_RETURN(sps->log2_max_frame_num_minus4 + 4, &shdr->frame_num);
            -
            1259  if (!sps->frame_mbs_only_flag) {
            -
            1260  READ_BOOL_OR_RETURN(&shdr->field_pic_flag);
            -
            1261  if (shdr->field_pic_flag) {
            -
            1262  DVLOG(1) << "Interlaced streams not supported";
            -
            1263  return kUnsupportedStream;
            -
            1264  }
            -
            1265  }
            -
            1266 
            -
            1267  if (shdr->idr_pic_flag)
            -
            1268  READ_UE_OR_RETURN(&shdr->idr_pic_id);
            -
            1269 
            -
            1270  if (sps->pic_order_cnt_type == 0) {
            -
            1271  READ_BITS_OR_RETURN(sps->log2_max_pic_order_cnt_lsb_minus4 + 4,
            -
            1272  &shdr->pic_order_cnt_lsb);
            -
            1273  if (pps->bottom_field_pic_order_in_frame_present_flag &&
            -
            1274  !shdr->field_pic_flag)
            -
            1275  READ_SE_OR_RETURN(&shdr->delta_pic_order_cnt_bottom);
            -
            1276  }
            -
            1277 
            -
            1278  if (sps->pic_order_cnt_type == 1 && !sps->delta_pic_order_always_zero_flag) {
            -
            1279  READ_SE_OR_RETURN(&shdr->delta_pic_order_cnt[0]);
            -
            1280  if (pps->bottom_field_pic_order_in_frame_present_flag &&
            -
            1281  !shdr->field_pic_flag)
            -
            1282  READ_SE_OR_RETURN(&shdr->delta_pic_order_cnt[1]);
            +
            1258  if (nalu.nal_unit_type == H264NALU::kCodedSliceExtension) {
            +
            1259  return kUnsupportedStream;
            +
            1260  } else {
            +
            1261  res = ParseRefPicListModifications(shdr);
            +
            1262  if (res != kOk)
            +
            1263  return res;
            +
            1264  }
            +
            1265 
            +
            1266  if ((pps->weighted_pred_flag && (shdr->IsPSlice() || shdr->IsSPSlice())) ||
            +
            1267  (pps->weighted_bipred_idc == 1 && shdr->IsBSlice())) {
            +
            1268  res = ParsePredWeightTable(*sps, shdr);
            +
            1269  if (res != kOk)
            +
            1270  return res;
            +
            1271  }
            +
            1272 
            +
            1273  if (nalu.nal_ref_idc != 0) {
            +
            1274  res = ParseDecRefPicMarking(shdr);
            +
            1275  if (res != kOk)
            +
            1276  return res;
            +
            1277  }
            +
            1278 
            +
            1279  if (pps->entropy_coding_mode_flag && !shdr->IsISlice() &&
            +
            1280  !shdr->IsSISlice()) {
            +
            1281  READ_UE_OR_RETURN(&shdr->cabac_init_idc);
            +
            1282  TRUE_OR_RETURN(shdr->cabac_init_idc < 3);
            1283  }
            1284 
            -
            1285  if (pps->redundant_pic_cnt_present_flag) {
            -
            1286  READ_UE_OR_RETURN(&shdr->redundant_pic_cnt);
            -
            1287  TRUE_OR_RETURN(shdr->redundant_pic_cnt < 128);
            -
            1288  }
            -
            1289 
            -
            1290  if (shdr->IsBSlice())
            -
            1291  READ_BOOL_OR_RETURN(&shdr->direct_spatial_mv_pred_flag);
            +
            1285  READ_SE_OR_RETURN(&shdr->slice_qp_delta);
            +
            1286 
            +
            1287  if (shdr->IsSPSlice() || shdr->IsSISlice()) {
            +
            1288  if (shdr->IsSPSlice())
            +
            1289  READ_BOOL_OR_RETURN(&shdr->sp_for_switch_flag);
            +
            1290  READ_SE_OR_RETURN(&shdr->slice_qs_delta);
            +
            1291  }
            1292 
            -
            1293  if (shdr->IsPSlice() || shdr->IsSPSlice() || shdr->IsBSlice()) {
            -
            1294  READ_BOOL_OR_RETURN(&shdr->num_ref_idx_active_override_flag);
            -
            1295  if (shdr->num_ref_idx_active_override_flag) {
            -
            1296  READ_UE_OR_RETURN(&shdr->num_ref_idx_l0_active_minus1);
            -
            1297  if (shdr->IsBSlice())
            -
            1298  READ_UE_OR_RETURN(&shdr->num_ref_idx_l1_active_minus1);
            -
            1299  } else {
            -
            1300  shdr->num_ref_idx_l0_active_minus1 =
            -
            1301  pps->num_ref_idx_l0_default_active_minus1;
            -
            1302  if (shdr->IsBSlice()) {
            -
            1303  shdr->num_ref_idx_l1_active_minus1 =
            -
            1304  pps->num_ref_idx_l1_default_active_minus1;
            -
            1305  }
            -
            1306  }
            -
            1307  }
            -
            1308  if (shdr->field_pic_flag) {
            -
            1309  TRUE_OR_RETURN(shdr->num_ref_idx_l0_active_minus1 < 32);
            -
            1310  TRUE_OR_RETURN(shdr->num_ref_idx_l1_active_minus1 < 32);
            -
            1311  } else {
            -
            1312  TRUE_OR_RETURN(shdr->num_ref_idx_l0_active_minus1 < 16);
            -
            1313  TRUE_OR_RETURN(shdr->num_ref_idx_l1_active_minus1 < 16);
            -
            1314  }
            -
            1315 
            -
            1316  if (nalu.nal_unit_type == H264NALU::kCodedSliceExtension) {
            -
            1317  return kUnsupportedStream;
            -
            1318  } else {
            -
            1319  res = ParseRefPicListModifications(shdr);
            -
            1320  if (res != kOk)
            -
            1321  return res;
            -
            1322  }
            -
            1323 
            -
            1324  if ((pps->weighted_pred_flag && (shdr->IsPSlice() || shdr->IsSPSlice())) ||
            -
            1325  (pps->weighted_bipred_idc == 1 && shdr->IsBSlice())) {
            -
            1326  res = ParsePredWeightTable(*sps, shdr);
            -
            1327  if (res != kOk)
            -
            1328  return res;
            -
            1329  }
            -
            1330 
            -
            1331  if (nalu.nal_ref_idc != 0) {
            -
            1332  res = ParseDecRefPicMarking(shdr);
            -
            1333  if (res != kOk)
            -
            1334  return res;
            -
            1335  }
            -
            1336 
            -
            1337  if (pps->entropy_coding_mode_flag && !shdr->IsISlice() &&
            -
            1338  !shdr->IsSISlice()) {
            -
            1339  READ_UE_OR_RETURN(&shdr->cabac_init_idc);
            -
            1340  TRUE_OR_RETURN(shdr->cabac_init_idc < 3);
            -
            1341  }
            -
            1342 
            -
            1343  READ_SE_OR_RETURN(&shdr->slice_qp_delta);
            -
            1344 
            -
            1345  if (shdr->IsSPSlice() || shdr->IsSISlice()) {
            -
            1346  if (shdr->IsSPSlice())
            -
            1347  READ_BOOL_OR_RETURN(&shdr->sp_for_switch_flag);
            -
            1348  READ_SE_OR_RETURN(&shdr->slice_qs_delta);
            -
            1349  }
            -
            1350 
            -
            1351  if (pps->deblocking_filter_control_present_flag) {
            -
            1352  READ_UE_OR_RETURN(&shdr->disable_deblocking_filter_idc);
            -
            1353  TRUE_OR_RETURN(shdr->disable_deblocking_filter_idc < 3);
            +
            1293  if (pps->deblocking_filter_control_present_flag) {
            +
            1294  READ_UE_OR_RETURN(&shdr->disable_deblocking_filter_idc);
            +
            1295  TRUE_OR_RETURN(shdr->disable_deblocking_filter_idc < 3);
            +
            1296 
            +
            1297  if (shdr->disable_deblocking_filter_idc != 1) {
            +
            1298  READ_SE_OR_RETURN(&shdr->slice_alpha_c0_offset_div2);
            +
            1299  IN_RANGE_OR_RETURN(shdr->slice_alpha_c0_offset_div2, -6, 6);
            +
            1300 
            +
            1301  READ_SE_OR_RETURN(&shdr->slice_beta_offset_div2);
            +
            1302  IN_RANGE_OR_RETURN(shdr->slice_beta_offset_div2, -6, 6);
            +
            1303  }
            +
            1304  }
            +
            1305 
            +
            1306  if (pps->num_slice_groups_minus1 > 0) {
            +
            1307  DVLOG(1) << "Slice groups not supported";
            +
            1308  return kUnsupportedStream;
            +
            1309  }
            +
            1310 
            +
            1311  size_t epb = br_.NumEmulationPreventionBytesRead();
            +
            1312  shdr->header_bit_size = (shdr->nalu_size - epb) * 8 - br_.NumBitsLeft();
            +
            1313 
            +
            1314  return kOk;
            +
            1315 }
            +
            1316 
            +
            1317 H264Parser::Result H264Parser::ParseSEI(H264SEIMessage* sei_msg) {
            +
            1318  int byte;
            +
            1319 
            +
            1320  memset(sei_msg, 0, sizeof(*sei_msg));
            +
            1321 
            +
            1322  READ_BITS_OR_RETURN(8, &byte);
            +
            1323  while (byte == 0xff) {
            +
            1324  sei_msg->type += 255;
            +
            1325  READ_BITS_OR_RETURN(8, &byte);
            +
            1326  }
            +
            1327  sei_msg->type += byte;
            +
            1328 
            +
            1329  READ_BITS_OR_RETURN(8, &byte);
            +
            1330  while (byte == 0xff) {
            +
            1331  sei_msg->payload_size += 255;
            +
            1332  READ_BITS_OR_RETURN(8, &byte);
            +
            1333  }
            +
            1334  sei_msg->payload_size += byte;
            +
            1335 
            +
            1336  DVLOG(4) << "Found SEI message type: " << sei_msg->type
            +
            1337  << " payload size: " << sei_msg->payload_size;
            +
            1338 
            +
            1339  switch (sei_msg->type) {
            +
            1340  case H264SEIMessage::kSEIRecoveryPoint:
            +
            1341  READ_UE_OR_RETURN(&sei_msg->recovery_point.recovery_frame_cnt);
            +
            1342  READ_BOOL_OR_RETURN(&sei_msg->recovery_point.exact_match_flag);
            +
            1343  READ_BOOL_OR_RETURN(&sei_msg->recovery_point.broken_link_flag);
            +
            1344  READ_BITS_OR_RETURN(2, &sei_msg->recovery_point.changing_slice_group_idc);
            +
            1345  break;
            +
            1346 
            +
            1347  default:
            +
            1348  DVLOG(4) << "Unsupported SEI message";
            +
            1349  break;
            +
            1350  }
            +
            1351 
            +
            1352  return kOk;
            +
            1353 }
            1354 
            -
            1355  if (shdr->disable_deblocking_filter_idc != 1) {
            -
            1356  READ_SE_OR_RETURN(&shdr->slice_alpha_c0_offset_div2);
            -
            1357  IN_RANGE_OR_RETURN(shdr->slice_alpha_c0_offset_div2, -6, 6);
            -
            1358 
            -
            1359  READ_SE_OR_RETURN(&shdr->slice_beta_offset_div2);
            -
            1360  IN_RANGE_OR_RETURN(shdr->slice_beta_offset_div2, -6, 6);
            -
            1361  }
            -
            1362  }
            -
            1363 
            -
            1364  if (pps->num_slice_groups_minus1 > 0) {
            -
            1365  DVLOG(1) << "Slice groups not supported";
            -
            1366  return kUnsupportedStream;
            -
            1367  }
            -
            1368 
            -
            1369  size_t epb = br_.NumEmulationPreventionBytesRead();
            -
            1370  shdr->header_bit_size = (shdr->nalu_size - epb) * 8 - br_.NumBitsLeft();
            -
            1371 
            -
            1372  return kOk;
            -
            1373 }
            -
            1374 
            -
            1375 H264Parser::Result H264Parser::ParseSEI(H264SEIMessage* sei_msg) {
            -
            1376  int byte;
            -
            1377 
            -
            1378  memset(sei_msg, 0, sizeof(*sei_msg));
            -
            1379 
            -
            1380  READ_BITS_OR_RETURN(8, &byte);
            -
            1381  while (byte == 0xff) {
            -
            1382  sei_msg->type += 255;
            -
            1383  READ_BITS_OR_RETURN(8, &byte);
            -
            1384  }
            -
            1385  sei_msg->type += byte;
            -
            1386 
            -
            1387  READ_BITS_OR_RETURN(8, &byte);
            -
            1388  while (byte == 0xff) {
            -
            1389  sei_msg->payload_size += 255;
            -
            1390  READ_BITS_OR_RETURN(8, &byte);
            -
            1391  }
            -
            1392  sei_msg->payload_size += byte;
            -
            1393 
            -
            1394  DVLOG(4) << "Found SEI message type: " << sei_msg->type
            -
            1395  << " payload size: " << sei_msg->payload_size;
            -
            1396 
            -
            1397  switch (sei_msg->type) {
            -
            1398  case H264SEIMessage::kSEIRecoveryPoint:
            -
            1399  READ_UE_OR_RETURN(&sei_msg->recovery_point.recovery_frame_cnt);
            -
            1400  READ_BOOL_OR_RETURN(&sei_msg->recovery_point.exact_match_flag);
            -
            1401  READ_BOOL_OR_RETURN(&sei_msg->recovery_point.broken_link_flag);
            -
            1402  READ_BITS_OR_RETURN(2, &sei_msg->recovery_point.changing_slice_group_idc);
            -
            1403  break;
            -
            1404 
            -
            1405  default:
            -
            1406  DVLOG(4) << "Unsupported SEI message";
            -
            1407  break;
            -
            1408  }
            -
            1409 
            -
            1410  return kOk;
            -
            1411 }
            -
            1412 
            -
            1413 } // namespace media
            -
            1414 } // namespace edash_packager
            +
            1355 } // namespace media
            +
            1356 } // namespace edash_packager
            diff --git a/docs/dc/d81/classedash__packager_1_1MpdWriter.html b/docs/dc/d81/classedash__packager_1_1MpdWriter.html index 3629bc0113..57a267d2fd 100644 --- a/docs/dc/d81/classedash__packager_1_1MpdWriter.html +++ b/docs/dc/d81/classedash__packager_1_1MpdWriter.html @@ -123,7 +123,7 @@ class MpdWriterTest diff --git a/docs/dc/d8a/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter.html b/docs/dc/d8a/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter.html index 57e379b993..7be66f1a37 100644 --- a/docs/dc/d8a/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter.html +++ b/docs/dc/d8a/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter.html @@ -299,7 +299,7 @@ void set_encryption_key diff --git a/docs/dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.html b/docs/dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.html index 5cb6f3df40..db3957df13 100644 --- a/docs/dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.html +++ b/docs/dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.html @@ -255,7 +255,7 @@ track_id, const scoped_refptr
            diff --git a/docs/dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html b/docs/dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html index b912bf6711..1aecedd856 100644 --- a/docs/dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html +++ b/docs/dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html @@ -143,7 +143,7 @@ Additional Inherited Members

            Detailed Description

            -

            Definition at line 247 of file box_definitions.h.

            +

            Definition at line 237 of file box_definitions.h.

            Member Function Documentation

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

            Implements edash_packager::media::mp4::Box.

            -

            Definition at line 469 of file box_definitions.cc.

            +

            Definition at line 471 of file box_definitions.cc.

            @@ -180,7 +180,7 @@ Additional Inherited Members diff --git a/docs/dc/dbf/box__buffer_8h_source.html b/docs/dc/dbf/box__buffer_8h_source.html index 65f06c2b92..3ebcdd3b30 100644 --- a/docs/dc/dbf/box__buffer_8h_source.html +++ b/docs/dc/dbf/box__buffer_8h_source.html @@ -275,7 +275,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html b/docs/dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html index 42ebac4361..12f57d090f 100644 --- a/docs/dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html +++ b/docs/dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html @@ -313,7 +313,7 @@ static const size_t  diff --git a/docs/dc/dc8/classedash__packager_1_1media_1_1WebMWebVTTParser.html b/docs/dc/dc8/classedash__packager_1_1media_1_1WebMWebVTTParser.html index 5f09c00129..74e5e52026 100644 --- a/docs/dc/dc8/classedash__packager_1_1media_1_1WebMWebVTTParser.html +++ b/docs/dc/dc8/classedash__packager_1_1media_1_1WebMWebVTTParser.html @@ -111,7 +111,7 @@ static void  diff --git a/docs/dc/dd4/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry-members.html b/docs/dc/dd4/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry-members.html index 1a96f12064..d0708a8a68 100644 --- a/docs/dc/dd4/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry-members.html +++ b/docs/dc/dd4/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/dd9/rsa__key_8cc_source.html b/docs/dc/dd9/rsa__key_8cc_source.html index b67e69330f..b4f03b2ccd 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/classedash__packager_1_1media_1_1WebMInfoParser-members.html b/docs/dc/ddf/classedash__packager_1_1media_1_1WebMInfoParser-members.html index 4039efc751..5ad4d426e3 100644 --- a/docs/dc/ddf/classedash__packager_1_1media_1_1WebMInfoParser-members.html +++ b/docs/dc/ddf/classedash__packager_1_1media_1_1WebMInfoParser-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/ddf/udp__file__posix_8cc_source.html b/docs/dc/ddf/udp__file__posix_8cc_source.html index 87d675466e..6ae46956a5 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/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html b/docs/dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html index d9b3a89516..7b7710eed5 100644 --- a/docs/dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html +++ b/docs/dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html @@ -423,7 +423,7 @@ void set_progress_target diff --git a/docs/dc/dec/ts__section__pmt_8cc_source.html b/docs/dc/dec/ts__section__pmt_8cc_source.html index dec025ef8f..09d57bcf15 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/def/structedash__packager_1_1media_1_1mp4_1_1DataInformation-members.html b/docs/dc/def/structedash__packager_1_1media_1_1mp4_1_1DataInformation-members.html index 49849b14aa..566cacdddd 100644 --- a/docs/dc/def/structedash__packager_1_1media_1_1mp4_1_1DataInformation-members.html +++ b/docs/dc/def/structedash__packager_1_1media_1_1mp4_1_1DataInformation-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dc/df1/classedash__packager_1_1media_1_1DecryptorSource.html b/docs/dc/df1/classedash__packager_1_1media_1_1DecryptorSource.html index 449e8c6049..5a16d3973f 100644 --- a/docs/dc/df1/classedash__packager_1_1media_1_1DecryptorSource.html +++ b/docs/dc/df1/classedash__packager_1_1media_1_1DecryptorSource.html @@ -158,7 +158,7 @@ Public Member Functions diff --git a/docs/dc/df8/closure__thread_8h_source.html b/docs/dc/df8/closure__thread_8h_source.html index 6d3572ad2c..6ef281bc01 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/dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html b/docs/dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html index c2bad112c3..5ae81c3e5f 100644 --- a/docs/dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html +++ b/docs/dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html @@ -438,7 +438,7 @@ Additional Inherited Members diff --git a/docs/dc/dfc/classedash__packager_1_1media_1_1Muxer-members.html b/docs/dc/dfc/classedash__packager_1_1media_1_1Muxer-members.html index 9791493c4b..df81c4ab88 100644 --- a/docs/dc/dfc/classedash__packager_1_1media_1_1Muxer-members.html +++ b/docs/dc/dfc/classedash__packager_1_1media_1_1Muxer-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264.html b/docs/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264.html index f22d33547f..471c42d689 100644 --- a/docs/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264.html +++ b/docs/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264.html @@ -149,7 +149,7 @@ const scoped_refptr
            diff --git a/docs/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat.html b/docs/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat.html index 4a99138127..da482fc899 100644 --- a/docs/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat.html +++ b/docs/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat.html @@ -155,7 +155,7 @@ void Reset () override diff --git a/docs/dd/d11/mpd__builder_8cc_source.html b/docs/dd/d11/mpd__builder_8cc_source.html index f77b2cbaf3..da0310fce3 100644 --- a/docs/dd/d11/mpd__builder_8cc_source.html +++ b/docs/dd/d11/mpd__builder_8cc_source.html @@ -1422,7 +1422,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 0ddca8d20b..3b0f4b3586 100644 --- a/docs/dd/d12/mpd__writer_8cc_source.html +++ b/docs/dd/d12/mpd__writer_8cc_source.html @@ -224,7 +224,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html b/docs/dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html index 295ce515d5..ca0b98f3bf 100644 --- a/docs/dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html +++ b/docs/dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html @@ -161,7 +161,7 @@ Additional Inherited Members

            Detailed Description

            -

            Definition at line 109 of file box_definitions.h.

            +

            Definition at line 108 of file box_definitions.h.

            Member Function Documentation

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

            Implements edash_packager::media::mp4::Box.

            -

            Definition at line 337 of file box_definitions.cc.

            +

            Definition at line 339 of file box_definitions.cc.

            @@ -198,7 +198,7 @@ Additional Inherited Members diff --git a/docs/dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html b/docs/dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html index 557d4e6cb9..a64fc1ea09 100644 --- a/docs/dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html +++ b/docs/dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html @@ -176,7 +176,7 @@ Additional Inherited Members

            Detailed Description

            -

            Definition at line 121 of file box_definitions.h.

            +

            Definition at line 120 of file box_definitions.h.

            Member Function Documentation

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

            Implements edash_packager::media::mp4::Box.

            -

            Definition at line 389 of file box_definitions.cc.

            +

            Definition at line 391 of file box_definitions.cc.

            @@ -213,7 +213,7 @@ Additional Inherited Members diff --git a/docs/dd/d18/es__parser__adts_8h_source.html b/docs/dd/d18/es__parser__adts_8h_source.html index 8a66de4aff..27b5698d3c 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 ebe4d77e5e..2d171890cd 100644 --- a/docs/dd/d19/video__stream__info_8cc_source.html +++ b/docs/dd/d19/video__stream__info_8cc_source.html @@ -181,38 +181,17 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
            92  nalu_length_size_);
            93 }
            94 
            -
            95 std::string VideoStreamInfo::GetCodecString(VideoCodec codec,
            -
            96  uint8_t profile,
            -
            97  uint8_t compatible_profiles,
            -
            98  uint8_t level) {
            -
            99  switch (codec) {
            -
            100  case kCodecVP8:
            -
            101  return "vp8";
            -
            102  case kCodecVP9:
            -
            103  return "vp9";
            -
            104  case kCodecH264: {
            -
            105  const uint8_t bytes[] = {profile, compatible_profiles, level};
            -
            106  return "avc1." +
            -
            107  base::StringToLowerASCII(base::HexEncode(bytes, arraysize(bytes)));
            -
            108  }
            -
            109  default:
            -
            110  NOTIMPLEMENTED() << "Unknown Codec: " << codec;
            -
            111  return "unknown";
            -
            112  }
            -
            113 }
            -
            114 
            -
            115 } // namespace media
            -
            116 } // namespace edash_packager
            +
            95 } // namespace media
            +
            96 } // namespace edash_packager
            std::string ToString() const override
            Abstract class holds stream information.
            Definition: stream_info.h:26
            virtual std::string ToString() const
            Definition: stream_info.cc:40
            -
            static std::string GetCodecString(VideoCodec codec, uint8_t profile, uint8_t compatible_profiles, uint8_t level)
            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 *extra_data, size_t extra_data_size, bool is_encrypted)
            diff --git a/docs/dd/d1a/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter-members.html b/docs/dd/d1a/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter-members.html index 52a08535ab..6485e5ae87 100644 --- a/docs/dd/d1a/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter-members.html +++ b/docs/dd/d1a/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d2b/classedash__packager_1_1media_1_1ClosureThread.html b/docs/dd/d2b/classedash__packager_1_1media_1_1ClosureThread.html index b75c78ee20..dc4b3f21ce 100644 --- a/docs/dd/d2b/classedash__packager_1_1media_1_1ClosureThread.html +++ b/docs/dd/d2b/classedash__packager_1_1media_1_1ClosureThread.html @@ -179,7 +179,7 @@ void  diff --git a/docs/dd/d2c/single__segment__segmenter_8h_source.html b/docs/dd/d2c/single__segment__segmenter_8h_source.html index 5fba6d84d7..a839440c48 100644 --- a/docs/dd/d2c/single__segment__segmenter_8h_source.html +++ b/docs/dd/d2c/single__segment__segmenter_8h_source.html @@ -140,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d30/wvm__media__parser_8cc_source.html b/docs/dd/d30/wvm__media__parser_8cc_source.html index 9b70c818f9..396079c000 100644 --- a/docs/dd/d30/wvm__media__parser_8cc_source.html +++ b/docs/dd/d30/wvm__media__parser_8cc_source.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
            16 #include "packager/media/base/media_sample.h"
            17 #include "packager/media/base/status.h"
            18 #include "packager/media/base/video_stream_info.h"
            -
            19 #include "packager/media/filters/h264_parser.h"
            +
            19 #include "packager/media/filters/avc_decoder_configuration.h"
            20 #include "packager/media/formats/mp2t/adts_header.h"
            21 #include "packager/media/formats/mp4/aac_audio_specific_config.h"
            22 #include "packager/media/formats/mp4/es_descriptor.h"
            @@ -930,343 +930,335 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
            841  stream_config = &stream_infos_[i]->extra_data();
            842  }
            843  DCHECK(stream_config);
            -
            844  stream_infos_[i]->set_codec_string(VideoStreamInfo::GetCodecString(
            -
            845  kCodecH264, (*stream_config)[1], (*stream_config)[2],
            -
            846  (*stream_config)[3]));
            -
            847 
            -
            848  VideoStreamInfo* video_stream_info =
            -
            849  reinterpret_cast<VideoStreamInfo*>(stream_infos_[i].get());
            -
            850  uint32_t coded_width = 0;
            -
            851  uint32_t coded_height = 0;
            -
            852  uint32_t pixel_width = 0;
            -
            853  uint32_t pixel_height = 0;
            -
            854  if (!ExtractResolutionFromDecoderConfig(
            -
            855  vector_as_array(stream_config), stream_config->size(),
            -
            856  &coded_width, &coded_height, &pixel_width, &pixel_height)) {
            -
            857  LOG(WARNING) << "Failed to parse AVCDecoderConfigurationRecord. "
            -
            858  "Using computed configuration record instead.";
            -
            859  video_stream_info->set_extra_data(decoder_config_record);
            -
            860  if (!ExtractResolutionFromDecoderConfig(
            -
            861  vector_as_array(&decoder_config_record),
            -
            862  decoder_config_record.size(),
            -
            863  &coded_width, &coded_height,
            -
            864  &pixel_width, &pixel_height)) {
            -
            865  LOG(ERROR) << "Failed to parse AVCDecoderConfigurationRecord.";
            -
            866  return false;
            -
            867  }
            -
            868  }
            -
            869  if (pixel_width != video_stream_info->pixel_width() ||
            -
            870  pixel_height != video_stream_info->pixel_height()) {
            -
            871  LOG_IF(WARNING, video_stream_info->pixel_width() != 0 ||
            -
            872  video_stream_info->pixel_height() != 0)
            -
            873  << "Pixel aspect ratio in WVM metadata ("
            -
            874  << video_stream_info->pixel_width() << ","
            -
            875  << video_stream_info->pixel_height()
            -
            876  << ") does not match with SAR in "
            -
            877  "AVCDecoderConfigurationRecord ("
            -
            878  << pixel_width << "," << pixel_height
            -
            879  << "). Use AVCDecoderConfigurationRecord.";
            -
            880  video_stream_info->set_pixel_width(pixel_width);
            -
            881  video_stream_info->set_pixel_height(pixel_height);
            -
            882  }
            -
            883  if (coded_width != video_stream_info->width() ||
            -
            884  coded_height != video_stream_info->height()) {
            -
            885  LOG(WARNING) << "Resolution in WVM metadata ("
            -
            886  << video_stream_info->width() << ","
            -
            887  << video_stream_info->height()
            -
            888  << ") does not match with resolution in "
            -
            889  "AVCDecoderConfigurationRecord ("
            -
            890  << coded_width << "," << coded_height
            -
            891  << "). Use AVCDecoderConfigurationRecord.";
            -
            892  video_stream_info->set_width(coded_width);
            -
            893  video_stream_info->set_height(coded_height);
            -
            894  }
            -
            895  }
            -
            896  }
            -
            897  }
            -
            898  } else if ((prev_pes_stream_id_ & kPesStreamIdAudioMask) ==
            -
            899  kPesStreamIdAudio) {
            -
            900  // Set data on the audio stream.
            - -
            902  vector_as_array(&sample_data_), kAdtsHeaderMinSize);
            -
            903  media::mp2t::AdtsHeader adts_header;
            -
            904  const uint8_t* frame_ptr = vector_as_array(&sample_data_);
            -
            905  if (!adts_header.Parse(frame_ptr, frame_size)) {
            -
            906  LOG(ERROR) << "Could not parse ADTS header";
            -
            907  return false;
            -
            908  }
            -
            909  size_t header_size = adts_header.GetAdtsHeaderSize(frame_ptr,
            -
            910  frame_size);
            -
            911  media_sample_->set_data(frame_ptr + header_size,
            -
            912  frame_size - header_size);
            -
            913  if (!is_initialized_) {
            -
            914  for (uint32_t i = 0; i < stream_infos_.size(); i++) {
            -
            915  if (stream_infos_[i]->stream_type() == media::kStreamAudio &&
            -
            916  stream_infos_[i]->codec_string().empty()) {
            -
            917  AudioStreamInfo* audio_stream_info =
            -
            918  reinterpret_cast<AudioStreamInfo*>(stream_infos_[i].get());
            -
            919  if (audio_stream_info->extra_data().empty()) {
            -
            920  // Set AudioStreamInfo fields using information from the ADTS
            -
            921  // header.
            -
            922  audio_stream_info->set_sampling_frequency(
            -
            923  adts_header.GetSamplingFrequency());
            -
            924  std::vector<uint8_t> audio_specific_config;
            -
            925  if (!adts_header.GetAudioSpecificConfig(&audio_specific_config)) {
            -
            926  LOG(ERROR) << "Could not compute AACaudiospecificconfig";
            -
            927  return false;
            -
            928  }
            -
            929  audio_stream_info->set_extra_data(audio_specific_config);
            -
            930  audio_stream_info->set_codec_string(
            - -
            932  kCodecAAC, adts_header.GetObjectType()));
            -
            933  } else {
            -
            934  // Set AudioStreamInfo fields using information from the
            -
            935  // AACAudioSpecificConfig record.
            -
            936  mp4::AACAudioSpecificConfig aac_config;
            -
            937  if (!aac_config.Parse(stream_infos_[i]->extra_data())) {
            -
            938  LOG(ERROR) << "Could not parse AACAudioSpecificconfig";
            -
            939  return false;
            -
            940  }
            -
            941  audio_stream_info->set_sampling_frequency(aac_config.frequency());
            -
            942  audio_stream_info->set_codec_string(
            - -
            944  kCodecAAC, aac_config.audio_object_type()));
            -
            945  }
            -
            946  }
            -
            947  }
            -
            948  }
            -
            949  }
            -
            950  }
            -
            951 
            -
            952  if (!is_initialized_) {
            -
            953  bool all_streams_have_config = true;
            -
            954  // Check if all collected stream infos have extra_data set.
            -
            955  for (uint32_t i = 0; i < stream_infos_.size(); i++) {
            -
            956  if (stream_infos_[i]->codec_string().empty()) {
            -
            957  all_streams_have_config = false;
            -
            958  break;
            -
            959  }
            -
            960  }
            -
            961  if (all_streams_have_config) {
            -
            962  init_cb_.Run(stream_infos_);
            -
            963  is_initialized_ = true;
            -
            964  }
            -
            965  }
            -
            966 
            -
            967  DCHECK_GT(media_sample_->data_size(), 0UL);
            -
            968  std::string key = base::UintToString(current_program_id_).append(":")
            -
            969  .append(base::UintToString(prev_pes_stream_id_));
            -
            970  std::map<std::string, uint32_t>::iterator it =
            -
            971  program_demux_stream_map_.find(key);
            -
            972  if (it == program_demux_stream_map_.end()) {
            -
            973  // TODO(ramjic): Log error message here and in other error cases through
            -
            974  // this method.
            -
            975  return false;
            -
            976  }
            -
            977  DemuxStreamIdMediaSample demux_stream_media_sample;
            -
            978  demux_stream_media_sample.parsed_audio_or_video_stream_id =
            -
            979  prev_pes_stream_id_;
            -
            980  demux_stream_media_sample.demux_stream_id = (*it).second;
            -
            981  demux_stream_media_sample.media_sample = media_sample_;
            -
            982  // Check if sample can be emitted.
            -
            983  if (!is_initialized_) {
            -
            984  media_sample_queue_.push_back(demux_stream_media_sample);
            -
            985  } else {
            -
            986  // flush the sample queue and emit all queued samples.
            -
            987  while (!media_sample_queue_.empty()) {
            -
            988  if (!EmitPendingSamples())
            -
            989  return false;
            -
            990  }
            -
            991  // Emit current sample.
            -
            992  if (!EmitSample(prev_pes_stream_id_, (*it).second, media_sample_, false))
            -
            993  return false;
            -
            994  }
            -
            995  return true;
            -
            996 }
            -
            997 
            -
            998 bool WvmMediaParser::EmitSample(uint32_t parsed_audio_or_video_stream_id,
            -
            999  uint32_t stream_id,
            -
            1000  scoped_refptr<MediaSample>& new_sample,
            -
            1001  bool isLastSample) {
            -
            1002  DCHECK(new_sample);
            -
            1003  if (isLastSample) {
            -
            1004  if ((parsed_audio_or_video_stream_id & kPesStreamIdVideoMask) ==
            -
            1005  kPesStreamIdVideo) {
            -
            1006  new_sample->set_duration(prev_media_sample_data_.video_sample_duration);
            -
            1007  } else if ((parsed_audio_or_video_stream_id & kPesStreamIdAudioMask) ==
            -
            1008  kPesStreamIdAudio) {
            -
            1009  new_sample->set_duration(prev_media_sample_data_.audio_sample_duration);
            -
            1010  }
            -
            1011  if (!new_sample_cb_.Run(stream_id, new_sample)) {
            -
            1012  LOG(ERROR) << "Failed to process the last sample.";
            -
            1013  return false;
            -
            1014  }
            -
            1015  return true;
            -
            1016  }
            -
            1017 
            -
            1018  // Cannot emit current sample. Compute duration first and then,
            -
            1019  // emit previous sample.
            -
            1020  if ((parsed_audio_or_video_stream_id & kPesStreamIdVideoMask) ==
            -
            1021  kPesStreamIdVideo) {
            -
            1022  if (prev_media_sample_data_.video_sample == NULL) {
            -
            1023  prev_media_sample_data_.video_sample = new_sample;
            -
            1024  prev_media_sample_data_.video_stream_id = stream_id;
            -
            1025  return true;
            -
            1026  }
            -
            1027  prev_media_sample_data_.video_sample->set_duration(
            -
            1028  new_sample->dts() - prev_media_sample_data_.video_sample->dts());
            -
            1029  prev_media_sample_data_.video_sample_duration =
            -
            1030  prev_media_sample_data_.video_sample->duration();
            -
            1031  if (!new_sample_cb_.Run(prev_media_sample_data_.video_stream_id,
            -
            1032  prev_media_sample_data_.video_sample)) {
            -
            1033  LOG(ERROR) << "Failed to process the video sample.";
            -
            1034  return false;
            -
            1035  }
            -
            1036  prev_media_sample_data_.video_sample = new_sample;
            -
            1037  prev_media_sample_data_.video_stream_id = stream_id;
            -
            1038  } else if ((parsed_audio_or_video_stream_id & kPesStreamIdAudioMask) ==
            -
            1039  kPesStreamIdAudio) {
            -
            1040  if (prev_media_sample_data_.audio_sample == NULL) {
            -
            1041  prev_media_sample_data_.audio_sample = new_sample;
            -
            1042  prev_media_sample_data_.audio_stream_id = stream_id;
            -
            1043  return true;
            -
            1044  }
            -
            1045  prev_media_sample_data_.audio_sample->set_duration(
            -
            1046  new_sample->dts() - prev_media_sample_data_.audio_sample->dts());
            -
            1047  prev_media_sample_data_.audio_sample_duration =
            -
            1048  prev_media_sample_data_.audio_sample->duration();
            -
            1049  if (!new_sample_cb_.Run(prev_media_sample_data_.audio_stream_id,
            -
            1050  prev_media_sample_data_.audio_sample)) {
            -
            1051  LOG(ERROR) << "Failed to process the audio sample.";
            -
            1052  return false;
            -
            1053  }
            -
            1054  prev_media_sample_data_.audio_sample = new_sample;
            -
            1055  prev_media_sample_data_.audio_stream_id = stream_id;
            -
            1056  }
            -
            1057  return true;
            -
            1058 }
            -
            1059 
            -
            1060 bool WvmMediaParser::GetAssetKey(const uint32_t asset_id,
            -
            1061  EncryptionKey* encryption_key) {
            -
            1062  DCHECK(decryption_key_source_);
            -
            1063  Status status = decryption_key_source_->FetchKeys(asset_id);
            -
            1064  if (!status.ok()) {
            -
            1065  LOG(ERROR) << "Fetch Key(s) failed for AssetID = " << asset_id
            -
            1066  << ", error = " << status;
            -
            1067  return false;
            -
            1068  }
            -
            1069 
            -
            1070  status = decryption_key_source_->GetKey(KeySource::TRACK_TYPE_HD,
            -
            1071  encryption_key);
            -
            1072  if (!status.ok()) {
            -
            1073  LOG(ERROR) << "Fetch Key(s) failed for AssetID = " << asset_id
            -
            1074  << ", error = " << status;
            -
            1075  return false;
            -
            1076  }
            -
            1077 
            -
            1078  return true;
            -
            1079 }
            -
            1080 
            -
            1081 bool WvmMediaParser::ProcessEcm() {
            -
            1082  // An error will be returned later if the samples need to be decrypted.
            -
            1083  if (!decryption_key_source_)
            -
            1084  return true;
            -
            1085 
            -
            1086  if (current_program_id_ > 0) {
            -
            1087  return true;
            -
            1088  }
            -
            1089  if (ecm_.size() != kEcmSizeBytes) {
            -
            1090  LOG(ERROR) << "Unexpected ECM size = " << ecm_.size()
            -
            1091  << ", expected size = " << kEcmSizeBytes;
            -
            1092  return false;
            -
            1093  }
            -
            1094  const uint8_t* ecm_data = ecm_.data();
            -
            1095  DCHECK(ecm_data);
            -
            1096  ecm_data += sizeof(uint32_t); // old version field - skip.
            -
            1097  ecm_data += sizeof(uint32_t); // clear lead - skip.
            -
            1098  ecm_data += sizeof(uint32_t); // system id(includes ECM version) - skip.
            -
            1099  uint32_t asset_id = ntohlFromBuffer(ecm_data);
            -
            1100  if (asset_id == 0) {
            -
            1101  LOG(ERROR) << "AssetID in ECM is not valid.";
            -
            1102  return false;
            -
            1103  }
            -
            1104  ecm_data += sizeof(uint32_t); // asset_id.
            -
            1105  EncryptionKey encryption_key;
            -
            1106  if (!GetAssetKey(asset_id, &encryption_key)) {
            -
            1107  return false;
            -
            1108  }
            -
            1109  if (encryption_key.key.size() < kAssetKeySizeBytes) {
            -
            1110  LOG(ERROR) << "Asset Key size of " << encryption_key.key.size()
            -
            1111  << " for AssetID = " << asset_id
            -
            1112  << " is less than minimum asset key size.";
            -
            1113  return false;
            -
            1114  }
            -
            1115  // Legacy WVM content may have asset keys > 16 bytes.
            -
            1116  // Use only the first 16 bytes of the asset key to get
            -
            1117  // the content key.
            -
            1118  std::vector<uint8_t> asset_key(
            -
            1119  encryption_key.key.begin(),
            -
            1120  encryption_key.key.begin() + kAssetKeySizeBytes);
            -
            1121  std::vector<uint8_t> iv(kInitializationVectorSizeBytes);
            -
            1122  AesCbcCtsDecryptor asset_decryptor;
            -
            1123  if (!asset_decryptor.InitializeWithIv(asset_key, iv)) {
            -
            1124  LOG(ERROR) << "Failed to initialize asset_decryptor.";
            -
            1125  return false;
            -
            1126  }
            +
            844 
            +
            845  VideoStreamInfo* video_stream_info =
            +
            846  reinterpret_cast<VideoStreamInfo*>(stream_infos_[i].get());
            +
            847  AVCDecoderConfiguration avc_config;
            +
            848  if (!avc_config.Parse(*stream_config)) {
            +
            849  LOG(WARNING) << "Failed to parse AVCDecoderConfigurationRecord. "
            +
            850  "Using computed configuration record instead.";
            +
            851  video_stream_info->set_extra_data(decoder_config_record);
            +
            852  if (!avc_config.Parse(decoder_config_record)) {
            +
            853  LOG(ERROR) << "Failed to parse AVCDecoderConfigurationRecord.";
            +
            854  return false;
            +
            855  }
            +
            856  }
            +
            857  video_stream_info->set_codec_string(avc_config.GetCodecString());
            +
            858 
            +
            859  if (avc_config.pixel_width() != video_stream_info->pixel_width() ||
            +
            860  avc_config.pixel_height() !=
            +
            861  video_stream_info->pixel_height()) {
            +
            862  LOG_IF(WARNING, video_stream_info->pixel_width() != 0 ||
            +
            863  video_stream_info->pixel_height() != 0)
            +
            864  << "Pixel aspect ratio in WVM metadata ("
            +
            865  << video_stream_info->pixel_width() << ","
            +
            866  << video_stream_info->pixel_height()
            +
            867  << ") does not match with SAR in "
            +
            868  "AVCDecoderConfigurationRecord ("
            +
            869  << avc_config.pixel_width() << ","
            +
            870  << avc_config.pixel_height()
            +
            871  << "). Use AVCDecoderConfigurationRecord.";
            +
            872  video_stream_info->set_pixel_width(avc_config.pixel_width());
            +
            873  video_stream_info->set_pixel_height(avc_config.pixel_height());
            +
            874  }
            +
            875  if (avc_config.coded_width() != video_stream_info->width() ||
            +
            876  avc_config.coded_height() != video_stream_info->height()) {
            +
            877  LOG(WARNING) << "Resolution in WVM metadata ("
            +
            878  << video_stream_info->width() << ","
            +
            879  << video_stream_info->height()
            +
            880  << ") does not match with resolution in "
            +
            881  "AVCDecoderConfigurationRecord ("
            +
            882  << avc_config.coded_width() << ","
            +
            883  << avc_config.coded_height()
            +
            884  << "). Use AVCDecoderConfigurationRecord.";
            +
            885  video_stream_info->set_width(avc_config.coded_width());
            +
            886  video_stream_info->set_height(avc_config.coded_height());
            +
            887  }
            +
            888  }
            +
            889  }
            +
            890  }
            +
            891  } else if ((prev_pes_stream_id_ & kPesStreamIdAudioMask) ==
            +
            892  kPesStreamIdAudio) {
            +
            893  // Set data on the audio stream.
            + +
            895  vector_as_array(&sample_data_), kAdtsHeaderMinSize);
            +
            896  media::mp2t::AdtsHeader adts_header;
            +
            897  const uint8_t* frame_ptr = vector_as_array(&sample_data_);
            +
            898  if (!adts_header.Parse(frame_ptr, frame_size)) {
            +
            899  LOG(ERROR) << "Could not parse ADTS header";
            +
            900  return false;
            +
            901  }
            +
            902  size_t header_size = adts_header.GetAdtsHeaderSize(frame_ptr,
            +
            903  frame_size);
            +
            904  media_sample_->set_data(frame_ptr + header_size,
            +
            905  frame_size - header_size);
            +
            906  if (!is_initialized_) {
            +
            907  for (uint32_t i = 0; i < stream_infos_.size(); i++) {
            +
            908  if (stream_infos_[i]->stream_type() == media::kStreamAudio &&
            +
            909  stream_infos_[i]->codec_string().empty()) {
            +
            910  AudioStreamInfo* audio_stream_info =
            +
            911  reinterpret_cast<AudioStreamInfo*>(stream_infos_[i].get());
            +
            912  if (audio_stream_info->extra_data().empty()) {
            +
            913  // Set AudioStreamInfo fields using information from the ADTS
            +
            914  // header.
            +
            915  audio_stream_info->set_sampling_frequency(
            +
            916  adts_header.GetSamplingFrequency());
            +
            917  std::vector<uint8_t> audio_specific_config;
            +
            918  if (!adts_header.GetAudioSpecificConfig(&audio_specific_config)) {
            +
            919  LOG(ERROR) << "Could not compute AACaudiospecificconfig";
            +
            920  return false;
            +
            921  }
            +
            922  audio_stream_info->set_extra_data(audio_specific_config);
            +
            923  audio_stream_info->set_codec_string(
            + +
            925  kCodecAAC, adts_header.GetObjectType()));
            +
            926  } else {
            +
            927  // Set AudioStreamInfo fields using information from the
            +
            928  // AACAudioSpecificConfig record.
            +
            929  mp4::AACAudioSpecificConfig aac_config;
            +
            930  if (!aac_config.Parse(stream_infos_[i]->extra_data())) {
            +
            931  LOG(ERROR) << "Could not parse AACAudioSpecificconfig";
            +
            932  return false;
            +
            933  }
            +
            934  audio_stream_info->set_sampling_frequency(aac_config.frequency());
            +
            935  audio_stream_info->set_codec_string(
            + +
            937  kCodecAAC, aac_config.audio_object_type()));
            +
            938  }
            +
            939  }
            +
            940  }
            +
            941  }
            +
            942  }
            +
            943  }
            +
            944 
            +
            945  if (!is_initialized_) {
            +
            946  bool all_streams_have_config = true;
            +
            947  // Check if all collected stream infos have extra_data set.
            +
            948  for (uint32_t i = 0; i < stream_infos_.size(); i++) {
            +
            949  if (stream_infos_[i]->codec_string().empty()) {
            +
            950  all_streams_have_config = false;
            +
            951  break;
            +
            952  }
            +
            953  }
            +
            954  if (all_streams_have_config) {
            +
            955  init_cb_.Run(stream_infos_);
            +
            956  is_initialized_ = true;
            +
            957  }
            +
            958  }
            +
            959 
            +
            960  DCHECK_GT(media_sample_->data_size(), 0UL);
            +
            961  std::string key = base::UintToString(current_program_id_).append(":")
            +
            962  .append(base::UintToString(prev_pes_stream_id_));
            +
            963  std::map<std::string, uint32_t>::iterator it =
            +
            964  program_demux_stream_map_.find(key);
            +
            965  if (it == program_demux_stream_map_.end()) {
            +
            966  // TODO(ramjic): Log error message here and in other error cases through
            +
            967  // this method.
            +
            968  return false;
            +
            969  }
            +
            970  DemuxStreamIdMediaSample demux_stream_media_sample;
            +
            971  demux_stream_media_sample.parsed_audio_or_video_stream_id =
            +
            972  prev_pes_stream_id_;
            +
            973  demux_stream_media_sample.demux_stream_id = (*it).second;
            +
            974  demux_stream_media_sample.media_sample = media_sample_;
            +
            975  // Check if sample can be emitted.
            +
            976  if (!is_initialized_) {
            +
            977  media_sample_queue_.push_back(demux_stream_media_sample);
            +
            978  } else {
            +
            979  // flush the sample queue and emit all queued samples.
            +
            980  while (!media_sample_queue_.empty()) {
            +
            981  if (!EmitPendingSamples())
            +
            982  return false;
            +
            983  }
            +
            984  // Emit current sample.
            +
            985  if (!EmitSample(prev_pes_stream_id_, (*it).second, media_sample_, false))
            +
            986  return false;
            +
            987  }
            +
            988  return true;
            +
            989 }
            +
            990 
            +
            991 bool WvmMediaParser::EmitSample(uint32_t parsed_audio_or_video_stream_id,
            +
            992  uint32_t stream_id,
            +
            993  scoped_refptr<MediaSample>& new_sample,
            +
            994  bool isLastSample) {
            +
            995  DCHECK(new_sample);
            +
            996  if (isLastSample) {
            +
            997  if ((parsed_audio_or_video_stream_id & kPesStreamIdVideoMask) ==
            +
            998  kPesStreamIdVideo) {
            +
            999  new_sample->set_duration(prev_media_sample_data_.video_sample_duration);
            +
            1000  } else if ((parsed_audio_or_video_stream_id & kPesStreamIdAudioMask) ==
            +
            1001  kPesStreamIdAudio) {
            +
            1002  new_sample->set_duration(prev_media_sample_data_.audio_sample_duration);
            +
            1003  }
            +
            1004  if (!new_sample_cb_.Run(stream_id, new_sample)) {
            +
            1005  LOG(ERROR) << "Failed to process the last sample.";
            +
            1006  return false;
            +
            1007  }
            +
            1008  return true;
            +
            1009  }
            +
            1010 
            +
            1011  // Cannot emit current sample. Compute duration first and then,
            +
            1012  // emit previous sample.
            +
            1013  if ((parsed_audio_or_video_stream_id & kPesStreamIdVideoMask) ==
            +
            1014  kPesStreamIdVideo) {
            +
            1015  if (prev_media_sample_data_.video_sample == NULL) {
            +
            1016  prev_media_sample_data_.video_sample = new_sample;
            +
            1017  prev_media_sample_data_.video_stream_id = stream_id;
            +
            1018  return true;
            +
            1019  }
            +
            1020  prev_media_sample_data_.video_sample->set_duration(
            +
            1021  new_sample->dts() - prev_media_sample_data_.video_sample->dts());
            +
            1022  prev_media_sample_data_.video_sample_duration =
            +
            1023  prev_media_sample_data_.video_sample->duration();
            +
            1024  if (!new_sample_cb_.Run(prev_media_sample_data_.video_stream_id,
            +
            1025  prev_media_sample_data_.video_sample)) {
            +
            1026  LOG(ERROR) << "Failed to process the video sample.";
            +
            1027  return false;
            +
            1028  }
            +
            1029  prev_media_sample_data_.video_sample = new_sample;
            +
            1030  prev_media_sample_data_.video_stream_id = stream_id;
            +
            1031  } else if ((parsed_audio_or_video_stream_id & kPesStreamIdAudioMask) ==
            +
            1032  kPesStreamIdAudio) {
            +
            1033  if (prev_media_sample_data_.audio_sample == NULL) {
            +
            1034  prev_media_sample_data_.audio_sample = new_sample;
            +
            1035  prev_media_sample_data_.audio_stream_id = stream_id;
            +
            1036  return true;
            +
            1037  }
            +
            1038  prev_media_sample_data_.audio_sample->set_duration(
            +
            1039  new_sample->dts() - prev_media_sample_data_.audio_sample->dts());
            +
            1040  prev_media_sample_data_.audio_sample_duration =
            +
            1041  prev_media_sample_data_.audio_sample->duration();
            +
            1042  if (!new_sample_cb_.Run(prev_media_sample_data_.audio_stream_id,
            +
            1043  prev_media_sample_data_.audio_sample)) {
            +
            1044  LOG(ERROR) << "Failed to process the audio sample.";
            +
            1045  return false;
            +
            1046  }
            +
            1047  prev_media_sample_data_.audio_sample = new_sample;
            +
            1048  prev_media_sample_data_.audio_stream_id = stream_id;
            +
            1049  }
            +
            1050  return true;
            +
            1051 }
            +
            1052 
            +
            1053 bool WvmMediaParser::GetAssetKey(const uint32_t asset_id,
            +
            1054  EncryptionKey* encryption_key) {
            +
            1055  DCHECK(decryption_key_source_);
            +
            1056  Status status = decryption_key_source_->FetchKeys(asset_id);
            +
            1057  if (!status.ok()) {
            +
            1058  LOG(ERROR) << "Fetch Key(s) failed for AssetID = " << asset_id
            +
            1059  << ", error = " << status;
            +
            1060  return false;
            +
            1061  }
            +
            1062 
            +
            1063  status = decryption_key_source_->GetKey(KeySource::TRACK_TYPE_HD,
            +
            1064  encryption_key);
            +
            1065  if (!status.ok()) {
            +
            1066  LOG(ERROR) << "Fetch Key(s) failed for AssetID = " << asset_id
            +
            1067  << ", error = " << status;
            +
            1068  return false;
            +
            1069  }
            +
            1070 
            +
            1071  return true;
            +
            1072 }
            +
            1073 
            +
            1074 bool WvmMediaParser::ProcessEcm() {
            +
            1075  // An error will be returned later if the samples need to be decrypted.
            +
            1076  if (!decryption_key_source_)
            +
            1077  return true;
            +
            1078 
            +
            1079  if (current_program_id_ > 0) {
            +
            1080  return true;
            +
            1081  }
            +
            1082  if (ecm_.size() != kEcmSizeBytes) {
            +
            1083  LOG(ERROR) << "Unexpected ECM size = " << ecm_.size()
            +
            1084  << ", expected size = " << kEcmSizeBytes;
            +
            1085  return false;
            +
            1086  }
            +
            1087  const uint8_t* ecm_data = ecm_.data();
            +
            1088  DCHECK(ecm_data);
            +
            1089  ecm_data += sizeof(uint32_t); // old version field - skip.
            +
            1090  ecm_data += sizeof(uint32_t); // clear lead - skip.
            +
            1091  ecm_data += sizeof(uint32_t); // system id(includes ECM version) - skip.
            +
            1092  uint32_t asset_id = ntohlFromBuffer(ecm_data);
            +
            1093  if (asset_id == 0) {
            +
            1094  LOG(ERROR) << "AssetID in ECM is not valid.";
            +
            1095  return false;
            +
            1096  }
            +
            1097  ecm_data += sizeof(uint32_t); // asset_id.
            +
            1098  EncryptionKey encryption_key;
            +
            1099  if (!GetAssetKey(asset_id, &encryption_key)) {
            +
            1100  return false;
            +
            1101  }
            +
            1102  if (encryption_key.key.size() < kAssetKeySizeBytes) {
            +
            1103  LOG(ERROR) << "Asset Key size of " << encryption_key.key.size()
            +
            1104  << " for AssetID = " << asset_id
            +
            1105  << " is less than minimum asset key size.";
            +
            1106  return false;
            +
            1107  }
            +
            1108  // Legacy WVM content may have asset keys > 16 bytes.
            +
            1109  // Use only the first 16 bytes of the asset key to get
            +
            1110  // the content key.
            +
            1111  std::vector<uint8_t> asset_key(
            +
            1112  encryption_key.key.begin(),
            +
            1113  encryption_key.key.begin() + kAssetKeySizeBytes);
            +
            1114  std::vector<uint8_t> iv(kInitializationVectorSizeBytes);
            +
            1115  AesCbcCtsDecryptor asset_decryptor;
            +
            1116  if (!asset_decryptor.InitializeWithIv(asset_key, iv)) {
            +
            1117  LOG(ERROR) << "Failed to initialize asset_decryptor.";
            +
            1118  return false;
            +
            1119  }
            +
            1120 
            +
            1121  const size_t content_key_buffer_size =
            +
            1122  kEcmFlagsSizeBytes + kEcmContentKeySizeBytes +
            +
            1123  kEcmPaddingSizeBytes; // flags + contentKey + padding.
            +
            1124  std::vector<uint8_t> content_key_buffer(content_key_buffer_size);
            +
            1125  asset_decryptor.Decrypt(
            +
            1126  ecm_data, content_key_buffer_size, vector_as_array(&content_key_buffer));
            1127 
            -
            1128  const size_t content_key_buffer_size =
            -
            1129  kEcmFlagsSizeBytes + kEcmContentKeySizeBytes +
            -
            1130  kEcmPaddingSizeBytes; // flags + contentKey + padding.
            -
            1131  std::vector<uint8_t> content_key_buffer(content_key_buffer_size);
            -
            1132  asset_decryptor.Decrypt(
            -
            1133  ecm_data, content_key_buffer_size, vector_as_array(&content_key_buffer));
            -
            1134 
            -
            1135  std::vector<uint8_t> decrypted_content_key_vec(
            -
            1136  content_key_buffer.begin() + 4,
            -
            1137  content_key_buffer.begin() + 20);
            -
            1138  scoped_ptr<AesCbcCtsDecryptor> content_decryptor(new AesCbcCtsDecryptor);
            -
            1139  if (!content_decryptor->InitializeWithIv(decrypted_content_key_vec, iv)) {
            -
            1140  LOG(ERROR) << "Failed to initialize content decryptor.";
            -
            1141  return false;
            -
            1142  }
            -
            1143 
            -
            1144  content_decryptor_ = content_decryptor.Pass();
            -
            1145  return true;
            -
            1146 }
            -
            1147 
            -
            1148 DemuxStreamIdMediaSample::DemuxStreamIdMediaSample() :
            -
            1149  demux_stream_id(0),
            -
            1150  parsed_audio_or_video_stream_id(0) {}
            -
            1151 
            -
            1152 DemuxStreamIdMediaSample::~DemuxStreamIdMediaSample() {}
            -
            1153 
            -
            1154 PrevSampleData::PrevSampleData() {
            -
            1155  Reset();
            -
            1156 }
            -
            1157 
            -
            1158 PrevSampleData::~PrevSampleData() {}
            -
            1159 
            -
            1160 void PrevSampleData::Reset() {
            -
            1161  audio_sample = NULL;
            -
            1162  video_sample = NULL;
            -
            1163  audio_stream_id = 0;
            -
            1164  video_stream_id = 0;
            -
            1165  audio_sample_duration = 0;
            -
            1166  video_sample_duration = 0;
            -
            1167 }
            -
            1168 
            -
            1169 } // namespace wvm
            -
            1170 } // namespace media
            -
            1171 } // namespace edash_packager
            +
            1128  std::vector<uint8_t> decrypted_content_key_vec(
            +
            1129  content_key_buffer.begin() + 4,
            +
            1130  content_key_buffer.begin() + 20);
            +
            1131  scoped_ptr<AesCbcCtsDecryptor> content_decryptor(new AesCbcCtsDecryptor);
            +
            1132  if (!content_decryptor->InitializeWithIv(decrypted_content_key_vec, iv)) {
            +
            1133  LOG(ERROR) << "Failed to initialize content decryptor.";
            +
            1134  return false;
            +
            1135  }
            +
            1136 
            +
            1137  content_decryptor_ = content_decryptor.Pass();
            +
            1138  return true;
            +
            1139 }
            +
            1140 
            +
            1141 DemuxStreamIdMediaSample::DemuxStreamIdMediaSample() :
            +
            1142  demux_stream_id(0),
            +
            1143  parsed_audio_or_video_stream_id(0) {}
            +
            1144 
            +
            1145 DemuxStreamIdMediaSample::~DemuxStreamIdMediaSample() {}
            +
            1146 
            +
            1147 PrevSampleData::PrevSampleData() {
            +
            1148  Reset();
            +
            1149 }
            +
            1150 
            +
            1151 PrevSampleData::~PrevSampleData() {}
            +
            1152 
            +
            1153 void PrevSampleData::Reset() {
            +
            1154  audio_sample = NULL;
            +
            1155  video_sample = NULL;
            +
            1156  audio_stream_id = 0;
            +
            1157  video_stream_id = 0;
            +
            1158  audio_sample_duration = 0;
            +
            1159  video_sample_duration = 0;
            +
            1160 }
            +
            1161 
            +
            1162 } // namespace wvm
            +
            1163 } // namespace media
            +
            1164 } // namespace edash_packager
            static size_t GetAdtsFrameSize(const uint8_t *data, size_t num_bytes)
            Definition: adts_header.cc:23
            KeySource is responsible for encryption key acquisition.
            Definition: key_source.h:29
            -
            static std::string GetCodecString(VideoCodec codec, uint8_t profile, uint8_t compatible_profiles, uint8_t level)
            static scoped_refptr< MediaSample > CreateEmptyMediaSample()
            Create a MediaSample object with default members.
            Definition: media_sample.cc:69
            static std::string GetCodecString(AudioCodec codec, uint8_t audio_object_type)
            diff --git a/docs/dd/d36/classedash__packager_1_1media_1_1MediaSample-members.html b/docs/dd/d36/classedash__packager_1_1media_1_1MediaSample-members.html index 6643ab9c19..694948d070 100644 --- a/docs/dd/d36/classedash__packager_1_1media_1_1MediaSample-members.html +++ b/docs/dd/d36/classedash__packager_1_1media_1_1MediaSample-members.html @@ -119,7 +119,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d41/structedash__packager_1_1media_1_1H264NALU.html b/docs/dd/d41/structedash__packager_1_1media_1_1H264NALU.html index 7e9523ee1c..5ddb2eb32a 100644 --- a/docs/dd/d41/structedash__packager_1_1media_1_1H264NALU.html +++ b/docs/dd/d41/structedash__packager_1_1media_1_1H264NALU.html @@ -131,7 +131,7 @@ int nal_unit_type

            Detailed Description

            -

            Definition at line 51 of file h264_parser.h.

            +

            Definition at line 32 of file h264_parser.h.


            The documentation for this struct was generated from the following files:
            • media/filters/h264_parser.h
            • media/filters/h264_parser.cc
            • @@ -139,7 +139,7 @@ int nal_unit_type diff --git a/docs/dd/d44/structedash__packager_1_1media_1_1mp4_1_1SegmentReference-members.html b/docs/dd/d44/structedash__packager_1_1media_1_1mp4_1_1SegmentReference-members.html index 39ed93719f..52c4cd1713 100644 --- a/docs/dd/d44/structedash__packager_1_1media_1_1mp4_1_1SegmentReference-members.html +++ b/docs/dd/d44/structedash__packager_1_1media_1_1mp4_1_1SegmentReference-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d46/webm__parser_8h_source.html b/docs/dd/d46/webm__parser_8h_source.html index ee165d1f6e..a559548b51 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/d47/classedash__packager_1_1media_1_1WebMInfoParser.html b/docs/dd/d47/classedash__packager_1_1media_1_1WebMInfoParser.html index 08260de884..32833e3014 100644 --- a/docs/dd/d47/classedash__packager_1_1media_1_1WebMInfoParser.html +++ b/docs/dd/d47/classedash__packager_1_1media_1_1WebMInfoParser.html @@ -175,7 +175,7 @@ The number of bytes parsed on success. diff --git a/docs/dd/d4c/structedash__packager_1_1media_1_1mp4_1_1FullBox-members.html b/docs/dd/d4c/structedash__packager_1_1media_1_1mp4_1_1FullBox-members.html index e40ab31f5b..7a7abb21ec 100644 --- a/docs/dd/d4c/structedash__packager_1_1media_1_1mp4_1_1FullBox-members.html +++ b/docs/dd/d4c/structedash__packager_1_1media_1_1mp4_1_1FullBox-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html b/docs/dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html index 28fe605a27..07c72619bc 100644 --- a/docs/dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html +++ b/docs/dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html @@ -522,7 +522,7 @@ bool ReadWriteInt64 (i diff --git a/docs/dd/d54/widevine__encryption__flags_8h_source.html b/docs/dd/d54/widevine__encryption__flags_8h_source.html index 793e35efa8..7baa1bdd63 100644 --- a/docs/dd/d54/widevine__encryption__flags_8h_source.html +++ b/docs/dd/d54/widevine__encryption__flags_8h_source.html @@ -123,7 +123,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 271db8c52d..043d049153 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 @@ -226,7 +226,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d79/classedash__packager_1_1media_1_1AesCtrEncryptor.html b/docs/dd/d79/classedash__packager_1_1media_1_1AesCtrEncryptor.html index 1f15866df3..9f789b414b 100644 --- a/docs/dd/d79/classedash__packager_1_1media_1_1AesCtrEncryptor.html +++ b/docs/dd/d79/classedash__packager_1_1media_1_1AesCtrEncryptor.html @@ -255,7 +255,7 @@ bool Encrypt (const st diff --git a/docs/dd/d80/media__sample_8h_source.html b/docs/dd/d80/media__sample_8h_source.html index 676a5eeb60..3a3d9850ae 100644 --- a/docs/dd/d80/media__sample_8h_source.html +++ b/docs/dd/d80/media__sample_8h_source.html @@ -245,7 +245,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d85/classedash__packager_1_1xml_1_1XmlNode.html b/docs/dd/d85/classedash__packager_1_1xml_1_1XmlNode.html index ad5a57b862..7f4a147e7b 100644 --- a/docs/dd/d85/classedash__packager_1_1xml_1_1XmlNode.html +++ b/docs/dd/d85/classedash__packager_1_1xml_1_1XmlNode.html @@ -419,7 +419,7 @@ bool  diff --git a/docs/dd/d85/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader-members.html b/docs/dd/d85/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader-members.html index a3ebfe0e75..4937aec17a 100644 --- a/docs/dd/d85/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader-members.html +++ b/docs/dd/d85/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader-members.html @@ -131,7 +131,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d8e/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter-members.html b/docs/dd/d8e/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter-members.html index 190cf6bf38..2f15dac260 100644 --- a/docs/dd/d8e/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter-members.html +++ b/docs/dd/d8e/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter-members.html @@ -121,7 +121,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/d96/classedash__packager_1_1media_1_1AesCbcCtsDecryptor.html b/docs/dd/d96/classedash__packager_1_1media_1_1AesCbcCtsDecryptor.html index 6ccc47e6eb..f894bd1842 100644 --- a/docs/dd/d96/classedash__packager_1_1media_1_1AesCbcCtsDecryptor.html +++ b/docs/dd/d96/classedash__packager_1_1media_1_1AesCbcCtsDecryptor.html @@ -252,7 +252,7 @@ const std::vector< uint8_t > &  diff --git a/docs/dd/d98/classedash__packager_1_1media_1_1LocalFile.html b/docs/dd/d98/classedash__packager_1_1media_1_1LocalFile.html index 8bb3224daa..913ad579e2 100644 --- a/docs/dd/d98/classedash__packager_1_1media_1_1LocalFile.html +++ b/docs/dd/d98/classedash__packager_1_1media_1_1LocalFile.html @@ -496,7 +496,7 @@ bool  diff --git a/docs/dd/d99/classedash__packager_1_1media_1_1WebMMediaParser.html b/docs/dd/d99/classedash__packager_1_1media_1_1WebMMediaParser.html index e41b5ed9c8..530c7223cc 100644 --- a/docs/dd/d99/classedash__packager_1_1media_1_1WebMMediaParser.html +++ b/docs/dd/d99/classedash__packager_1_1media_1_1WebMMediaParser.html @@ -205,7 +205,7 @@ track_id, const scoped_refptr
              diff --git a/docs/dd/d9a/audio__timestamp__helper_8h_source.html b/docs/dd/d9a/audio__timestamp__helper_8h_source.html index 5742f65c48..e6b8df991e 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/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html b/docs/dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html index 7951ebcdfb..9deaa68611 100644 --- a/docs/dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html +++ b/docs/dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html @@ -142,7 +142,7 @@ Additional Inherited Members

              Detailed Description

              -

              Definition at line 544 of file box_definitions.h.

              +

              Definition at line 534 of file box_definitions.h.

              Member Function Documentation

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

              Implements edash_packager::media::mp4::Box.

              -

              Definition at line 1865 of file box_definitions.cc.

              +

              Definition at line 1835 of file box_definitions.cc.

              @@ -179,7 +179,7 @@ Additional Inherited Members diff --git a/docs/dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html b/docs/dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html index 423edd06a8..b4f110ae59 100644 --- a/docs/dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html +++ b/docs/dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html @@ -139,7 +139,7 @@ std::vector< FourCC > <

              Detailed Description

              -

              Definition at line 47 of file box_definitions.h.

              +

              Definition at line 46 of file box_definitions.h.

              Member Function Documentation

              @@ -165,7 +165,7 @@ std::vector< FourCC > <

              Reimplemented from edash_packager::media::mp4::FileType.

              -

              Definition at line 98 of file box_definitions.cc.

              +

              Definition at line 100 of file box_definitions.cc.

              @@ -176,7 +176,7 @@ std::vector< FourCC > < diff --git a/docs/dd/da8/classedash__packager_1_1media_1_1RsaRequestSigner.html b/docs/dd/da8/classedash__packager_1_1media_1_1RsaRequestSigner.html index 90e0804002..6ec07bf143 100644 --- a/docs/dd/da8/classedash__packager_1_1media_1_1RsaRequestSigner.html +++ b/docs/dd/da8/classedash__packager_1_1media_1_1RsaRequestSigner.html @@ -182,7 +182,7 @@ Additional Inherited Members 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 fcb1a720c8..199359660b 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 @@ -174,7 +174,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dab/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry.html b/docs/dd/dab/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry.html index ebcd43c22e..1c70c7fd4b 100644 --- a/docs/dd/dab/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry.html +++ b/docs/dd/dab/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry.html @@ -113,14 +113,14 @@ uint32_t group_description

              Detailed Description

              -

              Definition at line 497 of file box_definitions.h.

              +

              Definition at line 487 of file box_definitions.h.


              The documentation for this struct was generated from the following file: diff --git a/docs/dd/dad/classedash__packager_1_1media_1_1WebMParserClient-members.html b/docs/dd/dad/classedash__packager_1_1media_1_1WebMParserClient-members.html index 5a06cc1cfb..a7c73e792d 100644 --- a/docs/dd/dad/classedash__packager_1_1media_1_1WebMParserClient-members.html +++ b/docs/dd/dad/classedash__packager_1_1media_1_1WebMParserClient-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dbc/buffer__reader_8cc_source.html b/docs/dd/dbc/buffer__reader_8cc_source.html index ee4afa13a6..d3c709749e 100644 --- a/docs/dd/dbc/buffer__reader_8cc_source.html +++ b/docs/dd/dbc/buffer__reader_8cc_source.html @@ -187,7 +187,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dbd/classedash__packager_1_1media_1_1AesCtrEncryptor-members.html b/docs/dd/dbd/classedash__packager_1_1media_1_1AesCtrEncryptor-members.html index e25fe6e9cf..59922430a2 100644 --- a/docs/dd/dbd/classedash__packager_1_1media_1_1AesCtrEncryptor-members.html +++ b/docs/dd/dbd/classedash__packager_1_1media_1_1AesCtrEncryptor-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html b/docs/dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html index 987172379d..7b1bd7f9fd 100644 --- a/docs/dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html +++ b/docs/dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html @@ -144,7 +144,7 @@ Additional Inherited Members

              Detailed Description

              -

              Definition at line 377 of file box_definitions.h.

              +

              Definition at line 367 of file box_definitions.h.

              Member Function Documentation

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

              Implements edash_packager::media::mp4::Box.

              -

              Definition at line 1293 of file box_definitions.cc.

              +

              Definition at line 1263 of file box_definitions.cc.

              @@ -181,7 +181,7 @@ Additional Inherited Members diff --git a/docs/dd/dbf/classedash__packager_1_1MpdNotifier-members.html b/docs/dd/dbf/classedash__packager_1_1MpdNotifier-members.html index f563f146f5..f4843e43db 100644 --- a/docs/dd/dbf/classedash__packager_1_1MpdNotifier-members.html +++ b/docs/dd/dbf/classedash__packager_1_1MpdNotifier-members.html @@ -106,7 +106,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 2faa07b904..417953f9b5 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/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html b/docs/dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html index 9249b3e3d8..647e636e51 100644 --- a/docs/dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html +++ b/docs/dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html @@ -141,7 +141,7 @@ Additional Inherited Members

              Detailed Description

              -

              Definition at line 101 of file box_definitions.h.

              +

              Definition at line 100 of file box_definitions.h.

              Member Function Documentation

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

              Implements edash_packager::media::mp4::Box.

              -

              Definition at line 296 of file box_definitions.cc.

              +

              Definition at line 298 of file box_definitions.cc.

              @@ -178,7 +178,7 @@ Additional Inherited Members diff --git a/docs/dd/dcb/classedash__packager_1_1MpdNotifierFactory.html b/docs/dd/dcb/classedash__packager_1_1MpdNotifierFactory.html index a222d03730..3da3487a2c 100644 --- a/docs/dd/dcb/classedash__packager_1_1MpdNotifierFactory.html +++ b/docs/dd/dcb/classedash__packager_1_1MpdNotifierFactory.html @@ -112,7 +112,7 @@ virtual scoped_ptr< diff --git a/docs/dd/dcf/structedash__packager_1_1media_1_1H264PPS.html b/docs/dd/dcf/structedash__packager_1_1media_1_1H264PPS.html index 2f36d8019a..bb3766ca1f 100644 --- a/docs/dd/dcf/structedash__packager_1_1media_1_1H264PPS.html +++ b/docs/dd/dcf/structedash__packager_1_1media_1_1H264PPS.html @@ -159,7 +159,7 @@ int second_chroma_qp_index

              Detailed Description

              -

              Definition at line 136 of file h264_parser.h.

              +

              Definition at line 117 of file h264_parser.h.


              The documentation for this struct was generated from the following files:
              • media/filters/h264_parser.h
              • media/filters/h264_parser.cc
              • @@ -167,7 +167,7 @@ int second_chroma_qp_index diff --git a/docs/dd/dd2/buffer__writer_8h_source.html b/docs/dd/dd2/buffer__writer_8h_source.html index 44544809d6..c4e2ed0c41 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 ee9dcbcdc6..8613f6d2a3 100644 --- a/docs/dd/dd3/buffer__writer_8cc_source.html +++ b/docs/dd/dd3/buffer__writer_8cc_source.html @@ -186,7 +186,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dd7/classedash__packager_1_1media_1_1OpusPacket-members.html b/docs/dd/dd7/classedash__packager_1_1media_1_1OpusPacket-members.html index 0a6ca67315..3f339342f2 100644 --- a/docs/dd/dd7/classedash__packager_1_1media_1_1OpusPacket-members.html +++ b/docs/dd/dd7/classedash__packager_1_1media_1_1OpusPacket-members.html @@ -101,7 +101,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 4774dc0521..5fee02d17c 100644 --- a/docs/dd/de7/xml__node_8h_source.html +++ b/docs/dd/de7/xml__node_8h_source.html @@ -228,7 +228,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dd/dec/structedash__packager_1_1media_1_1OnMediaEndParameters-members.html b/docs/dd/dec/structedash__packager_1_1media_1_1OnMediaEndParameters-members.html index e1eee959fb..781b7f30d6 100644 --- a/docs/dd/dec/structedash__packager_1_1media_1_1OnMediaEndParameters-members.html +++ b/docs/dd/dec/structedash__packager_1_1media_1_1OnMediaEndParameters-members.html @@ -104,7 +104,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 852b2de18d..f63dcf6653 100644 --- a/docs/dd/dee/box__definitions_8cc_source.html +++ b/docs/dd/dee/box__definitions_8cc_source.html @@ -124,2053 +124,2021 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
                35 const uint16_t kVideoFrameCount = 1;
                36 const uint16_t kVideoDepth = 0x0018;
                37 
                -
                38 // Utility functions to check if the 64bit integers can fit in 32bit integer.
                -
                39 bool IsFitIn32Bits(uint64_t a) {
                -
                40  return a <= std::numeric_limits<uint32_t>::max();
                -
                41 }
                -
                42 
                -
                43 bool IsFitIn32Bits(int64_t a) {
                -
                44  return a <= std::numeric_limits<int32_t>::max() &&
                -
                45  a >= std::numeric_limits<int32_t>::min();
                -
                46 }
                -
                47 
                -
                48 template <typename T1, typename T2>
                -
                49 bool IsFitIn32Bits(T1 a1, T2 a2) {
                -
                50  return IsFitIn32Bits(a1) && IsFitIn32Bits(a2);
                -
                51 }
                -
                52 
                -
                53 template <typename T1, typename T2, typename T3>
                -
                54 bool IsFitIn32Bits(T1 a1, T2 a2, T3 a3) {
                -
                55  return IsFitIn32Bits(a1) && IsFitIn32Bits(a2) && IsFitIn32Bits(a3);
                -
                56 }
                -
                57 
                -
                58 } // namespace
                +
                38 const uint32_t kCompressorNameSize = 32u;
                +
                39 
                +
                40 // Utility functions to check if the 64bit integers can fit in 32bit integer.
                +
                41 bool IsFitIn32Bits(uint64_t a) {
                +
                42  return a <= std::numeric_limits<uint32_t>::max();
                +
                43 }
                +
                44 
                +
                45 bool IsFitIn32Bits(int64_t a) {
                +
                46  return a <= std::numeric_limits<int32_t>::max() &&
                +
                47  a >= std::numeric_limits<int32_t>::min();
                +
                48 }
                +
                49 
                +
                50 template <typename T1, typename T2>
                +
                51 bool IsFitIn32Bits(T1 a1, T2 a2) {
                +
                52  return IsFitIn32Bits(a1) && IsFitIn32Bits(a2);
                +
                53 }
                +
                54 
                +
                55 template <typename T1, typename T2, typename T3>
                +
                56 bool IsFitIn32Bits(T1 a1, T2 a2, T3 a3) {
                +
                57  return IsFitIn32Bits(a1) && IsFitIn32Bits(a2) && IsFitIn32Bits(a3);
                +
                58 }
                59 
                -
                60 namespace edash_packager {
                -
                61 namespace media {
                -
                62 namespace mp4 {
                -
                63 
                -
                64 FileType::FileType() : major_brand(FOURCC_NULL), minor_version(0) {}
                -
                65 FileType::~FileType() {}
                -
                66 FourCC FileType::BoxType() const { return FOURCC_FTYP; }
                -
                67 
                - -
                69  RCHECK(Box::ReadWrite(buffer) &&
                -
                70  buffer->ReadWriteFourCC(&major_brand) &&
                -
                71  buffer->ReadWriteUInt32(&minor_version));
                -
                72  size_t num_brands;
                -
                73  if (buffer->Reading()) {
                -
                74  num_brands = (buffer->Size() - buffer->Pos()) / sizeof(FourCC);
                -
                75  compatible_brands.resize(num_brands);
                -
                76  } else {
                -
                77  num_brands = compatible_brands.size();
                -
                78  }
                -
                79  for (size_t i = 0; i < num_brands; ++i)
                -
                80  RCHECK(buffer->ReadWriteFourCC(&compatible_brands[i]));
                -
                81  return true;
                -
                82 }
                -
                83 
                - -
                85  atom_size = kBoxSize + kFourCCSize + sizeof(minor_version) +
                -
                86  kFourCCSize * compatible_brands.size();
                -
                87  return atom_size;
                -
                88 }
                -
                89 
                -
                90 SegmentType::SegmentType() {}
                -
                91 SegmentType::~SegmentType() {}
                -
                92 FourCC SegmentType::BoxType() const { return FOURCC_STYP; }
                -
                93 
                - -
                95  return FileType::ReadWrite(buffer);
                -
                96 }
                -
                97 
                - -
                99  return FileType::ComputeSize();
                -
                100 }
                -
                101 
                -
                102 ProtectionSystemSpecificHeader::ProtectionSystemSpecificHeader() {}
                -
                103 ProtectionSystemSpecificHeader::~ProtectionSystemSpecificHeader() {}
                -
                104 FourCC ProtectionSystemSpecificHeader::BoxType() const { return FOURCC_PSSH; }
                -
                105 
                - -
                107  if (!buffer->Reading() && !raw_box.empty()) {
                -
                108  // Write the raw box directly.
                -
                109  buffer->writer()->AppendVector(raw_box);
                -
                110  return true;
                -
                111  }
                -
                112 
                -
                113  uint32_t size = data.size();
                -
                114  RCHECK(FullBox::ReadWrite(buffer) &&
                -
                115  buffer->ReadWriteVector(&system_id, 16) &&
                -
                116  buffer->ReadWriteUInt32(&size) &&
                -
                117  buffer->ReadWriteVector(&data, size));
                -
                118 
                -
                119  if (buffer->Reading()) {
                -
                120  // Copy the entire box, including the header, for passing to EME as
                -
                121  // initData.
                -
                122  DCHECK(raw_box.empty());
                -
                123  BoxReader* reader = buffer->reader();
                -
                124  DCHECK(reader);
                -
                125  raw_box.assign(reader->data(), reader->data() + reader->size());
                -
                126  }
                -
                127  return true;
                -
                128 }
                -
                129 
                - -
                131  if (!raw_box.empty()) {
                -
                132  atom_size = raw_box.size();
                -
                133  } else {
                -
                134  atom_size =
                -
                135  kFullBoxSize + system_id.size() + sizeof(uint32_t) + data.size();
                -
                136  }
                -
                137  return atom_size;
                -
                138 }
                -
                139 
                -
                140 SampleAuxiliaryInformationOffset::SampleAuxiliaryInformationOffset() {}
                -
                141 SampleAuxiliaryInformationOffset::~SampleAuxiliaryInformationOffset() {}
                -
                142 FourCC SampleAuxiliaryInformationOffset::BoxType() const { return FOURCC_SAIO; }
                -
                143 
                - -
                145  RCHECK(FullBox::ReadWrite(buffer));
                -
                146  if (flags & 1)
                -
                147  RCHECK(buffer->IgnoreBytes(8)); // aux_info_type and parameter.
                -
                148 
                -
                149  uint32_t count = offsets.size();
                -
                150  RCHECK(buffer->ReadWriteUInt32(&count));
                -
                151  offsets.resize(count);
                -
                152 
                -
                153  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
                -
                154  for (uint32_t i = 0; i < count; ++i)
                -
                155  RCHECK(buffer->ReadWriteUInt64NBytes(&offsets[i], num_bytes));
                -
                156  return true;
                -
                157 }
                -
                158 
                - -
                160  // This box is optional. Skip it if it is empty.
                -
                161  atom_size = 0;
                -
                162  if (offsets.size() != 0) {
                -
                163  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
                -
                164  atom_size = kFullBoxSize + sizeof(uint32_t) + num_bytes * offsets.size();
                -
                165  }
                -
                166  return atom_size;
                -
                167 }
                -
                168 
                -
                169 SampleAuxiliaryInformationSize::SampleAuxiliaryInformationSize()
                -
                170  : default_sample_info_size(0), sample_count(0) {}
                -
                171 SampleAuxiliaryInformationSize::~SampleAuxiliaryInformationSize() {}
                -
                172 FourCC SampleAuxiliaryInformationSize::BoxType() const { return FOURCC_SAIZ; }
                -
                173 
                - -
                175  RCHECK(FullBox::ReadWrite(buffer));
                -
                176  if (flags & 1)
                -
                177  RCHECK(buffer->IgnoreBytes(8));
                -
                178 
                -
                179  RCHECK(buffer->ReadWriteUInt8(&default_sample_info_size) &&
                -
                180  buffer->ReadWriteUInt32(&sample_count));
                -
                181  if (default_sample_info_size == 0)
                -
                182  RCHECK(buffer->ReadWriteVector(&sample_info_sizes, sample_count));
                -
                183  return true;
                -
                184 }
                -
                185 
                - -
                187  // This box is optional. Skip it if it is empty.
                -
                188  atom_size = 0;
                -
                189  if (sample_count != 0) {
                -
                190  atom_size = kFullBoxSize + sizeof(default_sample_info_size) +
                -
                191  sizeof(sample_count) +
                -
                192  (default_sample_info_size == 0 ? sample_info_sizes.size() : 0);
                -
                193  }
                -
                194  return atom_size;
                -
                195 }
                -
                196 
                -
                197 OriginalFormat::OriginalFormat() : format(FOURCC_NULL) {}
                -
                198 OriginalFormat::~OriginalFormat() {}
                -
                199 FourCC OriginalFormat::BoxType() const { return FOURCC_FRMA; }
                -
                200 
                - -
                202  return Box::ReadWrite(buffer) && buffer->ReadWriteFourCC(&format);
                -
                203 }
                -
                204 
                - -
                206  atom_size = kBoxSize + kFourCCSize;
                -
                207  return atom_size;
                -
                208 }
                -
                209 
                -
                210 SchemeType::SchemeType() : type(FOURCC_NULL), version(0) {}
                -
                211 SchemeType::~SchemeType() {}
                -
                212 FourCC SchemeType::BoxType() const { return FOURCC_SCHM; }
                -
                213 
                - -
                215  RCHECK(FullBox::ReadWrite(buffer) &&
                -
                216  buffer->ReadWriteFourCC(&type) &&
                -
                217  buffer->ReadWriteUInt32(&version));
                -
                218  return true;
                -
                219 }
                -
                220 
                - -
                222  atom_size = kFullBoxSize + kFourCCSize + sizeof(version);
                -
                223  return atom_size;
                -
                224 }
                -
                225 
                -
                226 TrackEncryption::TrackEncryption()
                -
                227  : is_encrypted(false), default_iv_size(0), default_kid(16, 0) {}
                -
                228 TrackEncryption::~TrackEncryption() {}
                -
                229 FourCC TrackEncryption::BoxType() const { return FOURCC_TENC; }
                -
                230 
                - -
                232  if (!buffer->Reading()) {
                -
                233  if (default_kid.size() != kCencKeyIdSize) {
                -
                234  LOG(WARNING) << "CENC defines key id length of " << kCencKeyIdSize
                -
                235  << " bytes; got " << default_kid.size()
                -
                236  << ". Resized accordingly.";
                -
                237  default_kid.resize(kCencKeyIdSize);
                -
                238  }
                -
                239  }
                -
                240 
                -
                241  uint8_t flag = is_encrypted ? 1 : 0;
                -
                242  RCHECK(FullBox::ReadWrite(buffer) &&
                -
                243  buffer->IgnoreBytes(2) && // reserved.
                -
                244  buffer->ReadWriteUInt8(&flag) &&
                -
                245  buffer->ReadWriteUInt8(&default_iv_size) &&
                -
                246  buffer->ReadWriteVector(&default_kid, kCencKeyIdSize));
                -
                247  if (buffer->Reading()) {
                -
                248  is_encrypted = (flag != 0);
                -
                249  if (is_encrypted) {
                -
                250  RCHECK(default_iv_size == 8 || default_iv_size == 16);
                -
                251  } else {
                -
                252  RCHECK(default_iv_size == 0);
                -
                253  }
                -
                254  }
                -
                255  return true;
                -
                256 }
                -
                257 
                - -
                259  atom_size = kFullBoxSize + sizeof(uint32_t) + kCencKeyIdSize;
                -
                260  return atom_size;
                -
                261 }
                -
                262 
                -
                263 SchemeInfo::SchemeInfo() {}
                -
                264 SchemeInfo::~SchemeInfo() {}
                -
                265 FourCC SchemeInfo::BoxType() const { return FOURCC_SCHI; }
                -
                266 
                - -
                268  RCHECK(Box::ReadWrite(buffer) && buffer->PrepareChildren() &&
                -
                269  buffer->ReadWriteChild(&track_encryption));
                -
                270  return true;
                -
                271 }
                -
                272 
                - -
                274  atom_size = kBoxSize + track_encryption.ComputeSize();
                -
                275  return atom_size;
                -
                276 }
                -
                277 
                -
                278 ProtectionSchemeInfo::ProtectionSchemeInfo() {}
                -
                279 ProtectionSchemeInfo::~ProtectionSchemeInfo() {}
                -
                280 FourCC ProtectionSchemeInfo::BoxType() const { return FOURCC_SINF; }
                -
                281 
                - -
                283  RCHECK(Box::ReadWrite(buffer) &&
                -
                284  buffer->PrepareChildren() &&
                -
                285  buffer->ReadWriteChild(&format) &&
                -
                286  buffer->ReadWriteChild(&type));
                -
                287  if (type.type == FOURCC_CENC)
                -
                288  RCHECK(buffer->ReadWriteChild(&info));
                -
                289  // Other protection schemes are silently ignored. Since the protection scheme
                -
                290  // type can't be determined until this box is opened, we return 'true' for
                -
                291  // non-CENC protection scheme types. It is the parent box's responsibility to
                -
                292  // ensure that this scheme type is a supported one.
                -
                293  return true;
                -
                294 }
                -
                295 
                - -
                297  // Skip sinf box if it is not initialized.
                -
                298  atom_size = 0;
                -
                299  if (format.format != FOURCC_NULL) {
                -
                300  atom_size = kBoxSize + format.ComputeSize() + type.ComputeSize() +
                -
                301  info.ComputeSize();
                -
                302  }
                -
                303  return atom_size;
                -
                304 }
                -
                305 
                -
                306 MovieHeader::MovieHeader()
                -
                307  : creation_time(0),
                -
                308  modification_time(0),
                -
                309  timescale(0),
                -
                310  duration(0),
                -
                311  rate(1 << 16),
                -
                312  volume(1 << 8),
                -
                313  next_track_id(0) {}
                -
                314 MovieHeader::~MovieHeader() {}
                -
                315 FourCC MovieHeader::BoxType() const { return FOURCC_MVHD; }
                -
                316 
                - -
                318  RCHECK(FullBox::ReadWrite(buffer));
                -
                319 
                -
                320  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
                -
                321  RCHECK(buffer->ReadWriteUInt64NBytes(&creation_time, num_bytes) &&
                -
                322  buffer->ReadWriteUInt64NBytes(&modification_time, num_bytes) &&
                -
                323  buffer->ReadWriteUInt32(&timescale) &&
                -
                324  buffer->ReadWriteUInt64NBytes(&duration, num_bytes));
                -
                325 
                -
                326  std::vector<uint8_t> matrix(kUnityMatrix,
                -
                327  kUnityMatrix + arraysize(kUnityMatrix));
                -
                328  RCHECK(buffer->ReadWriteInt32(&rate) &&
                -
                329  buffer->ReadWriteInt16(&volume) &&
                -
                330  buffer->IgnoreBytes(10) && // reserved
                -
                331  buffer->ReadWriteVector(&matrix, matrix.size()) &&
                -
                332  buffer->IgnoreBytes(24) && // predefined zero
                -
                333  buffer->ReadWriteUInt32(&next_track_id));
                -
                334  return true;
                -
                335 }
                -
                336 
                - -
                338  version = IsFitIn32Bits(creation_time, modification_time, duration) ? 0 : 1;
                -
                339  atom_size = kFullBoxSize + sizeof(uint32_t) * (1 + version) * 3 +
                -
                340  sizeof(timescale) + sizeof(rate) + sizeof(volume) +
                -
                341  sizeof(next_track_id) + sizeof(kUnityMatrix) + 10 +
                -
                342  24; // 10 bytes reserved, 24 bytes predefined.
                -
                343  return atom_size;
                -
                344 }
                -
                345 
                -
                346 TrackHeader::TrackHeader()
                -
                347  : creation_time(0),
                -
                348  modification_time(0),
                -
                349  track_id(0),
                -
                350  duration(0),
                -
                351  layer(0),
                -
                352  alternate_group(0),
                -
                353  volume(-1),
                -
                354  width(0),
                -
                355  height(0) {
                -
                356  flags = kTrackEnabled | kTrackInMovie;
                -
                357 }
                -
                358 TrackHeader::~TrackHeader() {}
                -
                359 FourCC TrackHeader::BoxType() const { return FOURCC_TKHD; }
                -
                360 
                - -
                362  RCHECK(FullBox::ReadWrite(buffer));
                -
                363 
                -
                364  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
                -
                365  RCHECK(buffer->ReadWriteUInt64NBytes(&creation_time, num_bytes) &&
                -
                366  buffer->ReadWriteUInt64NBytes(&modification_time, num_bytes) &&
                -
                367  buffer->ReadWriteUInt32(&track_id) &&
                -
                368  buffer->IgnoreBytes(4) && // reserved
                -
                369  buffer->ReadWriteUInt64NBytes(&duration, num_bytes));
                -
                370 
                -
                371  if (!buffer->Reading()) {
                -
                372  // Set default value for volume, if track is audio, 0x100 else 0.
                -
                373  if (volume == -1)
                -
                374  volume = (width != 0 && height != 0) ? 0 : 0x100;
                -
                375  }
                -
                376  std::vector<uint8_t> matrix(kUnityMatrix,
                -
                377  kUnityMatrix + arraysize(kUnityMatrix));
                -
                378  RCHECK(buffer->IgnoreBytes(8) && // reserved
                -
                379  buffer->ReadWriteInt16(&layer) &&
                -
                380  buffer->ReadWriteInt16(&alternate_group) &&
                -
                381  buffer->ReadWriteInt16(&volume) &&
                -
                382  buffer->IgnoreBytes(2) && // reserved
                -
                383  buffer->ReadWriteVector(&matrix, matrix.size()) &&
                -
                384  buffer->ReadWriteUInt32(&width) &&
                -
                385  buffer->ReadWriteUInt32(&height));
                -
                386  return true;
                -
                387 }
                -
                388 
                - -
                390  version = IsFitIn32Bits(creation_time, modification_time, duration) ? 0 : 1;
                -
                391  atom_size = kFullBoxSize + sizeof(track_id) +
                -
                392  sizeof(uint32_t) * (1 + version) * 3 + sizeof(layer) +
                -
                393  sizeof(alternate_group) + sizeof(volume) + sizeof(width) +
                -
                394  sizeof(height) + sizeof(kUnityMatrix) + 14; // 14 bytes reserved.
                -
                395  return atom_size;
                -
                396 }
                -
                397 
                -
                398 SampleDescription::SampleDescription() : type(kInvalid) {}
                -
                399 SampleDescription::~SampleDescription() {}
                -
                400 FourCC SampleDescription::BoxType() const { return FOURCC_STSD; }
                -
                401 
                - -
                403  uint32_t count = 0;
                -
                404  if (type == kVideo)
                -
                405  count = video_entries.size();
                -
                406  else
                -
                407  count = audio_entries.size();
                -
                408  RCHECK(FullBox::ReadWrite(buffer) &&
                -
                409  buffer->ReadWriteUInt32(&count));
                -
                410 
                -
                411  if (buffer->Reading()) {
                -
                412  BoxReader* reader = buffer->reader();
                -
                413  DCHECK(reader);
                -
                414  video_entries.clear();
                -
                415  audio_entries.clear();
                -
                416  // Note: this value is preset before scanning begins. See comments in the
                -
                417  // Parse(Media*) function.
                -
                418  if (type == kVideo) {
                -
                419  RCHECK(reader->ReadAllChildren(&video_entries));
                -
                420  RCHECK(video_entries.size() == count);
                -
                421  } else if (type == kAudio) {
                -
                422  RCHECK(reader->ReadAllChildren(&audio_entries));
                -
                423  RCHECK(audio_entries.size() == count);
                -
                424  }
                -
                425  } else {
                -
                426  DCHECK_LT(0u, count);
                -
                427  if (type == kVideo) {
                -
                428  for (uint32_t i = 0; i < count; ++i)
                -
                429  RCHECK(video_entries[i].ReadWrite(buffer));
                -
                430  } else if (type == kAudio) {
                -
                431  for (uint32_t i = 0; i < count; ++i)
                -
                432  RCHECK(audio_entries[i].ReadWrite(buffer));
                -
                433  } else {
                -
                434  NOTIMPLEMENTED();
                -
                435  }
                -
                436  }
                -
                437  return true;
                -
                438 }
                -
                439 
                - -
                441  atom_size = kFullBoxSize + sizeof(uint32_t);
                -
                442  if (type == kVideo) {
                -
                443  for (uint32_t i = 0; i < video_entries.size(); ++i)
                -
                444  atom_size += video_entries[i].ComputeSize();
                -
                445  } else if (type == kAudio) {
                -
                446  for (uint32_t i = 0; i < audio_entries.size(); ++i)
                -
                447  atom_size += audio_entries[i].ComputeSize();
                -
                448  }
                -
                449  return atom_size;
                -
                450 }
                -
                451 
                -
                452 DecodingTimeToSample::DecodingTimeToSample() {}
                -
                453 DecodingTimeToSample::~DecodingTimeToSample() {}
                -
                454 FourCC DecodingTimeToSample::BoxType() const { return FOURCC_STTS; }
                -
                455 
                - -
                457  uint32_t count = decoding_time.size();
                -
                458  RCHECK(FullBox::ReadWrite(buffer) &&
                -
                459  buffer->ReadWriteUInt32(&count));
                -
                460 
                -
                461  decoding_time.resize(count);
                -
                462  for (uint32_t i = 0; i < count; ++i) {
                -
                463  RCHECK(buffer->ReadWriteUInt32(&decoding_time[i].sample_count) &&
                -
                464  buffer->ReadWriteUInt32(&decoding_time[i].sample_delta));
                -
                465  }
                -
                466  return true;
                -
                467 }
                -
                468 
                - -
                470  atom_size = kFullBoxSize + sizeof(uint32_t) +
                -
                471  sizeof(DecodingTime) * decoding_time.size();
                -
                472  return atom_size;
                -
                473 }
                -
                474 
                -
                475 CompositionTimeToSample::CompositionTimeToSample() {}
                -
                476 CompositionTimeToSample::~CompositionTimeToSample() {}
                -
                477 FourCC CompositionTimeToSample::BoxType() const { return FOURCC_CTTS; }
                -
                478 
                - -
                480  uint32_t count = composition_offset.size();
                -
                481  if (!buffer->Reading()) {
                -
                482  // Determine whether version 0 or version 1 should be used.
                -
                483  // Use version 0 if possible, use version 1 if there is a negative
                -
                484  // sample_offset value.
                -
                485  version = 0;
                -
                486  for (uint32_t i = 0; i < count; ++i) {
                -
                487  if (composition_offset[i].sample_offset < 0) {
                -
                488  version = 1;
                -
                489  break;
                -
                490  }
                -
                491  }
                -
                492  }
                -
                493 
                -
                494  RCHECK(FullBox::ReadWrite(buffer) &&
                -
                495  buffer->ReadWriteUInt32(&count));
                -
                496 
                -
                497  composition_offset.resize(count);
                -
                498  for (uint32_t i = 0; i < count; ++i) {
                -
                499  RCHECK(buffer->ReadWriteUInt32(&composition_offset[i].sample_count));
                -
                500 
                -
                501  if (version == 0) {
                -
                502  uint32_t sample_offset = composition_offset[i].sample_offset;
                -
                503  RCHECK(buffer->ReadWriteUInt32(&sample_offset));
                -
                504  composition_offset[i].sample_offset = sample_offset;
                -
                505  } else {
                -
                506  int32_t sample_offset = composition_offset[i].sample_offset;
                -
                507  RCHECK(buffer->ReadWriteInt32(&sample_offset));
                -
                508  composition_offset[i].sample_offset = sample_offset;
                -
                509  }
                -
                510  }
                -
                511  return true;
                -
                512 }
                -
                513 
                - -
                515  // This box is optional. Skip it if it is empty.
                -
                516  atom_size = 0;
                -
                517  if (!composition_offset.empty()) {
                -
                518  // Structure CompositionOffset contains |sample_offset| (uint32_t) and
                -
                519  // |sample_offset| (int64_t). The actual size of |sample_offset| is
                -
                520  // 4 bytes (uint32_t for version 0 and int32_t for version 1).
                -
                521  const uint32_t kCompositionOffsetSize = sizeof(uint32_t) * 2;
                -
                522  atom_size = kFullBoxSize + sizeof(uint32_t) +
                -
                523  kCompositionOffsetSize * composition_offset.size();
                -
                524  }
                -
                525  return atom_size;
                -
                526 }
                -
                527 
                -
                528 SampleToChunk::SampleToChunk() {}
                -
                529 SampleToChunk::~SampleToChunk() {}
                -
                530 FourCC SampleToChunk::BoxType() const { return FOURCC_STSC; }
                -
                531 
                - -
                533  uint32_t count = chunk_info.size();
                -
                534  RCHECK(FullBox::ReadWrite(buffer) &&
                -
                535  buffer->ReadWriteUInt32(&count));
                -
                536 
                -
                537  chunk_info.resize(count);
                -
                538  for (uint32_t i = 0; i < count; ++i) {
                -
                539  RCHECK(buffer->ReadWriteUInt32(&chunk_info[i].first_chunk) &&
                -
                540  buffer->ReadWriteUInt32(&chunk_info[i].samples_per_chunk) &&
                -
                541  buffer->ReadWriteUInt32(&chunk_info[i].sample_description_index));
                -
                542  // first_chunk values are always increasing.
                -
                543  RCHECK(i == 0 ? chunk_info[i].first_chunk == 1
                -
                544  : chunk_info[i].first_chunk > chunk_info[i - 1].first_chunk);
                -
                545  }
                -
                546  return true;
                -
                547 }
                -
                548 
                - -
                550  atom_size =
                -
                551  kFullBoxSize + sizeof(uint32_t) + sizeof(ChunkInfo) * chunk_info.size();
                -
                552  return atom_size;
                -
                553 }
                -
                554 
                -
                555 SampleSize::SampleSize() : sample_size(0), sample_count(0) {}
                -
                556 SampleSize::~SampleSize() {}
                -
                557 FourCC SampleSize::BoxType() const { return FOURCC_STSZ; }
                -
                558 
                - -
                560  RCHECK(FullBox::ReadWrite(buffer) &&
                -
                561  buffer->ReadWriteUInt32(&sample_size) &&
                -
                562  buffer->ReadWriteUInt32(&sample_count));
                -
                563 
                -
                564  if (sample_size == 0) {
                -
                565  if (buffer->Reading())
                -
                566  sizes.resize(sample_count);
                -
                567  else
                -
                568  DCHECK(sample_count == sizes.size());
                -
                569  for (uint32_t i = 0; i < sample_count; ++i)
                -
                570  RCHECK(buffer->ReadWriteUInt32(&sizes[i]));
                -
                571  }
                -
                572  return true;
                -
                573 }
                -
                574 
                - -
                576  atom_size = kFullBoxSize + sizeof(sample_size) + sizeof(sample_count) +
                -
                577  (sample_size == 0 ? sizeof(uint32_t) * sizes.size() : 0);
                -
                578  return atom_size;
                -
                579 }
                -
                580 
                -
                581 CompactSampleSize::CompactSampleSize() : field_size(0) {}
                -
                582 CompactSampleSize::~CompactSampleSize() {}
                -
                583 FourCC CompactSampleSize::BoxType() const { return FOURCC_STZ2; }
                -
                584 
                - -
                586  uint32_t sample_count = sizes.size();
                -
                587  RCHECK(FullBox::ReadWrite(buffer) &&
                -
                588  buffer->IgnoreBytes(3) &&
                -
                589  buffer->ReadWriteUInt8(&field_size) &&
                -
                590  buffer->ReadWriteUInt32(&sample_count));
                -
                591 
                -
                592  // Reserve one more entry if field size is 4 bits.
                -
                593  sizes.resize(sample_count + (field_size == 4 ? 1 : 0), 0);
                -
                594  switch (field_size) {
                -
                595  case 4:
                -
                596  for (uint32_t i = 0; i < sample_count; i += 2) {
                -
                597  if (buffer->Reading()) {
                -
                598  uint8_t size = 0;
                -
                599  RCHECK(buffer->ReadWriteUInt8(&size));
                -
                600  sizes[i] = size >> 4;
                -
                601  sizes[i + 1] = size & 0x0F;
                -
                602  } else {
                -
                603  DCHECK_LT(sizes[i], 16u);
                -
                604  DCHECK_LT(sizes[i + 1], 16u);
                -
                605  uint8_t size = (sizes[i] << 4) | sizes[i + 1];
                -
                606  RCHECK(buffer->ReadWriteUInt8(&size));
                -
                607  }
                -
                608  }
                -
                609  break;
                -
                610  case 8:
                -
                611  for (uint32_t i = 0; i < sample_count; ++i) {
                -
                612  uint8_t size = sizes[i];
                -
                613  RCHECK(buffer->ReadWriteUInt8(&size));
                -
                614  sizes[i] = size;
                -
                615  }
                -
                616  break;
                -
                617  case 16:
                -
                618  for (uint32_t i = 0; i < sample_count; ++i) {
                -
                619  uint16_t size = sizes[i];
                -
                620  RCHECK(buffer->ReadWriteUInt16(&size));
                -
                621  sizes[i] = size;
                -
                622  }
                -
                623  break;
                -
                624  default:
                -
                625  RCHECK(false);
                -
                626  }
                -
                627  sizes.resize(sample_count);
                -
                628  return true;
                -
                629 }
                -
                630 
                - -
                632  atom_size = kFullBoxSize + sizeof(uint32_t) + sizeof(uint32_t) +
                -
                633  (field_size * sizes.size() + 7) / 8;
                -
                634  return atom_size;
                -
                635 }
                -
                636 
                -
                637 ChunkOffset::ChunkOffset() {}
                -
                638 ChunkOffset::~ChunkOffset() {}
                -
                639 FourCC ChunkOffset::BoxType() const { return FOURCC_STCO; }
                -
                640 
                - -
                642  uint32_t count = offsets.size();
                -
                643  RCHECK(FullBox::ReadWrite(buffer) &&
                -
                644  buffer->ReadWriteUInt32(&count));
                -
                645 
                -
                646  offsets.resize(count);
                -
                647  for (uint32_t i = 0; i < count; ++i)
                -
                648  RCHECK(buffer->ReadWriteUInt64NBytes(&offsets[i], sizeof(uint32_t)));
                -
                649  return true;
                -
                650 }
                -
                651 
                - -
                653  atom_size =
                -
                654  kFullBoxSize + sizeof(uint32_t) + sizeof(uint32_t) * offsets.size();
                -
                655  return atom_size;
                -
                656 }
                -
                657 
                -
                658 ChunkLargeOffset::ChunkLargeOffset() {}
                -
                659 ChunkLargeOffset::~ChunkLargeOffset() {}
                -
                660 FourCC ChunkLargeOffset::BoxType() const { return FOURCC_CO64; }
                -
                661 
                - -
                663  uint32_t count = offsets.size();
                -
                664 
                -
                665  if (!buffer->Reading()) {
                -
                666  // Switch to ChunkOffset box if it is able to fit in 32 bits offset.
                -
                667  if (count == 0 || IsFitIn32Bits(offsets[count - 1])) {
                -
                668  ChunkOffset stco;
                -
                669  stco.offsets.swap(offsets);
                -
                670  DCHECK(buffer->writer());
                -
                671  stco.Write(buffer->writer());
                -
                672  stco.offsets.swap(offsets);
                -
                673  return true;
                -
                674  }
                -
                675  }
                -
                676 
                -
                677  RCHECK(FullBox::ReadWrite(buffer) &&
                -
                678  buffer->ReadWriteUInt32(&count));
                -
                679 
                -
                680  offsets.resize(count);
                -
                681  for (uint32_t i = 0; i < count; ++i)
                -
                682  RCHECK(buffer->ReadWriteUInt64(&offsets[i]));
                -
                683  return true;
                -
                684 }
                -
                685 
                - -
                687  uint32_t count = offsets.size();
                -
                688  int use_large_offset =
                -
                689  (count > 0 && !IsFitIn32Bits(offsets[count - 1])) ? 1 : 0;
                -
                690  atom_size = kFullBoxSize + sizeof(count) +
                -
                691  sizeof(uint32_t) * (1 + use_large_offset) * offsets.size();
                -
                692  return atom_size;
                -
                693 }
                -
                694 
                -
                695 SyncSample::SyncSample() {}
                -
                696 SyncSample::~SyncSample() {}
                -
                697 FourCC SyncSample::BoxType() const { return FOURCC_STSS; }
                -
                698 
                - -
                700  uint32_t count = sample_number.size();
                -
                701  RCHECK(FullBox::ReadWrite(buffer) &&
                -
                702  buffer->ReadWriteUInt32(&count));
                -
                703 
                -
                704  sample_number.resize(count);
                -
                705  for (uint32_t i = 0; i < count; ++i)
                -
                706  RCHECK(buffer->ReadWriteUInt32(&sample_number[i]));
                -
                707  return true;
                -
                708 }
                -
                709 
                - -
                711  // Sync sample box is optional. Skip it if it is empty.
                -
                712  atom_size = 0;
                -
                713  if (!sample_number.empty()) {
                -
                714  atom_size = kFullBoxSize + sizeof(uint32_t) +
                -
                715  sizeof(uint32_t) * sample_number.size();
                -
                716  }
                -
                717  return atom_size;
                -
                718 }
                -
                719 
                -
                720 SampleTable::SampleTable() {}
                -
                721 SampleTable::~SampleTable() {}
                -
                722 FourCC SampleTable::BoxType() const { return FOURCC_STBL; }
                -
                723 
                - -
                725  RCHECK(Box::ReadWrite(buffer) &&
                -
                726  buffer->PrepareChildren() &&
                -
                727  buffer->ReadWriteChild(&description) &&
                -
                728  buffer->ReadWriteChild(&decoding_time_to_sample) &&
                -
                729  buffer->TryReadWriteChild(&composition_time_to_sample) &&
                -
                730  buffer->ReadWriteChild(&sample_to_chunk));
                -
                731 
                -
                732  if (buffer->Reading()) {
                -
                733  BoxReader* reader = buffer->reader();
                -
                734  DCHECK(reader);
                -
                735 
                -
                736  // Either SampleSize or CompactSampleSize must present.
                -
                737  if (reader->ChildExist(&sample_size)) {
                -
                738  RCHECK(reader->ReadChild(&sample_size));
                -
                739  } else {
                -
                740  CompactSampleSize compact_sample_size;
                -
                741  RCHECK(reader->ReadChild(&compact_sample_size));
                -
                742  sample_size.sample_size = 0;
                -
                743  sample_size.sample_count = compact_sample_size.sizes.size();
                -
                744  sample_size.sizes.swap(compact_sample_size.sizes);
                -
                745  }
                -
                746 
                -
                747  // Either ChunkOffset or ChunkLargeOffset must present.
                -
                748  if (reader->ChildExist(&chunk_large_offset)) {
                -
                749  RCHECK(reader->ReadChild(&chunk_large_offset));
                -
                750  } else {
                -
                751  ChunkOffset chunk_offset;
                -
                752  RCHECK(reader->ReadChild(&chunk_offset));
                -
                753  chunk_large_offset.offsets.swap(chunk_offset.offsets);
                -
                754  }
                -
                755  } else {
                -
                756  RCHECK(sample_size.ReadWrite(buffer) &&
                -
                757  chunk_large_offset.ReadWrite(buffer));
                -
                758  }
                -
                759  RCHECK(buffer->TryReadWriteChild(&sync_sample));
                -
                760  return true;
                -
                761 }
                -
                762 
                - -
                764  atom_size = kBoxSize + description.ComputeSize() +
                -
                765  decoding_time_to_sample.ComputeSize() +
                -
                766  composition_time_to_sample.ComputeSize() +
                -
                767  sample_to_chunk.ComputeSize() + sample_size.ComputeSize() +
                -
                768  chunk_large_offset.ComputeSize() + sync_sample.ComputeSize();
                -
                769  return atom_size;
                -
                770 }
                -
                771 
                -
                772 EditList::EditList() {}
                -
                773 EditList::~EditList() {}
                -
                774 FourCC EditList::BoxType() const { return FOURCC_ELST; }
                -
                775 
                - -
                777  uint32_t count = edits.size();
                -
                778  RCHECK(FullBox::ReadWrite(buffer) && buffer->ReadWriteUInt32(&count));
                -
                779  edits.resize(count);
                -
                780 
                -
                781  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
                -
                782  for (uint32_t i = 0; i < count; ++i) {
                -
                783  RCHECK(
                -
                784  buffer->ReadWriteUInt64NBytes(&edits[i].segment_duration, num_bytes) &&
                -
                785  buffer->ReadWriteInt64NBytes(&edits[i].media_time, num_bytes) &&
                -
                786  buffer->ReadWriteInt16(&edits[i].media_rate_integer) &&
                -
                787  buffer->ReadWriteInt16(&edits[i].media_rate_fraction));
                -
                788  }
                -
                789  return true;
                -
                790 }
                -
                791 
                - -
                793  // EditList box is optional. Skip it if it is empty.
                -
                794  atom_size = 0;
                -
                795  if (edits.empty())
                -
                796  return 0;
                -
                797 
                -
                798  version = 0;
                -
                799  for (uint32_t i = 0; i < edits.size(); ++i) {
                -
                800  if (!IsFitIn32Bits(edits[i].segment_duration, edits[i].media_time)) {
                -
                801  version = 1;
                -
                802  break;
                -
                803  }
                -
                804  }
                -
                805  atom_size = kFullBoxSize + sizeof(uint32_t) +
                -
                806  (sizeof(uint32_t) * (1 + version) * 2 + sizeof(int16_t) * 2) *
                -
                807  edits.size();
                -
                808  return atom_size;
                -
                809 }
                -
                810 
                -
                811 Edit::Edit() {}
                -
                812 Edit::~Edit() {}
                -
                813 FourCC Edit::BoxType() const { return FOURCC_EDTS; }
                -
                814 
                -
                815 bool Edit::ReadWrite(BoxBuffer* buffer) {
                -
                816  return Box::ReadWrite(buffer) &&
                -
                817  buffer->PrepareChildren() &&
                -
                818  buffer->ReadWriteChild(&list);
                -
                819 }
                -
                820 
                -
                821 uint32_t Edit::ComputeSize() {
                -
                822  // Edit box is optional. Skip it if it is empty.
                -
                823  atom_size = 0;
                -
                824  if (!list.edits.empty())
                -
                825  atom_size = kBoxSize + list.ComputeSize();
                -
                826  return atom_size;
                -
                827 }
                -
                828 
                -
                829 HandlerReference::HandlerReference() : type(kInvalid) {}
                -
                830 HandlerReference::~HandlerReference() {}
                -
                831 FourCC HandlerReference::BoxType() const { return FOURCC_HDLR; }
                -
                832 
                - -
                834  FourCC hdlr_type = FOURCC_NULL;
                -
                835  std::vector<uint8_t> handler_name;
                -
                836  if (!buffer->Reading()) {
                -
                837  if (type == kVideo) {
                -
                838  hdlr_type = FOURCC_VIDE;
                -
                839  handler_name.assign(kVideoHandlerName,
                -
                840  kVideoHandlerName + arraysize(kVideoHandlerName));
                -
                841  } else if (type == kAudio) {
                -
                842  hdlr_type = FOURCC_SOUN;
                -
                843  handler_name.assign(kAudioHandlerName,
                -
                844  kAudioHandlerName + arraysize(kAudioHandlerName));
                -
                845  } else {
                -
                846  NOTIMPLEMENTED();
                -
                847  return false;
                -
                848  }
                -
                849  }
                -
                850  RCHECK(FullBox::ReadWrite(buffer) &&
                -
                851  buffer->IgnoreBytes(4) && // predefined.
                -
                852  buffer->ReadWriteFourCC(&hdlr_type));
                -
                853  if (buffer->Reading()) {
                -
                854  // Note: for reading, remaining fields in box ignored.
                -
                855  if (hdlr_type == FOURCC_VIDE) {
                -
                856  type = kVideo;
                -
                857  } else if (hdlr_type == FOURCC_SOUN) {
                -
                858  type = kAudio;
                -
                859  } else {
                -
                860  type = kInvalid;
                -
                861  }
                -
                862  } else {
                -
                863  RCHECK(buffer->IgnoreBytes(12) && // reserved.
                -
                864  buffer->ReadWriteVector(&handler_name, handler_name.size()));
                -
                865  }
                -
                866  return true;
                -
                867 }
                -
                868 
                - -
                870  atom_size =
                -
                871  kFullBoxSize + kFourCCSize + 16 + // 16 bytes Reserved
                -
                872  (type == kVideo ? sizeof(kVideoHandlerName) : sizeof(kAudioHandlerName));
                -
                873  return atom_size;
                -
                874 }
                -
                875 
                -
                876 AVCDecoderConfigurationRecord::AVCDecoderConfigurationRecord()
                -
                877  : version(0),
                -
                878  profile_indication(0),
                -
                879  profile_compatibility(0),
                -
                880  avc_level(0),
                -
                881  length_size(0) {}
                -
                882 
                -
                883 AVCDecoderConfigurationRecord::~AVCDecoderConfigurationRecord() {}
                -
                884 FourCC AVCDecoderConfigurationRecord::BoxType() const { return FOURCC_AVCC; }
                +
                60 } // namespace
                +
                61 
                +
                62 namespace edash_packager {
                +
                63 namespace media {
                +
                64 namespace mp4 {
                +
                65 
                +
                66 FileType::FileType() : major_brand(FOURCC_NULL), minor_version(0) {}
                +
                67 FileType::~FileType() {}
                +
                68 FourCC FileType::BoxType() const { return FOURCC_FTYP; }
                +
                69 
                + +
                71  RCHECK(Box::ReadWrite(buffer) &&
                +
                72  buffer->ReadWriteFourCC(&major_brand) &&
                +
                73  buffer->ReadWriteUInt32(&minor_version));
                +
                74  size_t num_brands;
                +
                75  if (buffer->Reading()) {
                +
                76  num_brands = (buffer->Size() - buffer->Pos()) / sizeof(FourCC);
                +
                77  compatible_brands.resize(num_brands);
                +
                78  } else {
                +
                79  num_brands = compatible_brands.size();
                +
                80  }
                +
                81  for (size_t i = 0; i < num_brands; ++i)
                +
                82  RCHECK(buffer->ReadWriteFourCC(&compatible_brands[i]));
                +
                83  return true;
                +
                84 }
                +
                85 
                + +
                87  atom_size = kBoxSize + kFourCCSize + sizeof(minor_version) +
                +
                88  kFourCCSize * compatible_brands.size();
                +
                89  return atom_size;
                +
                90 }
                +
                91 
                +
                92 SegmentType::SegmentType() {}
                +
                93 SegmentType::~SegmentType() {}
                +
                94 FourCC SegmentType::BoxType() const { return FOURCC_STYP; }
                +
                95 
                + +
                97  return FileType::ReadWrite(buffer);
                +
                98 }
                +
                99 
                + +
                101  return FileType::ComputeSize();
                +
                102 }
                +
                103 
                +
                104 ProtectionSystemSpecificHeader::ProtectionSystemSpecificHeader() {}
                +
                105 ProtectionSystemSpecificHeader::~ProtectionSystemSpecificHeader() {}
                +
                106 FourCC ProtectionSystemSpecificHeader::BoxType() const { return FOURCC_PSSH; }
                +
                107 
                + +
                109  if (!buffer->Reading() && !raw_box.empty()) {
                +
                110  // Write the raw box directly.
                +
                111  buffer->writer()->AppendVector(raw_box);
                +
                112  return true;
                +
                113  }
                +
                114 
                +
                115  uint32_t size = data.size();
                +
                116  RCHECK(FullBox::ReadWrite(buffer) &&
                +
                117  buffer->ReadWriteVector(&system_id, 16) &&
                +
                118  buffer->ReadWriteUInt32(&size) &&
                +
                119  buffer->ReadWriteVector(&data, size));
                +
                120 
                +
                121  if (buffer->Reading()) {
                +
                122  // Copy the entire box, including the header, for passing to EME as
                +
                123  // initData.
                +
                124  DCHECK(raw_box.empty());
                +
                125  BoxReader* reader = buffer->reader();
                +
                126  DCHECK(reader);
                +
                127  raw_box.assign(reader->data(), reader->data() + reader->size());
                +
                128  }
                +
                129  return true;
                +
                130 }
                +
                131 
                + +
                133  if (!raw_box.empty()) {
                +
                134  atom_size = raw_box.size();
                +
                135  } else {
                +
                136  atom_size =
                +
                137  kFullBoxSize + system_id.size() + sizeof(uint32_t) + data.size();
                +
                138  }
                +
                139  return atom_size;
                +
                140 }
                +
                141 
                +
                142 SampleAuxiliaryInformationOffset::SampleAuxiliaryInformationOffset() {}
                +
                143 SampleAuxiliaryInformationOffset::~SampleAuxiliaryInformationOffset() {}
                +
                144 FourCC SampleAuxiliaryInformationOffset::BoxType() const { return FOURCC_SAIO; }
                +
                145 
                + +
                147  RCHECK(FullBox::ReadWrite(buffer));
                +
                148  if (flags & 1)
                +
                149  RCHECK(buffer->IgnoreBytes(8)); // aux_info_type and parameter.
                +
                150 
                +
                151  uint32_t count = offsets.size();
                +
                152  RCHECK(buffer->ReadWriteUInt32(&count));
                +
                153  offsets.resize(count);
                +
                154 
                +
                155  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
                +
                156  for (uint32_t i = 0; i < count; ++i)
                +
                157  RCHECK(buffer->ReadWriteUInt64NBytes(&offsets[i], num_bytes));
                +
                158  return true;
                +
                159 }
                +
                160 
                + +
                162  // This box is optional. Skip it if it is empty.
                +
                163  atom_size = 0;
                +
                164  if (offsets.size() != 0) {
                +
                165  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
                +
                166  atom_size = kFullBoxSize + sizeof(uint32_t) + num_bytes * offsets.size();
                +
                167  }
                +
                168  return atom_size;
                +
                169 }
                +
                170 
                +
                171 SampleAuxiliaryInformationSize::SampleAuxiliaryInformationSize()
                +
                172  : default_sample_info_size(0), sample_count(0) {}
                +
                173 SampleAuxiliaryInformationSize::~SampleAuxiliaryInformationSize() {}
                +
                174 FourCC SampleAuxiliaryInformationSize::BoxType() const { return FOURCC_SAIZ; }
                +
                175 
                + +
                177  RCHECK(FullBox::ReadWrite(buffer));
                +
                178  if (flags & 1)
                +
                179  RCHECK(buffer->IgnoreBytes(8));
                +
                180 
                +
                181  RCHECK(buffer->ReadWriteUInt8(&default_sample_info_size) &&
                +
                182  buffer->ReadWriteUInt32(&sample_count));
                +
                183  if (default_sample_info_size == 0)
                +
                184  RCHECK(buffer->ReadWriteVector(&sample_info_sizes, sample_count));
                +
                185  return true;
                +
                186 }
                +
                187 
                + +
                189  // This box is optional. Skip it if it is empty.
                +
                190  atom_size = 0;
                +
                191  if (sample_count != 0) {
                +
                192  atom_size = kFullBoxSize + sizeof(default_sample_info_size) +
                +
                193  sizeof(sample_count) +
                +
                194  (default_sample_info_size == 0 ? sample_info_sizes.size() : 0);
                +
                195  }
                +
                196  return atom_size;
                +
                197 }
                +
                198 
                +
                199 OriginalFormat::OriginalFormat() : format(FOURCC_NULL) {}
                +
                200 OriginalFormat::~OriginalFormat() {}
                +
                201 FourCC OriginalFormat::BoxType() const { return FOURCC_FRMA; }
                +
                202 
                + +
                204  return Box::ReadWrite(buffer) && buffer->ReadWriteFourCC(&format);
                +
                205 }
                +
                206 
                + +
                208  atom_size = kBoxSize + kFourCCSize;
                +
                209  return atom_size;
                +
                210 }
                +
                211 
                +
                212 SchemeType::SchemeType() : type(FOURCC_NULL), version(0) {}
                +
                213 SchemeType::~SchemeType() {}
                +
                214 FourCC SchemeType::BoxType() const { return FOURCC_SCHM; }
                +
                215 
                + +
                217  RCHECK(FullBox::ReadWrite(buffer) &&
                +
                218  buffer->ReadWriteFourCC(&type) &&
                +
                219  buffer->ReadWriteUInt32(&version));
                +
                220  return true;
                +
                221 }
                +
                222 
                + +
                224  atom_size = kFullBoxSize + kFourCCSize + sizeof(version);
                +
                225  return atom_size;
                +
                226 }
                +
                227 
                +
                228 TrackEncryption::TrackEncryption()
                +
                229  : is_encrypted(false), default_iv_size(0), default_kid(16, 0) {}
                +
                230 TrackEncryption::~TrackEncryption() {}
                +
                231 FourCC TrackEncryption::BoxType() const { return FOURCC_TENC; }
                +
                232 
                + +
                234  if (!buffer->Reading()) {
                +
                235  if (default_kid.size() != kCencKeyIdSize) {
                +
                236  LOG(WARNING) << "CENC defines key id length of " << kCencKeyIdSize
                +
                237  << " bytes; got " << default_kid.size()
                +
                238  << ". Resized accordingly.";
                +
                239  default_kid.resize(kCencKeyIdSize);
                +
                240  }
                +
                241  }
                +
                242 
                +
                243  uint8_t flag = is_encrypted ? 1 : 0;
                +
                244  RCHECK(FullBox::ReadWrite(buffer) &&
                +
                245  buffer->IgnoreBytes(2) && // reserved.
                +
                246  buffer->ReadWriteUInt8(&flag) &&
                +
                247  buffer->ReadWriteUInt8(&default_iv_size) &&
                +
                248  buffer->ReadWriteVector(&default_kid, kCencKeyIdSize));
                +
                249  if (buffer->Reading()) {
                +
                250  is_encrypted = (flag != 0);
                +
                251  if (is_encrypted) {
                +
                252  RCHECK(default_iv_size == 8 || default_iv_size == 16);
                +
                253  } else {
                +
                254  RCHECK(default_iv_size == 0);
                +
                255  }
                +
                256  }
                +
                257  return true;
                +
                258 }
                +
                259 
                + +
                261  atom_size = kFullBoxSize + sizeof(uint32_t) + kCencKeyIdSize;
                +
                262  return atom_size;
                +
                263 }
                +
                264 
                +
                265 SchemeInfo::SchemeInfo() {}
                +
                266 SchemeInfo::~SchemeInfo() {}
                +
                267 FourCC SchemeInfo::BoxType() const { return FOURCC_SCHI; }
                +
                268 
                + +
                270  RCHECK(Box::ReadWrite(buffer) && buffer->PrepareChildren() &&
                +
                271  buffer->ReadWriteChild(&track_encryption));
                +
                272  return true;
                +
                273 }
                +
                274 
                + +
                276  atom_size = kBoxSize + track_encryption.ComputeSize();
                +
                277  return atom_size;
                +
                278 }
                +
                279 
                +
                280 ProtectionSchemeInfo::ProtectionSchemeInfo() {}
                +
                281 ProtectionSchemeInfo::~ProtectionSchemeInfo() {}
                +
                282 FourCC ProtectionSchemeInfo::BoxType() const { return FOURCC_SINF; }
                +
                283 
                + +
                285  RCHECK(Box::ReadWrite(buffer) &&
                +
                286  buffer->PrepareChildren() &&
                +
                287  buffer->ReadWriteChild(&format) &&
                +
                288  buffer->ReadWriteChild(&type));
                +
                289  if (type.type == FOURCC_CENC)
                +
                290  RCHECK(buffer->ReadWriteChild(&info));
                +
                291  // Other protection schemes are silently ignored. Since the protection scheme
                +
                292  // type can't be determined until this box is opened, we return 'true' for
                +
                293  // non-CENC protection scheme types. It is the parent box's responsibility to
                +
                294  // ensure that this scheme type is a supported one.
                +
                295  return true;
                +
                296 }
                +
                297 
                + +
                299  // Skip sinf box if it is not initialized.
                +
                300  atom_size = 0;
                +
                301  if (format.format != FOURCC_NULL) {
                +
                302  atom_size = kBoxSize + format.ComputeSize() + type.ComputeSize() +
                +
                303  info.ComputeSize();
                +
                304  }
                +
                305  return atom_size;
                +
                306 }
                +
                307 
                +
                308 MovieHeader::MovieHeader()
                +
                309  : creation_time(0),
                +
                310  modification_time(0),
                +
                311  timescale(0),
                +
                312  duration(0),
                +
                313  rate(1 << 16),
                +
                314  volume(1 << 8),
                +
                315  next_track_id(0) {}
                +
                316 MovieHeader::~MovieHeader() {}
                +
                317 FourCC MovieHeader::BoxType() const { return FOURCC_MVHD; }
                +
                318 
                + +
                320  RCHECK(FullBox::ReadWrite(buffer));
                +
                321 
                +
                322  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
                +
                323  RCHECK(buffer->ReadWriteUInt64NBytes(&creation_time, num_bytes) &&
                +
                324  buffer->ReadWriteUInt64NBytes(&modification_time, num_bytes) &&
                +
                325  buffer->ReadWriteUInt32(&timescale) &&
                +
                326  buffer->ReadWriteUInt64NBytes(&duration, num_bytes));
                +
                327 
                +
                328  std::vector<uint8_t> matrix(kUnityMatrix,
                +
                329  kUnityMatrix + arraysize(kUnityMatrix));
                +
                330  RCHECK(buffer->ReadWriteInt32(&rate) &&
                +
                331  buffer->ReadWriteInt16(&volume) &&
                +
                332  buffer->IgnoreBytes(10) && // reserved
                +
                333  buffer->ReadWriteVector(&matrix, matrix.size()) &&
                +
                334  buffer->IgnoreBytes(24) && // predefined zero
                +
                335  buffer->ReadWriteUInt32(&next_track_id));
                +
                336  return true;
                +
                337 }
                +
                338 
                + +
                340  version = IsFitIn32Bits(creation_time, modification_time, duration) ? 0 : 1;
                +
                341  atom_size = kFullBoxSize + sizeof(uint32_t) * (1 + version) * 3 +
                +
                342  sizeof(timescale) + sizeof(rate) + sizeof(volume) +
                +
                343  sizeof(next_track_id) + sizeof(kUnityMatrix) + 10 +
                +
                344  24; // 10 bytes reserved, 24 bytes predefined.
                +
                345  return atom_size;
                +
                346 }
                +
                347 
                +
                348 TrackHeader::TrackHeader()
                +
                349  : creation_time(0),
                +
                350  modification_time(0),
                +
                351  track_id(0),
                +
                352  duration(0),
                +
                353  layer(0),
                +
                354  alternate_group(0),
                +
                355  volume(-1),
                +
                356  width(0),
                +
                357  height(0) {
                +
                358  flags = kTrackEnabled | kTrackInMovie;
                +
                359 }
                +
                360 TrackHeader::~TrackHeader() {}
                +
                361 FourCC TrackHeader::BoxType() const { return FOURCC_TKHD; }
                +
                362 
                + +
                364  RCHECK(FullBox::ReadWrite(buffer));
                +
                365 
                +
                366  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
                +
                367  RCHECK(buffer->ReadWriteUInt64NBytes(&creation_time, num_bytes) &&
                +
                368  buffer->ReadWriteUInt64NBytes(&modification_time, num_bytes) &&
                +
                369  buffer->ReadWriteUInt32(&track_id) &&
                +
                370  buffer->IgnoreBytes(4) && // reserved
                +
                371  buffer->ReadWriteUInt64NBytes(&duration, num_bytes));
                +
                372 
                +
                373  if (!buffer->Reading()) {
                +
                374  // Set default value for volume, if track is audio, 0x100 else 0.
                +
                375  if (volume == -1)
                +
                376  volume = (width != 0 && height != 0) ? 0 : 0x100;
                +
                377  }
                +
                378  std::vector<uint8_t> matrix(kUnityMatrix,
                +
                379  kUnityMatrix + arraysize(kUnityMatrix));
                +
                380  RCHECK(buffer->IgnoreBytes(8) && // reserved
                +
                381  buffer->ReadWriteInt16(&layer) &&
                +
                382  buffer->ReadWriteInt16(&alternate_group) &&
                +
                383  buffer->ReadWriteInt16(&volume) &&
                +
                384  buffer->IgnoreBytes(2) && // reserved
                +
                385  buffer->ReadWriteVector(&matrix, matrix.size()) &&
                +
                386  buffer->ReadWriteUInt32(&width) &&
                +
                387  buffer->ReadWriteUInt32(&height));
                +
                388  return true;
                +
                389 }
                +
                390 
                + +
                392  version = IsFitIn32Bits(creation_time, modification_time, duration) ? 0 : 1;
                +
                393  atom_size = kFullBoxSize + sizeof(track_id) +
                +
                394  sizeof(uint32_t) * (1 + version) * 3 + sizeof(layer) +
                +
                395  sizeof(alternate_group) + sizeof(volume) + sizeof(width) +
                +
                396  sizeof(height) + sizeof(kUnityMatrix) + 14; // 14 bytes reserved.
                +
                397  return atom_size;
                +
                398 }
                +
                399 
                +
                400 SampleDescription::SampleDescription() : type(kInvalid) {}
                +
                401 SampleDescription::~SampleDescription() {}
                +
                402 FourCC SampleDescription::BoxType() const { return FOURCC_STSD; }
                +
                403 
                + +
                405  uint32_t count = 0;
                +
                406  if (type == kVideo)
                +
                407  count = video_entries.size();
                +
                408  else
                +
                409  count = audio_entries.size();
                +
                410  RCHECK(FullBox::ReadWrite(buffer) &&
                +
                411  buffer->ReadWriteUInt32(&count));
                +
                412 
                +
                413  if (buffer->Reading()) {
                +
                414  BoxReader* reader = buffer->reader();
                +
                415  DCHECK(reader);
                +
                416  video_entries.clear();
                +
                417  audio_entries.clear();
                +
                418  // Note: this value is preset before scanning begins. See comments in the
                +
                419  // Parse(Media*) function.
                +
                420  if (type == kVideo) {
                +
                421  RCHECK(reader->ReadAllChildren(&video_entries));
                +
                422  RCHECK(video_entries.size() == count);
                +
                423  } else if (type == kAudio) {
                +
                424  RCHECK(reader->ReadAllChildren(&audio_entries));
                +
                425  RCHECK(audio_entries.size() == count);
                +
                426  }
                +
                427  } else {
                +
                428  DCHECK_LT(0u, count);
                +
                429  if (type == kVideo) {
                +
                430  for (uint32_t i = 0; i < count; ++i)
                +
                431  RCHECK(video_entries[i].ReadWrite(buffer));
                +
                432  } else if (type == kAudio) {
                +
                433  for (uint32_t i = 0; i < count; ++i)
                +
                434  RCHECK(audio_entries[i].ReadWrite(buffer));
                +
                435  } else {
                +
                436  NOTIMPLEMENTED();
                +
                437  }
                +
                438  }
                +
                439  return true;
                +
                440 }
                +
                441 
                + +
                443  atom_size = kFullBoxSize + sizeof(uint32_t);
                +
                444  if (type == kVideo) {
                +
                445  for (uint32_t i = 0; i < video_entries.size(); ++i)
                +
                446  atom_size += video_entries[i].ComputeSize();
                +
                447  } else if (type == kAudio) {
                +
                448  for (uint32_t i = 0; i < audio_entries.size(); ++i)
                +
                449  atom_size += audio_entries[i].ComputeSize();
                +
                450  }
                +
                451  return atom_size;
                +
                452 }
                +
                453 
                +
                454 DecodingTimeToSample::DecodingTimeToSample() {}
                +
                455 DecodingTimeToSample::~DecodingTimeToSample() {}
                +
                456 FourCC DecodingTimeToSample::BoxType() const { return FOURCC_STTS; }
                +
                457 
                + +
                459  uint32_t count = decoding_time.size();
                +
                460  RCHECK(FullBox::ReadWrite(buffer) &&
                +
                461  buffer->ReadWriteUInt32(&count));
                +
                462 
                +
                463  decoding_time.resize(count);
                +
                464  for (uint32_t i = 0; i < count; ++i) {
                +
                465  RCHECK(buffer->ReadWriteUInt32(&decoding_time[i].sample_count) &&
                +
                466  buffer->ReadWriteUInt32(&decoding_time[i].sample_delta));
                +
                467  }
                +
                468  return true;
                +
                469 }
                +
                470 
                + +
                472  atom_size = kFullBoxSize + sizeof(uint32_t) +
                +
                473  sizeof(DecodingTime) * decoding_time.size();
                +
                474  return atom_size;
                +
                475 }
                +
                476 
                +
                477 CompositionTimeToSample::CompositionTimeToSample() {}
                +
                478 CompositionTimeToSample::~CompositionTimeToSample() {}
                +
                479 FourCC CompositionTimeToSample::BoxType() const { return FOURCC_CTTS; }
                +
                480 
                + +
                482  uint32_t count = composition_offset.size();
                +
                483  if (!buffer->Reading()) {
                +
                484  // Determine whether version 0 or version 1 should be used.
                +
                485  // Use version 0 if possible, use version 1 if there is a negative
                +
                486  // sample_offset value.
                +
                487  version = 0;
                +
                488  for (uint32_t i = 0; i < count; ++i) {
                +
                489  if (composition_offset[i].sample_offset < 0) {
                +
                490  version = 1;
                +
                491  break;
                +
                492  }
                +
                493  }
                +
                494  }
                +
                495 
                +
                496  RCHECK(FullBox::ReadWrite(buffer) &&
                +
                497  buffer->ReadWriteUInt32(&count));
                +
                498 
                +
                499  composition_offset.resize(count);
                +
                500  for (uint32_t i = 0; i < count; ++i) {
                +
                501  RCHECK(buffer->ReadWriteUInt32(&composition_offset[i].sample_count));
                +
                502 
                +
                503  if (version == 0) {
                +
                504  uint32_t sample_offset = composition_offset[i].sample_offset;
                +
                505  RCHECK(buffer->ReadWriteUInt32(&sample_offset));
                +
                506  composition_offset[i].sample_offset = sample_offset;
                +
                507  } else {
                +
                508  int32_t sample_offset = composition_offset[i].sample_offset;
                +
                509  RCHECK(buffer->ReadWriteInt32(&sample_offset));
                +
                510  composition_offset[i].sample_offset = sample_offset;
                +
                511  }
                +
                512  }
                +
                513  return true;
                +
                514 }
                +
                515 
                + +
                517  // This box is optional. Skip it if it is empty.
                +
                518  atom_size = 0;
                +
                519  if (!composition_offset.empty()) {
                +
                520  // Structure CompositionOffset contains |sample_offset| (uint32_t) and
                +
                521  // |sample_offset| (int64_t). The actual size of |sample_offset| is
                +
                522  // 4 bytes (uint32_t for version 0 and int32_t for version 1).
                +
                523  const uint32_t kCompositionOffsetSize = sizeof(uint32_t) * 2;
                +
                524  atom_size = kFullBoxSize + sizeof(uint32_t) +
                +
                525  kCompositionOffsetSize * composition_offset.size();
                +
                526  }
                +
                527  return atom_size;
                +
                528 }
                +
                529 
                +
                530 SampleToChunk::SampleToChunk() {}
                +
                531 SampleToChunk::~SampleToChunk() {}
                +
                532 FourCC SampleToChunk::BoxType() const { return FOURCC_STSC; }
                +
                533 
                + +
                535  uint32_t count = chunk_info.size();
                +
                536  RCHECK(FullBox::ReadWrite(buffer) &&
                +
                537  buffer->ReadWriteUInt32(&count));
                +
                538 
                +
                539  chunk_info.resize(count);
                +
                540  for (uint32_t i = 0; i < count; ++i) {
                +
                541  RCHECK(buffer->ReadWriteUInt32(&chunk_info[i].first_chunk) &&
                +
                542  buffer->ReadWriteUInt32(&chunk_info[i].samples_per_chunk) &&
                +
                543  buffer->ReadWriteUInt32(&chunk_info[i].sample_description_index));
                +
                544  // first_chunk values are always increasing.
                +
                545  RCHECK(i == 0 ? chunk_info[i].first_chunk == 1
                +
                546  : chunk_info[i].first_chunk > chunk_info[i - 1].first_chunk);
                +
                547  }
                +
                548  return true;
                +
                549 }
                +
                550 
                + +
                552  atom_size =
                +
                553  kFullBoxSize + sizeof(uint32_t) + sizeof(ChunkInfo) * chunk_info.size();
                +
                554  return atom_size;
                +
                555 }
                +
                556 
                +
                557 SampleSize::SampleSize() : sample_size(0), sample_count(0) {}
                +
                558 SampleSize::~SampleSize() {}
                +
                559 FourCC SampleSize::BoxType() const { return FOURCC_STSZ; }
                +
                560 
                + +
                562  RCHECK(FullBox::ReadWrite(buffer) &&
                +
                563  buffer->ReadWriteUInt32(&sample_size) &&
                +
                564  buffer->ReadWriteUInt32(&sample_count));
                +
                565 
                +
                566  if (sample_size == 0) {
                +
                567  if (buffer->Reading())
                +
                568  sizes.resize(sample_count);
                +
                569  else
                +
                570  DCHECK(sample_count == sizes.size());
                +
                571  for (uint32_t i = 0; i < sample_count; ++i)
                +
                572  RCHECK(buffer->ReadWriteUInt32(&sizes[i]));
                +
                573  }
                +
                574  return true;
                +
                575 }
                +
                576 
                + +
                578  atom_size = kFullBoxSize + sizeof(sample_size) + sizeof(sample_count) +
                +
                579  (sample_size == 0 ? sizeof(uint32_t) * sizes.size() : 0);
                +
                580  return atom_size;
                +
                581 }
                +
                582 
                +
                583 CompactSampleSize::CompactSampleSize() : field_size(0) {}
                +
                584 CompactSampleSize::~CompactSampleSize() {}
                +
                585 FourCC CompactSampleSize::BoxType() const { return FOURCC_STZ2; }
                +
                586 
                + +
                588  uint32_t sample_count = sizes.size();
                +
                589  RCHECK(FullBox::ReadWrite(buffer) &&
                +
                590  buffer->IgnoreBytes(3) &&
                +
                591  buffer->ReadWriteUInt8(&field_size) &&
                +
                592  buffer->ReadWriteUInt32(&sample_count));
                +
                593 
                +
                594  // Reserve one more entry if field size is 4 bits.
                +
                595  sizes.resize(sample_count + (field_size == 4 ? 1 : 0), 0);
                +
                596  switch (field_size) {
                +
                597  case 4:
                +
                598  for (uint32_t i = 0; i < sample_count; i += 2) {
                +
                599  if (buffer->Reading()) {
                +
                600  uint8_t size = 0;
                +
                601  RCHECK(buffer->ReadWriteUInt8(&size));
                +
                602  sizes[i] = size >> 4;
                +
                603  sizes[i + 1] = size & 0x0F;
                +
                604  } else {
                +
                605  DCHECK_LT(sizes[i], 16u);
                +
                606  DCHECK_LT(sizes[i + 1], 16u);
                +
                607  uint8_t size = (sizes[i] << 4) | sizes[i + 1];
                +
                608  RCHECK(buffer->ReadWriteUInt8(&size));
                +
                609  }
                +
                610  }
                +
                611  break;
                +
                612  case 8:
                +
                613  for (uint32_t i = 0; i < sample_count; ++i) {
                +
                614  uint8_t size = sizes[i];
                +
                615  RCHECK(buffer->ReadWriteUInt8(&size));
                +
                616  sizes[i] = size;
                +
                617  }
                +
                618  break;
                +
                619  case 16:
                +
                620  for (uint32_t i = 0; i < sample_count; ++i) {
                +
                621  uint16_t size = sizes[i];
                +
                622  RCHECK(buffer->ReadWriteUInt16(&size));
                +
                623  sizes[i] = size;
                +
                624  }
                +
                625  break;
                +
                626  default:
                +
                627  RCHECK(false);
                +
                628  }
                +
                629  sizes.resize(sample_count);
                +
                630  return true;
                +
                631 }
                +
                632 
                + +
                634  atom_size = kFullBoxSize + sizeof(uint32_t) + sizeof(uint32_t) +
                +
                635  (field_size * sizes.size() + 7) / 8;
                +
                636  return atom_size;
                +
                637 }
                +
                638 
                +
                639 ChunkOffset::ChunkOffset() {}
                +
                640 ChunkOffset::~ChunkOffset() {}
                +
                641 FourCC ChunkOffset::BoxType() const { return FOURCC_STCO; }
                +
                642 
                + +
                644  uint32_t count = offsets.size();
                +
                645  RCHECK(FullBox::ReadWrite(buffer) &&
                +
                646  buffer->ReadWriteUInt32(&count));
                +
                647 
                +
                648  offsets.resize(count);
                +
                649  for (uint32_t i = 0; i < count; ++i)
                +
                650  RCHECK(buffer->ReadWriteUInt64NBytes(&offsets[i], sizeof(uint32_t)));
                +
                651  return true;
                +
                652 }
                +
                653 
                + +
                655  atom_size =
                +
                656  kFullBoxSize + sizeof(uint32_t) + sizeof(uint32_t) * offsets.size();
                +
                657  return atom_size;
                +
                658 }
                +
                659 
                +
                660 ChunkLargeOffset::ChunkLargeOffset() {}
                +
                661 ChunkLargeOffset::~ChunkLargeOffset() {}
                +
                662 FourCC ChunkLargeOffset::BoxType() const { return FOURCC_CO64; }
                +
                663 
                + +
                665  uint32_t count = offsets.size();
                +
                666 
                +
                667  if (!buffer->Reading()) {
                +
                668  // Switch to ChunkOffset box if it is able to fit in 32 bits offset.
                +
                669  if (count == 0 || IsFitIn32Bits(offsets[count - 1])) {
                +
                670  ChunkOffset stco;
                +
                671  stco.offsets.swap(offsets);
                +
                672  DCHECK(buffer->writer());
                +
                673  stco.Write(buffer->writer());
                +
                674  stco.offsets.swap(offsets);
                +
                675  return true;
                +
                676  }
                +
                677  }
                +
                678 
                +
                679  RCHECK(FullBox::ReadWrite(buffer) &&
                +
                680  buffer->ReadWriteUInt32(&count));
                +
                681 
                +
                682  offsets.resize(count);
                +
                683  for (uint32_t i = 0; i < count; ++i)
                +
                684  RCHECK(buffer->ReadWriteUInt64(&offsets[i]));
                +
                685  return true;
                +
                686 }
                +
                687 
                + +
                689  uint32_t count = offsets.size();
                +
                690  int use_large_offset =
                +
                691  (count > 0 && !IsFitIn32Bits(offsets[count - 1])) ? 1 : 0;
                +
                692  atom_size = kFullBoxSize + sizeof(count) +
                +
                693  sizeof(uint32_t) * (1 + use_large_offset) * offsets.size();
                +
                694  return atom_size;
                +
                695 }
                +
                696 
                +
                697 SyncSample::SyncSample() {}
                +
                698 SyncSample::~SyncSample() {}
                +
                699 FourCC SyncSample::BoxType() const { return FOURCC_STSS; }
                +
                700 
                + +
                702  uint32_t count = sample_number.size();
                +
                703  RCHECK(FullBox::ReadWrite(buffer) &&
                +
                704  buffer->ReadWriteUInt32(&count));
                +
                705 
                +
                706  sample_number.resize(count);
                +
                707  for (uint32_t i = 0; i < count; ++i)
                +
                708  RCHECK(buffer->ReadWriteUInt32(&sample_number[i]));
                +
                709  return true;
                +
                710 }
                +
                711 
                + +
                713  // Sync sample box is optional. Skip it if it is empty.
                +
                714  atom_size = 0;
                +
                715  if (!sample_number.empty()) {
                +
                716  atom_size = kFullBoxSize + sizeof(uint32_t) +
                +
                717  sizeof(uint32_t) * sample_number.size();
                +
                718  }
                +
                719  return atom_size;
                +
                720 }
                +
                721 
                +
                722 SampleTable::SampleTable() {}
                +
                723 SampleTable::~SampleTable() {}
                +
                724 FourCC SampleTable::BoxType() const { return FOURCC_STBL; }
                +
                725 
                + +
                727  RCHECK(Box::ReadWrite(buffer) &&
                +
                728  buffer->PrepareChildren() &&
                +
                729  buffer->ReadWriteChild(&description) &&
                +
                730  buffer->ReadWriteChild(&decoding_time_to_sample) &&
                +
                731  buffer->TryReadWriteChild(&composition_time_to_sample) &&
                +
                732  buffer->ReadWriteChild(&sample_to_chunk));
                +
                733 
                +
                734  if (buffer->Reading()) {
                +
                735  BoxReader* reader = buffer->reader();
                +
                736  DCHECK(reader);
                +
                737 
                +
                738  // Either SampleSize or CompactSampleSize must present.
                +
                739  if (reader->ChildExist(&sample_size)) {
                +
                740  RCHECK(reader->ReadChild(&sample_size));
                +
                741  } else {
                +
                742  CompactSampleSize compact_sample_size;
                +
                743  RCHECK(reader->ReadChild(&compact_sample_size));
                +
                744  sample_size.sample_size = 0;
                +
                745  sample_size.sample_count = compact_sample_size.sizes.size();
                +
                746  sample_size.sizes.swap(compact_sample_size.sizes);
                +
                747  }
                +
                748 
                +
                749  // Either ChunkOffset or ChunkLargeOffset must present.
                +
                750  if (reader->ChildExist(&chunk_large_offset)) {
                +
                751  RCHECK(reader->ReadChild(&chunk_large_offset));
                +
                752  } else {
                +
                753  ChunkOffset chunk_offset;
                +
                754  RCHECK(reader->ReadChild(&chunk_offset));
                +
                755  chunk_large_offset.offsets.swap(chunk_offset.offsets);
                +
                756  }
                +
                757  } else {
                +
                758  RCHECK(sample_size.ReadWrite(buffer) &&
                +
                759  chunk_large_offset.ReadWrite(buffer));
                +
                760  }
                +
                761  RCHECK(buffer->TryReadWriteChild(&sync_sample));
                +
                762  return true;
                +
                763 }
                +
                764 
                + +
                766  atom_size = kBoxSize + description.ComputeSize() +
                +
                767  decoding_time_to_sample.ComputeSize() +
                +
                768  composition_time_to_sample.ComputeSize() +
                +
                769  sample_to_chunk.ComputeSize() + sample_size.ComputeSize() +
                +
                770  chunk_large_offset.ComputeSize() + sync_sample.ComputeSize();
                +
                771  return atom_size;
                +
                772 }
                +
                773 
                +
                774 EditList::EditList() {}
                +
                775 EditList::~EditList() {}
                +
                776 FourCC EditList::BoxType() const { return FOURCC_ELST; }
                +
                777 
                + +
                779  uint32_t count = edits.size();
                +
                780  RCHECK(FullBox::ReadWrite(buffer) && buffer->ReadWriteUInt32(&count));
                +
                781  edits.resize(count);
                +
                782 
                +
                783  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
                +
                784  for (uint32_t i = 0; i < count; ++i) {
                +
                785  RCHECK(
                +
                786  buffer->ReadWriteUInt64NBytes(&edits[i].segment_duration, num_bytes) &&
                +
                787  buffer->ReadWriteInt64NBytes(&edits[i].media_time, num_bytes) &&
                +
                788  buffer->ReadWriteInt16(&edits[i].media_rate_integer) &&
                +
                789  buffer->ReadWriteInt16(&edits[i].media_rate_fraction));
                +
                790  }
                +
                791  return true;
                +
                792 }
                +
                793 
                + +
                795  // EditList box is optional. Skip it if it is empty.
                +
                796  atom_size = 0;
                +
                797  if (edits.empty())
                +
                798  return 0;
                +
                799 
                +
                800  version = 0;
                +
                801  for (uint32_t i = 0; i < edits.size(); ++i) {
                +
                802  if (!IsFitIn32Bits(edits[i].segment_duration, edits[i].media_time)) {
                +
                803  version = 1;
                +
                804  break;
                +
                805  }
                +
                806  }
                +
                807  atom_size = kFullBoxSize + sizeof(uint32_t) +
                +
                808  (sizeof(uint32_t) * (1 + version) * 2 + sizeof(int16_t) * 2) *
                +
                809  edits.size();
                +
                810  return atom_size;
                +
                811 }
                +
                812 
                +
                813 Edit::Edit() {}
                +
                814 Edit::~Edit() {}
                +
                815 FourCC Edit::BoxType() const { return FOURCC_EDTS; }
                +
                816 
                +
                817 bool Edit::ReadWrite(BoxBuffer* buffer) {
                +
                818  return Box::ReadWrite(buffer) &&
                +
                819  buffer->PrepareChildren() &&
                +
                820  buffer->ReadWriteChild(&list);
                +
                821 }
                +
                822 
                +
                823 uint32_t Edit::ComputeSize() {
                +
                824  // Edit box is optional. Skip it if it is empty.
                +
                825  atom_size = 0;
                +
                826  if (!list.edits.empty())
                +
                827  atom_size = kBoxSize + list.ComputeSize();
                +
                828  return atom_size;
                +
                829 }
                +
                830 
                +
                831 HandlerReference::HandlerReference() : type(kInvalid) {}
                +
                832 HandlerReference::~HandlerReference() {}
                +
                833 FourCC HandlerReference::BoxType() const { return FOURCC_HDLR; }
                +
                834 
                + +
                836  FourCC hdlr_type = FOURCC_NULL;
                +
                837  std::vector<uint8_t> handler_name;
                +
                838  if (!buffer->Reading()) {
                +
                839  if (type == kVideo) {
                +
                840  hdlr_type = FOURCC_VIDE;
                +
                841  handler_name.assign(kVideoHandlerName,
                +
                842  kVideoHandlerName + arraysize(kVideoHandlerName));
                +
                843  } else if (type == kAudio) {
                +
                844  hdlr_type = FOURCC_SOUN;
                +
                845  handler_name.assign(kAudioHandlerName,
                +
                846  kAudioHandlerName + arraysize(kAudioHandlerName));
                +
                847  } else {
                +
                848  NOTIMPLEMENTED();
                +
                849  return false;
                +
                850  }
                +
                851  }
                +
                852  RCHECK(FullBox::ReadWrite(buffer) &&
                +
                853  buffer->IgnoreBytes(4) && // predefined.
                +
                854  buffer->ReadWriteFourCC(&hdlr_type));
                +
                855  if (buffer->Reading()) {
                +
                856  // Note: for reading, remaining fields in box ignored.
                +
                857  if (hdlr_type == FOURCC_VIDE) {
                +
                858  type = kVideo;
                +
                859  } else if (hdlr_type == FOURCC_SOUN) {
                +
                860  type = kAudio;
                +
                861  } else {
                +
                862  type = kInvalid;
                +
                863  }
                +
                864  } else {
                +
                865  RCHECK(buffer->IgnoreBytes(12) && // reserved.
                +
                866  buffer->ReadWriteVector(&handler_name, handler_name.size()));
                +
                867  }
                +
                868  return true;
                +
                869 }
                +
                870 
                + +
                872  atom_size =
                +
                873  kFullBoxSize + kFourCCSize + 16 + // 16 bytes Reserved
                +
                874  (type == kVideo ? sizeof(kVideoHandlerName) : sizeof(kAudioHandlerName));
                +
                875  return atom_size;
                +
                876 }
                +
                877 
                +
                878 CodecConfigurationRecord::CodecConfigurationRecord() : box_type(FOURCC_NULL) {}
                +
                879 CodecConfigurationRecord::~CodecConfigurationRecord() {}
                +
                880 FourCC CodecConfigurationRecord::BoxType() const {
                +
                881  // CodecConfigurationRecord should be parsed according to format recovered in
                +
                882  // VideoSampleEntry. |box_type| is determined dynamically there.
                +
                883  return box_type;
                +
                884 }
                885 
                - +
                887  RCHECK(Box::ReadWrite(buffer));
                888  if (buffer->Reading()) {
                889  RCHECK(buffer->ReadWriteVector(&data, buffer->Size() - buffer->Pos()));
                -
                890  BufferReader buffer_reader(&data[0], data.size());
                -
                891  return ParseData(&buffer_reader);
                -
                892  } else {
                -
                893  RCHECK(buffer->ReadWriteVector(&data, data.size()));
                -
                894  }
                -
                895  return true;
                -
                896 }
                -
                897 
                -
                898 bool AVCDecoderConfigurationRecord::ParseData(BufferReader* reader) {
                -
                899  RCHECK(reader->Read1(&version) && version == 1 &&
                -
                900  reader->Read1(&profile_indication) &&
                -
                901  reader->Read1(&profile_compatibility) &&
                -
                902  reader->Read1(&avc_level));
                -
                903 
                -
                904  uint8_t length_size_minus_one;
                -
                905  RCHECK(reader->Read1(&length_size_minus_one));
                -
                906  length_size = (length_size_minus_one & 0x3) + 1;
                -
                907 
                -
                908  uint8_t num_sps;
                -
                909  RCHECK(reader->Read1(&num_sps));
                -
                910  num_sps &= 0x1f;
                -
                911 
                -
                912  sps_list.resize(num_sps);
                -
                913  for (int i = 0; i < num_sps; i++) {
                -
                914  uint16_t sps_length;
                -
                915  RCHECK(reader->Read2(&sps_length) &&
                -
                916  reader->ReadToVector(&sps_list[i], sps_length));
                -
                917  }
                -
                918 
                -
                919  uint8_t num_pps;
                -
                920  RCHECK(reader->Read1(&num_pps));
                -
                921 
                -
                922  pps_list.resize(num_pps);
                -
                923  for (int i = 0; i < num_pps; i++) {
                -
                924  uint16_t pps_length;
                -
                925  RCHECK(reader->Read2(&pps_length) &&
                -
                926  reader->ReadToVector(&pps_list[i], pps_length));
                -
                927  }
                -
                928 
                -
                929  return true;
                -
                930 }
                -
                931 
                - -
                933  atom_size = 0;
                -
                934  if (!data.empty())
                -
                935  atom_size = kBoxSize + data.size();
                -
                936  return atom_size;
                -
                937 }
                -
                938 
                -
                939 PixelAspectRatioBox::PixelAspectRatioBox() : h_spacing(0), v_spacing(0) {}
                -
                940 PixelAspectRatioBox::~PixelAspectRatioBox() {}
                -
                941 FourCC PixelAspectRatioBox::BoxType() const { return FOURCC_PASP; }
                -
                942 
                - -
                944  RCHECK(Box::ReadWrite(buffer) &&
                -
                945  buffer->ReadWriteUInt32(&h_spacing) &&
                -
                946  buffer->ReadWriteUInt32(&v_spacing));
                -
                947  return true;
                -
                948 }
                -
                949 
                - -
                951  // This box is optional. Skip it if it is not initialized.
                -
                952  atom_size = 0;
                -
                953  if (h_spacing != 0 || v_spacing != 0) {
                -
                954  // Both values must be positive.
                -
                955  DCHECK(h_spacing != 0 && v_spacing != 0);
                -
                956  atom_size = kBoxSize + sizeof(h_spacing) + sizeof(v_spacing);
                -
                957  }
                -
                958  return atom_size;
                -
                959 }
                +
                890  } else {
                +
                891  RCHECK(buffer->ReadWriteVector(&data, data.size()));
                +
                892  }
                +
                893  return true;
                +
                894 }
                +
                895 
                + +
                897  atom_size = 0;
                +
                898  if (!data.empty())
                +
                899  atom_size = kBoxSize + data.size();
                +
                900  return atom_size;
                +
                901 }
                +
                902 
                +
                903 PixelAspectRatioBox::PixelAspectRatioBox() : h_spacing(0), v_spacing(0) {}
                +
                904 PixelAspectRatioBox::~PixelAspectRatioBox() {}
                +
                905 FourCC PixelAspectRatioBox::BoxType() const { return FOURCC_PASP; }
                +
                906 
                + +
                908  RCHECK(Box::ReadWrite(buffer) &&
                +
                909  buffer->ReadWriteUInt32(&h_spacing) &&
                +
                910  buffer->ReadWriteUInt32(&v_spacing));
                +
                911  return true;
                +
                912 }
                +
                913 
                + +
                915  // This box is optional. Skip it if it is not initialized.
                +
                916  atom_size = 0;
                +
                917  if (h_spacing != 0 || v_spacing != 0) {
                +
                918  // Both values must be positive.
                +
                919  DCHECK(h_spacing != 0 && v_spacing != 0);
                +
                920  atom_size = kBoxSize + sizeof(h_spacing) + sizeof(v_spacing);
                +
                921  }
                +
                922  return atom_size;
                +
                923 }
                +
                924 
                +
                925 VideoSampleEntry::VideoSampleEntry()
                +
                926  : format(FOURCC_NULL), data_reference_index(1), width(0), height(0) {}
                +
                927 
                +
                928 VideoSampleEntry::~VideoSampleEntry() {}
                +
                929 FourCC VideoSampleEntry::BoxType() const {
                +
                930  LOG(ERROR) << "VideoSampleEntry should be parsed according to the "
                +
                931  << "handler type recovered in its Media ancestor.";
                +
                932  return FOURCC_NULL;
                +
                933 }
                +
                934 
                + +
                936  if (buffer->Reading()) {
                +
                937  DCHECK(buffer->reader());
                +
                938  format = buffer->reader()->type();
                +
                939  } else {
                +
                940  RCHECK(buffer->ReadWriteUInt32(&atom_size) &&
                +
                941  buffer->ReadWriteFourCC(&format));
                +
                942  }
                +
                943 
                +
                944  uint32_t video_resolution = kVideoResolution;
                +
                945  uint16_t video_frame_count = kVideoFrameCount;
                +
                946  uint16_t video_depth = kVideoDepth;
                +
                947  int16_t predefined = -1;
                +
                948  RCHECK(buffer->IgnoreBytes(6) && // reserved.
                +
                949  buffer->ReadWriteUInt16(&data_reference_index) &&
                +
                950  buffer->IgnoreBytes(16) && // predefined 0.
                +
                951  buffer->ReadWriteUInt16(&width) &&
                +
                952  buffer->ReadWriteUInt16(&height) &&
                +
                953  buffer->ReadWriteUInt32(&video_resolution) &&
                +
                954  buffer->ReadWriteUInt32(&video_resolution) &&
                +
                955  buffer->IgnoreBytes(4) && // reserved.
                +
                956  buffer->ReadWriteUInt16(&video_frame_count) &&
                +
                957  buffer->IgnoreBytes(32) && // comparessor_name.
                +
                958  buffer->ReadWriteUInt16(&video_depth) &&
                +
                959  buffer->ReadWriteInt16(&predefined));
                960 
                -
                961 VideoSampleEntry::VideoSampleEntry()
                -
                962  : format(FOURCC_NULL), data_reference_index(1), width(0), height(0) {}
                -
                963 
                -
                964 VideoSampleEntry::~VideoSampleEntry() {}
                -
                965 FourCC VideoSampleEntry::BoxType() const {
                -
                966  LOG(ERROR) << "VideoSampleEntry should be parsed according to the "
                -
                967  << "handler type recovered in its Media ancestor.";
                -
                968  return FOURCC_NULL;
                -
                969 }
                -
                970 
                - -
                972  if (buffer->Reading()) {
                -
                973  DCHECK(buffer->reader());
                -
                974  format = buffer->reader()->type();
                -
                975  } else {
                -
                976  RCHECK(buffer->ReadWriteUInt32(&atom_size) &&
                -
                977  buffer->ReadWriteFourCC(&format));
                -
                978  }
                -
                979 
                -
                980  uint32_t video_resolution = kVideoResolution;
                -
                981  uint16_t video_frame_count = kVideoFrameCount;
                -
                982  uint16_t video_depth = kVideoDepth;
                -
                983  int16_t predefined = -1;
                -
                984  RCHECK(buffer->IgnoreBytes(6) && // reserved.
                -
                985  buffer->ReadWriteUInt16(&data_reference_index) &&
                -
                986  buffer->IgnoreBytes(16) && // predefined 0.
                -
                987  buffer->ReadWriteUInt16(&width) &&
                -
                988  buffer->ReadWriteUInt16(&height) &&
                -
                989  buffer->ReadWriteUInt32(&video_resolution) &&
                -
                990  buffer->ReadWriteUInt32(&video_resolution) &&
                -
                991  buffer->IgnoreBytes(4) && // reserved.
                -
                992  buffer->ReadWriteUInt16(&video_frame_count) &&
                -
                993  buffer->IgnoreBytes(32) && // comparessor_name.
                -
                994  buffer->ReadWriteUInt16(&video_depth) &&
                -
                995  buffer->ReadWriteInt16(&predefined));
                -
                996 
                -
                997  RCHECK(buffer->PrepareChildren());
                -
                998 
                -
                999  if (format == FOURCC_ENCV) {
                -
                1000  if (buffer->Reading()) {
                -
                1001  // Continue scanning until a recognized protection scheme is found,
                -
                1002  // or until we run out of protection schemes.
                -
                1003  while (sinf.type.type != FOURCC_CENC) {
                -
                1004  if (!buffer->ReadWriteChild(&sinf))
                -
                1005  return false;
                -
                1006  }
                -
                1007  } else {
                -
                1008  RCHECK(buffer->ReadWriteChild(&sinf));
                -
                1009  }
                -
                1010  }
                -
                1011 
                -
                1012  if (format == FOURCC_AVC1 ||
                -
                1013  (format == FOURCC_ENCV && sinf.format.format == FOURCC_AVC1)) {
                -
                1014  RCHECK(buffer->ReadWriteChild(&avcc));
                -
                1015  }
                -
                1016  RCHECK(buffer->TryReadWriteChild(&pixel_aspect));
                -
                1017  return true;
                -
                1018 }
                -
                1019 
                - -
                1021  atom_size = kBoxSize + sizeof(data_reference_index) + sizeof(width) +
                -
                1022  sizeof(height) + sizeof(kVideoResolution) * 2 +
                -
                1023  sizeof(kVideoFrameCount) + sizeof(kVideoDepth) +
                -
                1024  pixel_aspect.ComputeSize() + sinf.ComputeSize() +
                -
                1025  avcc.ComputeSize() + 32 + // 32 bytes comparessor_name.
                -
                1026  6 + 4 + 16 + 2; // 6 + 4 bytes reserved, 16 + 2 bytes predefined.
                -
                1027  return atom_size;
                -
                1028 }
                -
                1029 
                -
                1030 ElementaryStreamDescriptor::ElementaryStreamDescriptor() {}
                -
                1031 ElementaryStreamDescriptor::~ElementaryStreamDescriptor() {}
                -
                1032 FourCC ElementaryStreamDescriptor::BoxType() const { return FOURCC_ESDS; }
                -
                1033 
                - -
                1035  RCHECK(FullBox::ReadWrite(buffer));
                -
                1036  if (buffer->Reading()) {
                -
                1037  std::vector<uint8_t> data;
                -
                1038  RCHECK(buffer->ReadWriteVector(&data, buffer->Size() - buffer->Pos()));
                -
                1039  RCHECK(es_descriptor.Parse(data));
                -
                1040  if (es_descriptor.IsAAC()) {
                -
                1041  RCHECK(aac_audio_specific_config.Parse(
                -
                1042  es_descriptor.decoder_specific_info()));
                -
                1043  }
                -
                1044  } else {
                -
                1045  DCHECK(buffer->writer());
                -
                1046  es_descriptor.Write(buffer->writer());
                -
                1047  }
                -
                1048  return true;
                -
                1049 }
                -
                1050 
                - -
                1052  // This box is optional. Skip it if not initialized.
                -
                1053  atom_size = 0;
                -
                1054  if (es_descriptor.object_type() != kForbidden)
                -
                1055  atom_size = kFullBoxSize + es_descriptor.ComputeSize();
                -
                1056  return atom_size;
                -
                1057 }
                -
                1058 
                -
                1059 AudioSampleEntry::AudioSampleEntry()
                -
                1060  : format(FOURCC_NULL),
                -
                1061  data_reference_index(1),
                -
                1062  channelcount(2),
                -
                1063  samplesize(16),
                -
                1064  samplerate(0) {}
                -
                1065 
                -
                1066 AudioSampleEntry::~AudioSampleEntry() {}
                -
                1067 
                -
                1068 FourCC AudioSampleEntry::BoxType() const {
                -
                1069  LOG(ERROR) << "AudioSampleEntry should be parsed according to the "
                -
                1070  << "handler type recovered in its Media ancestor.";
                -
                1071  return FOURCC_NULL;
                -
                1072 }
                -
                1073 
                - -
                1075  if (buffer->Reading()) {
                -
                1076  DCHECK(buffer->reader());
                -
                1077  format = buffer->reader()->type();
                -
                1078  } else {
                -
                1079  RCHECK(buffer->ReadWriteUInt32(&atom_size) &&
                -
                1080  buffer->ReadWriteFourCC(&format));
                -
                1081  }
                -
                1082 
                -
                1083  // Convert from integer to 16.16 fixed point for writing.
                -
                1084  samplerate <<= 16;
                -
                1085  RCHECK(buffer->IgnoreBytes(6) && // reserved.
                -
                1086  buffer->ReadWriteUInt16(&data_reference_index) &&
                -
                1087  buffer->IgnoreBytes(8) && // reserved.
                -
                1088  buffer->ReadWriteUInt16(&channelcount) &&
                -
                1089  buffer->ReadWriteUInt16(&samplesize) &&
                -
                1090  buffer->IgnoreBytes(4) && // predefined.
                -
                1091  buffer->ReadWriteUInt32(&samplerate));
                -
                1092  // Convert from 16.16 fixed point to integer.
                -
                1093  samplerate >>= 16;
                -
                1094 
                -
                1095  RCHECK(buffer->PrepareChildren());
                -
                1096  if (format == FOURCC_ENCA) {
                -
                1097  if (buffer->Reading()) {
                -
                1098  // Continue scanning until a recognized protection scheme is found,
                -
                1099  // or until we run out of protection schemes.
                -
                1100  while (sinf.type.type != FOURCC_CENC) {
                -
                1101  if (!buffer->ReadWriteChild(&sinf))
                -
                1102  return false;
                -
                1103  }
                -
                1104  } else {
                -
                1105  RCHECK(buffer->ReadWriteChild(&sinf));
                -
                1106  }
                -
                1107  }
                -
                1108 
                -
                1109  // ESDS is not valid in case of EAC3.
                -
                1110  RCHECK(buffer->TryReadWriteChild(&esds));
                -
                1111  return true;
                -
                1112 }
                +
                961  RCHECK(buffer->PrepareChildren());
                +
                962 
                +
                963  if (format == FOURCC_ENCV) {
                +
                964  if (buffer->Reading()) {
                +
                965  // Continue scanning until a recognized protection scheme is found,
                +
                966  // or until we run out of protection schemes.
                +
                967  while (sinf.type.type != FOURCC_CENC) {
                +
                968  if (!buffer->ReadWriteChild(&sinf))
                +
                969  return false;
                +
                970  }
                +
                971  } else {
                +
                972  RCHECK(buffer->ReadWriteChild(&sinf));
                +
                973  }
                +
                974  }
                +
                975 
                +
                976  const FourCC actual_format = GetActualFormat();
                +
                977  switch (actual_format) {
                +
                978  case FOURCC_AVC1:
                +
                979  codec_config_record.box_type = FOURCC_AVCC;
                +
                980  break;
                +
                981  default:
                +
                982  LOG(ERROR) << FourCCToString(actual_format) << " is not supported.";
                +
                983  return false;
                +
                984  }
                +
                985  RCHECK(buffer->ReadWriteChild(&codec_config_record));
                +
                986  RCHECK(buffer->TryReadWriteChild(&pixel_aspect));
                +
                987  return true;
                +
                988 }
                +
                989 
                + +
                991  atom_size = kBoxSize + sizeof(data_reference_index) + sizeof(width) +
                +
                992  sizeof(height) + sizeof(kVideoResolution) * 2 +
                +
                993  sizeof(kVideoFrameCount) + sizeof(kVideoDepth) +
                +
                994  pixel_aspect.ComputeSize() + sinf.ComputeSize() +
                +
                995  codec_config_record.ComputeSize() + kCompressorNameSize +
                +
                996  6 + 4 + 16 + 2; // 6 + 4 bytes reserved, 16 + 2 bytes predefined.
                +
                997  return atom_size;
                +
                998 }
                +
                999 
                +
                1000 ElementaryStreamDescriptor::ElementaryStreamDescriptor() {}
                +
                1001 ElementaryStreamDescriptor::~ElementaryStreamDescriptor() {}
                +
                1002 FourCC ElementaryStreamDescriptor::BoxType() const { return FOURCC_ESDS; }
                +
                1003 
                + +
                1005  RCHECK(FullBox::ReadWrite(buffer));
                +
                1006  if (buffer->Reading()) {
                +
                1007  std::vector<uint8_t> data;
                +
                1008  RCHECK(buffer->ReadWriteVector(&data, buffer->Size() - buffer->Pos()));
                +
                1009  RCHECK(es_descriptor.Parse(data));
                +
                1010  if (es_descriptor.IsAAC()) {
                +
                1011  RCHECK(aac_audio_specific_config.Parse(
                +
                1012  es_descriptor.decoder_specific_info()));
                +
                1013  }
                +
                1014  } else {
                +
                1015  DCHECK(buffer->writer());
                +
                1016  es_descriptor.Write(buffer->writer());
                +
                1017  }
                +
                1018  return true;
                +
                1019 }
                +
                1020 
                + +
                1022  // This box is optional. Skip it if not initialized.
                +
                1023  atom_size = 0;
                +
                1024  if (es_descriptor.object_type() != kForbidden)
                +
                1025  atom_size = kFullBoxSize + es_descriptor.ComputeSize();
                +
                1026  return atom_size;
                +
                1027 }
                +
                1028 
                +
                1029 AudioSampleEntry::AudioSampleEntry()
                +
                1030  : format(FOURCC_NULL),
                +
                1031  data_reference_index(1),
                +
                1032  channelcount(2),
                +
                1033  samplesize(16),
                +
                1034  samplerate(0) {}
                +
                1035 
                +
                1036 AudioSampleEntry::~AudioSampleEntry() {}
                +
                1037 
                +
                1038 FourCC AudioSampleEntry::BoxType() const {
                +
                1039  LOG(ERROR) << "AudioSampleEntry should be parsed according to the "
                +
                1040  << "handler type recovered in its Media ancestor.";
                +
                1041  return FOURCC_NULL;
                +
                1042 }
                +
                1043 
                + +
                1045  if (buffer->Reading()) {
                +
                1046  DCHECK(buffer->reader());
                +
                1047  format = buffer->reader()->type();
                +
                1048  } else {
                +
                1049  RCHECK(buffer->ReadWriteUInt32(&atom_size) &&
                +
                1050  buffer->ReadWriteFourCC(&format));
                +
                1051  }
                +
                1052 
                +
                1053  // Convert from integer to 16.16 fixed point for writing.
                +
                1054  samplerate <<= 16;
                +
                1055  RCHECK(buffer->IgnoreBytes(6) && // reserved.
                +
                1056  buffer->ReadWriteUInt16(&data_reference_index) &&
                +
                1057  buffer->IgnoreBytes(8) && // reserved.
                +
                1058  buffer->ReadWriteUInt16(&channelcount) &&
                +
                1059  buffer->ReadWriteUInt16(&samplesize) &&
                +
                1060  buffer->IgnoreBytes(4) && // predefined.
                +
                1061  buffer->ReadWriteUInt32(&samplerate));
                +
                1062  // Convert from 16.16 fixed point to integer.
                +
                1063  samplerate >>= 16;
                +
                1064 
                +
                1065  RCHECK(buffer->PrepareChildren());
                +
                1066  if (format == FOURCC_ENCA) {
                +
                1067  if (buffer->Reading()) {
                +
                1068  // Continue scanning until a recognized protection scheme is found,
                +
                1069  // or until we run out of protection schemes.
                +
                1070  while (sinf.type.type != FOURCC_CENC) {
                +
                1071  if (!buffer->ReadWriteChild(&sinf))
                +
                1072  return false;
                +
                1073  }
                +
                1074  } else {
                +
                1075  RCHECK(buffer->ReadWriteChild(&sinf));
                +
                1076  }
                +
                1077  }
                +
                1078 
                +
                1079  // ESDS is not valid in case of EAC3.
                +
                1080  RCHECK(buffer->TryReadWriteChild(&esds));
                +
                1081  return true;
                +
                1082 }
                +
                1083 
                + +
                1085  atom_size = kBoxSize + sizeof(data_reference_index) + sizeof(channelcount) +
                +
                1086  sizeof(samplesize) + sizeof(samplerate) + sinf.ComputeSize() +
                +
                1087  esds.ComputeSize() + 6 + 8 + // 6 + 8 bytes reserved.
                +
                1088  4; // 4 bytes predefined.
                +
                1089  return atom_size;
                +
                1090 }
                +
                1091 
                +
                1092 MediaHeader::MediaHeader()
                +
                1093  : creation_time(0), modification_time(0), timescale(0), duration(0) {
                +
                1094  language[0] = 0;
                +
                1095 }
                +
                1096 MediaHeader::~MediaHeader() {}
                +
                1097 FourCC MediaHeader::BoxType() const { return FOURCC_MDHD; }
                +
                1098 
                + +
                1100  RCHECK(FullBox::ReadWrite(buffer));
                +
                1101 
                +
                1102  uint8_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
                +
                1103  RCHECK(buffer->ReadWriteUInt64NBytes(&creation_time, num_bytes) &&
                +
                1104  buffer->ReadWriteUInt64NBytes(&modification_time, num_bytes) &&
                +
                1105  buffer->ReadWriteUInt32(&timescale) &&
                +
                1106  buffer->ReadWriteUInt64NBytes(&duration, num_bytes));
                +
                1107 
                +
                1108  if (buffer->Reading()) {
                +
                1109  // Read language codes into temp first then use BitReader to read the
                +
                1110  // values. ISO-639-2/T language code: unsigned int(5)[3] language (2 bytes).
                +
                1111  std::vector<uint8_t> temp;
                +
                1112  RCHECK(buffer->ReadWriteVector(&temp, 2));
                1113 
                - -
                1115  atom_size = kBoxSize + sizeof(data_reference_index) + sizeof(channelcount) +
                -
                1116  sizeof(samplesize) + sizeof(samplerate) + sinf.ComputeSize() +
                -
                1117  esds.ComputeSize() + 6 + 8 + // 6 + 8 bytes reserved.
                -
                1118  4; // 4 bytes predefined.
                -
                1119  return atom_size;
                -
                1120 }
                -
                1121 
                -
                1122 MediaHeader::MediaHeader()
                -
                1123  : creation_time(0), modification_time(0), timescale(0), duration(0) {
                -
                1124  language[0] = 0;
                -
                1125 }
                -
                1126 MediaHeader::~MediaHeader() {}
                -
                1127 FourCC MediaHeader::BoxType() const { return FOURCC_MDHD; }
                -
                1128 
                - -
                1130  RCHECK(FullBox::ReadWrite(buffer));
                -
                1131 
                -
                1132  uint8_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
                -
                1133  RCHECK(buffer->ReadWriteUInt64NBytes(&creation_time, num_bytes) &&
                -
                1134  buffer->ReadWriteUInt64NBytes(&modification_time, num_bytes) &&
                -
                1135  buffer->ReadWriteUInt32(&timescale) &&
                -
                1136  buffer->ReadWriteUInt64NBytes(&duration, num_bytes));
                +
                1114  BitReader bit_reader(&temp[0], 2);
                +
                1115  bit_reader.SkipBits(1);
                +
                1116  for (int i = 0; i < 3; ++i) {
                +
                1117  CHECK(bit_reader.ReadBits(5, &language[i]));
                +
                1118  language[i] += 0x60;
                +
                1119  }
                +
                1120  language[3] = '\0';
                +
                1121  } else {
                +
                1122  // Set up default language if it is not set.
                +
                1123  const char kUndefinedLanguage[] = "und";
                +
                1124  if (language[0] == 0)
                +
                1125  strcpy(language, kUndefinedLanguage);
                +
                1126 
                +
                1127  // Lang format: bit(1) pad, unsigned int(5)[3] language.
                +
                1128  uint16_t lang = 0;
                +
                1129  for (int i = 0; i < 3; ++i)
                +
                1130  lang |= (language[i] - 0x60) << ((2 - i) * 5);
                +
                1131  RCHECK(buffer->ReadWriteUInt16(&lang));
                +
                1132  }
                +
                1133 
                +
                1134  RCHECK(buffer->IgnoreBytes(2)); // predefined.
                +
                1135  return true;
                +
                1136 }
                1137 
                -
                1138  if (buffer->Reading()) {
                -
                1139  // Read language codes into temp first then use BitReader to read the
                -
                1140  // values. ISO-639-2/T language code: unsigned int(5)[3] language (2 bytes).
                -
                1141  std::vector<uint8_t> temp;
                -
                1142  RCHECK(buffer->ReadWriteVector(&temp, 2));
                -
                1143 
                -
                1144  BitReader bit_reader(&temp[0], 2);
                -
                1145  bit_reader.SkipBits(1);
                -
                1146  for (int i = 0; i < 3; ++i) {
                -
                1147  CHECK(bit_reader.ReadBits(5, &language[i]));
                -
                1148  language[i] += 0x60;
                -
                1149  }
                -
                1150  language[3] = '\0';
                -
                1151  } else {
                -
                1152  // Set up default language if it is not set.
                -
                1153  const char kUndefinedLanguage[] = "und";
                -
                1154  if (language[0] == 0)
                -
                1155  strcpy(language, kUndefinedLanguage);
                -
                1156 
                -
                1157  // Lang format: bit(1) pad, unsigned int(5)[3] language.
                -
                1158  uint16_t lang = 0;
                -
                1159  for (int i = 0; i < 3; ++i)
                -
                1160  lang |= (language[i] - 0x60) << ((2 - i) * 5);
                -
                1161  RCHECK(buffer->ReadWriteUInt16(&lang));
                -
                1162  }
                -
                1163 
                -
                1164  RCHECK(buffer->IgnoreBytes(2)); // predefined.
                -
                1165  return true;
                + +
                1139  version = IsFitIn32Bits(creation_time, modification_time, duration) ? 0 : 1;
                +
                1140  atom_size = kFullBoxSize + sizeof(timescale) +
                +
                1141  sizeof(uint32_t) * (1 + version) * 3 + 2 + // 2 bytes language.
                +
                1142  2; // 2 bytes predefined.
                +
                1143  return atom_size;
                +
                1144 }
                +
                1145 
                +
                1146 VideoMediaHeader::VideoMediaHeader()
                +
                1147  : graphicsmode(0), opcolor_red(0), opcolor_green(0), opcolor_blue(0) {
                +
                1148  const uint32_t kVideoMediaHeaderFlags = 1;
                +
                1149  flags = kVideoMediaHeaderFlags;
                +
                1150 }
                +
                1151 VideoMediaHeader::~VideoMediaHeader() {}
                +
                1152 FourCC VideoMediaHeader::BoxType() const { return FOURCC_VMHD; }
                + +
                1154  RCHECK(FullBox::ReadWrite(buffer) &&
                +
                1155  buffer->ReadWriteUInt16(&graphicsmode) &&
                +
                1156  buffer->ReadWriteUInt16(&opcolor_red) &&
                +
                1157  buffer->ReadWriteUInt16(&opcolor_green) &&
                +
                1158  buffer->ReadWriteUInt16(&opcolor_blue));
                +
                1159  return true;
                +
                1160 }
                +
                1161 
                + +
                1163  atom_size = kFullBoxSize + sizeof(graphicsmode) + sizeof(opcolor_red) +
                +
                1164  sizeof(opcolor_green) + sizeof(opcolor_blue);
                +
                1165  return atom_size;
                1166 }
                1167 
                - -
                1169  version = IsFitIn32Bits(creation_time, modification_time, duration) ? 0 : 1;
                -
                1170  atom_size = kFullBoxSize + sizeof(timescale) +
                -
                1171  sizeof(uint32_t) * (1 + version) * 3 + 2 + // 2 bytes language.
                -
                1172  2; // 2 bytes predefined.
                -
                1173  return atom_size;
                -
                1174 }
                -
                1175 
                -
                1176 VideoMediaHeader::VideoMediaHeader()
                -
                1177  : graphicsmode(0), opcolor_red(0), opcolor_green(0), opcolor_blue(0) {
                -
                1178  const uint32_t kVideoMediaHeaderFlags = 1;
                -
                1179  flags = kVideoMediaHeaderFlags;
                -
                1180 }
                -
                1181 VideoMediaHeader::~VideoMediaHeader() {}
                -
                1182 FourCC VideoMediaHeader::BoxType() const { return FOURCC_VMHD; }
                - -
                1184  RCHECK(FullBox::ReadWrite(buffer) &&
                -
                1185  buffer->ReadWriteUInt16(&graphicsmode) &&
                -
                1186  buffer->ReadWriteUInt16(&opcolor_red) &&
                -
                1187  buffer->ReadWriteUInt16(&opcolor_green) &&
                -
                1188  buffer->ReadWriteUInt16(&opcolor_blue));
                -
                1189  return true;
                -
                1190 }
                -
                1191 
                - -
                1193  atom_size = kFullBoxSize + sizeof(graphicsmode) + sizeof(opcolor_red) +
                -
                1194  sizeof(opcolor_green) + sizeof(opcolor_blue);
                -
                1195  return atom_size;
                -
                1196 }
                -
                1197 
                -
                1198 SoundMediaHeader::SoundMediaHeader() : balance(0) {}
                -
                1199 SoundMediaHeader::~SoundMediaHeader() {}
                -
                1200 FourCC SoundMediaHeader::BoxType() const { return FOURCC_SMHD; }
                - -
                1202  RCHECK(FullBox::ReadWrite(buffer) &&
                -
                1203  buffer->ReadWriteUInt16(&balance) &&
                -
                1204  buffer->IgnoreBytes(2)); // reserved.
                -
                1205  return true;
                -
                1206 }
                -
                1207 
                - -
                1209  atom_size = kFullBoxSize + sizeof(balance) + sizeof(uint16_t);
                -
                1210  return atom_size;
                -
                1211 }
                -
                1212 
                -
                1213 DataEntryUrl::DataEntryUrl() {
                -
                1214  const uint32_t kDataEntryUrlFlags = 1;
                -
                1215  flags = kDataEntryUrlFlags;
                -
                1216 }
                -
                1217 DataEntryUrl::~DataEntryUrl() {}
                -
                1218 FourCC DataEntryUrl::BoxType() const { return FOURCC_URL; }
                - -
                1220  RCHECK(FullBox::ReadWrite(buffer));
                -
                1221  if (buffer->Reading()) {
                -
                1222  RCHECK(buffer->ReadWriteVector(&location, buffer->Size() - buffer->Pos()));
                -
                1223  } else {
                -
                1224  RCHECK(buffer->ReadWriteVector(&location, location.size()));
                -
                1225  }
                -
                1226  return true;
                +
                1168 SoundMediaHeader::SoundMediaHeader() : balance(0) {}
                +
                1169 SoundMediaHeader::~SoundMediaHeader() {}
                +
                1170 FourCC SoundMediaHeader::BoxType() const { return FOURCC_SMHD; }
                + +
                1172  RCHECK(FullBox::ReadWrite(buffer) &&
                +
                1173  buffer->ReadWriteUInt16(&balance) &&
                +
                1174  buffer->IgnoreBytes(2)); // reserved.
                +
                1175  return true;
                +
                1176 }
                +
                1177 
                + +
                1179  atom_size = kFullBoxSize + sizeof(balance) + sizeof(uint16_t);
                +
                1180  return atom_size;
                +
                1181 }
                +
                1182 
                +
                1183 DataEntryUrl::DataEntryUrl() {
                +
                1184  const uint32_t kDataEntryUrlFlags = 1;
                +
                1185  flags = kDataEntryUrlFlags;
                +
                1186 }
                +
                1187 DataEntryUrl::~DataEntryUrl() {}
                +
                1188 FourCC DataEntryUrl::BoxType() const { return FOURCC_URL; }
                + +
                1190  RCHECK(FullBox::ReadWrite(buffer));
                +
                1191  if (buffer->Reading()) {
                +
                1192  RCHECK(buffer->ReadWriteVector(&location, buffer->Size() - buffer->Pos()));
                +
                1193  } else {
                +
                1194  RCHECK(buffer->ReadWriteVector(&location, location.size()));
                +
                1195  }
                +
                1196  return true;
                +
                1197 }
                +
                1198 
                + +
                1200  atom_size = kBoxSize + sizeof(flags) + location.size();
                +
                1201  return atom_size;
                +
                1202 }
                +
                1203 
                +
                1204 DataReference::DataReference() {
                +
                1205  // Default 1 entry.
                +
                1206  data_entry.resize(1);
                +
                1207 }
                +
                1208 DataReference::~DataReference() {}
                +
                1209 FourCC DataReference::BoxType() const { return FOURCC_DREF; }
                + +
                1211  uint32_t entry_count = data_entry.size();
                +
                1212  RCHECK(FullBox::ReadWrite(buffer) &&
                +
                1213  buffer->ReadWriteUInt32(&entry_count));
                +
                1214  data_entry.resize(entry_count);
                +
                1215  RCHECK(buffer->PrepareChildren());
                +
                1216  for (uint32_t i = 0; i < entry_count; ++i)
                +
                1217  RCHECK(buffer->ReadWriteChild(&data_entry[i]));
                +
                1218  return true;
                +
                1219 }
                +
                1220 
                + +
                1222  uint32_t count = data_entry.size();
                +
                1223  atom_size = kFullBoxSize + sizeof(count);
                +
                1224  for (uint32_t i = 0; i < count; ++i)
                +
                1225  atom_size += data_entry[i].ComputeSize();
                +
                1226  return atom_size;
                1227 }
                1228 
                - -
                1230  atom_size = kBoxSize + sizeof(flags) + location.size();
                -
                1231  return atom_size;
                -
                1232 }
                -
                1233 
                -
                1234 DataReference::DataReference() {
                -
                1235  // Default 1 entry.
                -
                1236  data_entry.resize(1);
                +
                1229 DataInformation::DataInformation() {}
                +
                1230 DataInformation::~DataInformation() {}
                +
                1231 FourCC DataInformation::BoxType() const { return FOURCC_DINF; }
                +
                1232 
                + +
                1234  return Box::ReadWrite(buffer) &&
                +
                1235  buffer->PrepareChildren() &&
                +
                1236  buffer->ReadWriteChild(&dref);
                1237 }
                -
                1238 DataReference::~DataReference() {}
                -
                1239 FourCC DataReference::BoxType() const { return FOURCC_DREF; }
                - -
                1241  uint32_t entry_count = data_entry.size();
                -
                1242  RCHECK(FullBox::ReadWrite(buffer) &&
                -
                1243  buffer->ReadWriteUInt32(&entry_count));
                -
                1244  data_entry.resize(entry_count);
                -
                1245  RCHECK(buffer->PrepareChildren());
                -
                1246  for (uint32_t i = 0; i < entry_count; ++i)
                -
                1247  RCHECK(buffer->ReadWriteChild(&data_entry[i]));
                -
                1248  return true;
                -
                1249 }
                -
                1250 
                - -
                1252  uint32_t count = data_entry.size();
                -
                1253  atom_size = kFullBoxSize + sizeof(count);
                -
                1254  for (uint32_t i = 0; i < count; ++i)
                -
                1255  atom_size += data_entry[i].ComputeSize();
                -
                1256  return atom_size;
                -
                1257 }
                -
                1258 
                -
                1259 DataInformation::DataInformation() {}
                -
                1260 DataInformation::~DataInformation() {}
                -
                1261 FourCC DataInformation::BoxType() const { return FOURCC_DINF; }
                +
                1238 
                + +
                1240  atom_size = kBoxSize + dref.ComputeSize();
                +
                1241  return atom_size;
                +
                1242 }
                +
                1243 
                +
                1244 MediaInformation::MediaInformation() {}
                +
                1245 MediaInformation::~MediaInformation() {}
                +
                1246 FourCC MediaInformation::BoxType() const { return FOURCC_MINF; }
                +
                1247 
                + +
                1249  RCHECK(Box::ReadWrite(buffer) &&
                +
                1250  buffer->PrepareChildren() &&
                +
                1251  buffer->ReadWriteChild(&dinf) &&
                +
                1252  buffer->ReadWriteChild(&sample_table));
                +
                1253  if (sample_table.description.type == kVideo)
                +
                1254  RCHECK(buffer->ReadWriteChild(&vmhd));
                +
                1255  else if (sample_table.description.type == kAudio)
                +
                1256  RCHECK(buffer->ReadWriteChild(&smhd));
                +
                1257  else
                +
                1258  NOTIMPLEMENTED();
                +
                1259  // Hint is not supported for now.
                +
                1260  return true;
                +
                1261 }
                1262 
                - -
                1264  return Box::ReadWrite(buffer) &&
                -
                1265  buffer->PrepareChildren() &&
                -
                1266  buffer->ReadWriteChild(&dref);
                -
                1267 }
                -
                1268 
                - -
                1270  atom_size = kBoxSize + dref.ComputeSize();
                -
                1271  return atom_size;
                -
                1272 }
                -
                1273 
                -
                1274 MediaInformation::MediaInformation() {}
                -
                1275 MediaInformation::~MediaInformation() {}
                -
                1276 FourCC MediaInformation::BoxType() const { return FOURCC_MINF; }
                -
                1277 
                - -
                1279  RCHECK(Box::ReadWrite(buffer) &&
                -
                1280  buffer->PrepareChildren() &&
                -
                1281  buffer->ReadWriteChild(&dinf) &&
                -
                1282  buffer->ReadWriteChild(&sample_table));
                -
                1283  if (sample_table.description.type == kVideo)
                -
                1284  RCHECK(buffer->ReadWriteChild(&vmhd));
                -
                1285  else if (sample_table.description.type == kAudio)
                -
                1286  RCHECK(buffer->ReadWriteChild(&smhd));
                -
                1287  else
                -
                1288  NOTIMPLEMENTED();
                -
                1289  // Hint is not supported for now.
                -
                1290  return true;
                -
                1291 }
                -
                1292 
                - -
                1294  atom_size = kBoxSize + dinf.ComputeSize() + sample_table.ComputeSize();
                -
                1295  if (sample_table.description.type == kVideo)
                -
                1296  atom_size += vmhd.ComputeSize();
                -
                1297  else if (sample_table.description.type == kAudio)
                -
                1298  atom_size += smhd.ComputeSize();
                + +
                1264  atom_size = kBoxSize + dinf.ComputeSize() + sample_table.ComputeSize();
                +
                1265  if (sample_table.description.type == kVideo)
                +
                1266  atom_size += vmhd.ComputeSize();
                +
                1267  else if (sample_table.description.type == kAudio)
                +
                1268  atom_size += smhd.ComputeSize();
                +
                1269  return atom_size;
                +
                1270 }
                +
                1271 
                +
                1272 Media::Media() {}
                +
                1273 Media::~Media() {}
                +
                1274 FourCC Media::BoxType() const { return FOURCC_MDIA; }
                +
                1275 
                + +
                1277  RCHECK(Box::ReadWrite(buffer) &&
                +
                1278  buffer->PrepareChildren() &&
                +
                1279  buffer->ReadWriteChild(&header) &&
                +
                1280  buffer->ReadWriteChild(&handler));
                +
                1281  if (buffer->Reading()) {
                +
                1282  // Maddeningly, the HandlerReference box specifies how to parse the
                +
                1283  // SampleDescription box, making the latter the only box (of those that we
                +
                1284  // support) which cannot be parsed correctly on its own (or even with
                +
                1285  // information from its strict ancestor tree). We thus copy the handler type
                +
                1286  // to the sample description box *before* parsing it to provide this
                +
                1287  // information while parsing.
                +
                1288  information.sample_table.description.type = handler.type;
                +
                1289  } else {
                +
                1290  DCHECK_EQ(information.sample_table.description.type, handler.type);
                +
                1291  }
                +
                1292  RCHECK(buffer->ReadWriteChild(&information));
                +
                1293  return true;
                +
                1294 }
                +
                1295 
                + +
                1297  atom_size = kBoxSize + header.ComputeSize() + handler.ComputeSize() +
                +
                1298  information.ComputeSize();
                1299  return atom_size;
                1300 }
                1301 
                -
                1302 Media::Media() {}
                -
                1303 Media::~Media() {}
                -
                1304 FourCC Media::BoxType() const { return FOURCC_MDIA; }
                +
                1302 Track::Track() {}
                +
                1303 Track::~Track() {}
                +
                1304 FourCC Track::BoxType() const { return FOURCC_TRAK; }
                1305 
                - +
                1307  RCHECK(Box::ReadWrite(buffer) &&
                1308  buffer->PrepareChildren() &&
                1309  buffer->ReadWriteChild(&header) &&
                -
                1310  buffer->ReadWriteChild(&handler));
                -
                1311  if (buffer->Reading()) {
                -
                1312  // Maddeningly, the HandlerReference box specifies how to parse the
                -
                1313  // SampleDescription box, making the latter the only box (of those that we
                -
                1314  // support) which cannot be parsed correctly on its own (or even with
                -
                1315  // information from its strict ancestor tree). We thus copy the handler type
                -
                1316  // to the sample description box *before* parsing it to provide this
                -
                1317  // information while parsing.
                -
                1318  information.sample_table.description.type = handler.type;
                -
                1319  } else {
                -
                1320  DCHECK_EQ(information.sample_table.description.type, handler.type);
                -
                1321  }
                -
                1322  RCHECK(buffer->ReadWriteChild(&information));
                -
                1323  return true;
                -
                1324 }
                -
                1325 
                - -
                1327  atom_size = kBoxSize + header.ComputeSize() + handler.ComputeSize() +
                -
                1328  information.ComputeSize();
                -
                1329  return atom_size;
                +
                1310  buffer->ReadWriteChild(&media) &&
                +
                1311  buffer->TryReadWriteChild(&edit));
                +
                1312  return true;
                +
                1313 }
                +
                1314 
                + +
                1316  atom_size = kBoxSize + header.ComputeSize() + media.ComputeSize() +
                +
                1317  edit.ComputeSize();
                +
                1318  return atom_size;
                +
                1319 }
                +
                1320 
                +
                1321 MovieExtendsHeader::MovieExtendsHeader() : fragment_duration(0) {}
                +
                1322 MovieExtendsHeader::~MovieExtendsHeader() {}
                +
                1323 FourCC MovieExtendsHeader::BoxType() const { return FOURCC_MEHD; }
                +
                1324 
                + +
                1326  RCHECK(FullBox::ReadWrite(buffer));
                +
                1327  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
                +
                1328  RCHECK(buffer->ReadWriteUInt64NBytes(&fragment_duration, num_bytes));
                +
                1329  return true;
                1330 }
                1331 
                -
                1332 Track::Track() {}
                -
                1333 Track::~Track() {}
                -
                1334 FourCC Track::BoxType() const { return FOURCC_TRAK; }
                -
                1335 
                - -
                1337  RCHECK(Box::ReadWrite(buffer) &&
                -
                1338  buffer->PrepareChildren() &&
                -
                1339  buffer->ReadWriteChild(&header) &&
                -
                1340  buffer->ReadWriteChild(&media) &&
                -
                1341  buffer->TryReadWriteChild(&edit));
                -
                1342  return true;
                -
                1343 }
                -
                1344 
                - -
                1346  atom_size = kBoxSize + header.ComputeSize() + media.ComputeSize() +
                -
                1347  edit.ComputeSize();
                -
                1348  return atom_size;
                -
                1349 }
                + +
                1333  atom_size = 0;
                +
                1334  // This box is optional. Skip it if it is not used.
                +
                1335  if (fragment_duration != 0) {
                +
                1336  version = IsFitIn32Bits(fragment_duration) ? 0 : 1;
                +
                1337  atom_size = kFullBoxSize + sizeof(uint32_t) * (1 + version);
                +
                1338  }
                +
                1339  return atom_size;
                +
                1340 }
                +
                1341 
                +
                1342 TrackExtends::TrackExtends()
                +
                1343  : track_id(0),
                +
                1344  default_sample_description_index(0),
                +
                1345  default_sample_duration(0),
                +
                1346  default_sample_size(0),
                +
                1347  default_sample_flags(0) {}
                +
                1348 TrackExtends::~TrackExtends() {}
                +
                1349 FourCC TrackExtends::BoxType() const { return FOURCC_TREX; }
                1350 
                -
                1351 MovieExtendsHeader::MovieExtendsHeader() : fragment_duration(0) {}
                -
                1352 MovieExtendsHeader::~MovieExtendsHeader() {}
                -
                1353 FourCC MovieExtendsHeader::BoxType() const { return FOURCC_MEHD; }
                -
                1354 
                - -
                1356  RCHECK(FullBox::ReadWrite(buffer));
                -
                1357  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
                -
                1358  RCHECK(buffer->ReadWriteUInt64NBytes(&fragment_duration, num_bytes));
                -
                1359  return true;
                -
                1360 }
                -
                1361 
                - -
                1363  atom_size = 0;
                -
                1364  // This box is optional. Skip it if it is not used.
                -
                1365  if (fragment_duration != 0) {
                -
                1366  version = IsFitIn32Bits(fragment_duration) ? 0 : 1;
                -
                1367  atom_size = kFullBoxSize + sizeof(uint32_t) * (1 + version);
                -
                1368  }
                -
                1369  return atom_size;
                -
                1370 }
                -
                1371 
                -
                1372 TrackExtends::TrackExtends()
                -
                1373  : track_id(0),
                -
                1374  default_sample_description_index(0),
                -
                1375  default_sample_duration(0),
                -
                1376  default_sample_size(0),
                -
                1377  default_sample_flags(0) {}
                -
                1378 TrackExtends::~TrackExtends() {}
                -
                1379 FourCC TrackExtends::BoxType() const { return FOURCC_TREX; }
                -
                1380 
                - -
                1382  RCHECK(FullBox::ReadWrite(buffer) &&
                -
                1383  buffer->ReadWriteUInt32(&track_id) &&
                -
                1384  buffer->ReadWriteUInt32(&default_sample_description_index) &&
                -
                1385  buffer->ReadWriteUInt32(&default_sample_duration) &&
                -
                1386  buffer->ReadWriteUInt32(&default_sample_size) &&
                -
                1387  buffer->ReadWriteUInt32(&default_sample_flags));
                -
                1388  return true;
                -
                1389 }
                -
                1390 
                - -
                1392  atom_size = kFullBoxSize + sizeof(track_id) +
                -
                1393  sizeof(default_sample_description_index) +
                -
                1394  sizeof(default_sample_duration) + sizeof(default_sample_size) +
                -
                1395  sizeof(default_sample_flags);
                -
                1396  return atom_size;
                -
                1397 }
                -
                1398 
                -
                1399 MovieExtends::MovieExtends() {}
                -
                1400 MovieExtends::~MovieExtends() {}
                -
                1401 FourCC MovieExtends::BoxType() const { return FOURCC_MVEX; }
                -
                1402 
                - -
                1404  RCHECK(Box::ReadWrite(buffer) &&
                -
                1405  buffer->PrepareChildren() &&
                -
                1406  buffer->TryReadWriteChild(&header));
                + +
                1352  RCHECK(FullBox::ReadWrite(buffer) &&
                +
                1353  buffer->ReadWriteUInt32(&track_id) &&
                +
                1354  buffer->ReadWriteUInt32(&default_sample_description_index) &&
                +
                1355  buffer->ReadWriteUInt32(&default_sample_duration) &&
                +
                1356  buffer->ReadWriteUInt32(&default_sample_size) &&
                +
                1357  buffer->ReadWriteUInt32(&default_sample_flags));
                +
                1358  return true;
                +
                1359 }
                +
                1360 
                + +
                1362  atom_size = kFullBoxSize + sizeof(track_id) +
                +
                1363  sizeof(default_sample_description_index) +
                +
                1364  sizeof(default_sample_duration) + sizeof(default_sample_size) +
                +
                1365  sizeof(default_sample_flags);
                +
                1366  return atom_size;
                +
                1367 }
                +
                1368 
                +
                1369 MovieExtends::MovieExtends() {}
                +
                1370 MovieExtends::~MovieExtends() {}
                +
                1371 FourCC MovieExtends::BoxType() const { return FOURCC_MVEX; }
                +
                1372 
                + +
                1374  RCHECK(Box::ReadWrite(buffer) &&
                +
                1375  buffer->PrepareChildren() &&
                +
                1376  buffer->TryReadWriteChild(&header));
                +
                1377  if (buffer->Reading()) {
                +
                1378  DCHECK(buffer->reader());
                +
                1379  RCHECK(buffer->reader()->ReadChildren(&tracks));
                +
                1380  } else {
                +
                1381  for (uint32_t i = 0; i < tracks.size(); ++i)
                +
                1382  RCHECK(tracks[i].ReadWrite(buffer));
                +
                1383  }
                +
                1384  return true;
                +
                1385 }
                +
                1386 
                + +
                1388  // This box is optional. Skip it if it does not contain any track.
                +
                1389  atom_size = 0;
                +
                1390  if (tracks.size() != 0) {
                +
                1391  atom_size = kBoxSize + header.ComputeSize();
                +
                1392  for (uint32_t i = 0; i < tracks.size(); ++i)
                +
                1393  atom_size += tracks[i].ComputeSize();
                +
                1394  }
                +
                1395  return atom_size;
                +
                1396 }
                +
                1397 
                +
                1398 Movie::Movie() {}
                +
                1399 Movie::~Movie() {}
                +
                1400 FourCC Movie::BoxType() const { return FOURCC_MOOV; }
                +
                1401 
                + +
                1403  RCHECK(Box::ReadWrite(buffer) &&
                +
                1404  buffer->PrepareChildren() &&
                +
                1405  buffer->ReadWriteChild(&header) &&
                +
                1406  buffer->TryReadWriteChild(&extends));
                1407  if (buffer->Reading()) {
                -
                1408  DCHECK(buffer->reader());
                -
                1409  RCHECK(buffer->reader()->ReadChildren(&tracks));
                -
                1410  } else {
                -
                1411  for (uint32_t i = 0; i < tracks.size(); ++i)
                -
                1412  RCHECK(tracks[i].ReadWrite(buffer));
                -
                1413  }
                -
                1414  return true;
                -
                1415 }
                -
                1416 
                - -
                1418  // This box is optional. Skip it if it does not contain any track.
                -
                1419  atom_size = 0;
                -
                1420  if (tracks.size() != 0) {
                -
                1421  atom_size = kBoxSize + header.ComputeSize();
                -
                1422  for (uint32_t i = 0; i < tracks.size(); ++i)
                -
                1423  atom_size += tracks[i].ComputeSize();
                -
                1424  }
                -
                1425  return atom_size;
                -
                1426 }
                -
                1427 
                -
                1428 Movie::Movie() {}
                -
                1429 Movie::~Movie() {}
                -
                1430 FourCC Movie::BoxType() const { return FOURCC_MOOV; }
                -
                1431 
                - -
                1433  RCHECK(Box::ReadWrite(buffer) &&
                -
                1434  buffer->PrepareChildren() &&
                -
                1435  buffer->ReadWriteChild(&header) &&
                -
                1436  buffer->TryReadWriteChild(&extends));
                -
                1437  if (buffer->Reading()) {
                -
                1438  BoxReader* reader = buffer->reader();
                -
                1439  DCHECK(reader);
                -
                1440  RCHECK(reader->ReadChildren(&tracks) &&
                -
                1441  reader->TryReadChildren(&pssh));
                -
                1442  } else {
                -
                1443  for (uint32_t i = 0; i < tracks.size(); ++i)
                -
                1444  RCHECK(tracks[i].ReadWrite(buffer));
                -
                1445  for (uint32_t i = 0; i < pssh.size(); ++i)
                -
                1446  RCHECK(pssh[i].ReadWrite(buffer));
                -
                1447  }
                -
                1448  return true;
                -
                1449 }
                +
                1408  BoxReader* reader = buffer->reader();
                +
                1409  DCHECK(reader);
                +
                1410  RCHECK(reader->ReadChildren(&tracks) &&
                +
                1411  reader->TryReadChildren(&pssh));
                +
                1412  } else {
                +
                1413  for (uint32_t i = 0; i < tracks.size(); ++i)
                +
                1414  RCHECK(tracks[i].ReadWrite(buffer));
                +
                1415  for (uint32_t i = 0; i < pssh.size(); ++i)
                +
                1416  RCHECK(pssh[i].ReadWrite(buffer));
                +
                1417  }
                +
                1418  return true;
                +
                1419 }
                +
                1420 
                + +
                1422  atom_size = kBoxSize + header.ComputeSize() + extends.ComputeSize();
                +
                1423  for (uint32_t i = 0; i < tracks.size(); ++i)
                +
                1424  atom_size += tracks[i].ComputeSize();
                +
                1425  for (uint32_t i = 0; i < pssh.size(); ++i)
                +
                1426  atom_size += pssh[i].ComputeSize();
                +
                1427  return atom_size;
                +
                1428 }
                +
                1429 
                +
                1430 TrackFragmentDecodeTime::TrackFragmentDecodeTime() : decode_time(0) {}
                +
                1431 TrackFragmentDecodeTime::~TrackFragmentDecodeTime() {}
                +
                1432 FourCC TrackFragmentDecodeTime::BoxType() const { return FOURCC_TFDT; }
                +
                1433 
                + +
                1435  RCHECK(FullBox::ReadWrite(buffer));
                +
                1436  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
                +
                1437  RCHECK(buffer->ReadWriteUInt64NBytes(&decode_time, num_bytes));
                +
                1438  return true;
                +
                1439 }
                +
                1440 
                + +
                1442  version = IsFitIn32Bits(decode_time) ? 0 : 1;
                +
                1443  atom_size = kFullBoxSize + sizeof(uint32_t) * (1 + version);
                +
                1444  return atom_size;
                +
                1445 }
                +
                1446 
                +
                1447 MovieFragmentHeader::MovieFragmentHeader() : sequence_number(0) {}
                +
                1448 MovieFragmentHeader::~MovieFragmentHeader() {}
                +
                1449 FourCC MovieFragmentHeader::BoxType() const { return FOURCC_MFHD; }
                1450 
                - -
                1452  atom_size = kBoxSize + header.ComputeSize() + extends.ComputeSize();
                -
                1453  for (uint32_t i = 0; i < tracks.size(); ++i)
                -
                1454  atom_size += tracks[i].ComputeSize();
                -
                1455  for (uint32_t i = 0; i < pssh.size(); ++i)
                -
                1456  atom_size += pssh[i].ComputeSize();
                -
                1457  return atom_size;
                -
                1458 }
                -
                1459 
                -
                1460 TrackFragmentDecodeTime::TrackFragmentDecodeTime() : decode_time(0) {}
                -
                1461 TrackFragmentDecodeTime::~TrackFragmentDecodeTime() {}
                -
                1462 FourCC TrackFragmentDecodeTime::BoxType() const { return FOURCC_TFDT; }
                -
                1463 
                - -
                1465  RCHECK(FullBox::ReadWrite(buffer));
                -
                1466  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
                -
                1467  RCHECK(buffer->ReadWriteUInt64NBytes(&decode_time, num_bytes));
                -
                1468  return true;
                -
                1469 }
                + +
                1452  return FullBox::ReadWrite(buffer) &&
                +
                1453  buffer->ReadWriteUInt32(&sequence_number);
                +
                1454 }
                +
                1455 
                + +
                1457  atom_size = kFullBoxSize + sizeof(sequence_number);
                +
                1458  return atom_size;
                +
                1459 }
                +
                1460 
                +
                1461 TrackFragmentHeader::TrackFragmentHeader()
                +
                1462  : track_id(0),
                +
                1463  sample_description_index(0),
                +
                1464  default_sample_duration(0),
                +
                1465  default_sample_size(0),
                +
                1466  default_sample_flags(0) {}
                +
                1467 
                +
                1468 TrackFragmentHeader::~TrackFragmentHeader() {}
                +
                1469 FourCC TrackFragmentHeader::BoxType() const { return FOURCC_TFHD; }
                1470 
                - -
                1472  version = IsFitIn32Bits(decode_time) ? 0 : 1;
                -
                1473  atom_size = kFullBoxSize + sizeof(uint32_t) * (1 + version);
                -
                1474  return atom_size;
                -
                1475 }
                -
                1476 
                -
                1477 MovieFragmentHeader::MovieFragmentHeader() : sequence_number(0) {}
                -
                1478 MovieFragmentHeader::~MovieFragmentHeader() {}
                -
                1479 FourCC MovieFragmentHeader::BoxType() const { return FOURCC_MFHD; }
                -
                1480 
                - -
                1482  return FullBox::ReadWrite(buffer) &&
                -
                1483  buffer->ReadWriteUInt32(&sequence_number);
                -
                1484 }
                + +
                1472  RCHECK(FullBox::ReadWrite(buffer) &&
                +
                1473  buffer->ReadWriteUInt32(&track_id));
                +
                1474 
                +
                1475  if (flags & kBaseDataOffsetPresentMask) {
                +
                1476  // MSE requires 'default-base-is-moof' to be set and
                +
                1477  // 'base-data-offset-present' not to be set. We omit these checks as some
                +
                1478  // valid files in the wild don't follow these rules, though they use moof as
                +
                1479  // base.
                +
                1480  uint64_t base_data_offset;
                +
                1481  RCHECK(buffer->ReadWriteUInt64(&base_data_offset));
                +
                1482  DLOG(WARNING) << "base-data-offset-present is not expected. Assumes "
                +
                1483  "default-base-is-moof.";
                +
                1484  }
                1485 
                - -
                1487  atom_size = kFullBoxSize + sizeof(sequence_number);
                -
                1488  return atom_size;
                -
                1489 }
                -
                1490 
                -
                1491 TrackFragmentHeader::TrackFragmentHeader()
                -
                1492  : track_id(0),
                -
                1493  sample_description_index(0),
                -
                1494  default_sample_duration(0),
                -
                1495  default_sample_size(0),
                -
                1496  default_sample_flags(0) {}
                +
                1486  if (flags & kSampleDescriptionIndexPresentMask) {
                +
                1487  RCHECK(buffer->ReadWriteUInt32(&sample_description_index));
                +
                1488  } else if (buffer->Reading()) {
                +
                1489  sample_description_index = 0;
                +
                1490  }
                +
                1491 
                +
                1492  if (flags & kDefaultSampleDurationPresentMask) {
                +
                1493  RCHECK(buffer->ReadWriteUInt32(&default_sample_duration));
                +
                1494  } else if (buffer->Reading()) {
                +
                1495  default_sample_duration = 0;
                +
                1496  }
                1497 
                -
                1498 TrackFragmentHeader::~TrackFragmentHeader() {}
                -
                1499 FourCC TrackFragmentHeader::BoxType() const { return FOURCC_TFHD; }
                -
                1500 
                - -
                1502  RCHECK(FullBox::ReadWrite(buffer) &&
                -
                1503  buffer->ReadWriteUInt32(&track_id));
                -
                1504 
                -
                1505  if (flags & kBaseDataOffsetPresentMask) {
                -
                1506  // MSE requires 'default-base-is-moof' to be set and
                -
                1507  // 'base-data-offset-present' not to be set. We omit these checks as some
                -
                1508  // valid files in the wild don't follow these rules, though they use moof as
                -
                1509  // base.
                -
                1510  uint64_t base_data_offset;
                -
                1511  RCHECK(buffer->ReadWriteUInt64(&base_data_offset));
                -
                1512  DLOG(WARNING) << "base-data-offset-present is not expected. Assumes "
                -
                1513  "default-base-is-moof.";
                -
                1514  }
                -
                1515 
                -
                1516  if (flags & kSampleDescriptionIndexPresentMask) {
                -
                1517  RCHECK(buffer->ReadWriteUInt32(&sample_description_index));
                -
                1518  } else if (buffer->Reading()) {
                -
                1519  sample_description_index = 0;
                -
                1520  }
                +
                1498  if (flags & kDefaultSampleSizePresentMask) {
                +
                1499  RCHECK(buffer->ReadWriteUInt32(&default_sample_size));
                +
                1500  } else if (buffer->Reading()) {
                +
                1501  default_sample_size = 0;
                +
                1502  }
                +
                1503 
                +
                1504  if (flags & kDefaultSampleFlagsPresentMask)
                +
                1505  RCHECK(buffer->ReadWriteUInt32(&default_sample_flags));
                +
                1506  return true;
                +
                1507 }
                +
                1508 
                + +
                1510  atom_size = kFullBoxSize + sizeof(track_id);
                +
                1511  if (flags & kSampleDescriptionIndexPresentMask)
                +
                1512  atom_size += sizeof(sample_description_index);
                +
                1513  if (flags & kDefaultSampleDurationPresentMask)
                +
                1514  atom_size += sizeof(default_sample_duration);
                +
                1515  if (flags & kDefaultSampleSizePresentMask)
                +
                1516  atom_size += sizeof(default_sample_size);
                +
                1517  if (flags & kDefaultSampleFlagsPresentMask)
                +
                1518  atom_size += sizeof(default_sample_flags);
                +
                1519  return atom_size;
                +
                1520 }
                1521 
                -
                1522  if (flags & kDefaultSampleDurationPresentMask) {
                -
                1523  RCHECK(buffer->ReadWriteUInt32(&default_sample_duration));
                -
                1524  } else if (buffer->Reading()) {
                -
                1525  default_sample_duration = 0;
                -
                1526  }
                -
                1527 
                -
                1528  if (flags & kDefaultSampleSizePresentMask) {
                -
                1529  RCHECK(buffer->ReadWriteUInt32(&default_sample_size));
                -
                1530  } else if (buffer->Reading()) {
                -
                1531  default_sample_size = 0;
                -
                1532  }
                -
                1533 
                -
                1534  if (flags & kDefaultSampleFlagsPresentMask)
                -
                1535  RCHECK(buffer->ReadWriteUInt32(&default_sample_flags));
                -
                1536  return true;
                -
                1537 }
                -
                1538 
                - -
                1540  atom_size = kFullBoxSize + sizeof(track_id);
                -
                1541  if (flags & kSampleDescriptionIndexPresentMask)
                -
                1542  atom_size += sizeof(sample_description_index);
                -
                1543  if (flags & kDefaultSampleDurationPresentMask)
                -
                1544  atom_size += sizeof(default_sample_duration);
                -
                1545  if (flags & kDefaultSampleSizePresentMask)
                -
                1546  atom_size += sizeof(default_sample_size);
                -
                1547  if (flags & kDefaultSampleFlagsPresentMask)
                -
                1548  atom_size += sizeof(default_sample_flags);
                -
                1549  return atom_size;
                -
                1550 }
                -
                1551 
                -
                1552 TrackFragmentRun::TrackFragmentRun() : sample_count(0), data_offset(0) {}
                -
                1553 TrackFragmentRun::~TrackFragmentRun() {}
                -
                1554 FourCC TrackFragmentRun::BoxType() const { return FOURCC_TRUN; }
                -
                1555 
                - -
                1557  if (!buffer->Reading()) {
                -
                1558  // Determine whether version 0 or version 1 should be used.
                -
                1559  // Use version 0 if possible, use version 1 if there is a negative
                -
                1560  // sample_offset value.
                -
                1561  version = 0;
                -
                1562  if (flags & kSampleCompTimeOffsetsPresentMask) {
                -
                1563  for (uint32_t i = 0; i < sample_count; ++i) {
                -
                1564  if (sample_composition_time_offsets[i] < 0) {
                -
                1565  version = 1;
                -
                1566  break;
                -
                1567  }
                -
                1568  }
                -
                1569  }
                -
                1570  }
                -
                1571 
                -
                1572  RCHECK(FullBox::ReadWrite(buffer) &&
                -
                1573  buffer->ReadWriteUInt32(&sample_count));
                -
                1574 
                -
                1575  bool data_offset_present = (flags & kDataOffsetPresentMask) != 0;
                -
                1576  bool first_sample_flags_present = (flags & kFirstSampleFlagsPresentMask) != 0;
                -
                1577  bool sample_duration_present = (flags & kSampleDurationPresentMask) != 0;
                -
                1578  bool sample_size_present = (flags & kSampleSizePresentMask) != 0;
                -
                1579  bool sample_flags_present = (flags & kSampleFlagsPresentMask) != 0;
                -
                1580  bool sample_composition_time_offsets_present =
                -
                1581  (flags & kSampleCompTimeOffsetsPresentMask) != 0;
                -
                1582 
                -
                1583  if (data_offset_present) {
                -
                1584  RCHECK(buffer->ReadWriteUInt32(&data_offset));
                -
                1585  } else {
                -
                1586  // NOTE: If the data-offset is not present, then the data for this run
                -
                1587  // starts immediately after the data of the previous run, or at the
                -
                1588  // base-data-offset defined by the track fragment header if this is the
                -
                1589  // first run in a track fragment. If the data-offset is present, it is
                -
                1590  // relative to the base-data-offset established in the track fragment
                -
                1591  // header.
                -
                1592  NOTIMPLEMENTED();
                -
                1593  }
                -
                1594 
                -
                1595  uint32_t first_sample_flags;
                -
                1596 
                -
                1597  if (buffer->Reading()) {
                -
                1598  if (first_sample_flags_present)
                -
                1599  RCHECK(buffer->ReadWriteUInt32(&first_sample_flags));
                -
                1600 
                -
                1601  if (sample_duration_present)
                -
                1602  sample_durations.resize(sample_count);
                -
                1603  if (sample_size_present)
                -
                1604  sample_sizes.resize(sample_count);
                -
                1605  if (sample_flags_present)
                -
                1606  sample_flags.resize(sample_count);
                -
                1607  if (sample_composition_time_offsets_present)
                -
                1608  sample_composition_time_offsets.resize(sample_count);
                -
                1609  } else {
                -
                1610  if (first_sample_flags_present) {
                -
                1611  first_sample_flags = sample_flags[0];
                -
                1612  DCHECK(sample_flags.size() == 1);
                -
                1613  RCHECK(buffer->ReadWriteUInt32(&first_sample_flags));
                +
                1522 TrackFragmentRun::TrackFragmentRun() : sample_count(0), data_offset(0) {}
                +
                1523 TrackFragmentRun::~TrackFragmentRun() {}
                +
                1524 FourCC TrackFragmentRun::BoxType() const { return FOURCC_TRUN; }
                +
                1525 
                + +
                1527  if (!buffer->Reading()) {
                +
                1528  // Determine whether version 0 or version 1 should be used.
                +
                1529  // Use version 0 if possible, use version 1 if there is a negative
                +
                1530  // sample_offset value.
                +
                1531  version = 0;
                +
                1532  if (flags & kSampleCompTimeOffsetsPresentMask) {
                +
                1533  for (uint32_t i = 0; i < sample_count; ++i) {
                +
                1534  if (sample_composition_time_offsets[i] < 0) {
                +
                1535  version = 1;
                +
                1536  break;
                +
                1537  }
                +
                1538  }
                +
                1539  }
                +
                1540  }
                +
                1541 
                +
                1542  RCHECK(FullBox::ReadWrite(buffer) &&
                +
                1543  buffer->ReadWriteUInt32(&sample_count));
                +
                1544 
                +
                1545  bool data_offset_present = (flags & kDataOffsetPresentMask) != 0;
                +
                1546  bool first_sample_flags_present = (flags & kFirstSampleFlagsPresentMask) != 0;
                +
                1547  bool sample_duration_present = (flags & kSampleDurationPresentMask) != 0;
                +
                1548  bool sample_size_present = (flags & kSampleSizePresentMask) != 0;
                +
                1549  bool sample_flags_present = (flags & kSampleFlagsPresentMask) != 0;
                +
                1550  bool sample_composition_time_offsets_present =
                +
                1551  (flags & kSampleCompTimeOffsetsPresentMask) != 0;
                +
                1552 
                +
                1553  if (data_offset_present) {
                +
                1554  RCHECK(buffer->ReadWriteUInt32(&data_offset));
                +
                1555  } else {
                +
                1556  // NOTE: If the data-offset is not present, then the data for this run
                +
                1557  // starts immediately after the data of the previous run, or at the
                +
                1558  // base-data-offset defined by the track fragment header if this is the
                +
                1559  // first run in a track fragment. If the data-offset is present, it is
                +
                1560  // relative to the base-data-offset established in the track fragment
                +
                1561  // header.
                +
                1562  NOTIMPLEMENTED();
                +
                1563  }
                +
                1564 
                +
                1565  uint32_t first_sample_flags;
                +
                1566 
                +
                1567  if (buffer->Reading()) {
                +
                1568  if (first_sample_flags_present)
                +
                1569  RCHECK(buffer->ReadWriteUInt32(&first_sample_flags));
                +
                1570 
                +
                1571  if (sample_duration_present)
                +
                1572  sample_durations.resize(sample_count);
                +
                1573  if (sample_size_present)
                +
                1574  sample_sizes.resize(sample_count);
                +
                1575  if (sample_flags_present)
                +
                1576  sample_flags.resize(sample_count);
                +
                1577  if (sample_composition_time_offsets_present)
                +
                1578  sample_composition_time_offsets.resize(sample_count);
                +
                1579  } else {
                +
                1580  if (first_sample_flags_present) {
                +
                1581  first_sample_flags = sample_flags[0];
                +
                1582  DCHECK(sample_flags.size() == 1);
                +
                1583  RCHECK(buffer->ReadWriteUInt32(&first_sample_flags));
                +
                1584  }
                +
                1585 
                +
                1586  if (sample_duration_present)
                +
                1587  DCHECK(sample_durations.size() == sample_count);
                +
                1588  if (sample_size_present)
                +
                1589  DCHECK(sample_sizes.size() == sample_count);
                +
                1590  if (sample_flags_present)
                +
                1591  DCHECK(sample_flags.size() == sample_count);
                +
                1592  if (sample_composition_time_offsets_present)
                +
                1593  DCHECK(sample_composition_time_offsets.size() == sample_count);
                +
                1594  }
                +
                1595 
                +
                1596  for (uint32_t i = 0; i < sample_count; ++i) {
                +
                1597  if (sample_duration_present)
                +
                1598  RCHECK(buffer->ReadWriteUInt32(&sample_durations[i]));
                +
                1599  if (sample_size_present)
                +
                1600  RCHECK(buffer->ReadWriteUInt32(&sample_sizes[i]));
                +
                1601  if (sample_flags_present)
                +
                1602  RCHECK(buffer->ReadWriteUInt32(&sample_flags[i]));
                +
                1603 
                +
                1604  if (sample_composition_time_offsets_present) {
                +
                1605  if (version == 0) {
                +
                1606  uint32_t sample_offset = sample_composition_time_offsets[i];
                +
                1607  RCHECK(buffer->ReadWriteUInt32(&sample_offset));
                +
                1608  sample_composition_time_offsets[i] = sample_offset;
                +
                1609  } else {
                +
                1610  int32_t sample_offset = sample_composition_time_offsets[i];
                +
                1611  RCHECK(buffer->ReadWriteInt32(&sample_offset));
                +
                1612  sample_composition_time_offsets[i] = sample_offset;
                +
                1613  }
                1614  }
                -
                1615 
                -
                1616  if (sample_duration_present)
                -
                1617  DCHECK(sample_durations.size() == sample_count);
                -
                1618  if (sample_size_present)
                -
                1619  DCHECK(sample_sizes.size() == sample_count);
                -
                1620  if (sample_flags_present)
                -
                1621  DCHECK(sample_flags.size() == sample_count);
                -
                1622  if (sample_composition_time_offsets_present)
                -
                1623  DCHECK(sample_composition_time_offsets.size() == sample_count);
                -
                1624  }
                -
                1625 
                -
                1626  for (uint32_t i = 0; i < sample_count; ++i) {
                -
                1627  if (sample_duration_present)
                -
                1628  RCHECK(buffer->ReadWriteUInt32(&sample_durations[i]));
                -
                1629  if (sample_size_present)
                -
                1630  RCHECK(buffer->ReadWriteUInt32(&sample_sizes[i]));
                -
                1631  if (sample_flags_present)
                -
                1632  RCHECK(buffer->ReadWriteUInt32(&sample_flags[i]));
                -
                1633 
                -
                1634  if (sample_composition_time_offsets_present) {
                -
                1635  if (version == 0) {
                -
                1636  uint32_t sample_offset = sample_composition_time_offsets[i];
                -
                1637  RCHECK(buffer->ReadWriteUInt32(&sample_offset));
                -
                1638  sample_composition_time_offsets[i] = sample_offset;
                -
                1639  } else {
                -
                1640  int32_t sample_offset = sample_composition_time_offsets[i];
                -
                1641  RCHECK(buffer->ReadWriteInt32(&sample_offset));
                -
                1642  sample_composition_time_offsets[i] = sample_offset;
                -
                1643  }
                -
                1644  }
                -
                1645  }
                +
                1615  }
                +
                1616 
                +
                1617  if (buffer->Reading()) {
                +
                1618  if (first_sample_flags_present) {
                +
                1619  if (sample_flags.size() == 0) {
                +
                1620  sample_flags.push_back(first_sample_flags);
                +
                1621  } else {
                +
                1622  sample_flags[0] = first_sample_flags;
                +
                1623  }
                +
                1624  }
                +
                1625  }
                +
                1626  return true;
                +
                1627 }
                +
                1628 
                + +
                1630  atom_size = kFullBoxSize + sizeof(sample_count);
                +
                1631  if (flags & kDataOffsetPresentMask)
                +
                1632  atom_size += sizeof(data_offset);
                +
                1633  if (flags & kFirstSampleFlagsPresentMask)
                +
                1634  atom_size += sizeof(uint32_t);
                +
                1635  uint32_t fields = (flags & kSampleDurationPresentMask ? 1 : 0) +
                +
                1636  (flags & kSampleSizePresentMask ? 1 : 0) +
                +
                1637  (flags & kSampleFlagsPresentMask ? 1 : 0) +
                +
                1638  (flags & kSampleCompTimeOffsetsPresentMask ? 1 : 0);
                +
                1639  atom_size += fields * sizeof(uint32_t) * sample_count;
                +
                1640  return atom_size;
                +
                1641 }
                +
                1642 
                +
                1643 SampleToGroup::SampleToGroup() : grouping_type(0), grouping_type_parameter(0) {}
                +
                1644 SampleToGroup::~SampleToGroup() {}
                +
                1645 FourCC SampleToGroup::BoxType() const { return FOURCC_SBGP; }
                1646 
                -
                1647  if (buffer->Reading()) {
                -
                1648  if (first_sample_flags_present) {
                -
                1649  if (sample_flags.size() == 0) {
                -
                1650  sample_flags.push_back(first_sample_flags);
                -
                1651  } else {
                -
                1652  sample_flags[0] = first_sample_flags;
                -
                1653  }
                -
                1654  }
                -
                1655  }
                -
                1656  return true;
                -
                1657 }
                + +
                1648  RCHECK(FullBox::ReadWrite(buffer) &&
                +
                1649  buffer->ReadWriteUInt32(&grouping_type));
                +
                1650  if (version == 1)
                +
                1651  RCHECK(buffer->ReadWriteUInt32(&grouping_type_parameter));
                +
                1652 
                +
                1653  if (grouping_type != FOURCC_SEIG) {
                +
                1654  DCHECK(buffer->Reading());
                +
                1655  DLOG(WARNING) << "Sample group '" << grouping_type << "' is not supported.";
                +
                1656  return true;
                +
                1657  }
                1658 
                - -
                1660  atom_size = kFullBoxSize + sizeof(sample_count);
                -
                1661  if (flags & kDataOffsetPresentMask)
                -
                1662  atom_size += sizeof(data_offset);
                -
                1663  if (flags & kFirstSampleFlagsPresentMask)
                -
                1664  atom_size += sizeof(uint32_t);
                -
                1665  uint32_t fields = (flags & kSampleDurationPresentMask ? 1 : 0) +
                -
                1666  (flags & kSampleSizePresentMask ? 1 : 0) +
                -
                1667  (flags & kSampleFlagsPresentMask ? 1 : 0) +
                -
                1668  (flags & kSampleCompTimeOffsetsPresentMask ? 1 : 0);
                -
                1669  atom_size += fields * sizeof(uint32_t) * sample_count;
                -
                1670  return atom_size;
                -
                1671 }
                -
                1672 
                -
                1673 SampleToGroup::SampleToGroup() : grouping_type(0), grouping_type_parameter(0) {}
                -
                1674 SampleToGroup::~SampleToGroup() {}
                -
                1675 FourCC SampleToGroup::BoxType() const { return FOURCC_SBGP; }
                -
                1676 
                - -
                1678  RCHECK(FullBox::ReadWrite(buffer) &&
                -
                1679  buffer->ReadWriteUInt32(&grouping_type));
                -
                1680  if (version == 1)
                -
                1681  RCHECK(buffer->ReadWriteUInt32(&grouping_type_parameter));
                -
                1682 
                -
                1683  if (grouping_type != FOURCC_SEIG) {
                -
                1684  DCHECK(buffer->Reading());
                -
                1685  DLOG(WARNING) << "Sample group '" << grouping_type << "' is not supported.";
                -
                1686  return true;
                -
                1687  }
                +
                1659  uint32_t count = entries.size();
                +
                1660  RCHECK(buffer->ReadWriteUInt32(&count));
                +
                1661  entries.resize(count);
                +
                1662  for (uint32_t i = 0; i < count; ++i) {
                +
                1663  RCHECK(buffer->ReadWriteUInt32(&entries[i].sample_count) &&
                +
                1664  buffer->ReadWriteUInt32(&entries[i].group_description_index));
                +
                1665  }
                +
                1666  return true;
                +
                1667 }
                +
                1668 
                + +
                1670  // This box is optional. Skip it if it is not used.
                +
                1671  atom_size = 0;
                +
                1672  if (!entries.empty()) {
                +
                1673  atom_size = kFullBoxSize + sizeof(grouping_type) +
                +
                1674  (version == 1 ? sizeof(grouping_type_parameter) : 0) +
                +
                1675  sizeof(uint32_t) + entries.size() * sizeof(entries[0]);
                +
                1676  }
                +
                1677  return atom_size;
                +
                1678 }
                +
                1679 
                +
                1680 CencSampleEncryptionInfoEntry::CencSampleEncryptionInfoEntry()
                +
                1681  : is_encrypted(false), iv_size(0) {
                +
                1682 }
                +
                1683 CencSampleEncryptionInfoEntry::~CencSampleEncryptionInfoEntry() {};
                +
                1684 
                +
                1685 SampleGroupDescription::SampleGroupDescription() : grouping_type(0) {}
                +
                1686 SampleGroupDescription::~SampleGroupDescription() {}
                +
                1687 FourCC SampleGroupDescription::BoxType() const { return FOURCC_SGPD; }
                1688 
                -
                1689  uint32_t count = entries.size();
                -
                1690  RCHECK(buffer->ReadWriteUInt32(&count));
                -
                1691  entries.resize(count);
                -
                1692  for (uint32_t i = 0; i < count; ++i) {
                -
                1693  RCHECK(buffer->ReadWriteUInt32(&entries[i].sample_count) &&
                -
                1694  buffer->ReadWriteUInt32(&entries[i].group_description_index));
                -
                1695  }
                -
                1696  return true;
                -
                1697 }
                + +
                1690  RCHECK(FullBox::ReadWrite(buffer) &&
                +
                1691  buffer->ReadWriteUInt32(&grouping_type));
                +
                1692 
                +
                1693  if (grouping_type != FOURCC_SEIG) {
                +
                1694  DCHECK(buffer->Reading());
                +
                1695  DLOG(WARNING) << "Sample group '" << grouping_type << "' is not supported.";
                +
                1696  return true;
                +
                1697  }
                1698 
                - -
                1700  // This box is optional. Skip it if it is not used.
                -
                1701  atom_size = 0;
                -
                1702  if (!entries.empty()) {
                -
                1703  atom_size = kFullBoxSize + sizeof(grouping_type) +
                -
                1704  (version == 1 ? sizeof(grouping_type_parameter) : 0) +
                -
                1705  sizeof(uint32_t) + entries.size() * sizeof(entries[0]);
                -
                1706  }
                -
                1707  return atom_size;
                -
                1708 }
                -
                1709 
                -
                1710 CencSampleEncryptionInfoEntry::CencSampleEncryptionInfoEntry()
                -
                1711  : is_encrypted(false), iv_size(0) {
                -
                1712 }
                -
                1713 CencSampleEncryptionInfoEntry::~CencSampleEncryptionInfoEntry() {};
                -
                1714 
                -
                1715 SampleGroupDescription::SampleGroupDescription() : grouping_type(0) {}
                -
                1716 SampleGroupDescription::~SampleGroupDescription() {}
                -
                1717 FourCC SampleGroupDescription::BoxType() const { return FOURCC_SGPD; }
                -
                1718 
                - -
                1720  RCHECK(FullBox::ReadWrite(buffer) &&
                -
                1721  buffer->ReadWriteUInt32(&grouping_type));
                +
                1699  const size_t kEntrySize = sizeof(uint32_t) + kCencKeyIdSize;
                +
                1700  uint32_t default_length = 0;
                +
                1701  if (version == 1) {
                +
                1702  if (buffer->Reading()) {
                +
                1703  RCHECK(buffer->ReadWriteUInt32(&default_length));
                +
                1704  RCHECK(default_length == 0 || default_length >= kEntrySize);
                +
                1705  } else {
                +
                1706  default_length = kEntrySize;
                +
                1707  RCHECK(buffer->ReadWriteUInt32(&default_length));
                +
                1708  }
                +
                1709  }
                +
                1710 
                +
                1711  uint32_t count = entries.size();
                +
                1712  RCHECK(buffer->ReadWriteUInt32(&count));
                +
                1713  entries.resize(count);
                +
                1714  for (uint32_t i = 0; i < count; ++i) {
                +
                1715  if (version == 1) {
                +
                1716  if (buffer->Reading() && default_length == 0) {
                +
                1717  uint32_t description_length = 0;
                +
                1718  RCHECK(buffer->ReadWriteUInt32(&description_length));
                +
                1719  RCHECK(description_length >= kEntrySize);
                +
                1720  }
                +
                1721  }
                1722 
                -
                1723  if (grouping_type != FOURCC_SEIG) {
                -
                1724  DCHECK(buffer->Reading());
                -
                1725  DLOG(WARNING) << "Sample group '" << grouping_type << "' is not supported.";
                -
                1726  return true;
                -
                1727  }
                -
                1728 
                -
                1729  const size_t kEntrySize = sizeof(uint32_t) + kCencKeyIdSize;
                -
                1730  uint32_t default_length = 0;
                -
                1731  if (version == 1) {
                -
                1732  if (buffer->Reading()) {
                -
                1733  RCHECK(buffer->ReadWriteUInt32(&default_length));
                -
                1734  RCHECK(default_length == 0 || default_length >= kEntrySize);
                -
                1735  } else {
                -
                1736  default_length = kEntrySize;
                -
                1737  RCHECK(buffer->ReadWriteUInt32(&default_length));
                -
                1738  }
                -
                1739  }
                -
                1740 
                -
                1741  uint32_t count = entries.size();
                -
                1742  RCHECK(buffer->ReadWriteUInt32(&count));
                -
                1743  entries.resize(count);
                -
                1744  for (uint32_t i = 0; i < count; ++i) {
                -
                1745  if (version == 1) {
                -
                1746  if (buffer->Reading() && default_length == 0) {
                -
                1747  uint32_t description_length = 0;
                -
                1748  RCHECK(buffer->ReadWriteUInt32(&description_length));
                -
                1749  RCHECK(description_length >= kEntrySize);
                -
                1750  }
                -
                1751  }
                -
                1752 
                -
                1753  if (!buffer->Reading()) {
                -
                1754  if (entries[i].key_id.size() != kCencKeyIdSize) {
                -
                1755  LOG(WARNING) << "CENC defines key id length of " << kCencKeyIdSize
                -
                1756  << " bytes; got " << entries[i].key_id.size()
                -
                1757  << ". Resized accordingly.";
                -
                1758  entries[i].key_id.resize(kCencKeyIdSize);
                -
                1759  }
                -
                1760  }
                -
                1761 
                -
                1762  uint8_t flag = entries[i].is_encrypted ? 1 : 0;
                -
                1763  RCHECK(buffer->IgnoreBytes(2) && // reserved.
                -
                1764  buffer->ReadWriteUInt8(&flag) &&
                -
                1765  buffer->ReadWriteUInt8(&entries[i].iv_size) &&
                -
                1766  buffer->ReadWriteVector(&entries[i].key_id, kCencKeyIdSize));
                +
                1723  if (!buffer->Reading()) {
                +
                1724  if (entries[i].key_id.size() != kCencKeyIdSize) {
                +
                1725  LOG(WARNING) << "CENC defines key id length of " << kCencKeyIdSize
                +
                1726  << " bytes; got " << entries[i].key_id.size()
                +
                1727  << ". Resized accordingly.";
                +
                1728  entries[i].key_id.resize(kCencKeyIdSize);
                +
                1729  }
                +
                1730  }
                +
                1731 
                +
                1732  uint8_t flag = entries[i].is_encrypted ? 1 : 0;
                +
                1733  RCHECK(buffer->IgnoreBytes(2) && // reserved.
                +
                1734  buffer->ReadWriteUInt8(&flag) &&
                +
                1735  buffer->ReadWriteUInt8(&entries[i].iv_size) &&
                +
                1736  buffer->ReadWriteVector(&entries[i].key_id, kCencKeyIdSize));
                +
                1737 
                +
                1738  if (buffer->Reading()) {
                +
                1739  entries[i].is_encrypted = (flag != 0);
                +
                1740  if (entries[i].is_encrypted) {
                +
                1741  RCHECK(entries[i].iv_size == 8 || entries[i].iv_size == 16);
                +
                1742  } else {
                +
                1743  RCHECK(entries[i].iv_size == 0);
                +
                1744  }
                +
                1745  }
                +
                1746  }
                +
                1747  return true;
                +
                1748 }
                +
                1749 
                + +
                1751  // Version 0 is obsoleted, so always generate version 1 box.
                +
                1752  version = 1;
                +
                1753  // This box is optional. Skip it if it is not used.
                +
                1754  atom_size = 0;
                +
                1755  if (!entries.empty()) {
                +
                1756  const size_t kEntrySize = sizeof(uint32_t) + kCencKeyIdSize;
                +
                1757  atom_size = kFullBoxSize + sizeof(grouping_type) +
                +
                1758  (version == 1 ? sizeof(uint32_t) : 0) + sizeof(uint32_t) +
                +
                1759  entries.size() * kEntrySize;
                +
                1760  }
                +
                1761  return atom_size;
                +
                1762 }
                +
                1763 
                +
                1764 TrackFragment::TrackFragment() : decode_time_absent(false) {}
                +
                1765 TrackFragment::~TrackFragment() {}
                +
                1766 FourCC TrackFragment::BoxType() const { return FOURCC_TRAF; }
                1767 
                -
                1768  if (buffer->Reading()) {
                -
                1769  entries[i].is_encrypted = (flag != 0);
                -
                1770  if (entries[i].is_encrypted) {
                -
                1771  RCHECK(entries[i].iv_size == 8 || entries[i].iv_size == 16);
                -
                1772  } else {
                -
                1773  RCHECK(entries[i].iv_size == 0);
                -
                1774  }
                -
                1775  }
                -
                1776  }
                -
                1777  return true;
                -
                1778 }
                -
                1779 
                - -
                1781  // Version 0 is obsoleted, so always generate version 1 box.
                -
                1782  version = 1;
                -
                1783  // This box is optional. Skip it if it is not used.
                -
                1784  atom_size = 0;
                -
                1785  if (!entries.empty()) {
                -
                1786  const size_t kEntrySize = sizeof(uint32_t) + kCencKeyIdSize;
                -
                1787  atom_size = kFullBoxSize + sizeof(grouping_type) +
                -
                1788  (version == 1 ? sizeof(uint32_t) : 0) + sizeof(uint32_t) +
                -
                1789  entries.size() * kEntrySize;
                -
                1790  }
                -
                1791  return atom_size;
                -
                1792 }
                -
                1793 
                -
                1794 TrackFragment::TrackFragment() : decode_time_absent(false) {}
                -
                1795 TrackFragment::~TrackFragment() {}
                -
                1796 FourCC TrackFragment::BoxType() const { return FOURCC_TRAF; }
                -
                1797 
                - -
                1799  RCHECK(Box::ReadWrite(buffer) &&
                -
                1800  buffer->PrepareChildren() &&
                -
                1801  buffer->ReadWriteChild(&header));
                -
                1802  if (buffer->Reading()) {
                -
                1803  DCHECK(buffer->reader());
                -
                1804  decode_time_absent = !buffer->reader()->ChildExist(&decode_time);
                -
                1805  if (!decode_time_absent)
                -
                1806  RCHECK(buffer->ReadWriteChild(&decode_time));
                -
                1807  RCHECK(buffer->reader()->TryReadChildren(&runs));
                -
                1808 
                -
                1809  // There could be multiple SampleGroupDescription and SampleToGroup boxes
                -
                1810  // with different grouping types. For common encryption, the relevant
                -
                1811  // grouping type is 'seig'. Continue reading until 'seig' is found, or
                -
                1812  // until running out of child boxes.
                -
                1813  while (sample_to_group.grouping_type != FOURCC_SEIG &&
                -
                1814  buffer->reader()->ChildExist(&sample_to_group)) {
                -
                1815  RCHECK(buffer->reader()->ReadChild(&sample_to_group));
                -
                1816  }
                -
                1817  while (sample_group_description.grouping_type != FOURCC_SEIG &&
                -
                1818  buffer->reader()->ChildExist(&sample_group_description)) {
                -
                1819  RCHECK(buffer->reader()->ReadChild(&sample_group_description));
                -
                1820  }
                -
                1821  } else {
                -
                1822  if (!decode_time_absent)
                -
                1823  RCHECK(buffer->ReadWriteChild(&decode_time));
                -
                1824  for (uint32_t i = 0; i < runs.size(); ++i)
                -
                1825  RCHECK(runs[i].ReadWrite(buffer));
                -
                1826  RCHECK(buffer->TryReadWriteChild(&sample_to_group) &&
                -
                1827  buffer->TryReadWriteChild(&sample_group_description));
                -
                1828  }
                -
                1829  return buffer->TryReadWriteChild(&auxiliary_size) &&
                -
                1830  buffer->TryReadWriteChild(&auxiliary_offset);
                -
                1831 }
                -
                1832 
                - -
                1834  atom_size = kBoxSize + header.ComputeSize() + decode_time.ComputeSize() +
                -
                1835  sample_to_group.ComputeSize() +
                -
                1836  sample_group_description.ComputeSize() +
                -
                1837  auxiliary_size.ComputeSize() + auxiliary_offset.ComputeSize();
                -
                1838  for (uint32_t i = 0; i < runs.size(); ++i)
                -
                1839  atom_size += runs[i].ComputeSize();
                -
                1840  return atom_size;
                -
                1841 }
                -
                1842 
                -
                1843 MovieFragment::MovieFragment() {}
                -
                1844 MovieFragment::~MovieFragment() {}
                -
                1845 FourCC MovieFragment::BoxType() const { return FOURCC_MOOF; }
                -
                1846 
                - -
                1848  RCHECK(Box::ReadWrite(buffer) &&
                -
                1849  buffer->PrepareChildren() &&
                -
                1850  buffer->ReadWriteChild(&header));
                -
                1851  if (buffer->Reading()) {
                -
                1852  BoxReader* reader = buffer->reader();
                -
                1853  DCHECK(reader);
                -
                1854  RCHECK(reader->ReadChildren(&tracks) &&
                -
                1855  reader->TryReadChildren(&pssh));
                -
                1856  } else {
                -
                1857  for (uint32_t i = 0; i < tracks.size(); ++i)
                -
                1858  RCHECK(tracks[i].ReadWrite(buffer));
                -
                1859  for (uint32_t i = 0; i < pssh.size(); ++i)
                -
                1860  RCHECK(pssh[i].ReadWrite(buffer));
                -
                1861  }
                -
                1862  return true;
                -
                1863 }
                -
                1864 
                - -
                1866  atom_size = kBoxSize + header.ComputeSize();
                -
                1867  for (uint32_t i = 0; i < tracks.size(); ++i)
                -
                1868  atom_size += tracks[i].ComputeSize();
                -
                1869  for (uint32_t i = 0; i < pssh.size(); ++i)
                -
                1870  atom_size += pssh[i].ComputeSize();
                -
                1871  return atom_size;
                -
                1872 }
                -
                1873 
                -
                1874 SegmentIndex::SegmentIndex()
                -
                1875  : reference_id(0),
                -
                1876  timescale(0),
                -
                1877  earliest_presentation_time(0),
                -
                1878  first_offset(0) {}
                -
                1879 SegmentIndex::~SegmentIndex() {}
                -
                1880 FourCC SegmentIndex::BoxType() const { return FOURCC_SIDX; }
                -
                1881 
                - -
                1883  RCHECK(FullBox::ReadWrite(buffer) &&
                -
                1884  buffer->ReadWriteUInt32(&reference_id) &&
                -
                1885  buffer->ReadWriteUInt32(&timescale));
                -
                1886 
                -
                1887  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
                -
                1888  RCHECK(
                -
                1889  buffer->ReadWriteUInt64NBytes(&earliest_presentation_time, num_bytes) &&
                -
                1890  buffer->ReadWriteUInt64NBytes(&first_offset, num_bytes));
                -
                1891 
                -
                1892  uint16_t reference_count = references.size();
                -
                1893  RCHECK(buffer->IgnoreBytes(2) && // reserved.
                -
                1894  buffer->ReadWriteUInt16(&reference_count));
                -
                1895  references.resize(reference_count);
                -
                1896 
                -
                1897  uint32_t reference_type_size;
                -
                1898  uint32_t sap;
                -
                1899  for (uint32_t i = 0; i < reference_count; ++i) {
                -
                1900  if (!buffer->Reading()) {
                -
                1901  reference_type_size = references[i].referenced_size;
                -
                1902  if (references[i].reference_type)
                -
                1903  reference_type_size |= (1 << 31);
                -
                1904  sap = (references[i].sap_type << 28) | references[i].sap_delta_time;
                -
                1905  if (references[i].starts_with_sap)
                -
                1906  sap |= (1 << 31);
                -
                1907  }
                -
                1908  RCHECK(buffer->ReadWriteUInt32(&reference_type_size) &&
                -
                1909  buffer->ReadWriteUInt32(&references[i].subsegment_duration) &&
                -
                1910  buffer->ReadWriteUInt32(&sap));
                -
                1911  if (buffer->Reading()) {
                -
                1912  references[i].reference_type = (reference_type_size >> 31) ? true : false;
                -
                1913  references[i].referenced_size = reference_type_size & ~(1 << 31);
                -
                1914  references[i].starts_with_sap = (sap >> 31) ? true : false;
                -
                1915  references[i].sap_type =
                -
                1916  static_cast<SegmentReference::SAPType>((sap >> 28) & 0x07);
                -
                1917  references[i].sap_delta_time = sap & ~(0xF << 28);
                -
                1918  }
                -
                1919  }
                -
                1920  return true;
                -
                1921 }
                -
                1922 
                - -
                1924  version = IsFitIn32Bits(earliest_presentation_time, first_offset) ? 0 : 1;
                -
                1925  atom_size = kFullBoxSize + sizeof(reference_id) + sizeof(timescale) +
                -
                1926  sizeof(uint32_t) * (1 + version) * 2 + 2 * sizeof(uint16_t) +
                -
                1927  3 * sizeof(uint32_t) * references.size();
                -
                1928  return atom_size;
                -
                1929 }
                -
                1930 
                -
                1931 MediaData::MediaData() : data_size(0) {}
                -
                1932 MediaData::~MediaData() {}
                -
                1933 FourCC MediaData::BoxType() const { return FOURCC_MDAT; }
                -
                1934 
                -
                1935 void MediaData::Write(BufferWriter* buffer) {
                -
                1936  buffer->AppendInt(ComputeSize());
                -
                1937  buffer->AppendInt(static_cast<uint32_t>(BoxType()));
                -
                1938 }
                -
                1939 
                -
                1940 uint32_t MediaData::ComputeSize() {
                -
                1941  return kBoxSize + data_size;
                -
                1942 }
                -
                1943 
                -
                1944 } // namespace mp4
                -
                1945 } // namespace media
                -
                1946 } // namespace edash_packager
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - + +
                1769  RCHECK(Box::ReadWrite(buffer) &&
                +
                1770  buffer->PrepareChildren() &&
                +
                1771  buffer->ReadWriteChild(&header));
                +
                1772  if (buffer->Reading()) {
                +
                1773  DCHECK(buffer->reader());
                +
                1774  decode_time_absent = !buffer->reader()->ChildExist(&decode_time);
                +
                1775  if (!decode_time_absent)
                +
                1776  RCHECK(buffer->ReadWriteChild(&decode_time));
                +
                1777  RCHECK(buffer->reader()->TryReadChildren(&runs));
                +
                1778 
                +
                1779  // There could be multiple SampleGroupDescription and SampleToGroup boxes
                +
                1780  // with different grouping types. For common encryption, the relevant
                +
                1781  // grouping type is 'seig'. Continue reading until 'seig' is found, or
                +
                1782  // until running out of child boxes.
                +
                1783  while (sample_to_group.grouping_type != FOURCC_SEIG &&
                +
                1784  buffer->reader()->ChildExist(&sample_to_group)) {
                +
                1785  RCHECK(buffer->reader()->ReadChild(&sample_to_group));
                +
                1786  }
                +
                1787  while (sample_group_description.grouping_type != FOURCC_SEIG &&
                +
                1788  buffer->reader()->ChildExist(&sample_group_description)) {
                +
                1789  RCHECK(buffer->reader()->ReadChild(&sample_group_description));
                +
                1790  }
                +
                1791  } else {
                +
                1792  if (!decode_time_absent)
                +
                1793  RCHECK(buffer->ReadWriteChild(&decode_time));
                +
                1794  for (uint32_t i = 0; i < runs.size(); ++i)
                +
                1795  RCHECK(runs[i].ReadWrite(buffer));
                +
                1796  RCHECK(buffer->TryReadWriteChild(&sample_to_group) &&
                +
                1797  buffer->TryReadWriteChild(&sample_group_description));
                +
                1798  }
                +
                1799  return buffer->TryReadWriteChild(&auxiliary_size) &&
                +
                1800  buffer->TryReadWriteChild(&auxiliary_offset);
                +
                1801 }
                +
                1802 
                + +
                1804  atom_size = kBoxSize + header.ComputeSize() + decode_time.ComputeSize() +
                +
                1805  sample_to_group.ComputeSize() +
                +
                1806  sample_group_description.ComputeSize() +
                +
                1807  auxiliary_size.ComputeSize() + auxiliary_offset.ComputeSize();
                +
                1808  for (uint32_t i = 0; i < runs.size(); ++i)
                +
                1809  atom_size += runs[i].ComputeSize();
                +
                1810  return atom_size;
                +
                1811 }
                +
                1812 
                +
                1813 MovieFragment::MovieFragment() {}
                +
                1814 MovieFragment::~MovieFragment() {}
                +
                1815 FourCC MovieFragment::BoxType() const { return FOURCC_MOOF; }
                +
                1816 
                + +
                1818  RCHECK(Box::ReadWrite(buffer) &&
                +
                1819  buffer->PrepareChildren() &&
                +
                1820  buffer->ReadWriteChild(&header));
                +
                1821  if (buffer->Reading()) {
                +
                1822  BoxReader* reader = buffer->reader();
                +
                1823  DCHECK(reader);
                +
                1824  RCHECK(reader->ReadChildren(&tracks) &&
                +
                1825  reader->TryReadChildren(&pssh));
                +
                1826  } else {
                +
                1827  for (uint32_t i = 0; i < tracks.size(); ++i)
                +
                1828  RCHECK(tracks[i].ReadWrite(buffer));
                +
                1829  for (uint32_t i = 0; i < pssh.size(); ++i)
                +
                1830  RCHECK(pssh[i].ReadWrite(buffer));
                +
                1831  }
                +
                1832  return true;
                +
                1833 }
                +
                1834 
                + +
                1836  atom_size = kBoxSize + header.ComputeSize();
                +
                1837  for (uint32_t i = 0; i < tracks.size(); ++i)
                +
                1838  atom_size += tracks[i].ComputeSize();
                +
                1839  for (uint32_t i = 0; i < pssh.size(); ++i)
                +
                1840  atom_size += pssh[i].ComputeSize();
                +
                1841  return atom_size;
                +
                1842 }
                +
                1843 
                +
                1844 SegmentIndex::SegmentIndex()
                +
                1845  : reference_id(0),
                +
                1846  timescale(0),
                +
                1847  earliest_presentation_time(0),
                +
                1848  first_offset(0) {}
                +
                1849 SegmentIndex::~SegmentIndex() {}
                +
                1850 FourCC SegmentIndex::BoxType() const { return FOURCC_SIDX; }
                +
                1851 
                + +
                1853  RCHECK(FullBox::ReadWrite(buffer) &&
                +
                1854  buffer->ReadWriteUInt32(&reference_id) &&
                +
                1855  buffer->ReadWriteUInt32(&timescale));
                +
                1856 
                +
                1857  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
                +
                1858  RCHECK(
                +
                1859  buffer->ReadWriteUInt64NBytes(&earliest_presentation_time, num_bytes) &&
                +
                1860  buffer->ReadWriteUInt64NBytes(&first_offset, num_bytes));
                +
                1861 
                +
                1862  uint16_t reference_count = references.size();
                +
                1863  RCHECK(buffer->IgnoreBytes(2) && // reserved.
                +
                1864  buffer->ReadWriteUInt16(&reference_count));
                +
                1865  references.resize(reference_count);
                +
                1866 
                +
                1867  uint32_t reference_type_size;
                +
                1868  uint32_t sap;
                +
                1869  for (uint32_t i = 0; i < reference_count; ++i) {
                +
                1870  if (!buffer->Reading()) {
                +
                1871  reference_type_size = references[i].referenced_size;
                +
                1872  if (references[i].reference_type)
                +
                1873  reference_type_size |= (1 << 31);
                +
                1874  sap = (references[i].sap_type << 28) | references[i].sap_delta_time;
                +
                1875  if (references[i].starts_with_sap)
                +
                1876  sap |= (1 << 31);
                +
                1877  }
                +
                1878  RCHECK(buffer->ReadWriteUInt32(&reference_type_size) &&
                +
                1879  buffer->ReadWriteUInt32(&references[i].subsegment_duration) &&
                +
                1880  buffer->ReadWriteUInt32(&sap));
                +
                1881  if (buffer->Reading()) {
                +
                1882  references[i].reference_type = (reference_type_size >> 31) ? true : false;
                +
                1883  references[i].referenced_size = reference_type_size & ~(1 << 31);
                +
                1884  references[i].starts_with_sap = (sap >> 31) ? true : false;
                +
                1885  references[i].sap_type =
                +
                1886  static_cast<SegmentReference::SAPType>((sap >> 28) & 0x07);
                +
                1887  references[i].sap_delta_time = sap & ~(0xF << 28);
                +
                1888  }
                +
                1889  }
                +
                1890  return true;
                +
                1891 }
                +
                1892 
                + +
                1894  version = IsFitIn32Bits(earliest_presentation_time, first_offset) ? 0 : 1;
                +
                1895  atom_size = kFullBoxSize + sizeof(reference_id) + sizeof(timescale) +
                +
                1896  sizeof(uint32_t) * (1 + version) * 2 + 2 * sizeof(uint16_t) +
                +
                1897  3 * sizeof(uint32_t) * references.size();
                +
                1898  return atom_size;
                +
                1899 }
                +
                1900 
                +
                1901 MediaData::MediaData() : data_size(0) {}
                +
                1902 MediaData::~MediaData() {}
                +
                1903 FourCC MediaData::BoxType() const { return FOURCC_MDAT; }
                +
                1904 
                +
                1905 void MediaData::Write(BufferWriter* buffer) {
                +
                1906  buffer->AppendInt(ComputeSize());
                +
                1907  buffer->AppendInt(static_cast<uint32_t>(BoxType()));
                +
                1908 }
                +
                1909 
                +
                1910 uint32_t MediaData::ComputeSize() {
                +
                1911  return kBoxSize + data_size;
                +
                1912 }
                +
                1913 
                +
                1914 } // namespace mp4
                +
                1915 } // namespace media
                +
                1916 } // namespace edash_packager
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadChildren(std::vector< T > *children) WARN_UNUSED_RESULT
                Definition: box_reader.h:133
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                bool ReadChild(Box *child) WARN_UNUSED_RESULT
                Definition: box_reader.cc:123
                - - - - -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + + + + +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - +
                virtual bool ReadWrite(BoxBuffer *buffer)
                Read/write the mp4 box from/to BoxBuffer.
                Definition: box.cc:36
                -
                bool Read1(uint8_t *v) WARN_UNUSED_RESULT
                - + -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - - -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + + - +
                bool ChildExist(Box *child) WARN_UNUSED_RESULT
                Definition: box_reader.cc:136
                - -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - - - -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + + + +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                bool ReadWriteUInt64NBytes(uint64_t *v, size_t num_bytes)
                Definition: box_buffer.h:107
                - -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - - - - -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - - - - - -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + + + + +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + + + + + +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                Definition: box.cc:50
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - - +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + + -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool IgnoreBytes(size_t num_bytes)
                Definition: box_buffer.h:167
                A class to read bit streams.
                Definition: bit_reader.h:17
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - - - -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + + + +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + - - - - - -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + + + + +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadAllChildren(std::vector< T > *children) WARN_UNUSED_RESULT
                Definition: box_reader.h:163
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - - +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + +
                void Write(BufferWriter *writer)
                Definition: box.cc:25
                - -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - - + +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + +
                bool TryReadChildren(std::vector< T > *children) WARN_UNUSED_RESULT
                Definition: box_reader.h:139
                Class for reading MP4 boxes.
                Definition: box_reader.h:24
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - - - -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + + + +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                -
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                - + +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                +
                bool ReadWrite(BoxBuffer *buffer) override
                Read/write the mp4 box from/to BoxBuffer.
                + diff --git a/docs/dd/def/classedash__packager_1_1media_1_1TextTrackConfig.html b/docs/dd/def/classedash__packager_1_1media_1_1TextTrackConfig.html index 6d8753e584..c2aadde898 100644 --- a/docs/dd/def/classedash__packager_1_1media_1_1TextTrackConfig.html +++ b/docs/dd/def/classedash__packager_1_1media_1_1TextTrackConfig.html @@ -125,7 +125,7 @@ const std::string & id diff --git a/docs/dd/dfa/structedash__packager_1_1media_1_1MuxerOptions-members.html b/docs/dd/dfa/structedash__packager_1_1media_1_1MuxerOptions-members.html index 3cd2d98dea..98037289c6 100644 --- a/docs/dd/dfa/structedash__packager_1_1media_1_1MuxerOptions-members.html +++ b/docs/dd/dfa/structedash__packager_1_1media_1_1MuxerOptions-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d0f/local__file_8h_source.html b/docs/de/d0f/local__file_8h_source.html index 9253f8d9a3..16dc565361 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/d10/cenc_8h_source.html b/docs/de/d10/cenc_8h_source.html index f92c1b63ee..e65ce7d41a 100644 --- a/docs/de/d10/cenc_8h_source.html +++ b/docs/de/d10/cenc_8h_source.html @@ -146,7 +146,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 f3bc7454e5..5571bdf0d9 100644 --- a/docs/de/d12/container__names_8h_source.html +++ b/docs/de/d12/container__names_8h_source.html @@ -150,7 +150,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d15/media__stream_8cc_source.html b/docs/de/d15/media__stream_8cc_source.html index 0148f32f20..d11a143620 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/d17/cluster__builder_8cc_source.html b/docs/de/d17/cluster__builder_8cc_source.html index 6ceac4059c..edd7951b95 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/d19/classedash__packager_1_1media_1_1File.html b/docs/de/d19/classedash__packager_1_1media_1_1File.html index 5ffe5c5903..62011a9e7f 100644 --- a/docs/de/d19/classedash__packager_1_1media_1_1File.html +++ b/docs/de/d19/classedash__packager_1_1media_1_1File.html @@ -662,7 +662,7 @@ class ThreadedIoFile diff --git a/docs/de/d1f/structedash__packager_1_1media_1_1StreamDescriptor.html b/docs/de/d1f/structedash__packager_1_1media_1_1StreamDescriptor.html index 4d8415b29d..51eaf56635 100644 --- a/docs/de/d1f/structedash__packager_1_1media_1_1StreamDescriptor.html +++ b/docs/de/d1f/structedash__packager_1_1media_1_1StreamDescriptor.html @@ -128,7 +128,7 @@ std::string language diff --git a/docs/de/d34/offset__byte__queue_8h_source.html b/docs/de/d34/offset__byte__queue_8h_source.html index 3f0754ac33..742123e999 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/d3e/buffer__reader_8h_source.html b/docs/de/d3e/buffer__reader_8h_source.html index f3d7d7348c..c0a4f37ed8 100644 --- a/docs/de/d3e/buffer__reader_8h_source.html +++ b/docs/de/d3e/buffer__reader_8h_source.html @@ -161,7 +161,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html b/docs/de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html index 99b9f867f5..588b7ba7a1 100644 --- a/docs/de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html +++ b/docs/de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html @@ -149,7 +149,7 @@ Additional Inherited Members

                Detailed Description

                -

                Definition at line 86 of file box_definitions.h.

                +

                Definition at line 85 of file box_definitions.h.

                Member Function Documentation

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

                Implements edash_packager::media::mp4::Box.

                -

                Definition at line 258 of file box_definitions.cc.

                +

                Definition at line 260 of file box_definitions.cc.

                @@ -186,7 +186,7 @@ Additional Inherited Members diff --git a/docs/de/d4a/muxer__listener__internal_8h_source.html b/docs/de/d4a/muxer__listener__internal_8h_source.html index fffbc3b597..003e77ed42 100644 --- a/docs/de/d4a/muxer__listener__internal_8h_source.html +++ b/docs/de/d4a/muxer__listener__internal_8h_source.html @@ -144,7 +144,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d4c/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat-members.html b/docs/de/d4c/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat-members.html index 7684e07080..38820c5861 100644 --- a/docs/de/d4c/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat-members.html +++ b/docs/de/d4c/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d57/structedash__packager_1_1media_1_1MuxerOptions.html b/docs/de/d57/structedash__packager_1_1media_1_1MuxerOptions.html index 0adedc9a75..428c74ba88 100644 --- a/docs/de/d57/structedash__packager_1_1media_1_1MuxerOptions.html +++ b/docs/de/d57/structedash__packager_1_1media_1_1MuxerOptions.html @@ -271,7 +271,7 @@ std::string  diff --git a/docs/de/d59/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts.html b/docs/de/d59/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts.html index c3ab737848..3eeb0d8d21 100644 --- a/docs/de/d59/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts.html +++ b/docs/de/d59/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts.html @@ -148,7 +148,7 @@ const scoped_refptr
                diff --git a/docs/de/d5a/structedash__packager_1_1media_1_1mp4_1_1SchemeType-members.html b/docs/de/d5a/structedash__packager_1_1media_1_1mp4_1_1SchemeType-members.html index b8f1c881e7..7ba627aa1d 100644 --- a/docs/de/d5a/structedash__packager_1_1media_1_1mp4_1_1SchemeType-members.html +++ b/docs/de/d5a/structedash__packager_1_1media_1_1mp4_1_1SchemeType-members.html @@ -111,7 +111,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 03731f5bad..91f0425b71 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 946fa742f4..25c1f9135d 100644 --- a/docs/de/d5c/mpd__flags_8h_source.html +++ b/docs/de/d5c/mpd__flags_8h_source.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d68/structedash__packager_1_1media_1_1mp4_1_1Track-members.html b/docs/de/d68/structedash__packager_1_1media_1_1mp4_1_1Track-members.html index e37c296cc6..c3e650db80 100644 --- a/docs/de/d68/structedash__packager_1_1media_1_1mp4_1_1Track-members.html +++ b/docs/de/d68/structedash__packager_1_1media_1_1mp4_1_1Track-members.html @@ -109,7 +109,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 4d438ac108..6262333120 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 de0685dae2..e8925f8287 100644 --- a/docs/de/d70/http__key__fetcher_8cc_source.html +++ b/docs/de/d70/http__key__fetcher_8cc_source.html @@ -236,7 +236,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d77/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener-members.html b/docs/de/d77/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener-members.html index e04b9eb8ef..a3c1ccb7d4 100644 --- a/docs/de/d77/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener-members.html +++ b/docs/de/d77/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener-members.html @@ -111,7 +111,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 c5ec0d825e..3ccb0db441 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 ed10b921cd..f731026660 100644 --- a/docs/de/d7b/mp4__media__parser_8h_source.html +++ b/docs/de/d7b/mp4__media__parser_8h_source.html @@ -217,7 +217,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d83/box__definitions__comparison_8h_source.html b/docs/de/d83/box__definitions__comparison_8h_source.html index 095cde82d4..c8ddfee0c4 100644 --- a/docs/de/d83/box__definitions__comparison_8h_source.html +++ b/docs/de/d83/box__definitions__comparison_8h_source.html @@ -254,8 +254,8 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
                165  return lhs.type == rhs.type;
                166 }
                167 
                -
                168 inline bool operator==(const AVCDecoderConfigurationRecord& lhs,
                -
                169  const AVCDecoderConfigurationRecord& rhs) {
                +
                168 inline bool operator==(const CodecConfigurationRecord& lhs,
                +
                169  const CodecConfigurationRecord& rhs) {
                170  return lhs.data == rhs.data;
                171 }
                172 
                @@ -270,7 +270,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
                181  lhs.data_reference_index == rhs.data_reference_index &&
                182  lhs.width == rhs.width && lhs.height == rhs.height &&
                183  lhs.pixel_aspect == rhs.pixel_aspect && lhs.sinf == rhs.sinf &&
                -
                184  lhs.avcc == rhs.avcc;
                +
                184  lhs.codec_config_record == rhs.codec_config_record;
                185 }
                186 
                187 inline bool operator==(const ESDescriptor& lhs, const ESDescriptor& rhs) {
                @@ -457,7 +457,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d87/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo-members.html b/docs/de/d87/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo-members.html index 4d697c016f..5f9232052b 100644 --- a/docs/de/d87/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo-members.html +++ b/docs/de/d87/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d8b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes.html b/docs/de/d8b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes.html index 458c61951f..df28d0c8b2 100644 --- a/docs/de/d8b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes.html +++ b/docs/de/d8b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes.html @@ -142,7 +142,7 @@ Additional Inherited Members diff --git a/docs/de/d8d/structedash__packager_1_1media_1_1H264SliceHeader.html b/docs/de/d8d/structedash__packager_1_1media_1_1H264SliceHeader.html index f9672fcc58..8fab31c59b 100644 --- a/docs/de/d8d/structedash__packager_1_1media_1_1H264SliceHeader.html +++ b/docs/de/d8d/structedash__packager_1_1media_1_1H264SliceHeader.html @@ -268,7 +268,7 @@ int slice_beta_offset_div2

                Detailed Description

                -

                Definition at line 188 of file h264_parser.h.

                +

                Definition at line 169 of file h264_parser.h.


                The documentation for this struct was generated from the following files:
                • media/filters/h264_parser.h
                • media/filters/h264_parser.cc
                • @@ -276,7 +276,7 @@ int slice_beta_offset_div2 diff --git a/docs/de/d93/classedash__packager_1_1media_1_1ByteQueue-members.html b/docs/de/d93/classedash__packager_1_1media_1_1ByteQueue-members.html index fe6038bd99..41a13a426c 100644 --- a/docs/de/d93/classedash__packager_1_1media_1_1ByteQueue-members.html +++ b/docs/de/d93/classedash__packager_1_1media_1_1ByteQueue-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d98/classedash__packager_1_1media_1_1WebMAudioClient.html b/docs/de/d98/classedash__packager_1_1media_1_1WebMAudioClient.html index 27212a41c3..ee88661489 100644 --- a/docs/de/d98/classedash__packager_1_1media_1_1WebMAudioClient.html +++ b/docs/de/d98/classedash__packager_1_1media_1_1WebMAudioClient.html @@ -199,7 +199,7 @@ An empty scoped_refptr if there was unexpected values in the provided parameters diff --git a/docs/de/d9d/classedash__packager_1_1media_1_1TracksBuilder-members.html b/docs/de/d9d/classedash__packager_1_1media_1_1TracksBuilder-members.html index 680f9a1abd..880be9dbb2 100644 --- a/docs/de/d9d/classedash__packager_1_1media_1_1TracksBuilder-members.html +++ b/docs/de/d9d/classedash__packager_1_1media_1_1TracksBuilder-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/d9e/classedash__packager_1_1media_1_1TextTrack.html b/docs/de/d9e/classedash__packager_1_1media_1_1TextTrack.html index 73310cbf0b..90614cd804 100644 --- a/docs/de/d9e/classedash__packager_1_1media_1_1TextTrack.html +++ b/docs/de/d9e/classedash__packager_1_1media_1_1TextTrack.html @@ -109,7 +109,7 @@ virtual void addWebVTTCue< diff --git a/docs/de/da0/classedash__packager_1_1media_1_1AesCbcCtsDecryptor-members.html b/docs/de/da0/classedash__packager_1_1media_1_1AesCbcCtsDecryptor-members.html index 66e5c909a7..8fef4542e7 100644 --- a/docs/de/da0/classedash__packager_1_1media_1_1AesCbcCtsDecryptor-members.html +++ b/docs/de/da0/classedash__packager_1_1media_1_1AesCbcCtsDecryptor-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/da5/classedash__packager_1_1media_1_1WebMParserClient.html b/docs/de/da5/classedash__packager_1_1media_1_1WebMParserClient.html index 358ea8d7bf..3da8e4c4cc 100644 --- a/docs/de/da5/classedash__packager_1_1media_1_1WebMParserClient.html +++ b/docs/de/da5/classedash__packager_1_1media_1_1WebMParserClient.html @@ -150,7 +150,7 @@ Protected Member Functions diff --git a/docs/de/da6/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator-members.html b/docs/de/da6/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator-members.html index 5d625df2c9..4350548868 100644 --- a/docs/de/da6/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator-members.html +++ b/docs/de/da6/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/da7/classedash__packager_1_1media_1_1AudioTimestampHelper-members.html b/docs/de/da7/classedash__packager_1_1media_1_1AudioTimestampHelper-members.html index 19c405f6c5..db3c01512a 100644 --- a/docs/de/da7/classedash__packager_1_1media_1_1AudioTimestampHelper-members.html +++ b/docs/de/da7/classedash__packager_1_1media_1_1AudioTimestampHelper-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dab/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun-members.html b/docs/de/dab/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun-members.html index b9b81ddc81..27cfd3bcc7 100644 --- a/docs/de/dab/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun-members.html +++ b/docs/de/dab/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun-members.html @@ -123,7 +123,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 68a5d746d5..8cb38a218f 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/db1/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor.html b/docs/de/db1/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor.html index de0fbf3677..8511f10f3f 100644 --- a/docs/de/db1/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor.html +++ b/docs/de/db1/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor.html @@ -166,7 +166,7 @@ void set_decoder_specific_ diff --git a/docs/de/db4/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo-members.html b/docs/de/db4/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo-members.html index af0f09060f..c4d1dd5eb3 100644 --- a/docs/de/db4/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo-members.html +++ b/docs/de/db4/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dc1/demuxer_8h_source.html b/docs/de/dc1/demuxer_8h_source.html index e9f82f751b..7bf592bf90 100644 --- a/docs/de/dc1/demuxer_8h_source.html +++ b/docs/de/dc1/demuxer_8h_source.html @@ -171,7 +171,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html b/docs/de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html index 6b8b9c8033..8a97418b78 100644 --- a/docs/de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html +++ b/docs/de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html @@ -143,7 +143,7 @@ Additional Inherited Members

                  Detailed Description

                  -

                  Definition at line 59 of file box_definitions.h.

                  +

                  Definition at line 58 of file box_definitions.h.

                  Member Function Documentation

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

                  Implements edash_packager::media::mp4::Box.

                  -

                  Definition at line 159 of file box_definitions.cc.

                  +

                  Definition at line 161 of file box_definitions.cc.

                  @@ -180,7 +180,7 @@ Additional Inherited Members diff --git a/docs/de/dcc/mock__mpd__notifier_8cc_source.html b/docs/de/dcc/mock__mpd__notifier_8cc_source.html index ce29d9593c..8832e05402 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 481c710c9f..8e3fd843a0 100644 --- a/docs/de/dcf/file__closer_8h_source.html +++ b/docs/de/dcf/file__closer_8h_source.html @@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dd4/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer-members.html b/docs/de/dd4/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer-members.html index ed9f486a7c..cf8daaf0b4 100644 --- a/docs/de/dd4/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer-members.html +++ b/docs/de/dd4/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer-members.html @@ -116,7 +116,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 f0e7844e19..2f0b1183bb 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 e562a7832d..b83c5f5468 100644 --- a/docs/de/dd6/muxer__listener__test__helper_8cc_source.html +++ b/docs/de/dd6/muxer__listener__test__helper_8cc_source.html @@ -130,87 +130,83 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
                  41  const uint32_t kTimeScale = 10;
                  42  const uint64_t kVideoStreamDuration = 200;
                  43  const VideoCodec kH264Codec = kCodecH264;
                  -
                  44  const uint8_t kH264Profile = 1;
                  -
                  45  const uint8_t kH264CompatibleProfile = 1;
                  -
                  46  const uint8_t kH264Level = 1;
                  -
                  47  const char* kLanuageUndefined = "und";
                  -
                  48  const uint16_t kWidth = 720;
                  -
                  49  const uint16_t kHeight = 480;
                  -
                  50  const uint32_t kPixelWidth = 1;
                  -
                  51  const uint32_t kPixelHeight = 1;
                  -
                  52  const uint8_t kNaluLengthSize = 1;
                  -
                  53  const std::vector<uint8_t> kExtraData;
                  -
                  54  const bool kEncryptedFlag = false;
                  -
                  55  VideoStreamInfoParameters params;
                  -
                  56  params.track_id = kTrackId;
                  -
                  57  params.time_scale = kTimeScale;
                  -
                  58  params.duration = kVideoStreamDuration;
                  -
                  59  params.codec = kH264Codec;
                  -
                  60  params.codec_string = VideoStreamInfo::GetCodecString(
                  -
                  61  kCodecH264, kH264Profile, kH264CompatibleProfile, kH264Level);
                  -
                  62  params.language = kLanuageUndefined;
                  -
                  63  params.width = kWidth;
                  -
                  64  params.height = kHeight;
                  -
                  65  params.pixel_width = kPixelWidth;
                  -
                  66  params.pixel_height = kPixelHeight;
                  -
                  67  params.nalu_length_size = kNaluLengthSize;
                  -
                  68  params.extra_data = kExtraData;
                  -
                  69  params.is_encrypted = kEncryptedFlag;
                  -
                  70  return params;
                  -
                  71 }
                  -
                  72 
                  -
                  73 OnMediaEndParameters GetDefaultOnMediaEndParams() {
                  -
                  74  // Values for {init, index} range {start, end} are arbitrary, but makes sure
                  -
                  75  // that it is monotonically increasing and contiguous.
                  -
                  76  const bool kHasInitRange = true;
                  -
                  77  const uint64_t kInitRangeStart = 0;
                  -
                  78  const uint64_t kInitRangeEnd = kInitRangeStart + 120;
                  -
                  79  const uint64_t kHasIndexRange = true;
                  -
                  80  const uint64_t kIndexRangeStart = kInitRangeEnd + 1;
                  -
                  81  const uint64_t kIndexRangeEnd = kIndexRangeStart + 100;
                  -
                  82  const float kMediaDuration = 10.5f;
                  -
                  83  const uint64_t kFileSize = 10000;
                  -
                  84  OnMediaEndParameters param = {
                  -
                  85  kHasInitRange, kInitRangeStart, kInitRangeEnd, kHasIndexRange,
                  -
                  86  kIndexRangeStart, kIndexRangeEnd, kMediaDuration, kFileSize};
                  -
                  87  return param;
                  -
                  88 }
                  -
                  89 
                  -
                  90 void SetDefaultMuxerOptionsValues(MuxerOptions* muxer_options) {
                  -
                  91  muxer_options->single_segment = true;
                  -
                  92  muxer_options->segment_duration = 10.0;
                  -
                  93  muxer_options->fragment_duration = 10.0;
                  -
                  94  muxer_options->segment_sap_aligned = true;
                  -
                  95  muxer_options->fragment_sap_aligned = true;
                  -
                  96  muxer_options->num_subsegments_per_sidx = 0;
                  -
                  97  muxer_options->output_file_name = "test_output_file_name.mp4";
                  -
                  98  muxer_options->segment_template.clear();
                  -
                  99  muxer_options->temp_dir.clear();
                  -
                  100 }
                  -
                  101 
                  -
                  102 void ExpectMediaInfoEqual(const MediaInfo& expect, const MediaInfo& actual) {
                  -
                  103  ASSERT_TRUE(MediaInfoEqual(expect, actual));
                  -
                  104 }
                  -
                  105 
                  -
                  106 bool MediaInfoEqual(const MediaInfo& expect, const MediaInfo& actual) {
                  -
                  107  // I found out here
                  -
                  108  // https://groups.google.com/forum/#!msg/protobuf/5sOExQkB2eQ/ZSBNZI0K54YJ
                  -
                  109  // that the best way to check equality is to serialize and check equality.
                  -
                  110  std::string expect_serialized;
                  -
                  111  std::string actual_serialized;
                  -
                  112  EXPECT_TRUE(expect.SerializeToString(&expect_serialized));
                  -
                  113  EXPECT_TRUE(actual.SerializeToString(&actual_serialized));
                  -
                  114  EXPECT_EQ(expect_serialized, actual_serialized);
                  -
                  115  return expect_serialized == actual_serialized;
                  -
                  116 }
                  -
                  117 
                  -
                  118 } // namespace media
                  -
                  119 } // namespace edash_packager
                  -
                  static std::string GetCodecString(VideoCodec codec, uint8_t profile, uint8_t compatible_profiles, uint8_t level)
                  +
                  44  const char* kCodecString = "avc1.010101";
                  +
                  45  const char* kLanuageUndefined = "und";
                  +
                  46  const uint16_t kWidth = 720;
                  +
                  47  const uint16_t kHeight = 480;
                  +
                  48  const uint32_t kPixelWidth = 1;
                  +
                  49  const uint32_t kPixelHeight = 1;
                  +
                  50  const uint8_t kNaluLengthSize = 1;
                  +
                  51  const std::vector<uint8_t> kExtraData;
                  +
                  52  const bool kEncryptedFlag = false;
                  +
                  53  VideoStreamInfoParameters params;
                  +
                  54  params.track_id = kTrackId;
                  +
                  55  params.time_scale = kTimeScale;
                  +
                  56  params.duration = kVideoStreamDuration;
                  +
                  57  params.codec = kH264Codec;
                  +
                  58  params.codec_string = kCodecString;
                  +
                  59  params.language = kLanuageUndefined;
                  +
                  60  params.width = kWidth;
                  +
                  61  params.height = kHeight;
                  +
                  62  params.pixel_width = kPixelWidth;
                  +
                  63  params.pixel_height = kPixelHeight;
                  +
                  64  params.nalu_length_size = kNaluLengthSize;
                  +
                  65  params.extra_data = kExtraData;
                  +
                  66  params.is_encrypted = kEncryptedFlag;
                  +
                  67  return params;
                  +
                  68 }
                  +
                  69 
                  +
                  70 OnMediaEndParameters GetDefaultOnMediaEndParams() {
                  +
                  71  // Values for {init, index} range {start, end} are arbitrary, but makes sure
                  +
                  72  // that it is monotonically increasing and contiguous.
                  +
                  73  const bool kHasInitRange = true;
                  +
                  74  const uint64_t kInitRangeStart = 0;
                  +
                  75  const uint64_t kInitRangeEnd = kInitRangeStart + 120;
                  +
                  76  const uint64_t kHasIndexRange = true;
                  +
                  77  const uint64_t kIndexRangeStart = kInitRangeEnd + 1;
                  +
                  78  const uint64_t kIndexRangeEnd = kIndexRangeStart + 100;
                  +
                  79  const float kMediaDuration = 10.5f;
                  +
                  80  const uint64_t kFileSize = 10000;
                  +
                  81  OnMediaEndParameters param = {
                  +
                  82  kHasInitRange, kInitRangeStart, kInitRangeEnd, kHasIndexRange,
                  +
                  83  kIndexRangeStart, kIndexRangeEnd, kMediaDuration, kFileSize};
                  +
                  84  return param;
                  +
                  85 }
                  +
                  86 
                  +
                  87 void SetDefaultMuxerOptionsValues(MuxerOptions* muxer_options) {
                  +
                  88  muxer_options->single_segment = true;
                  +
                  89  muxer_options->segment_duration = 10.0;
                  +
                  90  muxer_options->fragment_duration = 10.0;
                  +
                  91  muxer_options->segment_sap_aligned = true;
                  +
                  92  muxer_options->fragment_sap_aligned = true;
                  +
                  93  muxer_options->num_subsegments_per_sidx = 0;
                  +
                  94  muxer_options->output_file_name = "test_output_file_name.mp4";
                  +
                  95  muxer_options->segment_template.clear();
                  +
                  96  muxer_options->temp_dir.clear();
                  +
                  97 }
                  +
                  98 
                  +
                  99 void ExpectMediaInfoEqual(const MediaInfo& expect, const MediaInfo& actual) {
                  +
                  100  ASSERT_TRUE(MediaInfoEqual(expect, actual));
                  +
                  101 }
                  +
                  102 
                  +
                  103 bool MediaInfoEqual(const MediaInfo& expect, const MediaInfo& actual) {
                  +
                  104  // I found out here
                  +
                  105  // https://groups.google.com/forum/#!msg/protobuf/5sOExQkB2eQ/ZSBNZI0K54YJ
                  +
                  106  // that the best way to check equality is to serialize and check equality.
                  +
                  107  std::string expect_serialized;
                  +
                  108  std::string actual_serialized;
                  +
                  109  EXPECT_TRUE(expect.SerializeToString(&expect_serialized));
                  +
                  110  EXPECT_TRUE(actual.SerializeToString(&actual_serialized));
                  +
                  111  EXPECT_EQ(expect_serialized, actual_serialized);
                  +
                  112  return expect_serialized == actual_serialized;
                  +
                  113 }
                  +
                  114 
                  +
                  115 } // namespace media
                  +
                  116 } // namespace edash_packager
                  diff --git a/docs/de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html b/docs/de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html index d7f9b6424f..46c165fbaa 100644 --- a/docs/de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html +++ b/docs/de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html @@ -141,7 +141,7 @@ Additional Inherited Members

                  Detailed Description

                  -

                  Definition at line 387 of file box_definitions.h.

                  +

                  Definition at line 377 of file box_definitions.h.

                  Member Function Documentation

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

                  Implements edash_packager::media::mp4::Box.

                  -

                  Definition at line 1326 of file box_definitions.cc.

                  +

                  Definition at line 1296 of file box_definitions.cc.

                  @@ -178,7 +178,7 @@ Additional Inherited Members diff --git a/docs/de/de9/classedash__packager_1_1media_1_1LibcryptoThreading.html b/docs/de/de9/classedash__packager_1_1media_1_1LibcryptoThreading.html index 54cfdd489c..c89c0cec6a 100644 --- a/docs/de/de9/classedash__packager_1_1media_1_1LibcryptoThreading.html +++ b/docs/de/de9/classedash__packager_1_1media_1_1LibcryptoThreading.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dfa/muxer__listener_8h_source.html b/docs/de/dfa/muxer__listener_8h_source.html index 6115211ff9..59c0ab1654 100644 --- a/docs/de/dfa/muxer__listener_8h_source.html +++ b/docs/de/dfa/muxer__listener_8h_source.html @@ -204,7 +204,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dfb/structedash__packager_1_1media_1_1H264ModificationOfPicNum-members.html b/docs/de/dfb/structedash__packager_1_1media_1_1H264ModificationOfPicNum-members.html index 01a30cde79..9c1fa1396c 100644 --- a/docs/de/dfb/structedash__packager_1_1media_1_1H264ModificationOfPicNum-members.html +++ b/docs/de/dfb/structedash__packager_1_1media_1_1H264ModificationOfPicNum-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dfc/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264-members.html b/docs/de/dfc/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264-members.html index e9710ccee3..a7750996dc 100644 --- a/docs/de/dfc/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264-members.html +++ b/docs/de/dfc/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/de/dfd/stream__info_8cc_source.html b/docs/de/dfd/stream__info_8cc_source.html index 69f87b766a..355c05758a 100644 --- a/docs/de/dfd/stream__info_8cc_source.html +++ b/docs/de/dfd/stream__info_8cc_source.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d1a/offset__byte__queue_8cc_source.html b/docs/df/d1a/offset__byte__queue_8cc_source.html index b0f8eb021d..b9e8624d48 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/composition__offset__iterator_8h_source.html b/docs/df/d1c/composition__offset__iterator_8h_source.html index e68457e1fa..5d28438190 100644 --- a/docs/df/d1c/composition__offset__iterator_8h_source.html +++ b/docs/df/d1c/composition__offset__iterator_8h_source.html @@ -140,14 +140,14 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
                  CompositionOffsetIterator(const CompositionTimeToSample &composition_time_to_sample)
                  Create CompositionOffsetIterator from composition time to sample box.
                  - + diff --git a/docs/df/d1f/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator-members.html b/docs/df/d1f/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator-members.html index 08e95a0b7a..b49a711793 100644 --- a/docs/df/d1f/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator-members.html +++ b/docs/df/d1f/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator-members.html @@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html b/docs/df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html index c8aab0bf7d..0263699d3d 100644 --- a/docs/df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html +++ b/docs/df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html @@ -173,7 +173,7 @@ Additional Inherited Members

                  Detailed Description

                  -

                  Definition at line 477 of file box_definitions.h.

                  +

                  Definition at line 467 of file box_definitions.h.

                  Member Function Documentation

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

                  Implements edash_packager::media::mp4::Box.

                  -

                  Definition at line 1659 of file box_definitions.cc.

                  +

                  Definition at line 1629 of file box_definitions.cc.

                  @@ -210,7 +210,7 @@ Additional Inherited Members diff --git a/docs/df/d22/validate__flag_8h_source.html b/docs/df/d22/validate__flag_8h_source.html index ba9e76a880..8617a93cdc 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/d30/classedash__packager_1_1media_1_1ContentEncoding.html b/docs/df/d30/classedash__packager_1_1media_1_1ContentEncoding.html index 487e049e68..a88e41726f 100644 --- a/docs/df/d30/classedash__packager_1_1media_1_1ContentEncoding.html +++ b/docs/df/d30/classedash__packager_1_1media_1_1ContentEncoding.html @@ -208,7 +208,7 @@ Static Public Attributes diff --git a/docs/df/d31/muxer__util_8cc_source.html b/docs/df/d31/muxer__util_8cc_source.html index 017a1d6dc4..f4793dab4c 100644 --- a/docs/df/d31/muxer__util_8cc_source.html +++ b/docs/df/d31/muxer__util_8cc_source.html @@ -247,7 +247,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 ff3c2388b0..89bb33898a 100644 --- a/docs/df/d32/audio__stream__info_8h_source.html +++ b/docs/df/d32/audio__stream__info_8h_source.html @@ -183,7 +183,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d3c/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime-members.html b/docs/df/d3c/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime-members.html index 42d2085783..6fc3bb7503 100644 --- a/docs/df/d3c/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime-members.html +++ b/docs/df/d3c/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d40/classedash__packager_1_1media_1_1Cluster.html b/docs/df/d40/classedash__packager_1_1media_1_1Cluster.html index d301f35aed..dce86283b5 100644 --- a/docs/df/d40/classedash__packager_1_1media_1_1Cluster.html +++ b/docs/df/d40/classedash__packager_1_1media_1_1Cluster.html @@ -116,7 +116,7 @@ int size () const diff --git a/docs/df/d43/classedash__packager_1_1media_1_1mp4_1_1Segmenter-members.html b/docs/df/d43/classedash__packager_1_1media_1_1mp4_1_1Segmenter-members.html index 4fe28e4e90..1c6409ab62 100644 --- a/docs/df/d43/classedash__packager_1_1media_1_1mp4_1_1Segmenter-members.html +++ b/docs/df/d43/classedash__packager_1_1media_1_1mp4_1_1Segmenter-members.html @@ -116,7 +116,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d5b/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts-members.html b/docs/df/d5b/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts-members.html index 839a19e484..6c0872b31b 100644 --- a/docs/df/d5b/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts-members.html +++ b/docs/df/d5b/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d5e/classedash__packager_1_1media_1_1mp2t_1_1TsSection-members.html b/docs/df/d5e/classedash__packager_1_1media_1_1mp2t_1_1TsSection-members.html index f0015e5084..c03b39e9e9 100644 --- a/docs/df/d5e/classedash__packager_1_1media_1_1mp2t_1_1TsSection-members.html +++ b/docs/df/d5e/classedash__packager_1_1media_1_1mp2t_1_1TsSection-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html b/docs/df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html index 0f87fb2bc0..765243d5d5 100644 --- a/docs/df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html +++ b/docs/df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html @@ -115,6 +115,9 @@ FourCC BoxType () cons   uint32_t ComputeSize () override   + +FourCC GetActualFormat () const +  - Public Member Functions inherited from edash_packager::media::mp4::Box bool Parse (BoxReader *reader)   @@ -153,7 +156,7 @@ Additional Inherited Members

                  Detailed Description

                  -

                  Definition at line 220 of file box_definitions.h.

                  +

                  Definition at line 206 of file box_definitions.h.

                  Member Function Documentation

                  @@ -179,7 +182,7 @@ Additional Inherited Members

                  Implements edash_packager::media::mp4::Box.

                  -

                  Definition at line 1114 of file box_definitions.cc.

                  +

                  Definition at line 1084 of file box_definitions.cc.

                  @@ -190,7 +193,7 @@ Additional Inherited Members diff --git a/docs/df/d67/opus__packet__builder_8h_source.html b/docs/df/d67/opus__packet__builder_8h_source.html index 4e7d8e98e1..10c9210c6e 100644 --- a/docs/df/d67/opus__packet__builder_8h_source.html +++ b/docs/df/d67/opus__packet__builder_8h_source.html @@ -136,7 +136,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html b/docs/df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html index 71954e77b4..a16a19cdff 100644 --- a/docs/df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html +++ b/docs/df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html @@ -115,6 +115,9 @@ FourCC BoxType () cons   uint32_t ComputeSize () override   + +FourCC GetActualFormat () const +  - Public Member Functions inherited from edash_packager::media::mp4::Box bool Parse (BoxReader *reader)   @@ -141,9 +144,9 @@ uint16_t height ProtectionSchemeInfo sinf   - -AVCDecoderConfigurationRecord avcc -  + +CodecConfigurationRecord codec_config_record +  @@ -153,7 +156,7 @@ Additional Inherited Members

                  Additional Inherited Members

                  Detailed Description

                  -

                  Definition at line 198 of file box_definitions.h.

                  +

                  Definition at line 182 of file box_definitions.h.

                  Member Function Documentation

                  @@ -179,7 +182,7 @@ Additional Inherited Members

                  Implements edash_packager::media::mp4::Box.

                  -

                  Definition at line 1020 of file box_definitions.cc.

                  +

                  Definition at line 990 of file box_definitions.cc.

                  @@ -190,7 +193,7 @@ Additional Inherited Members diff --git a/docs/df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html b/docs/df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html index 4aa6b6784a..fc82a18711 100644 --- a/docs/df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html +++ b/docs/df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html @@ -143,7 +143,7 @@ Additional Inherited Members

                  Detailed Description

                  -

                  Definition at line 275 of file box_definitions.h.

                  +

                  Definition at line 265 of file box_definitions.h.

                  Member Function Documentation

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

                  Implements edash_packager::media::mp4::Box.

                  -

                  Definition at line 549 of file box_definitions.cc.

                  +

                  Definition at line 551 of file box_definitions.cc.

                  @@ -180,7 +180,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 8fb4ad7df0..9c5c1df408 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/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html b/docs/df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html index 5c9bb28f21..5d193f24ae 100644 --- a/docs/df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html +++ b/docs/df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html @@ -143,7 +143,7 @@ Additional Inherited Members

                  Detailed Description

                  -

                  Definition at line 441 of file box_definitions.h.

                  +

                  Definition at line 431 of file box_definitions.h.

                  Member Function Documentation

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

                  Implements edash_packager::media::mp4::Box.

                  -

                  Definition at line 1486 of file box_definitions.cc.

                  +

                  Definition at line 1456 of file box_definitions.cc.

                  @@ -180,7 +180,7 @@ Additional Inherited Members diff --git a/docs/df/d96/xml__node_8cc_source.html b/docs/df/d96/xml__node_8cc_source.html index ba9df0557f..699dffbcec 100644 --- a/docs/df/d96/xml__node_8cc_source.html +++ b/docs/df/d96/xml__node_8cc_source.html @@ -469,7 +469,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/da9/classedash__packager_1_1media_1_1mp4_1_1Fragmenter-members.html b/docs/df/da9/classedash__packager_1_1media_1_1mp4_1_1Fragmenter-members.html index fa0249f8ec..962a67e1c7 100644 --- a/docs/df/da9/classedash__packager_1_1media_1_1mp4_1_1Fragmenter-members.html +++ b/docs/df/da9/classedash__packager_1_1media_1_1mp4_1_1Fragmenter-members.html @@ -111,7 +111,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 08b0325ab4..eab0129082 100644 --- a/docs/df/dad/decrypt__config_8h_source.html +++ b/docs/df/dad/decrypt__config_8h_source.html @@ -151,7 +151,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/db4/classedash__packager_1_1media_1_1BitReader.html b/docs/df/db4/classedash__packager_1_1media_1_1BitReader.html index 51864ef6c5..78af6f749f 100644 --- a/docs/df/db4/classedash__packager_1_1media_1_1BitReader.html +++ b/docs/df/db4/classedash__packager_1_1media_1_1BitReader.html @@ -251,7 +251,7 @@ template<typename T > diff --git a/docs/df/dbc/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset-members.html b/docs/df/dbc/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset-members.html index 0457f9bd38..e05f47dbbd 100644 --- a/docs/df/dbc/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset-members.html +++ b/docs/df/dbc/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/dd1/structedash__packager_1_1media_1_1mp4_1_1FileType-members.html b/docs/df/dd1/structedash__packager_1_1media_1_1mp4_1_1FileType-members.html index 2dc7dfb075..1f162dbd18 100644 --- a/docs/df/dd1/structedash__packager_1_1media_1_1mp4_1_1FileType-members.html +++ b/docs/df/dd1/structedash__packager_1_1media_1_1mp4_1_1FileType-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/dd2/classedash__packager_1_1MockMpdBuilder-members.html b/docs/df/dd2/classedash__packager_1_1MockMpdBuilder-members.html index a69454df21..a5e81aad57 100644 --- a/docs/df/dd2/classedash__packager_1_1MockMpdBuilder-members.html +++ b/docs/df/dd2/classedash__packager_1_1MockMpdBuilder-members.html @@ -111,7 +111,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 6623402682..7f1b952a49 100644 --- a/docs/df/dd2/mpd__utils_8h_source.html +++ b/docs/df/dd2/mpd__utils_8h_source.html @@ -165,7 +165,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/dde/classedash__packager_1_1media_1_1BufferWriter.html b/docs/df/dde/classedash__packager_1_1media_1_1BufferWriter.html index 5c18db6dc5..0b1df1f174 100644 --- a/docs/df/dde/classedash__packager_1_1media_1_1BufferWriter.html +++ b/docs/df/dde/classedash__packager_1_1media_1_1BufferWriter.html @@ -301,7 +301,7 @@ void AppendInt (int64_ diff --git a/docs/df/dde/ts__section__psi_8cc_source.html b/docs/df/dde/ts__section__psi_8cc_source.html index 83e2b0ea32..18f3b90496 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/de3/structedash__packager_1_1media_1_1mp4_1_1TrackHeader-members.html b/docs/df/de3/structedash__packager_1_1media_1_1mp4_1_1TrackHeader-members.html index 956b6edcb7..4694f2e0ad 100644 --- a/docs/df/de3/structedash__packager_1_1media_1_1mp4_1_1TrackHeader-members.html +++ b/docs/df/de3/structedash__packager_1_1media_1_1mp4_1_1TrackHeader-members.html @@ -123,7 +123,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/de3/text__track__config_8cc_source.html b/docs/df/de3/text__track__config_8cc_source.html index 97b2c426dd..08aaced92a 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/de7/classedash__packager_1_1media_1_1MuxerListener.html b/docs/df/de7/classedash__packager_1_1media_1_1MuxerListener.html index c16df452b1..b624a64b02 100644 --- a/docs/df/de7/classedash__packager_1_1media_1_1MuxerListener.html +++ b/docs/df/de7/classedash__packager_1_1media_1_1MuxerListener.html @@ -177,7 +177,7 @@ virtual void OnNewSegment< diff --git a/docs/df/de9/segment__info_8h_source.html b/docs/df/de9/segment__info_8h_source.html index 93bbd4841f..52d0f6fde1 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/dec/classedash__packager_1_1media_1_1MuxerListener-members.html b/docs/df/dec/classedash__packager_1_1media_1_1MuxerListener-members.html index 1f8659589f..81c7327d91 100644 --- a/docs/df/dec/classedash__packager_1_1media_1_1MuxerListener-members.html +++ b/docs/df/dec/classedash__packager_1_1media_1_1MuxerListener-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/df/dfa/classedash__packager_1_1media_1_1RsaPublicKey-members.html b/docs/df/dfa/classedash__packager_1_1media_1_1RsaPublicKey-members.html index 496cd2a1b9..e497dabc72 100644 --- a/docs/df/dfa/classedash__packager_1_1media_1_1RsaPublicKey-members.html +++ b/docs/df/dfa/classedash__packager_1_1media_1_1RsaPublicKey-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "../../search",false,'Search'); diff --git a/docs/dir_2618cd273dea54f184e42d7a562af818.html b/docs/dir_2618cd273dea54f184e42d7a562af818.html index 5b70568d33..241a2b543a 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 dd83beda90..c79e730b3c 100644 --- a/docs/dir_279fd47bebb21302c25cfb685e84c359.html +++ b/docs/dir_279fd47bebb21302c25cfb685e84c359.html @@ -113,7 +113,7 @@ Files diff --git a/docs/dir_39dc0668bd5a501998f94e8b4e546c71.html b/docs/dir_39dc0668bd5a501998f94e8b4e546c71.html index 3ccf4df481..15f527d3c3 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 379f343699..6f6b700bf7 100644 --- a/docs/dir_3e9291fd7a18fdecc763294cb2628910.html +++ b/docs/dir_3e9291fd7a18fdecc763294cb2628910.html @@ -173,7 +173,7 @@ Files diff --git a/docs/dir_49627ef5ef0630f6cf11dd06344c4cf0.html b/docs/dir_49627ef5ef0630f6cf11dd06344c4cf0.html index d7ac5bc3b4..b583a51b38 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 5fd88daa4f..2b4a26fd28 100644 --- a/docs/dir_5039d854a18988ed1f1dbebc120ffbf7.html +++ b/docs/dir_5039d854a18988ed1f1dbebc120ffbf7.html @@ -149,7 +149,7 @@ Files diff --git a/docs/dir_5eb2e460866db0ed29e32d64402e5c22.html b/docs/dir_5eb2e460866db0ed29e32d64402e5c22.html index c1d0f3d28b..8037cff6a5 100644 --- a/docs/dir_5eb2e460866db0ed29e32d64402e5c22.html +++ b/docs/dir_5eb2e460866db0ed29e32d64402e5c22.html @@ -85,6 +85,10 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); + + + + @@ -103,7 +107,7 @@ Files diff --git a/docs/dir_65f7acfa8cf3a5f1edc11faa2428b914.html b/docs/dir_65f7acfa8cf3a5f1edc11faa2428b914.html index 71a0610894..e19b169640 100644 --- a/docs/dir_65f7acfa8cf3a5f1edc11faa2428b914.html +++ b/docs/dir_65f7acfa8cf3a5f1edc11faa2428b914.html @@ -99,7 +99,7 @@ Directories diff --git a/docs/dir_679a6f4e9fa092b388fc986148018f2a.html b/docs/dir_679a6f4e9fa092b388fc986148018f2a.html index 2ba2ff5484..a9bd640da0 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 1e99a2251b..7302c66203 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 43af60cf93..a81118588d 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 c97a2f87df..9f89156702 100644 --- a/docs/dir_aa73376d632f252584a1c0dfbefab2c4.html +++ b/docs/dir_aa73376d632f252584a1c0dfbefab2c4.html @@ -109,7 +109,7 @@ Files diff --git a/docs/dir_c6ada2450b25ab5438a4dba6c9b890af.html b/docs/dir_c6ada2450b25ab5438a4dba6c9b890af.html index ad41dbc9b8..e23b8c386b 100644 --- a/docs/dir_c6ada2450b25ab5438a4dba6c9b890af.html +++ b/docs/dir_c6ada2450b25ab5438a4dba6c9b890af.html @@ -213,7 +213,7 @@ Files diff --git a/docs/dir_d422163b96683743ed3963d4aac17747.html b/docs/dir_d422163b96683743ed3963d4aac17747.html index acf7b8cefb..d8f9b4db9a 100644 --- a/docs/dir_d422163b96683743ed3963d4aac17747.html +++ b/docs/dir_d422163b96683743ed3963d4aac17747.html @@ -127,7 +127,7 @@ Files diff --git a/docs/dir_eeaeb49ac3913fcfb450d3ce9cc0141b.html b/docs/dir_eeaeb49ac3913fcfb450d3ce9cc0141b.html index d6601435a8..2aee29922e 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 bcb597b235..25871aa93a 100644 --- a/docs/dir_f7dcbe7025bbacfc4b9a7dff6ad41d72.html +++ b/docs/dir_f7dcbe7025bbacfc4b9a7dff6ad41d72.html @@ -131,7 +131,7 @@ Files diff --git a/docs/files.html b/docs/files.html index bbb095cff1..1db5c6d1a8 100644 --- a/docs/files.html +++ b/docs/files.html @@ -194,13 +194,15 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); - - - - - - - + + + + + + + + + @@ -341,7 +343,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions.html b/docs/functions.html index ae68e2e53c..512fa4d33a 100644 --- a/docs/functions.html +++ b/docs/functions.html @@ -213,7 +213,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_b.html b/docs/functions_b.html index 856c93df90..84ddb22743 100644 --- a/docs/functions_b.html +++ b/docs/functions_b.html @@ -155,7 +155,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_c.html b/docs/functions_c.html index 6a37df4be4..9adb74ede8 100644 --- a/docs/functions_c.html +++ b/docs/functions_c.html @@ -159,10 +159,10 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
                • ComputeSize() : edash_packager::media::mp4::AudioSampleEntry -, edash_packager::media::mp4::AVCDecoderConfigurationRecord , edash_packager::media::mp4::Box , edash_packager::media::mp4::ChunkLargeOffset , edash_packager::media::mp4::ChunkOffset +, edash_packager::media::mp4::CodecConfigurationRecord , edash_packager::media::mp4::CompactSampleSize , edash_packager::media::mp4::CompositionTimeToSample , edash_packager::media::mp4::DataEntryUrl @@ -254,7 +254,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_d.html b/docs/functions_d.html index 2d8293b370..dc18f16a1c 100644 --- a/docs/functions_d.html +++ b/docs/functions_d.html @@ -149,7 +149,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_e.html b/docs/functions_e.html index 5ef2ecd5bc..54060a5aba 100644 --- a/docs/functions_e.html +++ b/docs/functions_e.html @@ -136,7 +136,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_eval.html b/docs/functions_eval.html index eabd6e6929..b996d701d7 100644 --- a/docs/functions_eval.html +++ b/docs/functions_eval.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_f.html b/docs/functions_f.html index 8a0a8af90e..dde729246f 100644 --- a/docs/functions_f.html +++ b/docs/functions_f.html @@ -174,7 +174,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func.html b/docs/functions_func.html index b29370f7a3..47ce27fe64 100644 --- a/docs/functions_func.html +++ b/docs/functions_func.html @@ -210,7 +210,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_b.html b/docs/functions_func_b.html index f6afd46dd6..886d9479a4 100644 --- a/docs/functions_func_b.html +++ b/docs/functions_func_b.html @@ -152,7 +152,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_c.html b/docs/functions_func_c.html index 0fc9cafd34..a20839dfc3 100644 --- a/docs/functions_func_c.html +++ b/docs/functions_func_c.html @@ -159,10 +159,10 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
                • ComputeSize() : edash_packager::media::mp4::AudioSampleEntry -, edash_packager::media::mp4::AVCDecoderConfigurationRecord , edash_packager::media::mp4::Box , edash_packager::media::mp4::ChunkLargeOffset , edash_packager::media::mp4::ChunkOffset +, edash_packager::media::mp4::CodecConfigurationRecord , edash_packager::media::mp4::CompactSampleSize , edash_packager::media::mp4::CompositionTimeToSample , edash_packager::media::mp4::DataEntryUrl @@ -254,7 +254,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_d.html b/docs/functions_func_d.html index 55455bb9ca..c15d785c72 100644 --- a/docs/functions_func_d.html +++ b/docs/functions_func_d.html @@ -149,7 +149,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_e.html b/docs/functions_func_e.html index 369b5a3cea..ac3f141f86 100644 --- a/docs/functions_func_e.html +++ b/docs/functions_func_e.html @@ -136,7 +136,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_f.html b/docs/functions_func_f.html index 689916b01c..b5f05c0b70 100644 --- a/docs/functions_func_f.html +++ b/docs/functions_func_f.html @@ -168,7 +168,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_g.html b/docs/functions_func_g.html index ef5231c7e9..9e06b74bc6 100644 --- a/docs/functions_func_g.html +++ b/docs/functions_func_g.html @@ -153,7 +153,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
                • GetCodecString() : edash_packager::media::AudioStreamInfo -, edash_packager::media::VideoStreamInfo +, edash_packager::media::AVCDecoderConfiguration
                • GetCryptoPeriodKey() : edash_packager::media::KeySource @@ -179,8 +179,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); , edash_packager::media::mp4::SingleSegmentSegmenter
                • GetKey() -: edash_packager::media::KeySource -, edash_packager::media::WidevineKeySource +: edash_packager::media::KeySource +, edash_packager::media::WidevineKeySource
                • GetMaxClearOffset() : edash_packager::media::mp4::TrackRunIterator @@ -218,7 +218,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_h.html b/docs/functions_func_h.html index ba5f558711..7189386709 100644 --- a/docs/functions_func_h.html +++ b/docs/functions_func_h.html @@ -137,7 +137,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_i.html b/docs/functions_func_i.html index dd177f1bfc..2facf50500 100644 --- a/docs/functions_func_i.html +++ b/docs/functions_func_i.html @@ -189,7 +189,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_k.html b/docs/functions_func_k.html index e6682615d8..1e820405d7 100644 --- a/docs/functions_func_k.html +++ b/docs/functions_func_k.html @@ -128,7 +128,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_l.html b/docs/functions_func_l.html index ba16c0c74b..a11719437b 100644 --- a/docs/functions_func_l.html +++ b/docs/functions_func_l.html @@ -134,7 +134,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_m.html b/docs/functions_func_m.html index 251dd9e23d..fe8179ef86 100644 --- a/docs/functions_func_m.html +++ b/docs/functions_func_m.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_n.html b/docs/functions_func_n.html index b39c4b1c51..01c7ba754a 100644 --- a/docs/functions_func_n.html +++ b/docs/functions_func_n.html @@ -153,7 +153,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_o.html b/docs/functions_func_o.html index dffeda6a57..ea8ef44003 100644 --- a/docs/functions_func_o.html +++ b/docs/functions_func_o.html @@ -159,7 +159,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/docs/functions_func_p.html b/docs/functions_func_p.html index ec5e5d19a0..a59c13280e 100644 --- a/docs/functions_func_p.html +++ b/docs/functions_func_p.html @@ -122,7 +122,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');

                  - p -

                • - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

                  Files

                  file  avc_decoder_configuration.cc [code]
                   
                  file  avc_decoder_configuration.h [code]
                   
                  file  h264_bit_reader.cc [code]
                   
                  file  h264_bit_reader.h [code]
                  |o+filters
                  |\+formats
                  oCedash_packager::media::AesCbcPkcs5Encryptor
                  oCedash_packager::media::AesCtrEncryptor
                  oCedash_packager::media::AudioTimestampHelper
                  oCBandwidthEstimator
                  oCedash_packager::media::BitReaderA class to read bit streams
                  oCedash_packager::media::mp4::Box
                  oCedash_packager::media::mp4::BoxBuffer
                  oCedash_packager::media::BufferReader
                  oCedash_packager::media::BufferWriter
                  oCedash_packager::media::ByteQueue
                  oCedash_packager::media::mp4::CencSampleEncryptionInfoEntry
                  oCedash_packager::media::mp4::ChunkInfo
                  oCedash_packager::media::mp4::ChunkInfoIterator
                  oCedash_packager::media::Cluster
                  oCedash_packager::media::ClusterBuilder
                  oCedash_packager::media::mp4::CompositionOffset
                  oCedash_packager::media::mp4::CompositionOffsetIterator
                  oCedash_packager::media::ContentEncoding
                  oCedash_packager::ContentProtectionElement
                  oCedash_packager::media::mp4::DecodingTime
                  oCedash_packager::media::mp4::DecodingTimeIterator
                  oCedash_packager::media::DecryptConfig
                  oCedash_packager::media::DecryptorSourceDecryptorSource is responsible for decryption key acquisition
                  oCedash_packager::media::Demuxer
                  oCedash_packager::media::wvm::DemuxStreamIdMediaSample
                  oCedash_packager::media::mp4::EditListEntry
                  oCedash_packager::Element
                  oCedash_packager::media::EncryptionKey
                  oCedash_packager::media::mp4::ESDescriptor
                  oCedash_packager::media::mp2t::EsParser
                  oCedash_packager::media::FileDefine an abstract file interface
                  oCedash_packager::media::FileCloser
                  oCedash_packager::media::mp4::Fragmenter
                  oCedash_packager::media::mp4::FrameCENCInfo
                  oCedash_packager::media::H264BitReader
                  oCedash_packager::media::H264ByteToUnitStreamConverter
                  oCedash_packager::media::H264DecRefPicMarking
                  oCedash_packager::media::H264ModificationOfPicNum
                  oCedash_packager::media::H264NALU
                  oCedash_packager::media::H264Parser
                  oCedash_packager::media::H264PPS
                  oCedash_packager::media::H264SEIMessage
                  oCedash_packager::media::H264SEIRecoveryPoint
                  oCedash_packager::media::H264SliceHeader
                  oCedash_packager::media::H264SPS
                  oCedash_packager::media::H264WeightingFactors
                  oCedash_packager::media::IoCacheDeclaration of class which implements a thread-safe circular buffer
                  oCedash_packager::media::KeyFetcherBase class for fetching keys from the license service
                  oCedash_packager::media::KeySourceKeySource is responsible for encryption key acquisition
                  oCedash_packager::media::LibcryptoThreadingConvenience class which initializes and terminates libcrypto threading
                  oCedash_packager::media::mp4::MediaData
                  oCedash_packager::media::MediaParser
                  oCedash_packager::media::MediaStream
                  oCedash_packager::MpdBuilderThis class generates DASH MPDs (Media Presentation Descriptions)
                  oCedash_packager::MpdNotifier
                  oCedash_packager::MpdNotifierFactory
                  oCedash_packager::MpdOptionsDefines Mpd Options
                  oCedash_packager::MpdWriter
                  oCedash_packager::media::Muxer
                  oCedash_packager::media::MuxerListener
                  oCedash_packager::media::MuxerOptionsThis structure contains the list of configuration options for Muxer
                  oCedash_packager::media::OffsetByteQueue
                  oCedash_packager::media::OnMediaEndParameters
                  oCedash_packager::media::OpusPacket
                  oCedash_packager::media::wvm::PrevSampleData
                  oCedash_packager::media::ProducerConsumerQueue< T >
                  oCedash_packager::media::ProgressListenerThis class listens to progress updates events
                  oCRefCountedThreadSafe
                  oCedash_packager::Representation
                  oCedash_packager::RepresentationStateChangeListener
                  oCedash_packager::media::RequestSignerAbstract class used for signature generation
                  oCedash_packager::media::RsaPrivateKeyRsa private key, used for message signing and decryption
                  oCedash_packager::media::RsaPublicKeyRsa public key, used for signature verification and encryption
                  oCedash_packager::media::mp4::SampleToGroupEntry
                  oCedash_packager::xml::ScopedXmlPtr< XmlType >Scoped_ptr for libxml2 resources
                  oCedash_packager::xml::ScopedXmlPtr< xmlNode >
                  oCedash_packager::media::mp4::Segmenter
                  oCedash_packager::SegmentInfo
                  oCedash_packager::media::mp4::SegmentReference
                  oCSimpleThread
                  oCedash_packager::media::Status
                  oCedash_packager::media::StreamDescriptor
                  oCedash_packager::media::StreamDescriptorCompareFn
                  oCedash_packager::media::SubsampleEntry
                  oCedash_packager::media::mp4::SyncSampleIterator
                  oCedash_packager::media::TextTrack
                  oCedash_packager::media::TextTrackConfig
                  oCedash_packager::media::mp4::TrackRunIterator
                  oCedash_packager::media::TracksBuilder
                  oCedash_packager::media::mp2t::TsPacket
                  oCedash_packager::media::mp2t::TsSection
                  oCedash_packager::media::VideoStreamInfoParameters
                  oCedash_packager::media::WebMListParser
                  oCedash_packager::media::WebMParserClient
                  oCedash_packager::media::WebMWebVTTParser
                  oCedash_packager::xml::XmlDeleter
                  \Cedash_packager::xml::XmlNode
                  oCedash_packager::media::AVCDecoderConfigurationClass for parsing AVC decoder configuration
                  oCBandwidthEstimator
                  oCedash_packager::media::BitReaderA class to read bit streams
                  oCedash_packager::media::mp4::Box
                  oCedash_packager::media::mp4::BoxBuffer
                  oCedash_packager::media::BufferReader
                  oCedash_packager::media::BufferWriter
                  oCedash_packager::media::ByteQueue
                  oCedash_packager::media::mp4::CencSampleEncryptionInfoEntry
                  oCedash_packager::media::mp4::ChunkInfo
                  oCedash_packager::media::mp4::ChunkInfoIterator
                  oCedash_packager::media::Cluster
                  oCedash_packager::media::ClusterBuilder
                  oCedash_packager::media::mp4::CompositionOffset
                  oCedash_packager::media::mp4::CompositionOffsetIterator
                  oCedash_packager::media::ContentEncoding
                  oCedash_packager::ContentProtectionElement
                  oCedash_packager::media::mp4::DecodingTime
                  oCedash_packager::media::mp4::DecodingTimeIterator
                  oCedash_packager::media::DecryptConfig
                  oCedash_packager::media::DecryptorSourceDecryptorSource is responsible for decryption key acquisition
                  oCedash_packager::media::Demuxer
                  oCedash_packager::media::wvm::DemuxStreamIdMediaSample
                  oCedash_packager::media::mp4::EditListEntry
                  oCedash_packager::Element
                  oCedash_packager::media::EncryptionKey
                  oCedash_packager::media::mp4::ESDescriptor
                  oCedash_packager::media::mp2t::EsParser
                  oCedash_packager::media::FileDefine an abstract file interface
                  oCedash_packager::media::FileCloser
                  oCedash_packager::media::mp4::Fragmenter
                  oCedash_packager::media::mp4::FrameCENCInfo
                  oCedash_packager::media::H264BitReader
                  oCedash_packager::media::H264ByteToUnitStreamConverter
                  oCedash_packager::media::H264DecRefPicMarking
                  oCedash_packager::media::H264ModificationOfPicNum
                  oCedash_packager::media::H264NALU
                  oCedash_packager::media::H264Parser
                  oCedash_packager::media::H264PPS
                  oCedash_packager::media::H264SEIMessage
                  oCedash_packager::media::H264SEIRecoveryPoint
                  oCedash_packager::media::H264SliceHeader
                  oCedash_packager::media::H264SPS
                  oCedash_packager::media::H264WeightingFactors
                  oCedash_packager::media::IoCacheDeclaration of class which implements a thread-safe circular buffer
                  oCedash_packager::media::KeyFetcherBase class for fetching keys from the license service
                  oCedash_packager::media::KeySourceKeySource is responsible for encryption key acquisition
                  oCedash_packager::media::LibcryptoThreadingConvenience class which initializes and terminates libcrypto threading
                  oCedash_packager::media::mp4::MediaData
                  oCedash_packager::media::MediaParser
                  oCedash_packager::media::MediaStream
                  oCedash_packager::MpdBuilderThis class generates DASH MPDs (Media Presentation Descriptions)
                  oCedash_packager::MpdNotifier
                  oCedash_packager::MpdNotifierFactory
                  oCedash_packager::MpdOptionsDefines Mpd Options
                  oCedash_packager::MpdWriter
                  oCedash_packager::media::Muxer
                  oCedash_packager::media::MuxerListener
                  oCedash_packager::media::MuxerOptionsThis structure contains the list of configuration options for Muxer
                  oCedash_packager::media::OffsetByteQueue
                  oCedash_packager::media::OnMediaEndParameters
                  oCedash_packager::media::OpusPacket
                  oCedash_packager::media::wvm::PrevSampleData
                  oCedash_packager::media::ProducerConsumerQueue< T >
                  oCedash_packager::media::ProgressListenerThis class listens to progress updates events
                  oCRefCountedThreadSafe
                  oCedash_packager::Representation
                  oCedash_packager::RepresentationStateChangeListener
                  oCedash_packager::media::RequestSignerAbstract class used for signature generation
                  oCedash_packager::media::RsaPrivateKeyRsa private key, used for message signing and decryption
                  oCedash_packager::media::RsaPublicKeyRsa public key, used for signature verification and encryption
                  oCedash_packager::media::mp4::SampleToGroupEntry
                  oCedash_packager::xml::ScopedXmlPtr< XmlType >Scoped_ptr for libxml2 resources
                  oCedash_packager::xml::ScopedXmlPtr< xmlNode >
                  oCedash_packager::media::mp4::Segmenter
                  oCedash_packager::SegmentInfo
                  oCedash_packager::media::mp4::SegmentReference
                  oCSimpleThread
                  oCedash_packager::media::Status
                  oCedash_packager::media::StreamDescriptor
                  oCedash_packager::media::StreamDescriptorCompareFn
                  oCedash_packager::media::SubsampleEntry
                  oCedash_packager::media::mp4::SyncSampleIterator
                  oCedash_packager::media::TextTrack
                  oCedash_packager::media::TextTrackConfig
                  oCedash_packager::media::mp4::TrackRunIterator
                  oCedash_packager::media::TracksBuilder
                  oCedash_packager::media::mp2t::TsPacket
                  oCedash_packager::media::mp2t::TsSection
                  oCedash_packager::media::VideoStreamInfoParameters
                  oCedash_packager::media::WebMListParser
                  oCedash_packager::media::WebMParserClient
                  oCedash_packager::media::WebMWebVTTParser
                  oCedash_packager::xml::XmlDeleter
                  \Cedash_packager::xml::XmlNode
                  diff --git a/docs/index.html b/docs/index.html index 503b8f8265..e39d5d0b7b 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 06eedc4218..d0318b1c01 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 3ebf6a87f7..138ade3702 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 4bcdc0abf1..1ef58eb37f 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 ad79eea105..e0112b679c 100644 --- a/docs/search/all_0.js +++ b/docs/search/all_0.js @@ -40,5 +40,5 @@ var searchData= ['audiostreaminfo',['AudioStreamInfo',['../da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html#a014cdf015863a200c10cb72c3ec042ab',1,'edash_packager::media::AudioStreamInfo']]], ['audiotimestamphelper',['AudioTimestampHelper',['../da/de4/classedash__packager_1_1media_1_1AudioTimestampHelper.html',1,'edash_packager::media']]], ['auxinfoneedstobecached',['AuxInfoNeedsToBeCached',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#a3538a0f31238843afd2dfb4e94587f03',1,'edash_packager::media::mp4::TrackRunIterator']]], - ['avcdecoderconfigurationrecord',['AVCDecoderConfigurationRecord',['../d8/dbb/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord.html',1,'edash_packager::media::mp4']]] + ['avcdecoderconfiguration',['AVCDecoderConfiguration',['../d6/d49/classedash__packager_1_1media_1_1AVCDecoderConfiguration.html',1,'edash_packager::media']]] ]; diff --git a/docs/search/all_2.js b/docs/search/all_2.js index 07c94522e2..a8cc3ddb08 100644 --- a/docs/search/all_2.js +++ b/docs/search/all_2.js @@ -17,12 +17,13 @@ var searchData= ['cluster',['Cluster',['../df/d40/classedash__packager_1_1media_1_1Cluster.html',1,'edash_packager::media']]], ['cluster_5fended',['cluster_ended',['../db/da0/classedash__packager_1_1media_1_1WebMClusterParser.html#ae62be1971c352525906d6fad2ee831bd',1,'edash_packager::media::WebMClusterParser']]], ['clusterbuilder',['ClusterBuilder',['../d3/d69/classedash__packager_1_1media_1_1ClusterBuilder.html',1,'edash_packager::media']]], + ['codecconfigurationrecord',['CodecConfigurationRecord',['../d1/d31/structedash__packager_1_1media_1_1mp4_1_1CodecConfigurationRecord.html',1,'edash_packager::media::mp4']]], ['compactsamplesize',['CompactSampleSize',['../db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html',1,'edash_packager::media::mp4']]], ['compositionoffset',['CompositionOffset',['../da/dfe/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset.html',1,'edash_packager::media::mp4']]], - ['compositionoffsetiterator',['CompositionOffsetIterator',['../d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html',1,'edash_packager::media::mp4']]], ['compositionoffsetiterator',['CompositionOffsetIterator',['../d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html#ac81770b820bc9b942c8ed9b8a12969b6',1,'edash_packager::media::mp4::CompositionOffsetIterator']]], + ['compositionoffsetiterator',['CompositionOffsetIterator',['../d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html',1,'edash_packager::media::mp4']]], ['compositiontimetosample',['CompositionTimeToSample',['../da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html',1,'edash_packager::media::mp4']]], - ['computesize',['ComputeSize',['../d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html#a308081198b1fa9f9e4653ad976014a16',1,'edash_packager::media::mp4::Box::ComputeSize()'],['../d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.html#a9a35918ae9926d5a8de62de3fe3e4633',1,'edash_packager::media::mp4::FileType::ComputeSize()'],['../dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html#a1435881b64475f2b25c03892848fb5db',1,'edash_packager::media::mp4::SegmentType::ComputeSize()'],['../da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html#a63ef4d49a7b8b243b5638a6d7c103f1f',1,'edash_packager::media::mp4::ProtectionSystemSpecificHeader::ComputeSize()'],['../de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html#acee5016b00abd31077e9418ba11d0fa7',1,'edash_packager::media::mp4::SampleAuxiliaryInformationOffset::ComputeSize()'],['../d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html#aa44629c6bd902b46777156e665cad07f',1,'edash_packager::media::mp4::SampleAuxiliaryInformationSize::ComputeSize()'],['../da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html#a87b7c52641305ce4d798dd668d6756ec',1,'edash_packager::media::mp4::OriginalFormat::ComputeSize()'],['../d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html#a71f44ff9cca6d198949660fb249360d7',1,'edash_packager::media::mp4::SchemeType::ComputeSize()'],['../de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html#a65a57b19166e5a991fbdf2c4f4dfb8b2',1,'edash_packager::media::mp4::TrackEncryption::ComputeSize()'],['../d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html#a91c8e944c00f39f177ba760bec0a8f4a',1,'edash_packager::media::mp4::SchemeInfo::ComputeSize()'],['../dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html#a96bcc9da38534b1e435a64b54088ddf0',1,'edash_packager::media::mp4::ProtectionSchemeInfo::ComputeSize()'],['../dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html#a98f0e4357b76371c138d1f4668341dfc',1,'edash_packager::media::mp4::MovieHeader::ComputeSize()'],['../dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html#a6511792049c0cbf8885bec4fbb7061f9',1,'edash_packager::media::mp4::TrackHeader::ComputeSize()'],['../d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html#a11a352da04af26680d0cf5177d61fd5e',1,'edash_packager::media::mp4::EditList::ComputeSize()'],['../d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html#a14c1a549b11f692b5f0633b7125c3ae3',1,'edash_packager::media::mp4::Edit::ComputeSize()'],['../d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html#a3d9b29d66fee15035ac5ca69e0adeaf5',1,'edash_packager::media::mp4::HandlerReference::ComputeSize()'],['../d8/dbb/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord.html#a96c8bca868ad19729efe44a50de9c1c2',1,'edash_packager::media::mp4::AVCDecoderConfigurationRecord::ComputeSize()'],['../d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.html#a37421c72cfd99b5e1dfdee818a6650f7',1,'edash_packager::media::mp4::PixelAspectRatioBox::ComputeSize()'],['../df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html#aa977e4caab29d9efb12577d8bfbba818',1,'edash_packager::media::mp4::VideoSampleEntry::ComputeSize()'],['../d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html#a08e90c754d415f9fa851f14a82849627',1,'edash_packager::media::mp4::ElementaryStreamDescriptor::ComputeSize()'],['../df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html#af74d9b19c4c9bf649bda8791d6fa5f58',1,'edash_packager::media::mp4::AudioSampleEntry::ComputeSize()'],['../d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html#ac5c6abc8d36c7bb2136f18ac5d1b5368',1,'edash_packager::media::mp4::SampleDescription::ComputeSize()'],['../dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html#aa3f3c842b8664389c26b23f9ab4e31cb',1,'edash_packager::media::mp4::DecodingTimeToSample::ComputeSize()'],['../da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html#a57ac0c7400d16cee449e3bf8b73a53dd',1,'edash_packager::media::mp4::CompositionTimeToSample::ComputeSize()'],['../df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html#a0093bc7fe20955fc6b5e91103b84be60',1,'edash_packager::media::mp4::SampleToChunk::ComputeSize()'],['../d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html#af7d69581466475192e91709c97d21ecc',1,'edash_packager::media::mp4::SampleSize::ComputeSize()'],['../db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html#a61b9d0cf0b2e5c64fc278cadfcb2dd6d',1,'edash_packager::media::mp4::CompactSampleSize::ComputeSize()'],['../da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html#ab6f87ec8a31c76f2e35edf45608fd543',1,'edash_packager::media::mp4::ChunkLargeOffset::ComputeSize()'],['../d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html#a6d29fc7ed591d451602a6715da412bd5',1,'edash_packager::media::mp4::ChunkOffset::ComputeSize()'],['../d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html#a8cb53a889fcd586d30d151f605488962',1,'edash_packager::media::mp4::SyncSample::ComputeSize()'],['../d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html#a970de7eb21b0d9d6c6d5ec712e820c9e',1,'edash_packager::media::mp4::SampleTable::ComputeSize()'],['../d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html#ac7a87233d07c7e1463dff2c61a699d0b',1,'edash_packager::media::mp4::MediaHeader::ComputeSize()'],['../db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html#a4d5984fc09138282e29813f8afc84d05',1,'edash_packager::media::mp4::VideoMediaHeader::ComputeSize()'],['../da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html#a8aa6cd627929310db049a0a331bd246f',1,'edash_packager::media::mp4::SoundMediaHeader::ComputeSize()'],['../d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html#ae1d458e8604d271671f127b12976e96c',1,'edash_packager::media::mp4::DataEntryUrl::ComputeSize()'],['../d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html#a3001840c8f3bb6f07ff5d8fd61eacaa0',1,'edash_packager::media::mp4::DataReference::ComputeSize()'],['../d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html#a3828a5e79dc7f81cedec545d2a4a6907',1,'edash_packager::media::mp4::DataInformation::ComputeSize()'],['../dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html#abc1485f9e36b4d05dcb04d5545f61523',1,'edash_packager::media::mp4::MediaInformation::ComputeSize()'],['../de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html#a8638a1068c3449829c2e98f1bf81fa8c',1,'edash_packager::media::mp4::Media::ComputeSize()'],['../d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html#a35ce8375ed40c9d319c69926b63811d1',1,'edash_packager::media::mp4::Track::ComputeSize()'],['../da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html#aab2d0643fe0ca1f2db0f562c424d3f17',1,'edash_packager::media::mp4::MovieExtendsHeader::ComputeSize()'],['../d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html#a9c158ad0fae3cc804dfb01182ec9bb40',1,'edash_packager::media::mp4::TrackExtends::ComputeSize()'],['../d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html#a2411f9aa36ae1d44f615423255a82ea2',1,'edash_packager::media::mp4::MovieExtends::ComputeSize()'],['../d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html#aa985dd14863b1bb4803e4a3a44052c32',1,'edash_packager::media::mp4::Movie::ComputeSize()'],['../d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html#a79cef3eb30362f998f85e5dca409527c',1,'edash_packager::media::mp4::TrackFragmentDecodeTime::ComputeSize()'],['../df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html#a02661d289aaa12e286adcf68d4f6a779',1,'edash_packager::media::mp4::MovieFragmentHeader::ComputeSize()'],['../d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html#a96ec9c8087e0d5b333520705b50b1f21',1,'edash_packager::media::mp4::TrackFragmentHeader::ComputeSize()'],['../df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html#a9f821047d359bb22e77c72d347b2bbba',1,'edash_packager::media::mp4::TrackFragmentRun::ComputeSize()'],['../d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html#a6598e25c4bcff437b1584e8e3dd0173e',1,'edash_packager::media::mp4::SampleToGroup::ComputeSize()'],['../d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html#a434cabc0e6b47158863ff522d345270b',1,'edash_packager::media::mp4::SampleGroupDescription::ComputeSize()'],['../d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html#a937dc821489803e4ee759eebb98f7cfb',1,'edash_packager::media::mp4::TrackFragment::ComputeSize()'],['../dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html#a9e43e423495777bd8020f85f0d87b1ad',1,'edash_packager::media::mp4::MovieFragment::ComputeSize()'],['../d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html#a4ae43d06df7765c5384e6234e2b41b9c',1,'edash_packager::media::mp4::SegmentIndex::ComputeSize()']]], + ['computesize',['ComputeSize',['../d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html#a308081198b1fa9f9e4653ad976014a16',1,'edash_packager::media::mp4::Box::ComputeSize()'],['../d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.html#a9a35918ae9926d5a8de62de3fe3e4633',1,'edash_packager::media::mp4::FileType::ComputeSize()'],['../dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html#a1435881b64475f2b25c03892848fb5db',1,'edash_packager::media::mp4::SegmentType::ComputeSize()'],['../da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html#a63ef4d49a7b8b243b5638a6d7c103f1f',1,'edash_packager::media::mp4::ProtectionSystemSpecificHeader::ComputeSize()'],['../de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html#acee5016b00abd31077e9418ba11d0fa7',1,'edash_packager::media::mp4::SampleAuxiliaryInformationOffset::ComputeSize()'],['../d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html#aa44629c6bd902b46777156e665cad07f',1,'edash_packager::media::mp4::SampleAuxiliaryInformationSize::ComputeSize()'],['../da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html#a87b7c52641305ce4d798dd668d6756ec',1,'edash_packager::media::mp4::OriginalFormat::ComputeSize()'],['../d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html#a71f44ff9cca6d198949660fb249360d7',1,'edash_packager::media::mp4::SchemeType::ComputeSize()'],['../de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html#a65a57b19166e5a991fbdf2c4f4dfb8b2',1,'edash_packager::media::mp4::TrackEncryption::ComputeSize()'],['../d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html#a91c8e944c00f39f177ba760bec0a8f4a',1,'edash_packager::media::mp4::SchemeInfo::ComputeSize()'],['../dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html#a96bcc9da38534b1e435a64b54088ddf0',1,'edash_packager::media::mp4::ProtectionSchemeInfo::ComputeSize()'],['../dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html#a98f0e4357b76371c138d1f4668341dfc',1,'edash_packager::media::mp4::MovieHeader::ComputeSize()'],['../dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html#a6511792049c0cbf8885bec4fbb7061f9',1,'edash_packager::media::mp4::TrackHeader::ComputeSize()'],['../d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html#a11a352da04af26680d0cf5177d61fd5e',1,'edash_packager::media::mp4::EditList::ComputeSize()'],['../d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html#a14c1a549b11f692b5f0633b7125c3ae3',1,'edash_packager::media::mp4::Edit::ComputeSize()'],['../d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html#a3d9b29d66fee15035ac5ca69e0adeaf5',1,'edash_packager::media::mp4::HandlerReference::ComputeSize()'],['../d1/d31/structedash__packager_1_1media_1_1mp4_1_1CodecConfigurationRecord.html#aee4b7941d6cc0257143249259e07f761',1,'edash_packager::media::mp4::CodecConfigurationRecord::ComputeSize()'],['../d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.html#a37421c72cfd99b5e1dfdee818a6650f7',1,'edash_packager::media::mp4::PixelAspectRatioBox::ComputeSize()'],['../df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html#aa977e4caab29d9efb12577d8bfbba818',1,'edash_packager::media::mp4::VideoSampleEntry::ComputeSize()'],['../d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html#a08e90c754d415f9fa851f14a82849627',1,'edash_packager::media::mp4::ElementaryStreamDescriptor::ComputeSize()'],['../df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html#af74d9b19c4c9bf649bda8791d6fa5f58',1,'edash_packager::media::mp4::AudioSampleEntry::ComputeSize()'],['../d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html#ac5c6abc8d36c7bb2136f18ac5d1b5368',1,'edash_packager::media::mp4::SampleDescription::ComputeSize()'],['../dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html#aa3f3c842b8664389c26b23f9ab4e31cb',1,'edash_packager::media::mp4::DecodingTimeToSample::ComputeSize()'],['../da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html#a57ac0c7400d16cee449e3bf8b73a53dd',1,'edash_packager::media::mp4::CompositionTimeToSample::ComputeSize()'],['../df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html#a0093bc7fe20955fc6b5e91103b84be60',1,'edash_packager::media::mp4::SampleToChunk::ComputeSize()'],['../d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html#af7d69581466475192e91709c97d21ecc',1,'edash_packager::media::mp4::SampleSize::ComputeSize()'],['../db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html#a61b9d0cf0b2e5c64fc278cadfcb2dd6d',1,'edash_packager::media::mp4::CompactSampleSize::ComputeSize()'],['../da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html#ab6f87ec8a31c76f2e35edf45608fd543',1,'edash_packager::media::mp4::ChunkLargeOffset::ComputeSize()'],['../d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html#a6d29fc7ed591d451602a6715da412bd5',1,'edash_packager::media::mp4::ChunkOffset::ComputeSize()'],['../d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html#a8cb53a889fcd586d30d151f605488962',1,'edash_packager::media::mp4::SyncSample::ComputeSize()'],['../d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html#a970de7eb21b0d9d6c6d5ec712e820c9e',1,'edash_packager::media::mp4::SampleTable::ComputeSize()'],['../d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html#ac7a87233d07c7e1463dff2c61a699d0b',1,'edash_packager::media::mp4::MediaHeader::ComputeSize()'],['../db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html#a4d5984fc09138282e29813f8afc84d05',1,'edash_packager::media::mp4::VideoMediaHeader::ComputeSize()'],['../da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html#a8aa6cd627929310db049a0a331bd246f',1,'edash_packager::media::mp4::SoundMediaHeader::ComputeSize()'],['../d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html#ae1d458e8604d271671f127b12976e96c',1,'edash_packager::media::mp4::DataEntryUrl::ComputeSize()'],['../d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html#a3001840c8f3bb6f07ff5d8fd61eacaa0',1,'edash_packager::media::mp4::DataReference::ComputeSize()'],['../d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html#a3828a5e79dc7f81cedec545d2a4a6907',1,'edash_packager::media::mp4::DataInformation::ComputeSize()'],['../dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html#abc1485f9e36b4d05dcb04d5545f61523',1,'edash_packager::media::mp4::MediaInformation::ComputeSize()'],['../de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html#a8638a1068c3449829c2e98f1bf81fa8c',1,'edash_packager::media::mp4::Media::ComputeSize()'],['../d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html#a35ce8375ed40c9d319c69926b63811d1',1,'edash_packager::media::mp4::Track::ComputeSize()'],['../da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html#aab2d0643fe0ca1f2db0f562c424d3f17',1,'edash_packager::media::mp4::MovieExtendsHeader::ComputeSize()'],['../d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html#a9c158ad0fae3cc804dfb01182ec9bb40',1,'edash_packager::media::mp4::TrackExtends::ComputeSize()'],['../d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html#a2411f9aa36ae1d44f615423255a82ea2',1,'edash_packager::media::mp4::MovieExtends::ComputeSize()'],['../d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html#aa985dd14863b1bb4803e4a3a44052c32',1,'edash_packager::media::mp4::Movie::ComputeSize()'],['../d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html#a79cef3eb30362f998f85e5dca409527c',1,'edash_packager::media::mp4::TrackFragmentDecodeTime::ComputeSize()'],['../df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html#a02661d289aaa12e286adcf68d4f6a779',1,'edash_packager::media::mp4::MovieFragmentHeader::ComputeSize()'],['../d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html#a96ec9c8087e0d5b333520705b50b1f21',1,'edash_packager::media::mp4::TrackFragmentHeader::ComputeSize()'],['../df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html#a9f821047d359bb22e77c72d347b2bbba',1,'edash_packager::media::mp4::TrackFragmentRun::ComputeSize()'],['../d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html#a6598e25c4bcff437b1584e8e3dd0173e',1,'edash_packager::media::mp4::SampleToGroup::ComputeSize()'],['../d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html#a434cabc0e6b47158863ff522d345270b',1,'edash_packager::media::mp4::SampleGroupDescription::ComputeSize()'],['../d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html#a937dc821489803e4ee759eebb98f7cfb',1,'edash_packager::media::mp4::TrackFragment::ComputeSize()'],['../dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html#a9e43e423495777bd8020f85f0d87b1ad',1,'edash_packager::media::mp4::MovieFragment::ComputeSize()'],['../d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html#a4ae43d06df7765c5384e6234e2b41b9c',1,'edash_packager::media::mp4::SegmentIndex::ComputeSize()']]], ['connect',['Connect',['../d2/dfd/classedash__packager_1_1media_1_1MediaStream.html#a05b7188c263dc71b00635415bbdfd37f',1,'edash_packager::media::MediaStream']]], ['container_5fname',['container_name',['../d5/dce/classedash__packager_1_1media_1_1Demuxer.html#a650a6cfceda9dcd9c05feefbe0773057',1,'edash_packager::media::Demuxer']]], ['contentencoding',['ContentEncoding',['../df/d30/classedash__packager_1_1media_1_1ContentEncoding.html',1,'edash_packager::media']]], diff --git a/docs/search/all_6.js b/docs/search/all_6.js index 7ba461b0f7..5eae7f5f2e 100644 --- a/docs/search/all_6.js +++ b/docs/search/all_6.js @@ -9,7 +9,7 @@ var searchData= ['getaudiospecificconfig',['GetAudioSpecificConfig',['../db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html#a65c36a606121daa90c44b44632b634ec',1,'edash_packager::media::mp2t::AdtsHeader']]], ['getaudiostreaminfo',['GetAudioStreamInfo',['../de/d98/classedash__packager_1_1media_1_1WebMAudioClient.html#aa1adf8eaedbb721b663e67630e54e36a',1,'edash_packager::media::WebMAudioClient']]], ['getavcdecoderconfigurationrecord',['GetAVCDecoderConfigurationRecord',['../d5/d30/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter.html#a0f4d8f75700dc0674eb6eb9c7d6dd393',1,'edash_packager::media::H264ByteToUnitStreamConverter']]], - ['getcodecstring',['GetCodecString',['../da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html#aa62e486f463c867b8e2f41ebb4ecea34',1,'edash_packager::media::AudioStreamInfo::GetCodecString()'],['../d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html#a801612f825520fae9c3c3ce1de138128',1,'edash_packager::media::VideoStreamInfo::GetCodecString()']]], + ['getcodecstring',['GetCodecString',['../da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html#aa62e486f463c867b8e2f41ebb4ecea34',1,'edash_packager::media::AudioStreamInfo::GetCodecString()'],['../d6/d49/classedash__packager_1_1media_1_1AVCDecoderConfiguration.html#ad03be6192998b36ef2364266e5604c19',1,'edash_packager::media::AVCDecoderConfiguration::GetCodecString() const '],['../d6/d49/classedash__packager_1_1media_1_1AVCDecoderConfiguration.html#a88c2e4c0fd4dd99f6a1b02649a6b5831',1,'edash_packager::media::AVCDecoderConfiguration::GetCodecString(uint8_t profile_indication, uint8_t profile_compatibility, uint8_t avc_level)']]], ['getcontenttype',['GetContentType',['../db/d09/namespaceedash__packager.html#a7f479c5670e5c9f721772e0bd316bff9',1,'edash_packager']]], ['getcryptoperiodkey',['GetCryptoPeriodKey',['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#a349381b866a37df15a931980636621ac',1,'edash_packager::media::KeySource::GetCryptoPeriodKey()'],['../db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html#a35023c0b18a2db012027d4cf22c7bf1b',1,'edash_packager::media::WidevineKeySource::GetCryptoPeriodKey()']]], ['getdecryptconfig',['GetDecryptConfig',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#ae62fc9fe719f4432d4043ea2f43963c6',1,'edash_packager::media::mp4::TrackRunIterator']]], diff --git a/docs/search/all_e.js b/docs/search/all_e.js index e6f3f8c4b8..dee8409599 100644 --- a/docs/search/all_e.js +++ b/docs/search/all_e.js @@ -1,6 +1,6 @@ var searchData= [ - ['parse',['Parse',['../d5/dce/classedash__packager_1_1media_1_1Demuxer.html#adb6c35974c24809c715380a99ac7cc78',1,'edash_packager::media::Demuxer::Parse()'],['../dc/d48/classedash__packager_1_1media_1_1MediaParser.html#a6bc31ca2303d340a11a63a6f4bbb8b0a',1,'edash_packager::media::MediaParser::Parse()'],['../db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html#a12f7811f1539361980a13517f948f9fb',1,'edash_packager::media::mp2t::AdtsHeader::Parse()'],['../dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.html#a8e01eb8219dfd9a649ee5a153f9bbabb',1,'edash_packager::media::mp2t::Mp2tMediaParser::Parse()'],['../dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html#a90a58afc9e6b20b9a6909d54f94dafc9',1,'edash_packager::media::mp4::AACAudioSpecificConfig::Parse()'],['../d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html#a7b62a3983faafbea54a32486df60ed96',1,'edash_packager::media::mp4::Box::Parse()'],['../d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.html#ade36e7fd4daf8c6a98c16b6a94bafd28',1,'edash_packager::media::mp4::MP4MediaParser::Parse()'],['../db/da0/classedash__packager_1_1media_1_1WebMClusterParser.html#a060661d4a0bfc01543fa025fb4b09a7d',1,'edash_packager::media::WebMClusterParser::Parse()'],['../dd/d47/classedash__packager_1_1media_1_1WebMInfoParser.html#ab2f2dd920214bf7942e374d4c9843243',1,'edash_packager::media::WebMInfoParser::Parse()'],['../dd/d99/classedash__packager_1_1media_1_1WebMMediaParser.html#a5a95d3879a9a96830fdcf4f866879143',1,'edash_packager::media::WebMMediaParser::Parse()'],['../d6/dd6/classedash__packager_1_1media_1_1WebMListParser.html#a5b3b0c8fd0423044d0090357428b8ee0',1,'edash_packager::media::WebMListParser::Parse()'],['../db/d23/classedash__packager_1_1media_1_1WebMTracksParser.html#a8719ba4bc187c32a73f133c0a67a19ab',1,'edash_packager::media::WebMTracksParser::Parse()'],['../dc/dc8/classedash__packager_1_1media_1_1WebMWebVTTParser.html#a979168b11e59b863de2d3ba3fbb60815',1,'edash_packager::media::WebMWebVTTParser::Parse()'],['../d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.html#af2a6c8b62df30b6515eee30389b271d7',1,'edash_packager::media::wvm::WvmMediaParser::Parse()']]], + ['parse',['Parse',['../d5/dce/classedash__packager_1_1media_1_1Demuxer.html#adb6c35974c24809c715380a99ac7cc78',1,'edash_packager::media::Demuxer::Parse()'],['../dc/d48/classedash__packager_1_1media_1_1MediaParser.html#a6bc31ca2303d340a11a63a6f4bbb8b0a',1,'edash_packager::media::MediaParser::Parse()'],['../d6/d49/classedash__packager_1_1media_1_1AVCDecoderConfiguration.html#a8ac1cb50516b99f6ecafbdcb2705b1cc',1,'edash_packager::media::AVCDecoderConfiguration::Parse()'],['../db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html#a12f7811f1539361980a13517f948f9fb',1,'edash_packager::media::mp2t::AdtsHeader::Parse()'],['../dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.html#a8e01eb8219dfd9a649ee5a153f9bbabb',1,'edash_packager::media::mp2t::Mp2tMediaParser::Parse()'],['../dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html#a90a58afc9e6b20b9a6909d54f94dafc9',1,'edash_packager::media::mp4::AACAudioSpecificConfig::Parse()'],['../d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html#a7b62a3983faafbea54a32486df60ed96',1,'edash_packager::media::mp4::Box::Parse()'],['../d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.html#ade36e7fd4daf8c6a98c16b6a94bafd28',1,'edash_packager::media::mp4::MP4MediaParser::Parse()'],['../db/da0/classedash__packager_1_1media_1_1WebMClusterParser.html#a060661d4a0bfc01543fa025fb4b09a7d',1,'edash_packager::media::WebMClusterParser::Parse()'],['../dd/d47/classedash__packager_1_1media_1_1WebMInfoParser.html#ab2f2dd920214bf7942e374d4c9843243',1,'edash_packager::media::WebMInfoParser::Parse()'],['../dd/d99/classedash__packager_1_1media_1_1WebMMediaParser.html#a5a95d3879a9a96830fdcf4f866879143',1,'edash_packager::media::WebMMediaParser::Parse()'],['../d6/dd6/classedash__packager_1_1media_1_1WebMListParser.html#a5b3b0c8fd0423044d0090357428b8ee0',1,'edash_packager::media::WebMListParser::Parse()'],['../db/d23/classedash__packager_1_1media_1_1WebMTracksParser.html#a8719ba4bc187c32a73f133c0a67a19ab',1,'edash_packager::media::WebMTracksParser::Parse()'],['../dc/dc8/classedash__packager_1_1media_1_1WebMWebVTTParser.html#a979168b11e59b863de2d3ba3fbb60815',1,'edash_packager::media::WebMWebVTTParser::Parse()'],['../d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.html#af2a6c8b62df30b6515eee30389b271d7',1,'edash_packager::media::wvm::WvmMediaParser::Parse()']]], ['passscopedptr',['PassScopedPtr',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html#a07d40d8fe27a2d1c3470f16ef0df3864',1,'edash_packager::xml::XmlNode']]], ['peek',['Peek',['../d8/d2e/classedash__packager_1_1media_1_1ByteQueue.html#a8253df160751462f3b75290a7c525e56',1,'edash_packager::media::ByteQueue::Peek()'],['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html#acf87e686e78d6cb962f39bb2acca7180',1,'edash_packager::media::ProducerConsumerQueue::Peek()']]], ['peekat',['PeekAt',['../d1/d92/classedash__packager_1_1media_1_1OffsetByteQueue.html#a32b06f514ebfd5aef820a9b91228a854',1,'edash_packager::media::OffsetByteQueue']]], diff --git a/docs/search/all_f.js b/docs/search/all_f.js index 6331b550db..4099fce812 100644 --- a/docs/search/all_f.js +++ b/docs/search/all_f.js @@ -11,7 +11,7 @@ var searchData= ['reading',['Reading',['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#a36c0d8448dab759db37f9581ea602807',1,'edash_packager::media::mp4::BoxBuffer']]], ['readnbytesinto8',['ReadNBytesInto8',['../d9/d46/classedash__packager_1_1media_1_1BufferReader.html#ac21a2b3a9ed6b2ad20247b6f653d8a02',1,'edash_packager::media::BufferReader']]], ['readtoplevelbox',['ReadTopLevelBox',['../db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html#a029ef2fe387071143c42f50ffd1a16b5',1,'edash_packager::media::mp4::BoxReader']]], - ['readwrite',['ReadWrite',['../d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html#ab588f893676e2c817088fc01caa7b135',1,'edash_packager::media::mp4::Box::ReadWrite()'],['../d6/d8f/structedash__packager_1_1media_1_1mp4_1_1FullBox.html#a870af62c176dfafa79cde0b1a8a55698',1,'edash_packager::media::mp4::FullBox::ReadWrite()'],['../d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.html#ac9414d32800e3fe74fa0a1178b9f2532',1,'edash_packager::media::mp4::FileType::ReadWrite()'],['../dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html#addccc32717d0e19e0c83b4896e5b75fa',1,'edash_packager::media::mp4::SegmentType::ReadWrite()'],['../da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html#af42f34f32cf72bad931a087ccd091497',1,'edash_packager::media::mp4::ProtectionSystemSpecificHeader::ReadWrite()'],['../de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html#aa0d478659013bf328a47d5b6fa85e27a',1,'edash_packager::media::mp4::SampleAuxiliaryInformationOffset::ReadWrite()'],['../d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html#aa87db40b90258eea4a9ac59a05bfa65c',1,'edash_packager::media::mp4::SampleAuxiliaryInformationSize::ReadWrite()'],['../da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html#ae70a5a4d8284294ef28e4e09ca99b328',1,'edash_packager::media::mp4::OriginalFormat::ReadWrite()'],['../d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html#a7a75cb5cb201ed7d4ac5cc3780d89938',1,'edash_packager::media::mp4::SchemeType::ReadWrite()'],['../de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html#a4d7e035c720876033e0ff6c7b54d3273',1,'edash_packager::media::mp4::TrackEncryption::ReadWrite()'],['../d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html#ac4463f938d941146acfa6bcdc20976c8',1,'edash_packager::media::mp4::SchemeInfo::ReadWrite()'],['../dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html#a05b923f36c96656b25217238c46cd2ee',1,'edash_packager::media::mp4::ProtectionSchemeInfo::ReadWrite()'],['../dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html#aaa8c99dfb5bcac4d65bceb01bd88e404',1,'edash_packager::media::mp4::MovieHeader::ReadWrite()'],['../dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html#a9ff4b7d42ee01f44bd2dff1c3f26f3c7',1,'edash_packager::media::mp4::TrackHeader::ReadWrite()'],['../d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html#af5ff80a49ff57612f9748e8a960315b5',1,'edash_packager::media::mp4::EditList::ReadWrite()'],['../d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html#a282283cf1f9eee501012641d3520361c',1,'edash_packager::media::mp4::Edit::ReadWrite()'],['../d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html#a3df705ca0d139d1051dfa05a2b6b7060',1,'edash_packager::media::mp4::HandlerReference::ReadWrite()'],['../d8/dbb/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord.html#aed49d9bb85e483820a4af22026ea6f56',1,'edash_packager::media::mp4::AVCDecoderConfigurationRecord::ReadWrite()'],['../d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.html#ae6435b6d7f4d95a0101419d9b35fd8ff',1,'edash_packager::media::mp4::PixelAspectRatioBox::ReadWrite()'],['../df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html#a4e3cc061fa25de9d0126968b30962b9a',1,'edash_packager::media::mp4::VideoSampleEntry::ReadWrite()'],['../d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html#a3328cf76da4cf3a35a52338fe1064ead',1,'edash_packager::media::mp4::ElementaryStreamDescriptor::ReadWrite()'],['../df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html#a3b6d0c1419aa46306ead177fb8a0bacb',1,'edash_packager::media::mp4::AudioSampleEntry::ReadWrite()'],['../d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html#a1805369e3cdb005269fcc9f81303889b',1,'edash_packager::media::mp4::SampleDescription::ReadWrite()'],['../dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html#ac05749eb5644fcea4731a2761007e05d',1,'edash_packager::media::mp4::DecodingTimeToSample::ReadWrite()'],['../da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html#ae992e9996ed76398d2fb76b6716d47cc',1,'edash_packager::media::mp4::CompositionTimeToSample::ReadWrite()'],['../df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html#a67744906db3ad6d773db7e954aa55c90',1,'edash_packager::media::mp4::SampleToChunk::ReadWrite()'],['../d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html#ad10adc057b18128f5e1527ba3f271f5e',1,'edash_packager::media::mp4::SampleSize::ReadWrite()'],['../db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html#a3b0f171ecea6b68c68c16d59f8129260',1,'edash_packager::media::mp4::CompactSampleSize::ReadWrite()'],['../da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html#a49cdc81322f269456db0630abf48db1f',1,'edash_packager::media::mp4::ChunkLargeOffset::ReadWrite()'],['../d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html#a51122c167851400733dfc4c17eff1a4f',1,'edash_packager::media::mp4::ChunkOffset::ReadWrite()'],['../d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html#a0548b203ea15ae58c5416af74cf8c76d',1,'edash_packager::media::mp4::SyncSample::ReadWrite()'],['../d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html#ae3658b62d13fede295a7434f97273bf7',1,'edash_packager::media::mp4::SampleTable::ReadWrite()'],['../d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html#ac3a355d63d3921d8d58f2acdc321c32f',1,'edash_packager::media::mp4::MediaHeader::ReadWrite()'],['../db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html#a8c75844c8ecfb2da00f3f675e01b9675',1,'edash_packager::media::mp4::VideoMediaHeader::ReadWrite()'],['../da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html#a4f702c6ad638a7b0a56c288c3a19dd3d',1,'edash_packager::media::mp4::SoundMediaHeader::ReadWrite()'],['../d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html#a2daa4a272f30c554c2f55227f3baf086',1,'edash_packager::media::mp4::DataEntryUrl::ReadWrite()'],['../d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html#a74329b886d82a4382ade0d2d41d95457',1,'edash_packager::media::mp4::DataReference::ReadWrite()'],['../d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html#a5b20674cf809b0bd5c0ac7d3b8343c5c',1,'edash_packager::media::mp4::DataInformation::ReadWrite()'],['../dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html#a44fbb80add6d32ae3a0ca61b64428876',1,'edash_packager::media::mp4::MediaInformation::ReadWrite()'],['../de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html#a4370961884525da5e235e958f51f713e',1,'edash_packager::media::mp4::Media::ReadWrite()'],['../d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html#a47698bfb1f20e09824372c8f8391e10d',1,'edash_packager::media::mp4::Track::ReadWrite()'],['../da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html#afcf95727aaffc74b5f08565c6f4170cd',1,'edash_packager::media::mp4::MovieExtendsHeader::ReadWrite()'],['../d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html#af22666271f9314e56ff5ba909207523f',1,'edash_packager::media::mp4::TrackExtends::ReadWrite()'],['../d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html#addcb0fba685eee2c0dda799c30271f15',1,'edash_packager::media::mp4::MovieExtends::ReadWrite()'],['../d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html#ac77f65ee07e867c0c3db96f4154f22da',1,'edash_packager::media::mp4::Movie::ReadWrite()'],['../d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html#a96e4f7eaaba4f304c4baab7d1d45b15c',1,'edash_packager::media::mp4::TrackFragmentDecodeTime::ReadWrite()'],['../df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html#ab9ddce932c6d665f2927fc907d21ed68',1,'edash_packager::media::mp4::MovieFragmentHeader::ReadWrite()'],['../d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html#a87e7355bfa43933caa651dbd0e23811c',1,'edash_packager::media::mp4::TrackFragmentHeader::ReadWrite()'],['../df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html#a1a6b76ea2a90ce578fe0092f0ef40edb',1,'edash_packager::media::mp4::TrackFragmentRun::ReadWrite()'],['../d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html#a6855cfe79a965e95ab5be78afb745096',1,'edash_packager::media::mp4::SampleToGroup::ReadWrite()'],['../d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html#a6989deb24d851e40e92fab89dbd23159',1,'edash_packager::media::mp4::SampleGroupDescription::ReadWrite()'],['../d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html#abef97532bd33a34f6f96bd58d183120f',1,'edash_packager::media::mp4::TrackFragment::ReadWrite()'],['../dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html#a761c6e64c7055cc1f78fdfd47161b77e',1,'edash_packager::media::mp4::MovieFragment::ReadWrite()'],['../d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html#ae2c53c4a16d81090565d29f6301080fd',1,'edash_packager::media::mp4::SegmentIndex::ReadWrite()']]], + ['readwrite',['ReadWrite',['../d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html#ab588f893676e2c817088fc01caa7b135',1,'edash_packager::media::mp4::Box::ReadWrite()'],['../d6/d8f/structedash__packager_1_1media_1_1mp4_1_1FullBox.html#a870af62c176dfafa79cde0b1a8a55698',1,'edash_packager::media::mp4::FullBox::ReadWrite()'],['../d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.html#ac9414d32800e3fe74fa0a1178b9f2532',1,'edash_packager::media::mp4::FileType::ReadWrite()'],['../dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html#addccc32717d0e19e0c83b4896e5b75fa',1,'edash_packager::media::mp4::SegmentType::ReadWrite()'],['../da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html#af42f34f32cf72bad931a087ccd091497',1,'edash_packager::media::mp4::ProtectionSystemSpecificHeader::ReadWrite()'],['../de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html#aa0d478659013bf328a47d5b6fa85e27a',1,'edash_packager::media::mp4::SampleAuxiliaryInformationOffset::ReadWrite()'],['../d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html#aa87db40b90258eea4a9ac59a05bfa65c',1,'edash_packager::media::mp4::SampleAuxiliaryInformationSize::ReadWrite()'],['../da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html#ae70a5a4d8284294ef28e4e09ca99b328',1,'edash_packager::media::mp4::OriginalFormat::ReadWrite()'],['../d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html#a7a75cb5cb201ed7d4ac5cc3780d89938',1,'edash_packager::media::mp4::SchemeType::ReadWrite()'],['../de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html#a4d7e035c720876033e0ff6c7b54d3273',1,'edash_packager::media::mp4::TrackEncryption::ReadWrite()'],['../d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html#ac4463f938d941146acfa6bcdc20976c8',1,'edash_packager::media::mp4::SchemeInfo::ReadWrite()'],['../dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html#a05b923f36c96656b25217238c46cd2ee',1,'edash_packager::media::mp4::ProtectionSchemeInfo::ReadWrite()'],['../dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html#aaa8c99dfb5bcac4d65bceb01bd88e404',1,'edash_packager::media::mp4::MovieHeader::ReadWrite()'],['../dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html#a9ff4b7d42ee01f44bd2dff1c3f26f3c7',1,'edash_packager::media::mp4::TrackHeader::ReadWrite()'],['../d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html#af5ff80a49ff57612f9748e8a960315b5',1,'edash_packager::media::mp4::EditList::ReadWrite()'],['../d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html#a282283cf1f9eee501012641d3520361c',1,'edash_packager::media::mp4::Edit::ReadWrite()'],['../d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html#a3df705ca0d139d1051dfa05a2b6b7060',1,'edash_packager::media::mp4::HandlerReference::ReadWrite()'],['../d1/d31/structedash__packager_1_1media_1_1mp4_1_1CodecConfigurationRecord.html#a8caa17c35508de2a49a59917b1669c91',1,'edash_packager::media::mp4::CodecConfigurationRecord::ReadWrite()'],['../d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.html#ae6435b6d7f4d95a0101419d9b35fd8ff',1,'edash_packager::media::mp4::PixelAspectRatioBox::ReadWrite()'],['../df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html#a4e3cc061fa25de9d0126968b30962b9a',1,'edash_packager::media::mp4::VideoSampleEntry::ReadWrite()'],['../d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html#a3328cf76da4cf3a35a52338fe1064ead',1,'edash_packager::media::mp4::ElementaryStreamDescriptor::ReadWrite()'],['../df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html#a3b6d0c1419aa46306ead177fb8a0bacb',1,'edash_packager::media::mp4::AudioSampleEntry::ReadWrite()'],['../d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html#a1805369e3cdb005269fcc9f81303889b',1,'edash_packager::media::mp4::SampleDescription::ReadWrite()'],['../dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html#ac05749eb5644fcea4731a2761007e05d',1,'edash_packager::media::mp4::DecodingTimeToSample::ReadWrite()'],['../da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html#ae992e9996ed76398d2fb76b6716d47cc',1,'edash_packager::media::mp4::CompositionTimeToSample::ReadWrite()'],['../df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html#a67744906db3ad6d773db7e954aa55c90',1,'edash_packager::media::mp4::SampleToChunk::ReadWrite()'],['../d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html#ad10adc057b18128f5e1527ba3f271f5e',1,'edash_packager::media::mp4::SampleSize::ReadWrite()'],['../db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html#a3b0f171ecea6b68c68c16d59f8129260',1,'edash_packager::media::mp4::CompactSampleSize::ReadWrite()'],['../da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html#a49cdc81322f269456db0630abf48db1f',1,'edash_packager::media::mp4::ChunkLargeOffset::ReadWrite()'],['../d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html#a51122c167851400733dfc4c17eff1a4f',1,'edash_packager::media::mp4::ChunkOffset::ReadWrite()'],['../d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html#a0548b203ea15ae58c5416af74cf8c76d',1,'edash_packager::media::mp4::SyncSample::ReadWrite()'],['../d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html#ae3658b62d13fede295a7434f97273bf7',1,'edash_packager::media::mp4::SampleTable::ReadWrite()'],['../d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html#ac3a355d63d3921d8d58f2acdc321c32f',1,'edash_packager::media::mp4::MediaHeader::ReadWrite()'],['../db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html#a8c75844c8ecfb2da00f3f675e01b9675',1,'edash_packager::media::mp4::VideoMediaHeader::ReadWrite()'],['../da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html#a4f702c6ad638a7b0a56c288c3a19dd3d',1,'edash_packager::media::mp4::SoundMediaHeader::ReadWrite()'],['../d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html#a2daa4a272f30c554c2f55227f3baf086',1,'edash_packager::media::mp4::DataEntryUrl::ReadWrite()'],['../d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html#a74329b886d82a4382ade0d2d41d95457',1,'edash_packager::media::mp4::DataReference::ReadWrite()'],['../d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html#a5b20674cf809b0bd5c0ac7d3b8343c5c',1,'edash_packager::media::mp4::DataInformation::ReadWrite()'],['../dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html#a44fbb80add6d32ae3a0ca61b64428876',1,'edash_packager::media::mp4::MediaInformation::ReadWrite()'],['../de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html#a4370961884525da5e235e958f51f713e',1,'edash_packager::media::mp4::Media::ReadWrite()'],['../d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html#a47698bfb1f20e09824372c8f8391e10d',1,'edash_packager::media::mp4::Track::ReadWrite()'],['../da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html#afcf95727aaffc74b5f08565c6f4170cd',1,'edash_packager::media::mp4::MovieExtendsHeader::ReadWrite()'],['../d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html#af22666271f9314e56ff5ba909207523f',1,'edash_packager::media::mp4::TrackExtends::ReadWrite()'],['../d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html#addcb0fba685eee2c0dda799c30271f15',1,'edash_packager::media::mp4::MovieExtends::ReadWrite()'],['../d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html#ac77f65ee07e867c0c3db96f4154f22da',1,'edash_packager::media::mp4::Movie::ReadWrite()'],['../d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html#a96e4f7eaaba4f304c4baab7d1d45b15c',1,'edash_packager::media::mp4::TrackFragmentDecodeTime::ReadWrite()'],['../df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html#ab9ddce932c6d665f2927fc907d21ed68',1,'edash_packager::media::mp4::MovieFragmentHeader::ReadWrite()'],['../d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html#a87e7355bfa43933caa651dbd0e23811c',1,'edash_packager::media::mp4::TrackFragmentHeader::ReadWrite()'],['../df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html#a1a6b76ea2a90ce578fe0092f0ef40edb',1,'edash_packager::media::mp4::TrackFragmentRun::ReadWrite()'],['../d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html#a6855cfe79a965e95ab5be78afb745096',1,'edash_packager::media::mp4::SampleToGroup::ReadWrite()'],['../d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html#a6989deb24d851e40e92fab89dbd23159',1,'edash_packager::media::mp4::SampleGroupDescription::ReadWrite()'],['../d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html#abef97532bd33a34f6f96bd58d183120f',1,'edash_packager::media::mp4::TrackFragment::ReadWrite()'],['../dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html#a761c6e64c7055cc1f78fdfd47161b77e',1,'edash_packager::media::mp4::MovieFragment::ReadWrite()'],['../d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html#ae2c53c4a16d81090565d29f6301080fd',1,'edash_packager::media::mp4::SegmentIndex::ReadWrite()']]], ['readwritechild',['ReadWriteChild',['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#ae2f4c04bd204e593491db3e24715efd2',1,'edash_packager::media::mp4::BoxBuffer']]], ['readwriteuint64nbytes',['ReadWriteUInt64NBytes',['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#a726ab4970a19fa671137e88098e3cd48',1,'edash_packager::media::mp4::BoxBuffer']]], ['release',['Release',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html#a0942bc721718b70b49fc9e91a6934513',1,'edash_packager::xml::XmlNode']]], diff --git a/docs/search/classes_0.js b/docs/search/classes_0.js index cc4450c861..9aea99dbc3 100644 --- a/docs/search/classes_0.js +++ b/docs/search/classes_0.js @@ -13,5 +13,5 @@ var searchData= ['audiosampleentry',['AudioSampleEntry',['../df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html',1,'edash_packager::media::mp4']]], ['audiostreaminfo',['AudioStreamInfo',['../da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html',1,'edash_packager::media']]], ['audiotimestamphelper',['AudioTimestampHelper',['../da/de4/classedash__packager_1_1media_1_1AudioTimestampHelper.html',1,'edash_packager::media']]], - ['avcdecoderconfigurationrecord',['AVCDecoderConfigurationRecord',['../d8/dbb/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord.html',1,'edash_packager::media::mp4']]] + ['avcdecoderconfiguration',['AVCDecoderConfiguration',['../d6/d49/classedash__packager_1_1media_1_1AVCDecoderConfiguration.html',1,'edash_packager::media']]] ]; diff --git a/docs/search/classes_2.js b/docs/search/classes_2.js index be6546367c..82864f34d0 100644 --- a/docs/search/classes_2.js +++ b/docs/search/classes_2.js @@ -8,6 +8,7 @@ var searchData= ['closurethread',['ClosureThread',['../dd/d2b/classedash__packager_1_1media_1_1ClosureThread.html',1,'edash_packager::media']]], ['cluster',['Cluster',['../df/d40/classedash__packager_1_1media_1_1Cluster.html',1,'edash_packager::media']]], ['clusterbuilder',['ClusterBuilder',['../d3/d69/classedash__packager_1_1media_1_1ClusterBuilder.html',1,'edash_packager::media']]], + ['codecconfigurationrecord',['CodecConfigurationRecord',['../d1/d31/structedash__packager_1_1media_1_1mp4_1_1CodecConfigurationRecord.html',1,'edash_packager::media::mp4']]], ['compactsamplesize',['CompactSampleSize',['../db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html',1,'edash_packager::media::mp4']]], ['compositionoffset',['CompositionOffset',['../da/dfe/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset.html',1,'edash_packager::media::mp4']]], ['compositionoffsetiterator',['CompositionOffsetIterator',['../d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html',1,'edash_packager::media::mp4']]], diff --git a/docs/search/functions_2.js b/docs/search/functions_2.js index 2259628b07..76071701d4 100644 --- a/docs/search/functions_2.js +++ b/docs/search/functions_2.js @@ -10,7 +10,7 @@ var searchData= ['closurethread',['ClosureThread',['../dd/d2b/classedash__packager_1_1media_1_1ClosureThread.html#a8cbb44ca1f4abd7028ba4602af82de0d',1,'edash_packager::media::ClosureThread']]], ['cluster_5fended',['cluster_ended',['../db/da0/classedash__packager_1_1media_1_1WebMClusterParser.html#ae62be1971c352525906d6fad2ee831bd',1,'edash_packager::media::WebMClusterParser']]], ['compositionoffsetiterator',['CompositionOffsetIterator',['../d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html#ac81770b820bc9b942c8ed9b8a12969b6',1,'edash_packager::media::mp4::CompositionOffsetIterator']]], - ['computesize',['ComputeSize',['../d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html#a308081198b1fa9f9e4653ad976014a16',1,'edash_packager::media::mp4::Box::ComputeSize()'],['../d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.html#a9a35918ae9926d5a8de62de3fe3e4633',1,'edash_packager::media::mp4::FileType::ComputeSize()'],['../dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html#a1435881b64475f2b25c03892848fb5db',1,'edash_packager::media::mp4::SegmentType::ComputeSize()'],['../da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html#a63ef4d49a7b8b243b5638a6d7c103f1f',1,'edash_packager::media::mp4::ProtectionSystemSpecificHeader::ComputeSize()'],['../de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html#acee5016b00abd31077e9418ba11d0fa7',1,'edash_packager::media::mp4::SampleAuxiliaryInformationOffset::ComputeSize()'],['../d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html#aa44629c6bd902b46777156e665cad07f',1,'edash_packager::media::mp4::SampleAuxiliaryInformationSize::ComputeSize()'],['../da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html#a87b7c52641305ce4d798dd668d6756ec',1,'edash_packager::media::mp4::OriginalFormat::ComputeSize()'],['../d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html#a71f44ff9cca6d198949660fb249360d7',1,'edash_packager::media::mp4::SchemeType::ComputeSize()'],['../de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html#a65a57b19166e5a991fbdf2c4f4dfb8b2',1,'edash_packager::media::mp4::TrackEncryption::ComputeSize()'],['../d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html#a91c8e944c00f39f177ba760bec0a8f4a',1,'edash_packager::media::mp4::SchemeInfo::ComputeSize()'],['../dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html#a96bcc9da38534b1e435a64b54088ddf0',1,'edash_packager::media::mp4::ProtectionSchemeInfo::ComputeSize()'],['../dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html#a98f0e4357b76371c138d1f4668341dfc',1,'edash_packager::media::mp4::MovieHeader::ComputeSize()'],['../dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html#a6511792049c0cbf8885bec4fbb7061f9',1,'edash_packager::media::mp4::TrackHeader::ComputeSize()'],['../d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html#a11a352da04af26680d0cf5177d61fd5e',1,'edash_packager::media::mp4::EditList::ComputeSize()'],['../d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html#a14c1a549b11f692b5f0633b7125c3ae3',1,'edash_packager::media::mp4::Edit::ComputeSize()'],['../d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html#a3d9b29d66fee15035ac5ca69e0adeaf5',1,'edash_packager::media::mp4::HandlerReference::ComputeSize()'],['../d8/dbb/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord.html#a96c8bca868ad19729efe44a50de9c1c2',1,'edash_packager::media::mp4::AVCDecoderConfigurationRecord::ComputeSize()'],['../d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.html#a37421c72cfd99b5e1dfdee818a6650f7',1,'edash_packager::media::mp4::PixelAspectRatioBox::ComputeSize()'],['../df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html#aa977e4caab29d9efb12577d8bfbba818',1,'edash_packager::media::mp4::VideoSampleEntry::ComputeSize()'],['../d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html#a08e90c754d415f9fa851f14a82849627',1,'edash_packager::media::mp4::ElementaryStreamDescriptor::ComputeSize()'],['../df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html#af74d9b19c4c9bf649bda8791d6fa5f58',1,'edash_packager::media::mp4::AudioSampleEntry::ComputeSize()'],['../d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html#ac5c6abc8d36c7bb2136f18ac5d1b5368',1,'edash_packager::media::mp4::SampleDescription::ComputeSize()'],['../dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html#aa3f3c842b8664389c26b23f9ab4e31cb',1,'edash_packager::media::mp4::DecodingTimeToSample::ComputeSize()'],['../da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html#a57ac0c7400d16cee449e3bf8b73a53dd',1,'edash_packager::media::mp4::CompositionTimeToSample::ComputeSize()'],['../df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html#a0093bc7fe20955fc6b5e91103b84be60',1,'edash_packager::media::mp4::SampleToChunk::ComputeSize()'],['../d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html#af7d69581466475192e91709c97d21ecc',1,'edash_packager::media::mp4::SampleSize::ComputeSize()'],['../db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html#a61b9d0cf0b2e5c64fc278cadfcb2dd6d',1,'edash_packager::media::mp4::CompactSampleSize::ComputeSize()'],['../da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html#ab6f87ec8a31c76f2e35edf45608fd543',1,'edash_packager::media::mp4::ChunkLargeOffset::ComputeSize()'],['../d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html#a6d29fc7ed591d451602a6715da412bd5',1,'edash_packager::media::mp4::ChunkOffset::ComputeSize()'],['../d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html#a8cb53a889fcd586d30d151f605488962',1,'edash_packager::media::mp4::SyncSample::ComputeSize()'],['../d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html#a970de7eb21b0d9d6c6d5ec712e820c9e',1,'edash_packager::media::mp4::SampleTable::ComputeSize()'],['../d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html#ac7a87233d07c7e1463dff2c61a699d0b',1,'edash_packager::media::mp4::MediaHeader::ComputeSize()'],['../db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html#a4d5984fc09138282e29813f8afc84d05',1,'edash_packager::media::mp4::VideoMediaHeader::ComputeSize()'],['../da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html#a8aa6cd627929310db049a0a331bd246f',1,'edash_packager::media::mp4::SoundMediaHeader::ComputeSize()'],['../d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html#ae1d458e8604d271671f127b12976e96c',1,'edash_packager::media::mp4::DataEntryUrl::ComputeSize()'],['../d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html#a3001840c8f3bb6f07ff5d8fd61eacaa0',1,'edash_packager::media::mp4::DataReference::ComputeSize()'],['../d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html#a3828a5e79dc7f81cedec545d2a4a6907',1,'edash_packager::media::mp4::DataInformation::ComputeSize()'],['../dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html#abc1485f9e36b4d05dcb04d5545f61523',1,'edash_packager::media::mp4::MediaInformation::ComputeSize()'],['../de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html#a8638a1068c3449829c2e98f1bf81fa8c',1,'edash_packager::media::mp4::Media::ComputeSize()'],['../d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html#a35ce8375ed40c9d319c69926b63811d1',1,'edash_packager::media::mp4::Track::ComputeSize()'],['../da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html#aab2d0643fe0ca1f2db0f562c424d3f17',1,'edash_packager::media::mp4::MovieExtendsHeader::ComputeSize()'],['../d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html#a9c158ad0fae3cc804dfb01182ec9bb40',1,'edash_packager::media::mp4::TrackExtends::ComputeSize()'],['../d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html#a2411f9aa36ae1d44f615423255a82ea2',1,'edash_packager::media::mp4::MovieExtends::ComputeSize()'],['../d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html#aa985dd14863b1bb4803e4a3a44052c32',1,'edash_packager::media::mp4::Movie::ComputeSize()'],['../d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html#a79cef3eb30362f998f85e5dca409527c',1,'edash_packager::media::mp4::TrackFragmentDecodeTime::ComputeSize()'],['../df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html#a02661d289aaa12e286adcf68d4f6a779',1,'edash_packager::media::mp4::MovieFragmentHeader::ComputeSize()'],['../d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html#a96ec9c8087e0d5b333520705b50b1f21',1,'edash_packager::media::mp4::TrackFragmentHeader::ComputeSize()'],['../df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html#a9f821047d359bb22e77c72d347b2bbba',1,'edash_packager::media::mp4::TrackFragmentRun::ComputeSize()'],['../d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html#a6598e25c4bcff437b1584e8e3dd0173e',1,'edash_packager::media::mp4::SampleToGroup::ComputeSize()'],['../d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html#a434cabc0e6b47158863ff522d345270b',1,'edash_packager::media::mp4::SampleGroupDescription::ComputeSize()'],['../d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html#a937dc821489803e4ee759eebb98f7cfb',1,'edash_packager::media::mp4::TrackFragment::ComputeSize()'],['../dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html#a9e43e423495777bd8020f85f0d87b1ad',1,'edash_packager::media::mp4::MovieFragment::ComputeSize()'],['../d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html#a4ae43d06df7765c5384e6234e2b41b9c',1,'edash_packager::media::mp4::SegmentIndex::ComputeSize()']]], + ['computesize',['ComputeSize',['../d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html#a308081198b1fa9f9e4653ad976014a16',1,'edash_packager::media::mp4::Box::ComputeSize()'],['../d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.html#a9a35918ae9926d5a8de62de3fe3e4633',1,'edash_packager::media::mp4::FileType::ComputeSize()'],['../dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html#a1435881b64475f2b25c03892848fb5db',1,'edash_packager::media::mp4::SegmentType::ComputeSize()'],['../da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html#a63ef4d49a7b8b243b5638a6d7c103f1f',1,'edash_packager::media::mp4::ProtectionSystemSpecificHeader::ComputeSize()'],['../de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html#acee5016b00abd31077e9418ba11d0fa7',1,'edash_packager::media::mp4::SampleAuxiliaryInformationOffset::ComputeSize()'],['../d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html#aa44629c6bd902b46777156e665cad07f',1,'edash_packager::media::mp4::SampleAuxiliaryInformationSize::ComputeSize()'],['../da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html#a87b7c52641305ce4d798dd668d6756ec',1,'edash_packager::media::mp4::OriginalFormat::ComputeSize()'],['../d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html#a71f44ff9cca6d198949660fb249360d7',1,'edash_packager::media::mp4::SchemeType::ComputeSize()'],['../de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html#a65a57b19166e5a991fbdf2c4f4dfb8b2',1,'edash_packager::media::mp4::TrackEncryption::ComputeSize()'],['../d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html#a91c8e944c00f39f177ba760bec0a8f4a',1,'edash_packager::media::mp4::SchemeInfo::ComputeSize()'],['../dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html#a96bcc9da38534b1e435a64b54088ddf0',1,'edash_packager::media::mp4::ProtectionSchemeInfo::ComputeSize()'],['../dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html#a98f0e4357b76371c138d1f4668341dfc',1,'edash_packager::media::mp4::MovieHeader::ComputeSize()'],['../dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html#a6511792049c0cbf8885bec4fbb7061f9',1,'edash_packager::media::mp4::TrackHeader::ComputeSize()'],['../d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html#a11a352da04af26680d0cf5177d61fd5e',1,'edash_packager::media::mp4::EditList::ComputeSize()'],['../d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html#a14c1a549b11f692b5f0633b7125c3ae3',1,'edash_packager::media::mp4::Edit::ComputeSize()'],['../d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html#a3d9b29d66fee15035ac5ca69e0adeaf5',1,'edash_packager::media::mp4::HandlerReference::ComputeSize()'],['../d1/d31/structedash__packager_1_1media_1_1mp4_1_1CodecConfigurationRecord.html#aee4b7941d6cc0257143249259e07f761',1,'edash_packager::media::mp4::CodecConfigurationRecord::ComputeSize()'],['../d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.html#a37421c72cfd99b5e1dfdee818a6650f7',1,'edash_packager::media::mp4::PixelAspectRatioBox::ComputeSize()'],['../df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html#aa977e4caab29d9efb12577d8bfbba818',1,'edash_packager::media::mp4::VideoSampleEntry::ComputeSize()'],['../d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html#a08e90c754d415f9fa851f14a82849627',1,'edash_packager::media::mp4::ElementaryStreamDescriptor::ComputeSize()'],['../df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html#af74d9b19c4c9bf649bda8791d6fa5f58',1,'edash_packager::media::mp4::AudioSampleEntry::ComputeSize()'],['../d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html#ac5c6abc8d36c7bb2136f18ac5d1b5368',1,'edash_packager::media::mp4::SampleDescription::ComputeSize()'],['../dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html#aa3f3c842b8664389c26b23f9ab4e31cb',1,'edash_packager::media::mp4::DecodingTimeToSample::ComputeSize()'],['../da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html#a57ac0c7400d16cee449e3bf8b73a53dd',1,'edash_packager::media::mp4::CompositionTimeToSample::ComputeSize()'],['../df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html#a0093bc7fe20955fc6b5e91103b84be60',1,'edash_packager::media::mp4::SampleToChunk::ComputeSize()'],['../d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html#af7d69581466475192e91709c97d21ecc',1,'edash_packager::media::mp4::SampleSize::ComputeSize()'],['../db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html#a61b9d0cf0b2e5c64fc278cadfcb2dd6d',1,'edash_packager::media::mp4::CompactSampleSize::ComputeSize()'],['../da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html#ab6f87ec8a31c76f2e35edf45608fd543',1,'edash_packager::media::mp4::ChunkLargeOffset::ComputeSize()'],['../d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html#a6d29fc7ed591d451602a6715da412bd5',1,'edash_packager::media::mp4::ChunkOffset::ComputeSize()'],['../d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html#a8cb53a889fcd586d30d151f605488962',1,'edash_packager::media::mp4::SyncSample::ComputeSize()'],['../d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html#a970de7eb21b0d9d6c6d5ec712e820c9e',1,'edash_packager::media::mp4::SampleTable::ComputeSize()'],['../d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html#ac7a87233d07c7e1463dff2c61a699d0b',1,'edash_packager::media::mp4::MediaHeader::ComputeSize()'],['../db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html#a4d5984fc09138282e29813f8afc84d05',1,'edash_packager::media::mp4::VideoMediaHeader::ComputeSize()'],['../da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html#a8aa6cd627929310db049a0a331bd246f',1,'edash_packager::media::mp4::SoundMediaHeader::ComputeSize()'],['../d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html#ae1d458e8604d271671f127b12976e96c',1,'edash_packager::media::mp4::DataEntryUrl::ComputeSize()'],['../d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html#a3001840c8f3bb6f07ff5d8fd61eacaa0',1,'edash_packager::media::mp4::DataReference::ComputeSize()'],['../d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html#a3828a5e79dc7f81cedec545d2a4a6907',1,'edash_packager::media::mp4::DataInformation::ComputeSize()'],['../dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html#abc1485f9e36b4d05dcb04d5545f61523',1,'edash_packager::media::mp4::MediaInformation::ComputeSize()'],['../de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html#a8638a1068c3449829c2e98f1bf81fa8c',1,'edash_packager::media::mp4::Media::ComputeSize()'],['../d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html#a35ce8375ed40c9d319c69926b63811d1',1,'edash_packager::media::mp4::Track::ComputeSize()'],['../da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html#aab2d0643fe0ca1f2db0f562c424d3f17',1,'edash_packager::media::mp4::MovieExtendsHeader::ComputeSize()'],['../d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html#a9c158ad0fae3cc804dfb01182ec9bb40',1,'edash_packager::media::mp4::TrackExtends::ComputeSize()'],['../d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html#a2411f9aa36ae1d44f615423255a82ea2',1,'edash_packager::media::mp4::MovieExtends::ComputeSize()'],['../d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html#aa985dd14863b1bb4803e4a3a44052c32',1,'edash_packager::media::mp4::Movie::ComputeSize()'],['../d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html#a79cef3eb30362f998f85e5dca409527c',1,'edash_packager::media::mp4::TrackFragmentDecodeTime::ComputeSize()'],['../df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html#a02661d289aaa12e286adcf68d4f6a779',1,'edash_packager::media::mp4::MovieFragmentHeader::ComputeSize()'],['../d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html#a96ec9c8087e0d5b333520705b50b1f21',1,'edash_packager::media::mp4::TrackFragmentHeader::ComputeSize()'],['../df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html#a9f821047d359bb22e77c72d347b2bbba',1,'edash_packager::media::mp4::TrackFragmentRun::ComputeSize()'],['../d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html#a6598e25c4bcff437b1584e8e3dd0173e',1,'edash_packager::media::mp4::SampleToGroup::ComputeSize()'],['../d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html#a434cabc0e6b47158863ff522d345270b',1,'edash_packager::media::mp4::SampleGroupDescription::ComputeSize()'],['../d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html#a937dc821489803e4ee759eebb98f7cfb',1,'edash_packager::media::mp4::TrackFragment::ComputeSize()'],['../dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html#a9e43e423495777bd8020f85f0d87b1ad',1,'edash_packager::media::mp4::MovieFragment::ComputeSize()'],['../d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html#a4ae43d06df7765c5384e6234e2b41b9c',1,'edash_packager::media::mp4::SegmentIndex::ComputeSize()']]], ['connect',['Connect',['../d2/dfd/classedash__packager_1_1media_1_1MediaStream.html#a05b7188c263dc71b00635415bbdfd37f',1,'edash_packager::media::MediaStream']]], ['container_5fname',['container_name',['../d5/dce/classedash__packager_1_1media_1_1Demuxer.html#a650a6cfceda9dcd9c05feefbe0773057',1,'edash_packager::media::Demuxer']]], ['convertbytestreamtonalunitstream',['ConvertByteStreamToNalUnitStream',['../d5/d30/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter.html#a63d265a1448b3a3534ba7c9c6c5c4178',1,'edash_packager::media::H264ByteToUnitStreamConverter']]], diff --git a/docs/search/functions_6.js b/docs/search/functions_6.js index 7ba461b0f7..5eae7f5f2e 100644 --- a/docs/search/functions_6.js +++ b/docs/search/functions_6.js @@ -9,7 +9,7 @@ var searchData= ['getaudiospecificconfig',['GetAudioSpecificConfig',['../db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html#a65c36a606121daa90c44b44632b634ec',1,'edash_packager::media::mp2t::AdtsHeader']]], ['getaudiostreaminfo',['GetAudioStreamInfo',['../de/d98/classedash__packager_1_1media_1_1WebMAudioClient.html#aa1adf8eaedbb721b663e67630e54e36a',1,'edash_packager::media::WebMAudioClient']]], ['getavcdecoderconfigurationrecord',['GetAVCDecoderConfigurationRecord',['../d5/d30/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter.html#a0f4d8f75700dc0674eb6eb9c7d6dd393',1,'edash_packager::media::H264ByteToUnitStreamConverter']]], - ['getcodecstring',['GetCodecString',['../da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html#aa62e486f463c867b8e2f41ebb4ecea34',1,'edash_packager::media::AudioStreamInfo::GetCodecString()'],['../d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html#a801612f825520fae9c3c3ce1de138128',1,'edash_packager::media::VideoStreamInfo::GetCodecString()']]], + ['getcodecstring',['GetCodecString',['../da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html#aa62e486f463c867b8e2f41ebb4ecea34',1,'edash_packager::media::AudioStreamInfo::GetCodecString()'],['../d6/d49/classedash__packager_1_1media_1_1AVCDecoderConfiguration.html#ad03be6192998b36ef2364266e5604c19',1,'edash_packager::media::AVCDecoderConfiguration::GetCodecString() const '],['../d6/d49/classedash__packager_1_1media_1_1AVCDecoderConfiguration.html#a88c2e4c0fd4dd99f6a1b02649a6b5831',1,'edash_packager::media::AVCDecoderConfiguration::GetCodecString(uint8_t profile_indication, uint8_t profile_compatibility, uint8_t avc_level)']]], ['getcontenttype',['GetContentType',['../db/d09/namespaceedash__packager.html#a7f479c5670e5c9f721772e0bd316bff9',1,'edash_packager']]], ['getcryptoperiodkey',['GetCryptoPeriodKey',['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#a349381b866a37df15a931980636621ac',1,'edash_packager::media::KeySource::GetCryptoPeriodKey()'],['../db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html#a35023c0b18a2db012027d4cf22c7bf1b',1,'edash_packager::media::WidevineKeySource::GetCryptoPeriodKey()']]], ['getdecryptconfig',['GetDecryptConfig',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#ae62fc9fe719f4432d4043ea2f43963c6',1,'edash_packager::media::mp4::TrackRunIterator']]], diff --git a/docs/search/functions_e.js b/docs/search/functions_e.js index 243bb9df5b..fd213a8ade 100644 --- a/docs/search/functions_e.js +++ b/docs/search/functions_e.js @@ -1,6 +1,6 @@ var searchData= [ - ['parse',['Parse',['../d5/dce/classedash__packager_1_1media_1_1Demuxer.html#adb6c35974c24809c715380a99ac7cc78',1,'edash_packager::media::Demuxer::Parse()'],['../dc/d48/classedash__packager_1_1media_1_1MediaParser.html#a6bc31ca2303d340a11a63a6f4bbb8b0a',1,'edash_packager::media::MediaParser::Parse()'],['../db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html#a12f7811f1539361980a13517f948f9fb',1,'edash_packager::media::mp2t::AdtsHeader::Parse()'],['../dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.html#a8e01eb8219dfd9a649ee5a153f9bbabb',1,'edash_packager::media::mp2t::Mp2tMediaParser::Parse()'],['../dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html#a90a58afc9e6b20b9a6909d54f94dafc9',1,'edash_packager::media::mp4::AACAudioSpecificConfig::Parse()'],['../d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html#a7b62a3983faafbea54a32486df60ed96',1,'edash_packager::media::mp4::Box::Parse()'],['../d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.html#ade36e7fd4daf8c6a98c16b6a94bafd28',1,'edash_packager::media::mp4::MP4MediaParser::Parse()'],['../db/da0/classedash__packager_1_1media_1_1WebMClusterParser.html#a060661d4a0bfc01543fa025fb4b09a7d',1,'edash_packager::media::WebMClusterParser::Parse()'],['../dd/d47/classedash__packager_1_1media_1_1WebMInfoParser.html#ab2f2dd920214bf7942e374d4c9843243',1,'edash_packager::media::WebMInfoParser::Parse()'],['../dd/d99/classedash__packager_1_1media_1_1WebMMediaParser.html#a5a95d3879a9a96830fdcf4f866879143',1,'edash_packager::media::WebMMediaParser::Parse()'],['../d6/dd6/classedash__packager_1_1media_1_1WebMListParser.html#a5b3b0c8fd0423044d0090357428b8ee0',1,'edash_packager::media::WebMListParser::Parse()'],['../db/d23/classedash__packager_1_1media_1_1WebMTracksParser.html#a8719ba4bc187c32a73f133c0a67a19ab',1,'edash_packager::media::WebMTracksParser::Parse()'],['../dc/dc8/classedash__packager_1_1media_1_1WebMWebVTTParser.html#a979168b11e59b863de2d3ba3fbb60815',1,'edash_packager::media::WebMWebVTTParser::Parse()'],['../d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.html#af2a6c8b62df30b6515eee30389b271d7',1,'edash_packager::media::wvm::WvmMediaParser::Parse()']]], + ['parse',['Parse',['../d5/dce/classedash__packager_1_1media_1_1Demuxer.html#adb6c35974c24809c715380a99ac7cc78',1,'edash_packager::media::Demuxer::Parse()'],['../dc/d48/classedash__packager_1_1media_1_1MediaParser.html#a6bc31ca2303d340a11a63a6f4bbb8b0a',1,'edash_packager::media::MediaParser::Parse()'],['../d6/d49/classedash__packager_1_1media_1_1AVCDecoderConfiguration.html#a8ac1cb50516b99f6ecafbdcb2705b1cc',1,'edash_packager::media::AVCDecoderConfiguration::Parse()'],['../db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html#a12f7811f1539361980a13517f948f9fb',1,'edash_packager::media::mp2t::AdtsHeader::Parse()'],['../dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.html#a8e01eb8219dfd9a649ee5a153f9bbabb',1,'edash_packager::media::mp2t::Mp2tMediaParser::Parse()'],['../dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html#a90a58afc9e6b20b9a6909d54f94dafc9',1,'edash_packager::media::mp4::AACAudioSpecificConfig::Parse()'],['../d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html#a7b62a3983faafbea54a32486df60ed96',1,'edash_packager::media::mp4::Box::Parse()'],['../d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.html#ade36e7fd4daf8c6a98c16b6a94bafd28',1,'edash_packager::media::mp4::MP4MediaParser::Parse()'],['../db/da0/classedash__packager_1_1media_1_1WebMClusterParser.html#a060661d4a0bfc01543fa025fb4b09a7d',1,'edash_packager::media::WebMClusterParser::Parse()'],['../dd/d47/classedash__packager_1_1media_1_1WebMInfoParser.html#ab2f2dd920214bf7942e374d4c9843243',1,'edash_packager::media::WebMInfoParser::Parse()'],['../dd/d99/classedash__packager_1_1media_1_1WebMMediaParser.html#a5a95d3879a9a96830fdcf4f866879143',1,'edash_packager::media::WebMMediaParser::Parse()'],['../d6/dd6/classedash__packager_1_1media_1_1WebMListParser.html#a5b3b0c8fd0423044d0090357428b8ee0',1,'edash_packager::media::WebMListParser::Parse()'],['../db/d23/classedash__packager_1_1media_1_1WebMTracksParser.html#a8719ba4bc187c32a73f133c0a67a19ab',1,'edash_packager::media::WebMTracksParser::Parse()'],['../dc/dc8/classedash__packager_1_1media_1_1WebMWebVTTParser.html#a979168b11e59b863de2d3ba3fbb60815',1,'edash_packager::media::WebMWebVTTParser::Parse()'],['../d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.html#af2a6c8b62df30b6515eee30389b271d7',1,'edash_packager::media::wvm::WvmMediaParser::Parse()']]], ['passscopedptr',['PassScopedPtr',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html#a07d40d8fe27a2d1c3470f16ef0df3864',1,'edash_packager::xml::XmlNode']]], ['peek',['Peek',['../d8/d2e/classedash__packager_1_1media_1_1ByteQueue.html#a8253df160751462f3b75290a7c525e56',1,'edash_packager::media::ByteQueue::Peek()'],['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html#acf87e686e78d6cb962f39bb2acca7180',1,'edash_packager::media::ProducerConsumerQueue::Peek()']]], ['peekat',['PeekAt',['../d1/d92/classedash__packager_1_1media_1_1OffsetByteQueue.html#a32b06f514ebfd5aef820a9b91228a854',1,'edash_packager::media::OffsetByteQueue']]], diff --git a/docs/search/functions_f.js b/docs/search/functions_f.js index 57879245b5..2434d70e54 100644 --- a/docs/search/functions_f.js +++ b/docs/search/functions_f.js @@ -11,7 +11,7 @@ var searchData= ['reading',['Reading',['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#a36c0d8448dab759db37f9581ea602807',1,'edash_packager::media::mp4::BoxBuffer']]], ['readnbytesinto8',['ReadNBytesInto8',['../d9/d46/classedash__packager_1_1media_1_1BufferReader.html#ac21a2b3a9ed6b2ad20247b6f653d8a02',1,'edash_packager::media::BufferReader']]], ['readtoplevelbox',['ReadTopLevelBox',['../db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html#a029ef2fe387071143c42f50ffd1a16b5',1,'edash_packager::media::mp4::BoxReader']]], - ['readwrite',['ReadWrite',['../d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html#ab588f893676e2c817088fc01caa7b135',1,'edash_packager::media::mp4::Box::ReadWrite()'],['../d6/d8f/structedash__packager_1_1media_1_1mp4_1_1FullBox.html#a870af62c176dfafa79cde0b1a8a55698',1,'edash_packager::media::mp4::FullBox::ReadWrite()'],['../d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.html#ac9414d32800e3fe74fa0a1178b9f2532',1,'edash_packager::media::mp4::FileType::ReadWrite()'],['../dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html#addccc32717d0e19e0c83b4896e5b75fa',1,'edash_packager::media::mp4::SegmentType::ReadWrite()'],['../da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html#af42f34f32cf72bad931a087ccd091497',1,'edash_packager::media::mp4::ProtectionSystemSpecificHeader::ReadWrite()'],['../de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html#aa0d478659013bf328a47d5b6fa85e27a',1,'edash_packager::media::mp4::SampleAuxiliaryInformationOffset::ReadWrite()'],['../d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html#aa87db40b90258eea4a9ac59a05bfa65c',1,'edash_packager::media::mp4::SampleAuxiliaryInformationSize::ReadWrite()'],['../da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html#ae70a5a4d8284294ef28e4e09ca99b328',1,'edash_packager::media::mp4::OriginalFormat::ReadWrite()'],['../d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html#a7a75cb5cb201ed7d4ac5cc3780d89938',1,'edash_packager::media::mp4::SchemeType::ReadWrite()'],['../de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html#a4d7e035c720876033e0ff6c7b54d3273',1,'edash_packager::media::mp4::TrackEncryption::ReadWrite()'],['../d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html#ac4463f938d941146acfa6bcdc20976c8',1,'edash_packager::media::mp4::SchemeInfo::ReadWrite()'],['../dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html#a05b923f36c96656b25217238c46cd2ee',1,'edash_packager::media::mp4::ProtectionSchemeInfo::ReadWrite()'],['../dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html#aaa8c99dfb5bcac4d65bceb01bd88e404',1,'edash_packager::media::mp4::MovieHeader::ReadWrite()'],['../dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html#a9ff4b7d42ee01f44bd2dff1c3f26f3c7',1,'edash_packager::media::mp4::TrackHeader::ReadWrite()'],['../d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html#af5ff80a49ff57612f9748e8a960315b5',1,'edash_packager::media::mp4::EditList::ReadWrite()'],['../d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html#a282283cf1f9eee501012641d3520361c',1,'edash_packager::media::mp4::Edit::ReadWrite()'],['../d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html#a3df705ca0d139d1051dfa05a2b6b7060',1,'edash_packager::media::mp4::HandlerReference::ReadWrite()'],['../d8/dbb/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord.html#aed49d9bb85e483820a4af22026ea6f56',1,'edash_packager::media::mp4::AVCDecoderConfigurationRecord::ReadWrite()'],['../d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.html#ae6435b6d7f4d95a0101419d9b35fd8ff',1,'edash_packager::media::mp4::PixelAspectRatioBox::ReadWrite()'],['../df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html#a4e3cc061fa25de9d0126968b30962b9a',1,'edash_packager::media::mp4::VideoSampleEntry::ReadWrite()'],['../d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html#a3328cf76da4cf3a35a52338fe1064ead',1,'edash_packager::media::mp4::ElementaryStreamDescriptor::ReadWrite()'],['../df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html#a3b6d0c1419aa46306ead177fb8a0bacb',1,'edash_packager::media::mp4::AudioSampleEntry::ReadWrite()'],['../d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html#a1805369e3cdb005269fcc9f81303889b',1,'edash_packager::media::mp4::SampleDescription::ReadWrite()'],['../dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html#ac05749eb5644fcea4731a2761007e05d',1,'edash_packager::media::mp4::DecodingTimeToSample::ReadWrite()'],['../da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html#ae992e9996ed76398d2fb76b6716d47cc',1,'edash_packager::media::mp4::CompositionTimeToSample::ReadWrite()'],['../df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html#a67744906db3ad6d773db7e954aa55c90',1,'edash_packager::media::mp4::SampleToChunk::ReadWrite()'],['../d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html#ad10adc057b18128f5e1527ba3f271f5e',1,'edash_packager::media::mp4::SampleSize::ReadWrite()'],['../db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html#a3b0f171ecea6b68c68c16d59f8129260',1,'edash_packager::media::mp4::CompactSampleSize::ReadWrite()'],['../da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html#a49cdc81322f269456db0630abf48db1f',1,'edash_packager::media::mp4::ChunkLargeOffset::ReadWrite()'],['../d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html#a51122c167851400733dfc4c17eff1a4f',1,'edash_packager::media::mp4::ChunkOffset::ReadWrite()'],['../d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html#a0548b203ea15ae58c5416af74cf8c76d',1,'edash_packager::media::mp4::SyncSample::ReadWrite()'],['../d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html#ae3658b62d13fede295a7434f97273bf7',1,'edash_packager::media::mp4::SampleTable::ReadWrite()'],['../d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html#ac3a355d63d3921d8d58f2acdc321c32f',1,'edash_packager::media::mp4::MediaHeader::ReadWrite()'],['../db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html#a8c75844c8ecfb2da00f3f675e01b9675',1,'edash_packager::media::mp4::VideoMediaHeader::ReadWrite()'],['../da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html#a4f702c6ad638a7b0a56c288c3a19dd3d',1,'edash_packager::media::mp4::SoundMediaHeader::ReadWrite()'],['../d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html#a2daa4a272f30c554c2f55227f3baf086',1,'edash_packager::media::mp4::DataEntryUrl::ReadWrite()'],['../d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html#a74329b886d82a4382ade0d2d41d95457',1,'edash_packager::media::mp4::DataReference::ReadWrite()'],['../d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html#a5b20674cf809b0bd5c0ac7d3b8343c5c',1,'edash_packager::media::mp4::DataInformation::ReadWrite()'],['../dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html#a44fbb80add6d32ae3a0ca61b64428876',1,'edash_packager::media::mp4::MediaInformation::ReadWrite()'],['../de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html#a4370961884525da5e235e958f51f713e',1,'edash_packager::media::mp4::Media::ReadWrite()'],['../d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html#a47698bfb1f20e09824372c8f8391e10d',1,'edash_packager::media::mp4::Track::ReadWrite()'],['../da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html#afcf95727aaffc74b5f08565c6f4170cd',1,'edash_packager::media::mp4::MovieExtendsHeader::ReadWrite()'],['../d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html#af22666271f9314e56ff5ba909207523f',1,'edash_packager::media::mp4::TrackExtends::ReadWrite()'],['../d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html#addcb0fba685eee2c0dda799c30271f15',1,'edash_packager::media::mp4::MovieExtends::ReadWrite()'],['../d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html#ac77f65ee07e867c0c3db96f4154f22da',1,'edash_packager::media::mp4::Movie::ReadWrite()'],['../d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html#a96e4f7eaaba4f304c4baab7d1d45b15c',1,'edash_packager::media::mp4::TrackFragmentDecodeTime::ReadWrite()'],['../df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html#ab9ddce932c6d665f2927fc907d21ed68',1,'edash_packager::media::mp4::MovieFragmentHeader::ReadWrite()'],['../d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html#a87e7355bfa43933caa651dbd0e23811c',1,'edash_packager::media::mp4::TrackFragmentHeader::ReadWrite()'],['../df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html#a1a6b76ea2a90ce578fe0092f0ef40edb',1,'edash_packager::media::mp4::TrackFragmentRun::ReadWrite()'],['../d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html#a6855cfe79a965e95ab5be78afb745096',1,'edash_packager::media::mp4::SampleToGroup::ReadWrite()'],['../d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html#a6989deb24d851e40e92fab89dbd23159',1,'edash_packager::media::mp4::SampleGroupDescription::ReadWrite()'],['../d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html#abef97532bd33a34f6f96bd58d183120f',1,'edash_packager::media::mp4::TrackFragment::ReadWrite()'],['../dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html#a761c6e64c7055cc1f78fdfd47161b77e',1,'edash_packager::media::mp4::MovieFragment::ReadWrite()'],['../d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html#ae2c53c4a16d81090565d29f6301080fd',1,'edash_packager::media::mp4::SegmentIndex::ReadWrite()']]], + ['readwrite',['ReadWrite',['../d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html#ab588f893676e2c817088fc01caa7b135',1,'edash_packager::media::mp4::Box::ReadWrite()'],['../d6/d8f/structedash__packager_1_1media_1_1mp4_1_1FullBox.html#a870af62c176dfafa79cde0b1a8a55698',1,'edash_packager::media::mp4::FullBox::ReadWrite()'],['../d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.html#ac9414d32800e3fe74fa0a1178b9f2532',1,'edash_packager::media::mp4::FileType::ReadWrite()'],['../dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html#addccc32717d0e19e0c83b4896e5b75fa',1,'edash_packager::media::mp4::SegmentType::ReadWrite()'],['../da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html#af42f34f32cf72bad931a087ccd091497',1,'edash_packager::media::mp4::ProtectionSystemSpecificHeader::ReadWrite()'],['../de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html#aa0d478659013bf328a47d5b6fa85e27a',1,'edash_packager::media::mp4::SampleAuxiliaryInformationOffset::ReadWrite()'],['../d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html#aa87db40b90258eea4a9ac59a05bfa65c',1,'edash_packager::media::mp4::SampleAuxiliaryInformationSize::ReadWrite()'],['../da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html#ae70a5a4d8284294ef28e4e09ca99b328',1,'edash_packager::media::mp4::OriginalFormat::ReadWrite()'],['../d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html#a7a75cb5cb201ed7d4ac5cc3780d89938',1,'edash_packager::media::mp4::SchemeType::ReadWrite()'],['../de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html#a4d7e035c720876033e0ff6c7b54d3273',1,'edash_packager::media::mp4::TrackEncryption::ReadWrite()'],['../d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html#ac4463f938d941146acfa6bcdc20976c8',1,'edash_packager::media::mp4::SchemeInfo::ReadWrite()'],['../dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html#a05b923f36c96656b25217238c46cd2ee',1,'edash_packager::media::mp4::ProtectionSchemeInfo::ReadWrite()'],['../dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html#aaa8c99dfb5bcac4d65bceb01bd88e404',1,'edash_packager::media::mp4::MovieHeader::ReadWrite()'],['../dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html#a9ff4b7d42ee01f44bd2dff1c3f26f3c7',1,'edash_packager::media::mp4::TrackHeader::ReadWrite()'],['../d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html#af5ff80a49ff57612f9748e8a960315b5',1,'edash_packager::media::mp4::EditList::ReadWrite()'],['../d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html#a282283cf1f9eee501012641d3520361c',1,'edash_packager::media::mp4::Edit::ReadWrite()'],['../d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html#a3df705ca0d139d1051dfa05a2b6b7060',1,'edash_packager::media::mp4::HandlerReference::ReadWrite()'],['../d1/d31/structedash__packager_1_1media_1_1mp4_1_1CodecConfigurationRecord.html#a8caa17c35508de2a49a59917b1669c91',1,'edash_packager::media::mp4::CodecConfigurationRecord::ReadWrite()'],['../d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.html#ae6435b6d7f4d95a0101419d9b35fd8ff',1,'edash_packager::media::mp4::PixelAspectRatioBox::ReadWrite()'],['../df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html#a4e3cc061fa25de9d0126968b30962b9a',1,'edash_packager::media::mp4::VideoSampleEntry::ReadWrite()'],['../d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html#a3328cf76da4cf3a35a52338fe1064ead',1,'edash_packager::media::mp4::ElementaryStreamDescriptor::ReadWrite()'],['../df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html#a3b6d0c1419aa46306ead177fb8a0bacb',1,'edash_packager::media::mp4::AudioSampleEntry::ReadWrite()'],['../d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html#a1805369e3cdb005269fcc9f81303889b',1,'edash_packager::media::mp4::SampleDescription::ReadWrite()'],['../dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html#ac05749eb5644fcea4731a2761007e05d',1,'edash_packager::media::mp4::DecodingTimeToSample::ReadWrite()'],['../da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html#ae992e9996ed76398d2fb76b6716d47cc',1,'edash_packager::media::mp4::CompositionTimeToSample::ReadWrite()'],['../df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html#a67744906db3ad6d773db7e954aa55c90',1,'edash_packager::media::mp4::SampleToChunk::ReadWrite()'],['../d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html#ad10adc057b18128f5e1527ba3f271f5e',1,'edash_packager::media::mp4::SampleSize::ReadWrite()'],['../db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html#a3b0f171ecea6b68c68c16d59f8129260',1,'edash_packager::media::mp4::CompactSampleSize::ReadWrite()'],['../da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html#a49cdc81322f269456db0630abf48db1f',1,'edash_packager::media::mp4::ChunkLargeOffset::ReadWrite()'],['../d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html#a51122c167851400733dfc4c17eff1a4f',1,'edash_packager::media::mp4::ChunkOffset::ReadWrite()'],['../d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html#a0548b203ea15ae58c5416af74cf8c76d',1,'edash_packager::media::mp4::SyncSample::ReadWrite()'],['../d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html#ae3658b62d13fede295a7434f97273bf7',1,'edash_packager::media::mp4::SampleTable::ReadWrite()'],['../d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html#ac3a355d63d3921d8d58f2acdc321c32f',1,'edash_packager::media::mp4::MediaHeader::ReadWrite()'],['../db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html#a8c75844c8ecfb2da00f3f675e01b9675',1,'edash_packager::media::mp4::VideoMediaHeader::ReadWrite()'],['../da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html#a4f702c6ad638a7b0a56c288c3a19dd3d',1,'edash_packager::media::mp4::SoundMediaHeader::ReadWrite()'],['../d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html#a2daa4a272f30c554c2f55227f3baf086',1,'edash_packager::media::mp4::DataEntryUrl::ReadWrite()'],['../d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html#a74329b886d82a4382ade0d2d41d95457',1,'edash_packager::media::mp4::DataReference::ReadWrite()'],['../d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html#a5b20674cf809b0bd5c0ac7d3b8343c5c',1,'edash_packager::media::mp4::DataInformation::ReadWrite()'],['../dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html#a44fbb80add6d32ae3a0ca61b64428876',1,'edash_packager::media::mp4::MediaInformation::ReadWrite()'],['../de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html#a4370961884525da5e235e958f51f713e',1,'edash_packager::media::mp4::Media::ReadWrite()'],['../d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html#a47698bfb1f20e09824372c8f8391e10d',1,'edash_packager::media::mp4::Track::ReadWrite()'],['../da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html#afcf95727aaffc74b5f08565c6f4170cd',1,'edash_packager::media::mp4::MovieExtendsHeader::ReadWrite()'],['../d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html#af22666271f9314e56ff5ba909207523f',1,'edash_packager::media::mp4::TrackExtends::ReadWrite()'],['../d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html#addcb0fba685eee2c0dda799c30271f15',1,'edash_packager::media::mp4::MovieExtends::ReadWrite()'],['../d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html#ac77f65ee07e867c0c3db96f4154f22da',1,'edash_packager::media::mp4::Movie::ReadWrite()'],['../d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html#a96e4f7eaaba4f304c4baab7d1d45b15c',1,'edash_packager::media::mp4::TrackFragmentDecodeTime::ReadWrite()'],['../df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html#ab9ddce932c6d665f2927fc907d21ed68',1,'edash_packager::media::mp4::MovieFragmentHeader::ReadWrite()'],['../d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html#a87e7355bfa43933caa651dbd0e23811c',1,'edash_packager::media::mp4::TrackFragmentHeader::ReadWrite()'],['../df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html#a1a6b76ea2a90ce578fe0092f0ef40edb',1,'edash_packager::media::mp4::TrackFragmentRun::ReadWrite()'],['../d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html#a6855cfe79a965e95ab5be78afb745096',1,'edash_packager::media::mp4::SampleToGroup::ReadWrite()'],['../d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html#a6989deb24d851e40e92fab89dbd23159',1,'edash_packager::media::mp4::SampleGroupDescription::ReadWrite()'],['../d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html#abef97532bd33a34f6f96bd58d183120f',1,'edash_packager::media::mp4::TrackFragment::ReadWrite()'],['../dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html#a761c6e64c7055cc1f78fdfd47161b77e',1,'edash_packager::media::mp4::MovieFragment::ReadWrite()'],['../d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html#ae2c53c4a16d81090565d29f6301080fd',1,'edash_packager::media::mp4::SegmentIndex::ReadWrite()']]], ['readwritechild',['ReadWriteChild',['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#ae2f4c04bd204e593491db3e24715efd2',1,'edash_packager::media::mp4::BoxBuffer']]], ['readwriteuint64nbytes',['ReadWriteUInt64NBytes',['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#a726ab4970a19fa671137e88098e3cd48',1,'edash_packager::media::mp4::BoxBuffer']]], ['release',['Release',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html#a0942bc721718b70b49fc9e91a6934513',1,'edash_packager::xml::XmlNode']]],