commit 54c5dfffd40fbeae42efe16c3c5b02717bf15d0d Author: KongQun Yang Date: Thu Oct 15 17:33:37 2015 -0700 Add SDK documents Change-Id: Ie3e4cbb93b44bbcf97e050f112f58578e17ca04f diff --git a/sdk/annotated.html b/sdk/annotated.html new file mode 100644 index 0000000000..3aef5bfcc9 --- /dev/null +++ b/sdk/annotated.html @@ -0,0 +1,289 @@ + + + + + + +DASH Media Packaging SDK: Class List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + +
+ +
+ All Classes Namespaces Functions Variables Typedefs
+ + +
+ +
+ +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 1234]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Nedash_packager
 Nmedia
 Nmp2t
 Nmp4
 Nwvm
 CLibcryptoThreadingConvenience class which initializes and terminates libcrypto threading
 CStreamDescriptor
 CStreamDescriptorCompareFn
 CAesCtrEncryptor
 CAesCbcPkcs5Encryptor
 CAesCbcPkcs5Decryptor
 CAesCbcCtsEncryptor
 CAesCbcCtsDecryptor
 CAudioStreamInfoHolds audio stream information
 CAudioTimestampHelper
 CBitReaderA class to read bit streams
 CBufferReader
 CBufferWriter
 CByteQueue
 CClosureThread
 CSubsampleEntry
 CDecryptConfig
 CDecryptorSourceDecryptorSource is responsible for decryption key acquisition
 CDemuxer
 CHttpKeyFetcher
 CKeyFetcherBase class for fetching keys from the license service
 CEncryptionKey
 CKeySourceKeySource is responsible for encryption key acquisition
 CMediaParser
 CMediaSampleClass to hold a media sample
 CMediaStream
 CMuxer
 CMuxerOptionsThis structure contains the list of configuration options for Muxer
 COffsetByteQueue
 CProducerConsumerQueue
 CRequestSignerAbstract class used for signature generation
 CAesRequestSignerAesRequestSigner uses AES-CBC signing
 CRsaRequestSignerRsaRequestSigner uses RSA-PSS signing
 CRsaPrivateKeyRsa private key, used for message signing and decryption
 CRsaPublicKeyRsa public key, used for signature verification and encryption
 CStatus
 CStreamInfoAbstract class holds stream information
 CTextTrack
 CVideoStreamInfoHolds video stream information
 CWidevineKeySource
 CMpdNotifyMuxerListener
 CMuxerListener
 CVideoStreamInfoParameters
 COnMediaEndParameters
 CProgressListenerThis class listens to progress updates events
 CVodMediaInfoDumpMuxerListener
 CFileDefine an abstract file interface
 CFileCloser
 CIoCacheDeclaration of class which implements a thread-safe circular buffer
 CLocalFileImplement LocalFile which deals with local storage
 CThreadedIoFileDeclaration of class which implements a thread-safe circular buffer
 CUdpFileImplements UdpFile, which receives UDP unicast and multicast streams
 CH264BitReader
 CH264ByteToUnitStreamConverter
 CH264NALU
 CH264SPS
 CH264PPS
 CH264ModificationOfPicNum
 CH264WeightingFactors
 CH264DecRefPicMarking
 CH264SliceHeader
 CH264SEIRecoveryPoint
 CH264SEIMessage
 CH264Parser
 Nxml
 CXmlDeleter
 CScopedXmlPtrScoped_ptr for libxml2 resources
 CXmlNode
 CRepresentationBaseXmlNode
 CAdaptationSetXmlNodeAdaptationSetType specified in MPD
 CRepresentationXmlNodeRepresentationType in MPD
 CElement
 CContentProtectionElement
 CDashIopMpdNotifier
 CMockMpdBuilder
 CMockAdaptationSet
 CMockRepresentation
 CMockMpdNotifier
 CMpdBuilderThis class generates DASH MPDs (Media Presentation Descriptions)
 CAdaptationSet
 CRepresentationStateChangeListener
 CRepresentation
 CMpdNotifier
 CMpdOptionsDefines Mpd Options
 CSegmentInfo
 CSimpleMpdNotifier
 CMpdNotifierFactory
 CMpdWriter
 CBandwidthEstimator
+
+
+ + + + diff --git a/sdk/bc_s.png b/sdk/bc_s.png new file mode 100644 index 0000000000..224b29aa98 Binary files /dev/null and b/sdk/bc_s.png differ diff --git a/sdk/bdwn.png b/sdk/bdwn.png new file mode 100644 index 0000000000..940a0b9504 Binary files /dev/null and b/sdk/bdwn.png differ diff --git a/sdk/classes.html b/sdk/classes.html new file mode 100644 index 0000000000..6629bca64d --- /dev/null +++ b/sdk/classes.html @@ -0,0 +1,169 @@ + + + + + + +DASH Media Packaging SDK: Class Index + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + +
+ +
+ All Classes Namespaces Functions Variables Typedefs
+ + +
+ +
+ +
+
+
Class Index
+
+
+
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)   
  K  
+
OriginalFormat (edash_packager::media::mp4)   SubsampleEntry (edash_packager::media)   
DecodingTimeIterator (edash_packager::media::mp4)   
  P  
+
SyncSample (edash_packager::media::mp4)   
AACAudioSpecificConfig (edash_packager::media::mp4)   DecodingTimeToSample (edash_packager::media::mp4)   KeyFetcher (edash_packager::media)   SyncSampleIterator (edash_packager::media::mp4)   
AdaptationSet (edash_packager)   DecryptConfig (edash_packager::media)   KeyRotationFragmenter (edash_packager::media::mp4)   PixelAspectRatioBox (edash_packager::media::mp4)   
  T  
+
AdaptationSetXmlNode (edash_packager::xml)   DecryptorSource (edash_packager::media)   KeySource (edash_packager::media)   PrevSampleData (edash_packager::media::wvm)   
AdtsHeader (edash_packager::media::mp2t)   Demuxer (edash_packager::media)   
  L  
+
ProducerConsumerQueue (edash_packager::media)   TextTrack (edash_packager::media)   
AesCbcCtsDecryptor (edash_packager::media)   DemuxStreamIdMediaSample (edash_packager::media::wvm)   ProgressListener (edash_packager::media)   ThreadedIoFile (edash_packager::media)   
AesCbcCtsEncryptor (edash_packager::media)   
  E  
+
LibcryptoThreading (edash_packager::media)   ProtectionSchemeInfo (edash_packager::media::mp4)   Track (edash_packager::media::mp4)   
AesCbcPkcs5Decryptor (edash_packager::media)   LocalFile (edash_packager::media)   ProtectionSystemSpecificHeader (edash_packager::media::mp4)   TrackEncryption (edash_packager::media::mp4)   
AesCbcPkcs5Encryptor (edash_packager::media)   Edit (edash_packager::media::mp4)   
  M  
+
  R  
+
TrackExtends (edash_packager::media::mp4)   
AesCtrEncryptor (edash_packager::media)   EditList (edash_packager::media::mp4)   TrackFragment (edash_packager::media::mp4)   
AesRequestSigner (edash_packager::media)   EditListEntry (edash_packager::media::mp4)   Media (edash_packager::media::mp4)   Representation (edash_packager)   TrackFragmentDecodeTime (edash_packager::media::mp4)   
AudioSampleEntry (edash_packager::media::mp4)   Element (edash_packager)   MediaData (edash_packager::media::mp4)   RepresentationBaseXmlNode (edash_packager::xml)   TrackFragmentHeader (edash_packager::media::mp4)   
AudioStreamInfo (edash_packager::media)   ElementaryStreamDescriptor (edash_packager::media::mp4)   MediaHeader (edash_packager::media::mp4)   RepresentationStateChangeListener (edash_packager)   TrackFragmentRun (edash_packager::media::mp4)   
AudioTimestampHelper (edash_packager::media)   EncryptingFragmenter (edash_packager::media::mp4)   MediaInformation (edash_packager::media::mp4)   RepresentationXmlNode (edash_packager::xml)   TrackHeader (edash_packager::media::mp4)   
AVCDecoderConfigurationRecord (edash_packager::media::mp4)   EncryptionKey (edash_packager::media)   MediaParser (edash_packager::media)   RequestSigner (edash_packager::media)   TrackRunIterator (edash_packager::media::mp4)   
  B  
+
ESDescriptor (edash_packager::media::mp4)   MediaSample (edash_packager::media)   RsaPrivateKey (edash_packager::media)   TsPacket (edash_packager::media::mp2t)   
EsParser (edash_packager::media::mp2t)   MediaStream (edash_packager::media)   RsaPublicKey (edash_packager::media)   TsSection (edash_packager::media::mp2t)   
BandwidthEstimator   EsParserAdts (edash_packager::media::mp2t)   MockAdaptationSet (edash_packager)   RsaRequestSigner (edash_packager::media)   TsSectionPat (edash_packager::media::mp2t)   
BitReader (edash_packager::media)   EsParserH264 (edash_packager::media::mp2t)   MockMpdBuilder (edash_packager)   
  S  
+
TsSectionPes (edash_packager::media::mp2t)   
Box (edash_packager::media::mp4)   
  F  
+
MockMpdNotifier (edash_packager)   TsSectionPmt (edash_packager::media::mp2t)   
BoxBuffer (edash_packager::media::mp4)   MockRepresentation (edash_packager)   SampleAuxiliaryInformationOffset (edash_packager::media::mp4)   TsSectionPsi (edash_packager::media::mp2t)   
BoxReader (edash_packager::media::mp4)   File (edash_packager::media)   Movie (edash_packager::media::mp4)   SampleAuxiliaryInformationSize (edash_packager::media::mp4)   
  U  
+
BufferReader (edash_packager::media)   FileCloser (edash_packager::media)   MovieExtends (edash_packager::media::mp4)   SampleDescription (edash_packager::media::mp4)   
BufferWriter (edash_packager::media)   FileType (edash_packager::media::mp4)   MovieExtendsHeader (edash_packager::media::mp4)   SampleGroupDescription (edash_packager::media::mp4)   UdpFile (edash_packager::media)   
ByteQueue (edash_packager::media)   Fragmenter (edash_packager::media::mp4)   MovieFragment (edash_packager::media::mp4)   SampleSize (edash_packager::media::mp4)   
  V  
+
  C  
+
FrameCENCInfo (edash_packager::media::mp4)   MovieFragmentHeader (edash_packager::media::mp4)   SampleTable (edash_packager::media::mp4)   
FullBox (edash_packager::media::mp4)   MovieHeader (edash_packager::media::mp4)   SampleToChunk (edash_packager::media::mp4)   VideoMediaHeader (edash_packager::media::mp4)   
CencSampleEncryptionInfoEntry (edash_packager::media::mp4)   
  H  
+
Mp2tMediaParser (edash_packager::media::mp2t)   SampleToGroup (edash_packager::media::mp4)   VideoSampleEntry (edash_packager::media::mp4)   
ChunkInfo (edash_packager::media::mp4)   MP4MediaParser (edash_packager::media::mp4)   SampleToGroupEntry (edash_packager::media::mp4)   VideoStreamInfo (edash_packager::media)   
ChunkInfoIterator (edash_packager::media::mp4)   H264BitReader (edash_packager::media)   MP4Muxer (edash_packager::media::mp4)   SchemeInfo (edash_packager::media::mp4)   VideoStreamInfoParameters (edash_packager::media)   
ChunkLargeOffset (edash_packager::media::mp4)   H264ByteToUnitStreamConverter (edash_packager::media)   MpdBuilder (edash_packager)   SchemeType (edash_packager::media::mp4)   VodMediaInfoDumpMuxerListener (edash_packager::media)   
ChunkOffset (edash_packager::media::mp4)   H264DecRefPicMarking (edash_packager::media)   MpdNotifier (edash_packager)   ScopedXmlPtr (edash_packager::xml)   
  W  
+
ClosureThread (edash_packager::media)   H264ModificationOfPicNum (edash_packager::media)   MpdNotifierFactory (edash_packager)   Segmenter (edash_packager::media::mp4)   
CompactSampleSize (edash_packager::media::mp4)   H264NALU (edash_packager::media)   MpdNotifyMuxerListener (edash_packager::media)   SegmentIndex (edash_packager::media::mp4)   WidevineKeySource (edash_packager::media)   
CompositionOffset (edash_packager::media::mp4)   H264Parser (edash_packager::media)   MpdOptions (edash_packager)   SegmentInfo (edash_packager)   WvmMediaParser (edash_packager::media::wvm)   
CompositionOffsetIterator (edash_packager::media::mp4)   H264PPS (edash_packager::media)   MpdWriter (edash_packager)   SegmentReference (edash_packager::media::mp4)   
  X  
+
CompositionTimeToSample (edash_packager::media::mp4)   H264SEIMessage (edash_packager::media)   MultiSegmentSegmenter (edash_packager::media::mp4)   SegmentType (edash_packager::media::mp4)   
ContentProtectionElement (edash_packager)   H264SEIRecoveryPoint (edash_packager::media)   Muxer (edash_packager::media)   SimpleMpdNotifier (edash_packager)   XmlDeleter (edash_packager::xml)   
  D  
+
H264SliceHeader (edash_packager::media)   MuxerListener (edash_packager::media)   SingleSegmentSegmenter (edash_packager::media::mp4)   XmlNode (edash_packager::xml)   
H264SPS (edash_packager::media)   MuxerOptions (edash_packager::media)   SoundMediaHeader (edash_packager::media::mp4)   
DashIopMpdNotifier (edash_packager)   H264WeightingFactors (edash_packager::media)   
  O  
+
Status (edash_packager::media)   
DataEntryUrl (edash_packager::media::mp4)   HandlerReference (edash_packager::media::mp4)   StreamDescriptor (edash_packager::media)   
DataInformation (edash_packager::media::mp4)   HttpKeyFetcher (edash_packager::media)   OffsetByteQueue (edash_packager::media)   StreamDescriptorCompareFn (edash_packager::media)   
DataReference (edash_packager::media::mp4)   
  I  
+
OnMediaEndParameters (edash_packager::media)   StreamInfo (edash_packager::media)   
IoCache (edash_packager::media)   
+
A | B | C | D | E | F | H | I | K | L | M | O | P | R | S | T | U | V | W | X
+
+ + + + diff --git a/sdk/closed.png b/sdk/closed.png new file mode 100644 index 0000000000..98cc2c909d Binary files /dev/null and b/sdk/closed.png differ diff --git a/sdk/d0/d06/mpd__flags_8cc_source.html b/sdk/d0/d06/mpd__flags_8cc_source.html new file mode 100644 index 0000000000..7e958e0044 --- /dev/null +++ b/sdk/d0/d06/mpd__flags_8cc_source.html @@ -0,0 +1,156 @@ + + + + + + +DASH Media Packaging SDK: app/mpd_flags.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mpd_flags.cc
+
+
+
1 // Copyright 2014 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 // Defines Mpd flags.
+
8 
+
9 #include "packager/app/mpd_flags.h"
+
10 
+
11 // TODO(rkuroiwa, kqyang): Remove the 'Exclusive' statements once
+
12 // --output_media_info can work together with --mpd_output.
+
13 DEFINE_bool(output_media_info,
+
14  false,
+
15  "Create a human readable format of MediaInfo. The output file name "
+
16  "will be the name specified by output flag, suffixed with "
+
17  "'.media_info'. Exclusive with --mpd_output.");
+
18 DEFINE_string(mpd_output, "",
+
19  "MPD output file name. Exclusive with --output_media_info.");
+
20 DEFINE_string(scheme_id_uri,
+
21  "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed",
+
22  "This flag only applies if output_media_info is true. This value "
+
23  "will be set in MediaInfo if the stream is encrypted. "
+
24  "If the stream is encrypted, MPD requires a <ContentProtection> "
+
25  "element which requires the schemeIdUri attribute. "
+
26  "Default value is Widevine PSSH system ID, and it is valid only "
+
27  "for ISO BMFF.");
+
28 DEFINE_string(base_urls,
+
29  "",
+
30  "Comma separated BaseURLs for the MPD. The values will be added "
+
31  "as <BaseURL> element(s) immediately under the <MPD> element.");
+
32 DEFINE_double(min_buffer_time,
+
33  2.0,
+
34  "Specifies, in seconds, a common duration used in the definition "
+
35  "of the MPD Representation data rate.");
+
36 DEFINE_double(availability_time_offset,
+
37  10.0,
+
38  "Offset with respect to the wall clock time for MPD "
+
39  "availabilityStartTime and availabilityEndTime values, in "
+
40  " seconds. This value is used for live profile only.");
+
41 DEFINE_double(minimum_update_period,
+
42  5.0,
+
43  "Indicates to the player how often to refresh the media "
+
44  "presentation description in seconds. This value is used for "
+
45  "live profile only.");
+
46 DEFINE_double(time_shift_buffer_depth,
+
47  1800.0,
+
48  "Guaranteed duration of the time shifting buffer for dynamic "
+
49  "media presentations, in seconds.");
+
50 DEFINE_double(suggested_presentation_delay,
+
51  0.0,
+
52  "Specifies a delay, in seconds, to be added to the media "
+
53  "presentation time. This value is used for live profile only.");
+
54 DEFINE_bool(generate_dash_if_iop_compliant_mpd,
+
55  false,
+
56  "Try to generate DASH-IF IOPv3 compliant MPD. This is best effort "
+
57  "and does not guarantee compliance. Off by default until players "
+
58  "support IOP MPDs.");
+
+ + + + diff --git a/sdk/d0/d0e/muxer__options_8h_source.html b/sdk/d0/d0e/muxer__options_8h_source.html new file mode 100644 index 0000000000..b2cf41e7ff --- /dev/null +++ b/sdk/d0/d0e/muxer__options_8h_source.html @@ -0,0 +1,154 @@ + + + + + + +DASH Media Packaging SDK: media/base/muxer_options.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
muxer_options.h
+
+
+
1 // Copyright 2014 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_BASE_MUXER_OPTIONS_H_
+
8 #define MEDIA_BASE_MUXER_OPTIONS_H_
+
9 
+
10 #include <stdint.h>
+
11 
+
12 #include <string>
+
13 
+
14 namespace edash_packager {
+
15 namespace media {
+
16 
+
18 struct MuxerOptions {
+
19  MuxerOptions();
+
20  ~MuxerOptions();
+
21 
+ +
25 
+ +
31 
+ +
35 
+ +
39 
+ +
44 
+ +
51 
+
55  std::string output_file_name;
+
56 
+
61  std::string segment_template;
+
62 
+
64  std::string temp_dir;
+
65 
+
68  uint32_t bandwidth;
+
69 };
+
70 
+
71 } // namespace media
+
72 } // namespace edash_packager
+
73 
+
74 #endif // MEDIA_BASE_MUXER_OPTIONS_H_
+ +
std::string temp_dir
Specify temporary directory for intermediate files.
Definition: muxer_options.h:64
+ + + + + + + +
This structure contains the list of configuration options for Muxer.
Definition: muxer_options.h:18
+ +
+ + + + diff --git a/sdk/d0/d0e/structedash__packager_1_1media_1_1StreamDescriptor-members.html b/sdk/d0/d0e/structedash__packager_1_1media_1_1StreamDescriptor-members.html new file mode 100644 index 0000000000..4fd788712d --- /dev/null +++ b/sdk/d0/d0e/structedash__packager_1_1media_1_1StreamDescriptor-members.html @@ -0,0 +1,112 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::StreamDescriptor Member List
+
+
+ +

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

+ + + + + + + + + +
bandwidth (defined in edash_packager::media::StreamDescriptor)edash_packager::media::StreamDescriptor
input (defined in edash_packager::media::StreamDescriptor)edash_packager::media::StreamDescriptor
language (defined in edash_packager::media::StreamDescriptor)edash_packager::media::StreamDescriptor
output (defined in edash_packager::media::StreamDescriptor)edash_packager::media::StreamDescriptor
segment_template (defined in edash_packager::media::StreamDescriptor)edash_packager::media::StreamDescriptor
stream_selector (defined in edash_packager::media::StreamDescriptor)edash_packager::media::StreamDescriptor
StreamDescriptor() (defined in edash_packager::media::StreamDescriptor)edash_packager::media::StreamDescriptor
~StreamDescriptor() (defined in edash_packager::media::StreamDescriptor)edash_packager::media::StreamDescriptor
+ + + + diff --git a/sdk/d0/d1a/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset-members.html b/sdk/d0/d1a/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset-members.html new file mode 100644 index 0000000000..209af8434c --- /dev/null +++ b/sdk/d0/d1a/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset-members.html @@ -0,0 +1,121 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::ChunkOffset Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::ChunkOffset)edash_packager::media::mp4::ChunkOffsetvirtual
ChunkLargeOffset() (defined in edash_packager::media::mp4::ChunkLargeOffset)edash_packager::media::mp4::ChunkLargeOffset
ChunkOffset() (defined in edash_packager::media::mp4::ChunkOffset)edash_packager::media::mp4::ChunkOffset
ComputeSize() OVERRIDEedash_packager::media::mp4::ChunkOffsetvirtual
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
offsets (defined in edash_packager::media::mp4::ChunkLargeOffset)edash_packager::media::mp4::ChunkLargeOffset
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::ChunkOffsetvirtual
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~ChunkLargeOffset() (defined in edash_packager::media::mp4::ChunkLargeOffset)edash_packager::media::mp4::ChunkLargeOffsetvirtual
~ChunkOffset() (defined in edash_packager::media::mp4::ChunkOffset)edash_packager::media::mp4::ChunkOffsetvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
+ + + + diff --git a/sdk/d0/d24/structedash__packager_1_1media_1_1H264DecRefPicMarking-members.html b/sdk/d0/d24/structedash__packager_1_1media_1_1H264DecRefPicMarking-members.html new file mode 100644 index 0000000000..e2cce328c3 --- /dev/null +++ b/sdk/d0/d24/structedash__packager_1_1media_1_1H264DecRefPicMarking-members.html @@ -0,0 +1,109 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::H264DecRefPicMarking Member List
+
+
+ +

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

+ + + + + + +
difference_of_pic_nums_minus1 (defined in edash_packager::media::H264DecRefPicMarking)edash_packager::media::H264DecRefPicMarking
long_term_frame_idx (defined in edash_packager::media::H264DecRefPicMarking)edash_packager::media::H264DecRefPicMarking
long_term_pic_num (defined in edash_packager::media::H264DecRefPicMarking)edash_packager::media::H264DecRefPicMarking
max_long_term_frame_idx_plus1 (defined in edash_packager::media::H264DecRefPicMarking)edash_packager::media::H264DecRefPicMarking
memory_mgmnt_control_operation (defined in edash_packager::media::H264DecRefPicMarking)edash_packager::media::H264DecRefPicMarking
+ + + + diff --git a/sdk/d0/d28/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter-members.html b/sdk/d0/d28/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter-members.html new file mode 100644 index 0000000000..b45c7791e0 --- /dev/null +++ b/sdk/d0/d28/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter-members.html @@ -0,0 +1,126 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::MultiSegmentSegmenter Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + +
AddSample(const MediaStream *stream, scoped_refptr< MediaSample > sample)edash_packager::media::mp4::Segmenter
Finalize()edash_packager::media::mp4::Segmenter
fragment_buffer() (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
ftyp() (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
GetDuration() const edash_packager::media::mp4::Segmenter
GetIndexRange(size_t *offset, size_t *size) OVERRIDEedash_packager::media::mp4::MultiSegmentSegmentervirtual
GetInitRange(size_t *offset, size_t *size) OVERRIDEedash_packager::media::mp4::MultiSegmentSegmentervirtual
GetReferenceTimeScale() const (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenter
Initialize(const std::vector< MediaStream * > &streams, MuxerListener *muxer_listener, ProgressListener *progress_listener, KeySource *encryption_key_source, uint32_t max_sd_pixels, double clear_lead_in_seconds, double crypto_period_duration_in_seconds)edash_packager::media::mp4::Segmenter
moov() (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
MultiSegmentSegmenter(const MuxerOptions &options, scoped_ptr< FileType > ftyp, scoped_ptr< Movie > moov) (defined in edash_packager::media::mp4::MultiSegmentSegmenter)edash_packager::media::mp4::MultiSegmentSegmenter
muxer_listener() (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
options() const (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
progress_target() (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
sample_duration() const edash_packager::media::mp4::Segmenterinline
Segmenter(const MuxerOptions &options, scoped_ptr< FileType > ftyp, scoped_ptr< Movie > moov) (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenter
set_progress_target(uint64_t progress_target) (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
SetComplete()edash_packager::media::mp4::Segmenterprotected
sidx() (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
UpdateProgress(uint64_t progress)edash_packager::media::mp4::Segmenterprotected
~MultiSegmentSegmenter() (defined in edash_packager::media::mp4::MultiSegmentSegmenter)edash_packager::media::mp4::MultiSegmentSegmentervirtual
~Segmenter() (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmentervirtual
+ + + + diff --git a/sdk/d0/d30/mock__mpd__notifier_8h_source.html b/sdk/d0/d30/mock__mpd__notifier_8h_source.html new file mode 100644 index 0000000000..c2fa3ca4c9 --- /dev/null +++ b/sdk/d0/d30/mock__mpd__notifier_8h_source.html @@ -0,0 +1,156 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/mock_mpd_notifier.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mock_mpd_notifier.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 MPD_BASE_MOCK_MPD_NOTIFIER_H_
+
8 #define MPD_BASE_MOCK_MPD_NOTIFIER_H_
+
9 
+
10 #include "packager/mpd/base/mpd_notifier.h"
+
11 
+
12 #include <gmock/gmock.h>
+
13 
+
14 #include "packager/mpd/base/content_protection_element.h"
+
15 #include "packager/mpd/base/media_info.pb.h"
+
16 
+
17 namespace edash_packager {
+
18 
+
19 class MockMpdNotifier : public MpdNotifier {
+
20  public:
+
21  MockMpdNotifier(DashProfile profile);
+
22  virtual ~MockMpdNotifier();
+
23 
+
24  MOCK_METHOD0(Init, bool());
+
25  MOCK_METHOD2(NotifyNewContainer,
+
26  bool(const MediaInfo& media_info, uint32_t* container_id));
+
27  MOCK_METHOD2(NotifySampleDuration,
+
28  bool(uint32_t container_id, uint32_t sample_duration));
+
29  MOCK_METHOD4(NotifyNewSegment,
+
30  bool(uint32_t container_id,
+
31  uint64_t start_time,
+
32  uint64_t duration,
+
33  uint64_t size));
+
34  MOCK_METHOD4(NotifyEncryptionUpdate,
+
35  bool(uint32_t container_id,
+
36  const std::string& drm_uuid,
+
37  const std::vector<uint8_t>& new_key_id,
+
38  const std::vector<uint8_t>& new_pssh));
+
39  MOCK_METHOD2(
+ +
41  bool(uint32_t container_id,
+
42  const ContentProtectionElement& content_protection_element));
+
43  MOCK_METHOD0(Flush, bool());
+
44 };
+
45 
+
46 } // namespace edash_packager
+
47 
+
48 #endif // MPD_BASE_MOCK_MPD_NOTIFIER_H_
+
virtual bool AddContentProtectionElement(uint32_t container_id, const ContentProtectionElement &content_protection_element)=0
+
virtual bool NotifyNewContainer(const MediaInfo &media_info, uint32_t *container_id)=0
+ + + + +
virtual bool NotifySampleDuration(uint32_t container_id, uint32_t sample_duration)=0
+
virtual bool NotifyNewSegment(uint32_t container_id, uint64_t start_time, uint64_t duration, uint64_t size)=0
+
virtual bool NotifyEncryptionUpdate(uint32_t container_id, const std::string &drm_uuid, const std::vector< uint8_t > &new_key_id, const std::vector< uint8_t > &new_pssh)=0
+ +
+ + + + diff --git a/sdk/d0/d32/mp2t__common_8h_source.html b/sdk/d0/d32/mp2t__common_8h_source.html new file mode 100644 index 0000000000..f10a9ca2d8 --- /dev/null +++ b/sdk/d0/d32/mp2t__common_8h_source.html @@ -0,0 +1,126 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp2t/mp2t_common.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mp2t_common.h
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_FORMATS_MP2T_MP2T_COMMON_H_
+
6 #define MEDIA_FORMATS_MP2T_MP2T_COMMON_H_
+
7 
+
8 #define LOG_LEVEL_TS 5
+
9 #define LOG_LEVEL_PES 4
+
10 #define LOG_LEVEL_ES 3
+
11 
+
12 #define RCHECK(x) \
+
13  do { \
+
14  if (!(x)) { \
+
15  DLOG(WARNING) << "Failure while parsing Mpeg2TS: " << #x; \
+
16  return false; \
+
17  } \
+
18  } while (0)
+
19 
+
20 #endif
+
21 
+
22 namespace edash_packager {
+
23 namespace media {
+
24 
+
25 const uint32_t kMpeg2Timescale = 90000;
+
26 
+
27 } // namespace media
+
28 } // namespace edash_packager
+
+ + + + diff --git a/sdk/d0/d35/es__descriptor_8cc_source.html b/sdk/d0/d35/es__descriptor_8cc_source.html new file mode 100644 index 0000000000..d22cbc0701 --- /dev/null +++ b/sdk/d0/d35/es__descriptor_8cc_source.html @@ -0,0 +1,290 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/es_descriptor.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
es_descriptor.cc
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/formats/mp4/es_descriptor.h"
+
6 
+
7 #include "packager/media/base/bit_reader.h"
+
8 #include "packager/media/base/buffer_writer.h"
+
9 #include "packager/media/formats/mp4/rcheck.h"
+
10 
+
11 namespace edash_packager {
+
12 namespace media {
+
13 namespace {
+
14 
+
15 // ISO/IEC 14496-1:2004 Section 7.2.6.6 Table 6: StreamType values.
+
16 enum StreamType {
+
17  kForbiddenStreamType = 0x00,
+
18  kObjectDescriptorStreamType = 0x01,
+
19  kClockReferenceStreamType = 0x02,
+
20  kSceneDescriptionStreamType = 0x03,
+
21  kVisualStreamType = 0x04,
+
22  kAudioStreamType = 0x05,
+
23  kMPEG7StreamType = 0x06,
+
24  kIPMPStreamType = 0x07,
+
25  kObjectContentInfoStreamType = 0x08,
+
26  kMPEGJStreamType = 0x09,
+
27  kInteractionStream = 0x0A,
+
28  kIPMPToolStreamType = 0x0B,
+
29 };
+
30 
+
31 // ISO/IEC 14496-1:2004 Section 7.3.2.3 Table 12: ISO SL Config Descriptor.
+
32 enum SLPredefinedTags {
+
33  kSLPredefinedNull = 0x01,
+
34  kSLPredefinedMP4 = 0x02,
+
35 };
+
36 
+
37 // The elementary stream size is specific by up to 4 bytes.
+
38 // The MSB of a byte indicates if there are more bytes for the size.
+
39 bool ReadESSize(BitReader* reader, uint32_t* size) {
+
40  uint8_t msb;
+
41  uint8_t byte;
+
42 
+
43  *size = 0;
+
44 
+
45  for (size_t i = 0; i < 4; ++i) {
+
46  RCHECK(reader->ReadBits(1, &msb));
+
47  RCHECK(reader->ReadBits(7, &byte));
+
48  *size = (*size << 7) + byte;
+
49 
+
50  if (msb == 0)
+
51  break;
+
52  }
+
53 
+
54  return true;
+
55 }
+
56 
+
57 // Descryptor Header Size: 1 byte tag and 1 byte size (we don't support
+
58 // multi-bytes size for now).
+
59 const size_t kHeaderSize = 2;
+
60 const size_t kMaxDecoderSpecificInfoSize = 64;
+
61 
+
62 } // namespace
+
63 
+
64 namespace mp4 {
+
65 
+
66 ESDescriptor::ESDescriptor() : esid_(0), object_type_(kForbidden) {}
+
67 
+
68 ESDescriptor::~ESDescriptor() {}
+
69 
+
70 bool ESDescriptor::Parse(const std::vector<uint8_t>& data) {
+
71  BitReader reader(&data[0], data.size());
+
72  uint8_t tag;
+
73  uint32_t size;
+
74  uint8_t stream_dependency_flag;
+
75  uint8_t url_flag;
+
76  uint8_t ocr_stream_flag;
+
77  uint16_t dummy;
+
78 
+
79  RCHECK(reader.ReadBits(8, &tag));
+
80  RCHECK(tag == kESDescrTag);
+
81  RCHECK(ReadESSize(&reader, &size));
+
82 
+
83  RCHECK(reader.ReadBits(16, &esid_)); // ES_ID
+
84  RCHECK(reader.ReadBits(1, &stream_dependency_flag));
+
85  RCHECK(reader.ReadBits(1, &url_flag));
+
86  RCHECK(!url_flag); // We don't support url flag
+
87  RCHECK(reader.ReadBits(1, &ocr_stream_flag));
+
88  RCHECK(reader.ReadBits(5, &dummy)); // streamPriority
+
89 
+
90  if (stream_dependency_flag)
+
91  RCHECK(reader.ReadBits(16, &dummy)); // dependsOn_ES_ID
+
92  if (ocr_stream_flag)
+
93  RCHECK(reader.ReadBits(16, &dummy)); // OCR_ES_Id
+
94 
+
95  RCHECK(ParseDecoderConfigDescriptor(&reader));
+
96 
+
97  return true;
+
98 }
+
99 
+
100 bool ESDescriptor::ParseDecoderConfigDescriptor(BitReader* reader) {
+
101  uint8_t tag;
+
102  uint32_t size;
+
103  uint64_t dummy;
+
104 
+
105  RCHECK(reader->ReadBits(8, &tag));
+
106  RCHECK(tag == kDecoderConfigDescrTag);
+
107  RCHECK(ReadESSize(reader, &size));
+
108 
+
109  RCHECK(reader->ReadBits(8, &object_type_));
+
110  RCHECK(reader->ReadBits(64, &dummy));
+
111  RCHECK(reader->ReadBits(32, &dummy));
+
112  RCHECK(ParseDecoderSpecificInfo(reader));
+
113 
+
114  return true;
+
115 }
+
116 
+
117 bool ESDescriptor::ParseDecoderSpecificInfo(BitReader* reader) {
+
118  DCHECK(reader);
+
119  uint8_t tag;
+
120  uint32_t size;
+
121 
+
122  RCHECK(reader->ReadBits(8, &tag));
+
123  RCHECK(tag == kDecoderSpecificInfoTag);
+
124  RCHECK(ReadESSize(reader, &size));
+
125 
+
126  decoder_specific_info_.resize(size);
+
127  for (uint32_t i = 0; i < size; ++i)
+
128  RCHECK(reader->ReadBits(8, &decoder_specific_info_[i]));
+
129 
+
130  return true;
+
131 }
+
132 
+
133 void ESDescriptor::Write(BufferWriter* writer) const {
+
134  DCHECK(writer);
+
135  CHECK_LT(decoder_specific_info_.size(), kMaxDecoderSpecificInfoSize);
+
136 
+
137  const std::vector<uint8_t> kEmptyDecodingBufferSize(3, 0);
+
138  const uint32_t kUnknownBitrate = 0;
+
139  const uint8_t kNoEsFlags = 0;
+
140 
+
141  const uint8_t decoder_specific_info_size = decoder_specific_info_.size();
+
142 
+
143  // 6 bit stream type. The last bit is reserved with 1.
+
144  const uint8_t stream_type = (kAudioStreamType << 2) | 1;
+
145  const uint8_t decoder_config_size = decoder_specific_info_size + kHeaderSize +
+
146  sizeof(uint8_t) + // object_type_.
+
147  sizeof(stream_type) +
+
148  kEmptyDecodingBufferSize.size() +
+
149  sizeof(kUnknownBitrate) * 2;
+
150 
+
151  const uint8_t sl_config_size = sizeof(uint8_t); // predefined.
+
152  const uint8_t es_size = decoder_config_size + kHeaderSize + sl_config_size +
+
153  kHeaderSize + sizeof(esid_) + sizeof(kNoEsFlags);
+
154 
+
155  writer->AppendInt(static_cast<uint8_t>(kESDescrTag));
+
156  writer->AppendInt(es_size);
+
157  writer->AppendInt(esid_);
+
158  writer->AppendInt(kNoEsFlags);
+
159 
+
160  writer->AppendInt(static_cast<uint8_t>(kDecoderConfigDescrTag));
+
161  writer->AppendInt(decoder_config_size);
+
162  writer->AppendInt(static_cast<uint8_t>(object_type_));
+
163  writer->AppendInt(stream_type);
+
164  writer->AppendVector(kEmptyDecodingBufferSize);
+
165  writer->AppendInt(kUnknownBitrate); // max_bitrate.
+
166  writer->AppendInt(kUnknownBitrate); // avg_bitrate.
+
167 
+
168  writer->AppendInt(static_cast<uint8_t>(kDecoderSpecificInfoTag));
+
169  writer->AppendInt(decoder_specific_info_size);
+
170  writer->AppendVector(decoder_specific_info_);
+
171 
+
172  writer->AppendInt(static_cast<uint8_t>(kSLConfigTag));
+
173  writer->AppendInt(sl_config_size);
+
174  writer->AppendInt(static_cast<uint8_t>(kSLPredefinedMP4));
+
175 }
+
176 
+
177 size_t ESDescriptor::ComputeSize() const {
+
178  // A bit magical. Refer to ESDescriptor::Write for details.
+
179  const uint8_t decoder_specific_info_size = decoder_specific_info_.size();
+
180  const uint8_t decoder_config_size = decoder_specific_info_size + kHeaderSize +
+
181  sizeof(uint8_t) * 5 +
+
182  sizeof(uint32_t) * 2;
+
183  const uint8_t sl_config_size = sizeof(uint8_t);
+
184  const uint8_t es_size = decoder_config_size + kHeaderSize + sl_config_size +
+
185  kHeaderSize + sizeof(esid_) + sizeof(uint8_t);
+
186  return es_size + kHeaderSize;
+
187 }
+
188 
+
189 } // namespace mp4
+
190 
+
191 } // namespace media
+
192 } // namespace edash_packager
+
+ + + + diff --git a/sdk/d0/d3a/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode-members.html b/sdk/d0/d3a/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode-members.html new file mode 100644 index 0000000000..8dc5ae4bac --- /dev/null +++ b/sdk/d0/d3a/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::xml::RepresentationBaseXmlNode Member List
+
+
+ +

This is the complete list of members for edash_packager::xml::RepresentationBaseXmlNode, including all inherited members.

+ + + + + + + + + + + + + + + + +
AddChild(ScopedXmlPtr< xmlNode >::type child)edash_packager::xml::XmlNode
AddContentProtectionElements(const std::list< ContentProtectionElement > &content_protection_elements) (defined in edash_packager::xml::RepresentationBaseXmlNode)edash_packager::xml::RepresentationBaseXmlNode
AddElements(const std::vector< Element > &elements)edash_packager::xml::XmlNode
GetRawPtr()edash_packager::xml::XmlNode
PassScopedPtr()edash_packager::xml::XmlNode
Release()edash_packager::xml::XmlNode
RepresentationBaseXmlNode(const char *name) (defined in edash_packager::xml::RepresentationBaseXmlNode)edash_packager::xml::RepresentationBaseXmlNodeexplicitprotected
SetContent(const std::string &content)edash_packager::xml::XmlNode
SetFloatingPointAttribute(const char *attribute_name, double number)edash_packager::xml::XmlNode
SetId(uint32_t id)edash_packager::xml::XmlNode
SetIntegerAttribute(const char *attribute_name, uint64_t number)edash_packager::xml::XmlNode
SetStringAttribute(const char *attribute_name, const std::string &attribute)edash_packager::xml::XmlNode
XmlNode(const char *name)edash_packager::xml::XmlNodeexplicit
~RepresentationBaseXmlNode() (defined in edash_packager::xml::RepresentationBaseXmlNode)edash_packager::xml::RepresentationBaseXmlNodevirtual
~XmlNode() (defined in edash_packager::xml::XmlNode)edash_packager::xml::XmlNodevirtual
+ + + + diff --git a/sdk/d0/d42/widevine__encryption__flags_8cc_source.html b/sdk/d0/d42/widevine__encryption__flags_8cc_source.html new file mode 100644 index 0000000000..bd3ff016b2 --- /dev/null +++ b/sdk/d0/d42/widevine__encryption__flags_8cc_source.html @@ -0,0 +1,250 @@ + + + + + + +DASH Media Packaging SDK: app/widevine_encryption_flags.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
widevine_encryption_flags.cc
+
+
+
1 // Copyright 2014 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 // Defines command line flags for widevine_encryption.
+
8 
+
9 #include "packager/app/widevine_encryption_flags.h"
+
10 
+
11 #include "packager/app/validate_flag.h"
+
12 #include "packager/base/logging.h"
+
13 #include "packager/base/strings/string_util.h"
+
14 
+
15 DEFINE_bool(enable_widevine_encryption,
+
16  false,
+
17  "Enable encryption with Widevine license server/proxy. User should "
+
18  "provide either AES signing key (--aes_signing_key, "
+
19  "--aes_signing_iv) or RSA signing key (--rsa_signing_key_path).");
+
20 DEFINE_bool(enable_widevine_decryption,
+
21  false,
+
22  "Enable decryption with Widevine license server/proxy. User should "
+
23  "provide either AES signing key (--aes_signing_key, "
+
24  "--aes_signing_iv) or RSA signing key (--rsa_signing_key_path).");
+
25 DEFINE_string(key_server_url, "", "Key server url. Required for encryption and "
+
26  "decryption");
+
27 DEFINE_string(content_id, "", "Content Id (hex).");
+
28 DEFINE_string(policy,
+
29  "",
+
30  "The name of a stored policy, which specifies DRM content "
+
31  "rights.");
+
32 DEFINE_int32(max_sd_pixels,
+
33  768 * 576,
+
34  "If the video track has more pixels per frame than max_sd_pixels, "
+
35  "it is considered as HD, SD otherwise. Default: 768 * 576.");
+
36 DEFINE_string(signer, "", "The name of the signer.");
+
37 DEFINE_string(aes_signing_key,
+
38  "",
+
39  "AES signing key in hex string. --aes_signing_iv is required. "
+
40  "Exclusive with --rsa_signing_key_path.");
+
41 DEFINE_string(aes_signing_iv,
+
42  "",
+
43  "AES signing iv in hex string.");
+
44 DEFINE_string(rsa_signing_key_path,
+
45  "",
+
46  "Stores PKCS#1 RSA private key for request signing. Exclusive "
+
47  "with --aes_signing_key.");
+
48 DEFINE_int32(crypto_period_duration,
+
49  0,
+
50  "Crypto period duration in seconds. If it is non-zero, key "
+
51  "rotation is enabled.");
+
52 
+
53 namespace edash_packager {
+
54 
+ +
56  bool success = true;
+
57 
+
58  const bool widevine_crypto =
+
59  FLAGS_enable_widevine_encryption || FLAGS_enable_widevine_decryption;
+
60  const char widevine_crypto_label[] =
+
61  "--enable_widevine_encryption/decryption";
+
62  // key_server_url and signer (optional) are associated with
+
63  // enable_widevine_encryption and enable_widevine_descryption.
+
64  if (!ValidateFlag("key_server_url",
+
65  FLAGS_key_server_url,
+
66  widevine_crypto,
+
67  false,
+
68  widevine_crypto_label)) {
+
69  success = false;
+
70  }
+
71  if (!ValidateFlag("signer",
+
72  FLAGS_signer,
+
73  widevine_crypto,
+
74  true,
+
75  widevine_crypto_label)) {
+
76  success = false;
+
77  }
+
78  if (widevine_crypto && FLAGS_signer.empty() &&
+
79  StartsWithASCII(FLAGS_key_server_url, "http", false)) {
+
80  LOG(WARNING) << "--signer is likely required with "
+
81  "--enable_widevine_encryption/decryption.";
+
82  }
+
83 
+
84  const char widevine_encryption_label[] = "--enable_widevine_encryption";
+
85  // content_id and policy (optional) are associated with
+
86  // enable_widevine_encryption.
+
87  if (!ValidateFlag("content_id",
+
88  FLAGS_content_id,
+
89  FLAGS_enable_widevine_encryption,
+
90  false,
+
91  widevine_encryption_label)) {
+
92  success = false;
+
93  }
+
94  if (!ValidateFlag("policy",
+
95  FLAGS_policy,
+
96  FLAGS_enable_widevine_encryption,
+
97  true,
+
98  widevine_encryption_label)) {
+
99  success = false;
+
100  }
+
101 
+
102  if (FLAGS_max_sd_pixels <= 0) {
+
103  PrintError("--max_sd_pixels must be positive.");
+
104  success = false;
+
105  }
+
106 
+
107  const bool aes = !FLAGS_signer.empty() && FLAGS_rsa_signing_key_path.empty();
+
108  const char aes_label[] =
+
109  "--signer is specified and exclusive with --rsa_signing_key_path";
+
110  // aes_signer_key and aes_signing_iv are associated with aes signing.
+
111  if (!ValidateFlag(
+
112  "aes_signing_key", FLAGS_aes_signing_key, aes, true, aes_label)) {
+
113  success = false;
+
114  }
+
115  if (!ValidateFlag(
+
116  "aes_signing_iv", FLAGS_aes_signing_iv, aes, true, aes_label)) {
+
117  success = false;
+
118  }
+
119 
+
120  const bool rsa = !FLAGS_signer.empty() && FLAGS_aes_signing_key.empty() &&
+
121  FLAGS_aes_signing_iv.empty();
+
122  const char rsa_label[] =
+
123  "--signer is specified and exclusive with --aes_signing_key/iv";
+
124  // rsa_signing_key_path is associated with rsa_signing.
+
125  if (!ValidateFlag("rsa_signing_key_path",
+
126  FLAGS_rsa_signing_key_path,
+
127  rsa,
+
128  true,
+
129  rsa_label)) {
+
130  success = false;
+
131  }
+
132 
+
133  if (!FLAGS_signer.empty() &&
+
134  (FLAGS_aes_signing_key.empty() || FLAGS_aes_signing_iv.empty()) &&
+
135  FLAGS_rsa_signing_key_path.empty()) {
+
136  PrintError(
+
137  "--aes_signing_key/iv or --rsa_signing_key_path is required with "
+
138  "--signer.");
+
139  success = false;
+
140  }
+
141 
+
142  if (FLAGS_crypto_period_duration < 0) {
+
143  PrintError("--crypto_period_duration should not be negative.");
+
144  success = false;
+
145  }
+
146  return success;
+
147 }
+
148 
+
149 } // namespace edash_packager
+ +
bool ValidateFlag(const char *flag_name, const std::string &flag_value, bool condition, bool optional, const char *label)
+
void PrintError(const std::string &error_message)
+
+ + + + diff --git a/sdk/d0/d43/structedash__packager_1_1media_1_1H264SPS-members.html b/sdk/d0/d43/structedash__packager_1_1media_1_1H264SPS-members.html new file mode 100644 index 0000000000..b96b23f2ab --- /dev/null +++ b/sdk/d0/d43/structedash__packager_1_1media_1_1H264SPS-members.html @@ -0,0 +1,150 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::H264SPS Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bit_depth_chroma_minus8 (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
bit_depth_luma_minus8 (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
bitstream_restriction_flag (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
chroma_array_type (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
chroma_format_idc (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
constraint_set0_flag (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
constraint_set1_flag (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
constraint_set2_flag (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
constraint_set3_flag (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
constraint_set4_flag (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
constraint_set5_flag (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
delta_pic_order_always_zero_flag (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
direct_8x8_inference_flag (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
expected_delta_per_pic_order_cnt_cycle (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
frame_crop_bottom_offset (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
frame_crop_left_offset (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
frame_crop_right_offset (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
frame_crop_top_offset (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
frame_cropping_flag (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
frame_mbs_only_flag (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
gaps_in_frame_num_value_allowed_flag (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
H264SPS() (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
level_idc (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
log2_max_frame_num_minus4 (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
log2_max_pic_order_cnt_lsb_minus4 (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
max_dec_frame_buffering (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
max_num_ref_frames (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
max_num_reorder_frames (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
mb_adaptive_frame_field_flag (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
num_ref_frames_in_pic_order_cnt_cycle (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
offset_for_non_ref_pic (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
offset_for_ref_frame (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
offset_for_top_to_bottom_field (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
pic_height_in_map_units_minus1 (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
pic_order_cnt_type (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
pic_width_in_mbs_minus1 (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
profile_idc (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
qpprime_y_zero_transform_bypass_flag (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
sar_height (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
sar_width (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
scaling_list4x4 (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
scaling_list8x8 (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
separate_colour_plane_flag (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
seq_parameter_set_id (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
seq_scaling_matrix_present_flag (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
vui_parameters_present_flag (defined in edash_packager::media::H264SPS)edash_packager::media::H264SPS
+ + + + diff --git a/sdk/d0/d46/fourccs_8h_source.html b/sdk/d0/d46/fourccs_8h_source.html new file mode 100644 index 0000000000..8bdc734e35 --- /dev/null +++ b/sdk/d0/d46/fourccs_8h_source.html @@ -0,0 +1,210 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/fourccs.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
fourccs.h
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_FORMATS_MP4_FOURCCS_H_
+
6 #define MEDIA_FORMATS_MP4_FOURCCS_H_
+
7 
+
8 #include <string>
+
9 
+
10 namespace edash_packager {
+
11 namespace media {
+
12 namespace mp4 {
+
13 
+
14 enum FourCC {
+
15  FOURCC_NULL = 0,
+
16  FOURCC_AVC1 = 0x61766331,
+
17  FOURCC_AVCC = 0x61766343,
+
18  FOURCC_BLOC = 0x626C6F63,
+
19  FOURCC_CENC = 0x63656e63,
+
20  FOURCC_CO64 = 0x636f3634,
+
21  FOURCC_CTTS = 0x63747473,
+
22  FOURCC_DASH = 0x64617368,
+
23  FOURCC_DINF = 0x64696e66,
+
24  FOURCC_DREF = 0x64726566,
+
25  FOURCC_EAC3 = 0x65632d33,
+
26  FOURCC_EDTS = 0x65647473,
+
27  FOURCC_ELST = 0x656c7374,
+
28  FOURCC_ENCA = 0x656e6361,
+
29  FOURCC_ENCV = 0x656e6376,
+
30  FOURCC_ESDS = 0x65736473,
+
31  FOURCC_FREE = 0x66726565,
+
32  FOURCC_FRMA = 0x66726d61,
+
33  FOURCC_FTYP = 0x66747970,
+
34  FOURCC_HDLR = 0x68646c72,
+
35  FOURCC_HINT = 0x68696e74,
+
36  FOURCC_ISO6 = 0x69736f36,
+
37  FOURCC_IODS = 0x696f6473,
+
38  FOURCC_MDAT = 0x6d646174,
+
39  FOURCC_MDHD = 0x6d646864,
+
40  FOURCC_MDIA = 0x6d646961,
+
41  FOURCC_MECO = 0x6d65636f,
+
42  FOURCC_MEHD = 0x6d656864,
+
43  FOURCC_META = 0x6d657461,
+
44  FOURCC_MFHD = 0x6d666864,
+
45  FOURCC_MFRA = 0x6d667261,
+
46  FOURCC_MINF = 0x6d696e66,
+
47  FOURCC_MOOF = 0x6d6f6f66,
+
48  FOURCC_MOOV = 0x6d6f6f76,
+
49  FOURCC_MP41 = 0x6d703431,
+
50  FOURCC_MP4A = 0x6d703461,
+
51  FOURCC_MP4V = 0x6d703476,
+
52  FOURCC_MVEX = 0x6d766578,
+
53  FOURCC_MVHD = 0x6d766864,
+
54  FOURCC_PASP = 0x70617370,
+
55  FOURCC_PDIN = 0x7064696e,
+
56  FOURCC_PRFT = 0x70726674,
+
57  FOURCC_PSSH = 0x70737368,
+
58  FOURCC_SAIO = 0x7361696f,
+
59  FOURCC_SAIZ = 0x7361697a,
+
60  FOURCC_SBGP = 0x73626770,
+
61  FOURCC_SCHI = 0x73636869,
+
62  FOURCC_SCHM = 0x7363686d,
+
63  FOURCC_SDTP = 0x73647470,
+
64  FOURCC_SEIG = 0x73656967,
+
65  FOURCC_SGPD = 0x73677064,
+
66  FOURCC_SIDX = 0x73696478,
+
67  FOURCC_SINF = 0x73696e66,
+
68  FOURCC_SKIP = 0x736b6970,
+
69  FOURCC_SMHD = 0x736d6864,
+
70  FOURCC_SOUN = 0x736f756e,
+
71  FOURCC_SSIX = 0x73736978,
+
72  FOURCC_STBL = 0x7374626c,
+
73  FOURCC_STCO = 0x7374636f,
+
74  FOURCC_STSC = 0x73747363,
+
75  FOURCC_STSD = 0x73747364,
+
76  FOURCC_STSS = 0x73747373,
+
77  FOURCC_STSZ = 0x7374737a,
+
78  FOURCC_STTS = 0x73747473,
+
79  FOURCC_STYP = 0x73747970,
+
80  FOURCC_STZ2 = 0x73747a32,
+
81  FOURCC_TENC = 0x74656e63,
+
82  FOURCC_TFDT = 0x74666474,
+
83  FOURCC_TFHD = 0x74666864,
+
84  FOURCC_TKHD = 0x746b6864,
+
85  FOURCC_TRAF = 0x74726166,
+
86  FOURCC_TRAK = 0x7472616b,
+
87  FOURCC_TREX = 0x74726578,
+
88  FOURCC_TRUN = 0x7472756e,
+
89  FOURCC_UDTA = 0x75647461,
+
90  FOURCC_URL = 0x75726c20,
+
91  FOURCC_URN = 0x75726e20,
+
92  FOURCC_UUID = 0x75756964,
+
93  FOURCC_VIDE = 0x76696465,
+
94  FOURCC_VMHD = 0x766d6864,
+
95  FOURCC_WIDE = 0x77696465,
+
96 };
+
97 
+
98 const inline std::string FourCCToString(FourCC fourcc) {
+
99  char buf[5];
+
100  buf[0] = (fourcc >> 24) & 0xff;
+
101  buf[1] = (fourcc >> 16) & 0xff;
+
102  buf[2] = (fourcc >> 8) & 0xff;
+
103  buf[3] = (fourcc) & 0xff;
+
104  buf[4] = 0;
+
105  return std::string(buf);
+
106 }
+
107 
+
108 } // namespace mp4
+
109 } // namespace media
+
110 } // namespace edash_packager
+
111 
+
112 #endif // MEDIA_FORMATS_MP4_FOURCCS_H_
+
+ + + + diff --git a/sdk/d0/d49/vod__media__info__dump__muxer__listener_8cc_source.html b/sdk/d0/d49/vod__media__info__dump__muxer__listener_8cc_source.html new file mode 100644 index 0000000000..3ad2fd3e86 --- /dev/null +++ b/sdk/d0/d49/vod__media__info__dump__muxer__listener_8cc_source.html @@ -0,0 +1,235 @@ + + + + + + +DASH Media Packaging SDK: media/event/vod_media_info_dump_muxer_listener.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
vod_media_info_dump_muxer_listener.cc
+
+
+
1 // Copyright 2014 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/event/vod_media_info_dump_muxer_listener.h"
+
8 
+
9 #include <google/protobuf/text_format.h>
+
10 
+
11 #include "packager/base/logging.h"
+
12 #include "packager/media/base/muxer_options.h"
+
13 #include "packager/media/base/stream_info.h"
+
14 #include "packager/media/event/muxer_listener_internal.h"
+
15 #include "packager/media/file/file.h"
+
16 #include "packager/mpd/base/media_info.pb.h"
+
17 
+
18 namespace edash_packager {
+
19 namespace media {
+
20 
+
21 VodMediaInfoDumpMuxerListener::VodMediaInfoDumpMuxerListener(
+
22  const std::string& output_file_name)
+
23  : output_file_name_(output_file_name), is_encrypted_(false) {}
+
24 
+
25 VodMediaInfoDumpMuxerListener::~VodMediaInfoDumpMuxerListener() {}
+
26 
+ +
28  const std::string& scheme_id_uri) {
+
29  scheme_id_uri_ = scheme_id_uri;
+
30 }
+
31 
+
32 void VodMediaInfoDumpMuxerListener::OnEncryptionInfoReady(
+
33  bool is_initial_encryption_info,
+
34  const std::string& content_protection_uuid,
+
35  const std::string& content_protection_name_version,
+
36  const std::vector<uint8_t>& default_key_id,
+
37  const std::vector<uint8_t>& pssh) {
+
38  LOG_IF(WARNING, !is_initial_encryption_info)
+
39  << "Updating (non initial) encryption info is not supported by "
+
40  "this module.";
+
41  content_protection_uuid_ = content_protection_uuid;
+
42  content_protection_name_version_ = content_protection_name_version;
+
43  default_key_id_.assign(default_key_id.begin(), default_key_id.end());
+
44  pssh_.assign(pssh.begin(), pssh.end());
+
45  is_encrypted_ = true;
+
46 }
+
47 
+
48 void VodMediaInfoDumpMuxerListener::OnMediaStart(
+
49  const MuxerOptions& muxer_options,
+
50  const StreamInfo& stream_info,
+
51  uint32_t time_scale,
+
52  ContainerType container_type) {
+
53  DCHECK(muxer_options.single_segment);
+
54  media_info_.reset(new MediaInfo());
+
55  if (!internal::GenerateMediaInfo(muxer_options,
+
56  stream_info,
+
57  time_scale,
+
58  container_type,
+
59  media_info_.get())) {
+
60  LOG(ERROR) << "Failed to generate MediaInfo from input.";
+
61  return;
+
62  }
+
63 
+
64  if (is_encrypted_) {
+
65  internal::SetContentProtectionFields(
+
66  content_protection_uuid_, content_protection_name_version_,
+
67  default_key_id_, pssh_, media_info_.get());
+
68  }
+
69 }
+
70 
+ +
72  uint32_t sample_duration) {
+
73  // Assume one VideoInfo.
+
74  if (media_info_->has_video_info()) {
+
75  media_info_->mutable_video_info()->set_frame_duration(sample_duration);
+
76  }
+
77 }
+
78 
+
79 void VodMediaInfoDumpMuxerListener::OnMediaEnd(bool has_init_range,
+
80  uint64_t init_range_start,
+
81  uint64_t init_range_end,
+
82  bool has_index_range,
+
83  uint64_t index_range_start,
+
84  uint64_t index_range_end,
+
85  float duration_seconds,
+
86  uint64_t file_size) {
+
87  DCHECK(media_info_);
+
88  if (!internal::SetVodInformation(has_init_range,
+
89  init_range_start,
+
90  init_range_end,
+
91  has_index_range,
+
92  index_range_start,
+
93  index_range_end,
+
94  duration_seconds,
+
95  file_size,
+
96  media_info_.get())) {
+
97  LOG(ERROR) << "Failed to generate VOD information from input.";
+
98  return;
+
99  }
+
100  SerializeMediaInfoToFile();
+
101 }
+
102 
+
103 void VodMediaInfoDumpMuxerListener::OnNewSegment(uint64_t start_time,
+
104  uint64_t duration,
+
105  uint64_t segment_file_size) {
+
106 }
+
107 
+
108 bool VodMediaInfoDumpMuxerListener::SerializeMediaInfoToFile() {
+
109  std::string output_string;
+
110  if (!google::protobuf::TextFormat::PrintToString(*media_info_,
+
111  &output_string)) {
+
112  LOG(ERROR) << "Failed to serialize MediaInfo to string.";
+
113  return false;
+
114  }
+
115 
+
116  media::File* file = File::Open(output_file_name_.c_str(), "w");
+
117  if (!file) {
+
118  LOG(ERROR) << "Failed to open " << output_file_name_;
+
119  return false;
+
120  }
+
121  if (file->Write(output_string.data(), output_string.size()) <= 0) {
+
122  LOG(ERROR) << "Failed to write MediaInfo to file.";
+
123  file->Close();
+
124  return false;
+
125  }
+
126  if (!file->Close()) {
+
127  LOG(ERROR) << "Failed to close " << output_file_name_;
+
128  return false;
+
129  }
+
130  return true;
+
131 }
+
132 
+
133 } // namespace media
+
134 } // namespace edash_packager
+
virtual bool Open()=0
Internal open. Should not be used directly.
+
virtual void OnSampleDurationReady(uint32_t sample_duration) OVERRIDE
+ +
+ + + + diff --git a/sdk/d0/d4a/structedash__packager_1_1media_1_1mp4_1_1SampleSize-members.html b/sdk/d0/d4a/structedash__packager_1_1media_1_1mp4_1_1SampleSize-members.html new file mode 100644 index 0000000000..1a64f4d170 --- /dev/null +++ b/sdk/d0/d4a/structedash__packager_1_1media_1_1mp4_1_1SampleSize-members.html @@ -0,0 +1,121 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::SampleSize Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::SampleSize)edash_packager::media::mp4::SampleSizevirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::SampleSizevirtual
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::SampleSizevirtual
sample_count (defined in edash_packager::media::mp4::SampleSize)edash_packager::media::mp4::SampleSize
sample_size (defined in edash_packager::media::mp4::SampleSize)edash_packager::media::mp4::SampleSize
SampleSize() (defined in edash_packager::media::mp4::SampleSize)edash_packager::media::mp4::SampleSize
sizes (defined in edash_packager::media::mp4::SampleSize)edash_packager::media::mp4::SampleSize
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~SampleSize() (defined in edash_packager::media::mp4::SampleSize)edash_packager::media::mp4::SampleSizevirtual
+ + + + diff --git a/sdk/d0/d4e/libcrypto__threading_8cc_source.html b/sdk/d0/d4e/libcrypto__threading_8cc_source.html new file mode 100644 index 0000000000..f9f9d6459e --- /dev/null +++ b/sdk/d0/d4e/libcrypto__threading_8cc_source.html @@ -0,0 +1,151 @@ + + + + + + +DASH Media Packaging SDK: app/libcrypto_threading.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
libcrypto_threading.cc
+
+
+
1 // Copyright 2014 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/app/libcrypto_threading.h"
+
8 
+
9 #include <openssl/crypto.h>
+
10 
+
11 #include <vector>
+
12 
+
13 #include "packager/base/logging.h"
+
14 #include "packager/base/memory/scoped_ptr.h"
+
15 #include "packager/base/synchronization/lock.h"
+
16 #include "packager/base/threading/platform_thread.h"
+
17 
+
18 namespace edash_packager {
+
19 namespace media {
+
20 
+
21 namespace {
+
22 
+
23 scoped_ptr<base::Lock[]> global_locks;
+
24 
+
25 void LockFunction(int mode, int n, const char* file, int line) {
+
26  VLOG(2) << "CryptoLock @ " << file << ":" << line;
+
27  if (mode & CRYPTO_LOCK)
+
28  global_locks[n].Acquire();
+
29  else
+
30  global_locks[n].Release();
+
31 }
+
32 
+
33 void ThreadIdFunction(CRYPTO_THREADID* id) {
+
34  CRYPTO_THREADID_set_numeric(
+
35  id, static_cast<unsigned long>(base::PlatformThread::CurrentId()));
+
36 }
+
37 
+
38 } // namespace
+
39 
+
40 LibcryptoThreading::LibcryptoThreading() {
+
41  global_locks.reset(new base::Lock[CRYPTO_num_locks()]);
+
42  CRYPTO_THREADID_set_callback(ThreadIdFunction);
+
43  CRYPTO_set_locking_callback(LockFunction);
+
44 }
+
45 
+
46 LibcryptoThreading::~LibcryptoThreading() {
+
47  CRYPTO_THREADID_set_callback(NULL);
+
48  CRYPTO_set_locking_callback(NULL);
+
49  global_locks.reset();
+
50 }
+
51 
+
52 } // namespace media
+
53 } // namespace edash_packager
+
+ + + + diff --git a/sdk/d0/d66/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox-members.html b/sdk/d0/d66/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox-members.html new file mode 100644 index 0000000000..0ce28ba4b5 --- /dev/null +++ b/sdk/d0/d66/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox-members.html @@ -0,0 +1,116 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::PixelAspectRatioBox Member List
+
+
+ +

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

+ + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::PixelAspectRatioBox)edash_packager::media::mp4::PixelAspectRatioBoxvirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::PixelAspectRatioBoxvirtual
h_spacing (defined in edash_packager::media::mp4::PixelAspectRatioBox)edash_packager::media::mp4::PixelAspectRatioBox
Parse(BoxReader *reader)edash_packager::media::mp4::Box
PixelAspectRatioBox() (defined in edash_packager::media::mp4::PixelAspectRatioBox)edash_packager::media::mp4::PixelAspectRatioBox
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::PixelAspectRatioBoxvirtual
v_spacing (defined in edash_packager::media::mp4::PixelAspectRatioBox)edash_packager::media::mp4::PixelAspectRatioBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~PixelAspectRatioBox() (defined in edash_packager::media::mp4::PixelAspectRatioBox)edash_packager::media::mp4::PixelAspectRatioBoxvirtual
+ + + + diff --git a/sdk/d0/d7d/classedash__packager_1_1media_1_1H264Parser-members.html b/sdk/d0/d7d/classedash__packager_1_1media_1_1H264Parser-members.html new file mode 100644 index 0000000000..2950fb2e3a --- /dev/null +++ b/sdk/d0/d7d/classedash__packager_1_1media_1_1H264Parser-members.html @@ -0,0 +1,122 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::H264Parser Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + +
AdvanceToNextNALU(H264NALU *nalu) (defined in edash_packager::media::H264Parser)edash_packager::media::H264Parser
FindStartCode(const uint8_t *data, off_t data_size, off_t *offset, off_t *start_code_size) (defined in edash_packager::media::H264Parser)edash_packager::media::H264Parserstatic
GetPPS(int pps_id) (defined in edash_packager::media::H264Parser)edash_packager::media::H264Parser
GetSPS(int sps_id) (defined in edash_packager::media::H264Parser)edash_packager::media::H264Parser
H264Parser() (defined in edash_packager::media::H264Parser)edash_packager::media::H264Parser
kEOStream enum value (defined in edash_packager::media::H264Parser)edash_packager::media::H264Parser
kInvalidStream enum value (defined in edash_packager::media::H264Parser)edash_packager::media::H264Parser
kOk enum value (defined in edash_packager::media::H264Parser)edash_packager::media::H264Parser
kUnsupportedStream enum value (defined in edash_packager::media::H264Parser)edash_packager::media::H264Parser
ParsePPS(int *pps_id) (defined in edash_packager::media::H264Parser)edash_packager::media::H264Parser
ParseSEI(H264SEIMessage *sei_msg) (defined in edash_packager::media::H264Parser)edash_packager::media::H264Parser
ParseSliceHeader(const H264NALU &nalu, H264SliceHeader *shdr) (defined in edash_packager::media::H264Parser)edash_packager::media::H264Parser
ParseSPS(int *sps_id) (defined in edash_packager::media::H264Parser)edash_packager::media::H264Parser
ParseSPSFromArray(const uint8_t *sps_data, size_t sps_data_size, int *sps_id) (defined in edash_packager::media::H264Parser)edash_packager::media::H264Parser
Reset() (defined in edash_packager::media::H264Parser)edash_packager::media::H264Parser
Result enum name (defined in edash_packager::media::H264Parser)edash_packager::media::H264Parser
SetStream(const uint8_t *stream, off_t stream_size) (defined in edash_packager::media::H264Parser)edash_packager::media::H264Parser
~H264Parser() (defined in edash_packager::media::H264Parser)edash_packager::media::H264Parser
+ + + + diff --git a/sdk/d0/d7d/decryptor__source_8h_source.html b/sdk/d0/d7d/decryptor__source_8h_source.html new file mode 100644 index 0000000000..209fc8e8c4 --- /dev/null +++ b/sdk/d0/d7d/decryptor__source_8h_source.html @@ -0,0 +1,133 @@ + + + + + + +DASH Media Packaging SDK: media/base/decryptor_source.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
decryptor_source.h
+
+
+
1 // Copyright 2014 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_BASE_DECRYPTOR_SOURCE_H_
+
8 #define MEDIA_BASE_DECRYPTOR_SOURCE_H_
+
9 
+
10 #include "packager/base/memory/scoped_ptr.h"
+
11 #include "packager/media/base/container_names.h"
+
12 #include "packager/media/base/status.h"
+
13 
+
14 namespace edash_packager {
+
15 namespace media {
+
16 
+ +
19  public:
+
20  DecryptorSource() {}
+
21  virtual ~DecryptorSource() {}
+
22 
+
28  virtual Status OnNeedKey(MediaContainerName container,
+
29  const std::string& init_data) = 0;
+
30 
+
31  private:
+
32  DISALLOW_COPY_AND_ASSIGN(DecryptorSource);
+
33 };
+
34 
+
35 } // namespace media
+
36 } // namespace edash_packager
+
37 
+
38 #endif // MEDIA_BASE_DECRYPTOR_SOURCE_H_
+
DecryptorSource is responsible for decryption key acquisition.
+ +
virtual Status OnNeedKey(MediaContainerName container, const std::string &init_data)=0
+
+ + + + diff --git a/sdk/d0/d86/structedash__packager_1_1media_1_1EncryptionKey.html b/sdk/d0/d86/structedash__packager_1_1media_1_1EncryptionKey.html new file mode 100644 index 0000000000..343fa5aea5 --- /dev/null +++ b/sdk/d0/d86/structedash__packager_1_1media_1_1EncryptionKey.html @@ -0,0 +1,127 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::EncryptionKey Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::EncryptionKey Struct Reference
+
+
+ + + + + + + + + + +

+Public Attributes

+std::vector< uint8_t > key_id
 
+std::vector< uint8_t > key
 
+std::vector< uint8_t > pssh
 
+std::vector< uint8_t > iv
 
+

Detailed Description

+
+

Definition at line 18 of file key_source.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html b/sdk/d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html new file mode 100644 index 0000000000..d66e8724ce --- /dev/null +++ b/sdk/d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html @@ -0,0 +1,188 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::TrackFragmentDecodeTime Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::TrackFragmentDecodeTime Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::TrackFragmentDecodeTime:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + +

+Public Attributes

+uint64_t decode_time
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 435 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::TrackFragmentDecodeTime::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1472 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.png b/sdk/d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.png new file mode 100644 index 0000000000..c45943189b Binary files /dev/null and b/sdk/d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.png differ diff --git a/sdk/d0/d93/structedash__packager_1_1media_1_1mp4_1_1SampleTable-members.html b/sdk/d0/d93/structedash__packager_1_1media_1_1mp4_1_1SampleTable-members.html new file mode 100644 index 0000000000..6698d0a3ff --- /dev/null +++ b/sdk/d0/d93/structedash__packager_1_1media_1_1mp4_1_1SampleTable-members.html @@ -0,0 +1,121 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::SampleTable Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::SampleTable)edash_packager::media::mp4::SampleTablevirtual
chunk_large_offset (defined in edash_packager::media::mp4::SampleTable)edash_packager::media::mp4::SampleTable
composition_time_to_sample (defined in edash_packager::media::mp4::SampleTable)edash_packager::media::mp4::SampleTable
ComputeSize() OVERRIDEedash_packager::media::mp4::SampleTablevirtual
decoding_time_to_sample (defined in edash_packager::media::mp4::SampleTable)edash_packager::media::mp4::SampleTable
description (defined in edash_packager::media::mp4::SampleTable)edash_packager::media::mp4::SampleTable
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::SampleTablevirtual
sample_size (defined in edash_packager::media::mp4::SampleTable)edash_packager::media::mp4::SampleTable
sample_to_chunk (defined in edash_packager::media::mp4::SampleTable)edash_packager::media::mp4::SampleTable
SampleTable() (defined in edash_packager::media::mp4::SampleTable)edash_packager::media::mp4::SampleTable
sync_sample (defined in edash_packager::media::mp4::SampleTable)edash_packager::media::mp4::SampleTable
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~SampleTable() (defined in edash_packager::media::mp4::SampleTable)edash_packager::media::mp4::SampleTablevirtual
+ + + + diff --git a/sdk/d0/d96/structedash__packager_1_1ContentProtectionElement.html b/sdk/d0/d96/structedash__packager_1_1ContentProtectionElement.html new file mode 100644 index 0000000000..18a77706e4 --- /dev/null +++ b/sdk/d0/d96/structedash__packager_1_1ContentProtectionElement.html @@ -0,0 +1,131 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::ContentProtectionElement Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::ContentProtectionElement Struct Reference
+
+
+ +

#include <content_protection_element.h>

+ + + + + + + + + + +

+Public Attributes

+std::string value
 
+std::string scheme_id_uri
 
+std::map< std::string,
+std::string > 
additional_attributes
 
+std::vector< Elementsubelements
 
+

Detailed Description

+

Structure to represent <ContentProtection> element in DASH MPD spec (ISO 23009-1:2012 MPD and Segment Formats).

+ +

Definition at line 36 of file content_protection_element.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d0/da6/stream__descriptor_8cc_source.html b/sdk/d0/da6/stream__descriptor_8cc_source.html new file mode 100644 index 0000000000..e893adc787 --- /dev/null +++ b/sdk/d0/da6/stream__descriptor_8cc_source.html @@ -0,0 +1,237 @@ + + + + + + +DASH Media Packaging SDK: app/stream_descriptor.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
stream_descriptor.cc
+
+
+
1 // Copyright 2014 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/app/stream_descriptor.h"
+
8 
+
9 #include "packager/app/packager_util.h"
+
10 #include "packager/base/logging.h"
+
11 #include "packager/base/strings/string_number_conversions.h"
+
12 #include "packager/base/strings/string_split.h"
+
13 #include "packager/mpd/base/language_utils.h"
+
14 
+
15 namespace edash_packager {
+
16 namespace media {
+
17 
+
18 namespace {
+
19 
+
20 enum FieldType {
+
21  kUnknownField = 0,
+
22  kStreamSelectorField,
+
23  kInputField,
+
24  kOutputField,
+
25  kSegmentTemplateField,
+
26  kBandwidthField,
+
27  kLanguageField,
+
28 };
+
29 
+
30 struct FieldNameToTypeMapping {
+
31  const char* field_name;
+
32  FieldType field_type;
+
33 };
+
34 
+
35 const FieldNameToTypeMapping kFieldNameTypeMappings[] = {
+
36  { "stream_selector", kStreamSelectorField },
+
37  { "stream", kStreamSelectorField },
+
38  { "input", kInputField },
+
39  { "in", kInputField },
+
40  { "output", kOutputField },
+
41  { "out", kOutputField },
+
42  { "init_segment", kOutputField },
+
43  { "segment_template", kSegmentTemplateField },
+
44  { "template", kSegmentTemplateField },
+
45  { "bandwidth", kBandwidthField },
+
46  { "bw", kBandwidthField },
+
47  { "bitrate", kBandwidthField },
+
48  { "language", kLanguageField },
+
49  { "lang", kLanguageField },
+
50 };
+
51 
+
52 FieldType GetFieldType(const std::string& field_name) {
+
53  for (size_t idx = 0; idx < arraysize(kFieldNameTypeMappings); ++idx) {
+
54  if (field_name == kFieldNameTypeMappings[idx].field_name)
+
55  return kFieldNameTypeMappings[idx].field_type;
+
56  }
+
57  return kUnknownField;
+
58 }
+
59 
+
60 } // anonymous namespace
+
61 
+
62 StreamDescriptor::StreamDescriptor() : bandwidth(0) {}
+
63 
+
64 StreamDescriptor::~StreamDescriptor() {}
+
65 
+
66 bool InsertStreamDescriptor(const std::string& descriptor_string,
+
67  StreamDescriptorList* descriptor_list) {
+
68  StreamDescriptor descriptor;
+
69 
+
70  // Split descriptor string into name/value pairs.
+
71  base::StringPairs pairs;
+
72  if (!base::SplitStringIntoKeyValuePairs(descriptor_string,
+
73  '=',
+
74  ',',
+
75  &pairs)) {
+
76  LOG(ERROR) << "Invalid stream descriptors name/value pairs.";
+
77  return false;
+
78  }
+
79  for (base::StringPairs::const_iterator iter = pairs.begin();
+
80  iter != pairs.end(); ++iter) {
+
81  switch (GetFieldType(iter->first)) {
+
82  case kStreamSelectorField:
+
83  descriptor.stream_selector = iter->second;
+
84  break;
+
85  case kInputField:
+
86  descriptor.input = iter->second;
+
87  break;
+
88  case kOutputField:
+
89  descriptor.output = iter->second;
+
90  break;
+
91  case kSegmentTemplateField:
+
92  descriptor.segment_template = iter->second;
+
93  break;
+
94  case kBandwidthField: {
+
95  unsigned bw;
+
96  if (!base::StringToUint(iter->second, &bw)) {
+
97  LOG(ERROR) << "Non-numeric bandwidth specified.";
+
98  return false;
+
99  }
+
100  descriptor.bandwidth = bw;
+
101  break;
+
102  }
+
103  case kLanguageField: {
+
104  std::string language = LanguageToISO_639_2(iter->second);
+
105  if (language == "und") {
+
106  LOG(ERROR) << "Unknown/invalid language specified: " << iter->second;
+
107  return false;
+
108  }
+
109  DCHECK_EQ(3u, language.size());
+
110  descriptor.language = language;
+
111  break;
+
112  }
+
113  default:
+
114  LOG(ERROR) << "Unknown field in stream descriptor (\"" << iter->first
+
115  << "\").";
+
116  return false;
+
117  break;
+
118  }
+
119  }
+
120  // Validate and insert the descriptor
+
121  if (descriptor.input.empty()) {
+
122  LOG(ERROR) << "Stream input not specified.";
+
123  return false;
+
124  }
+
125  if (!FLAGS_dump_stream_info && descriptor.stream_selector.empty()) {
+
126  LOG(ERROR) << "Stream stream_selector not specified.";
+
127  return false;
+
128  }
+
129  if (!FLAGS_dump_stream_info && descriptor.output.empty()) {
+
130  LOG(ERROR) << "Stream output not specified.";
+
131  return false;
+
132  }
+
133  descriptor_list->insert(descriptor);
+
134  return true;
+
135 }
+
136 
+
137 } // namespace media
+
138 } // namespace edash_packager
+
std::string LanguageToISO_639_2(const std::string &language)
+
+ + + + diff --git a/sdk/d0/da9/classedash__packager_1_1MockRepresentation.html b/sdk/d0/da9/classedash__packager_1_1MockRepresentation.html new file mode 100644 index 0000000000..6969433a76 --- /dev/null +++ b/sdk/d0/da9/classedash__packager_1_1MockRepresentation.html @@ -0,0 +1,154 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::MockRepresentation Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::MockRepresentation Class Reference
+
+
+
+Inheritance diagram for edash_packager::MockRepresentation:
+
+
+ + +edash_packager::Representation + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

MockRepresentation (uint32_t representation_id)
 
MOCK_METHOD1 (AddContentProtectionElement, void(const ContentProtectionElement &element))
 
MOCK_METHOD2 (UpdateContentProtectionPssh, void(const std::string &drm_uuid, const std::string &pssh))
 
MOCK_METHOD3 (AddNewSegment, void(uint64_t start_time, uint64_t duration, uint64_t size))
 
MOCK_METHOD1 (SetSampleDuration, void(uint32_t sample_duration))
 
- Public Member Functions inherited from edash_packager::Representation
bool Init ()
 
virtual void AddContentProtectionElement (const ContentProtectionElement &element)
 
virtual void UpdateContentProtectionPssh (const std::string &drm_uuid, const std::string &pssh)
 
virtual void AddNewSegment (uint64_t start_time, uint64_t duration, uint64_t size)
 
virtual void SetSampleDuration (uint32_t sample_duration)
 
xml::ScopedXmlPtr< xmlNode >::type GetXml ()
 
uint32_t id () const
 
+

Detailed Description

+
+

Definition at line 50 of file mock_mpd_builder.h.

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d0/da9/classedash__packager_1_1MockRepresentation.png b/sdk/d0/da9/classedash__packager_1_1MockRepresentation.png new file mode 100644 index 0000000000..9e6d72539b Binary files /dev/null and b/sdk/d0/da9/classedash__packager_1_1MockRepresentation.png differ diff --git a/sdk/d0/dae/classedash__packager_1_1media_1_1BufferWriter-members.html b/sdk/d0/dae/classedash__packager_1_1media_1_1BufferWriter-members.html new file mode 100644 index 0000000000..df59a527a5 --- /dev/null +++ b/sdk/d0/dae/classedash__packager_1_1media_1_1BufferWriter-members.html @@ -0,0 +1,124 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::BufferWriter Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + +
AppendArray(const uint8_t *buf, size_t size) (defined in edash_packager::media::BufferWriter)edash_packager::media::BufferWriter
AppendBuffer(const BufferWriter &buffer) (defined in edash_packager::media::BufferWriter)edash_packager::media::BufferWriter
AppendInt(uint8_t v)edash_packager::media::BufferWriter
AppendInt(uint16_t v) (defined in edash_packager::media::BufferWriter)edash_packager::media::BufferWriter
AppendInt(uint32_t v) (defined in edash_packager::media::BufferWriter)edash_packager::media::BufferWriter
AppendInt(uint64_t v) (defined in edash_packager::media::BufferWriter)edash_packager::media::BufferWriter
AppendInt(int16_t v) (defined in edash_packager::media::BufferWriter)edash_packager::media::BufferWriter
AppendInt(int32_t v) (defined in edash_packager::media::BufferWriter)edash_packager::media::BufferWriter
AppendInt(int64_t v) (defined in edash_packager::media::BufferWriter)edash_packager::media::BufferWriter
AppendNBytes(uint64_t v, size_t num_bytes)edash_packager::media::BufferWriter
AppendVector(const std::vector< uint8_t > &v) (defined in edash_packager::media::BufferWriter)edash_packager::media::BufferWriter
Buffer() const edash_packager::media::BufferWriterinline
BufferWriter() (defined in edash_packager::media::BufferWriter)edash_packager::media::BufferWriter
BufferWriter(size_t reserved_size_in_bytes)edash_packager::media::BufferWriterexplicit
Clear() (defined in edash_packager::media::BufferWriter)edash_packager::media::BufferWriterinline
Size() const (defined in edash_packager::media::BufferWriter)edash_packager::media::BufferWriterinline
Swap(BufferWriter *buffer) (defined in edash_packager::media::BufferWriter)edash_packager::media::BufferWriterinline
SwapBuffer(std::vector< uint8_t > *buffer) (defined in edash_packager::media::BufferWriter)edash_packager::media::BufferWriterinline
WriteToFile(File *file)edash_packager::media::BufferWriter
~BufferWriter() (defined in edash_packager::media::BufferWriter)edash_packager::media::BufferWriter
+ + + + diff --git a/sdk/d0/dd1/classedash__packager_1_1SimpleMpdNotifier-members.html b/sdk/d0/dd1/classedash__packager_1_1SimpleMpdNotifier-members.html new file mode 100644 index 0000000000..7d3c88b468 --- /dev/null +++ b/sdk/d0/dd1/classedash__packager_1_1SimpleMpdNotifier-members.html @@ -0,0 +1,117 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::SimpleMpdNotifier Member List
+
+
+ +

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

+ + + + + + + + + + + + + + +
AddContentProtectionElement(uint32_t id, const ContentProtectionElement &content_protection_element) OVERRIDEedash_packager::SimpleMpdNotifiervirtual
dash_profile() const edash_packager::MpdNotifierinline
Flush() OVERRIDEedash_packager::SimpleMpdNotifiervirtual
Init() OVERRIDEedash_packager::SimpleMpdNotifiervirtual
MpdNotifier(DashProfile dash_profile) (defined in edash_packager::MpdNotifier)edash_packager::MpdNotifierinline
NotifyEncryptionUpdate(uint32_t container_id, const std::string &drm_uuid, const std::vector< uint8_t > &new_key_id, const std::vector< uint8_t > &new_pssh) OVERRIDEedash_packager::SimpleMpdNotifiervirtual
NotifyNewContainer(const MediaInfo &media_info, uint32_t *id) OVERRIDEedash_packager::SimpleMpdNotifiervirtual
NotifyNewSegment(uint32_t id, uint64_t start_time, uint64_t duration, uint64_t size) OVERRIDEedash_packager::SimpleMpdNotifiervirtual
NotifySampleDuration(uint32_t container_id, uint32_t sample_duration) OVERRIDEedash_packager::SimpleMpdNotifiervirtual
SimpleMpdNotifier(DashProfile dash_profile, const MpdOptions &mpd_options, const std::vector< std::string > &base_urls, const std::string &output_path) (defined in edash_packager::SimpleMpdNotifier)edash_packager::SimpleMpdNotifier
SimpleMpdNotifierTest (defined in edash_packager::SimpleMpdNotifier)edash_packager::SimpleMpdNotifierfriend
~MpdNotifier() (defined in edash_packager::MpdNotifier)edash_packager::MpdNotifierinlinevirtual
~SimpleMpdNotifier() (defined in edash_packager::SimpleMpdNotifier)edash_packager::SimpleMpdNotifiervirtual
+ + + + diff --git a/sdk/d0/dd4/structedash__packager_1_1media_1_1SubsampleEntry-members.html b/sdk/d0/dd4/structedash__packager_1_1media_1_1SubsampleEntry-members.html new file mode 100644 index 0000000000..72cf32d08b --- /dev/null +++ b/sdk/d0/dd4/structedash__packager_1_1media_1_1SubsampleEntry-members.html @@ -0,0 +1,106 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::SubsampleEntry Member List
+
+
+ +

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

+ + + +
cipher_bytes (defined in edash_packager::media::SubsampleEntry)edash_packager::media::SubsampleEntry
clear_bytes (defined in edash_packager::media::SubsampleEntry)edash_packager::media::SubsampleEntry
+ + + + diff --git a/sdk/d0/ddc/structedash__packager_1_1media_1_1FileCloser.html b/sdk/d0/ddc/structedash__packager_1_1media_1_1FileCloser.html new file mode 100644 index 0000000000..d3576a9181 --- /dev/null +++ b/sdk/d0/ddc/structedash__packager_1_1media_1_1FileCloser.html @@ -0,0 +1,120 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::FileCloser Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::FileCloser Struct Reference
+
+
+ +

#include <file_closer.h>

+ + + + +

+Public Member Functions

+void operator() (File *file) const
 
+

Detailed Description

+

Used by scoped_ptr to automatically close the file when it goes out of scope.

+ +

Definition at line 18 of file file_closer.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/sdk/d0/de0/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry-members.html b/sdk/d0/de0/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry-members.html new file mode 100644 index 0000000000..f8cf929715 --- /dev/null +++ b/sdk/d0/de0/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry-members.html @@ -0,0 +1,121 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::VideoSampleEntry Member List
+
+
+ +

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
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() (defined in edash_packager::media::mp4::VideoSampleEntry)edash_packager::media::mp4::VideoSampleEntryvirtual
+ + + + diff --git a/sdk/d0/de4/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader-members.html b/sdk/d0/de4/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader-members.html new file mode 100644 index 0000000000..be116b13f6 --- /dev/null +++ b/sdk/d0/de4/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::MovieFragmentHeader Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::MovieFragmentHeader)edash_packager::media::mp4::MovieFragmentHeadervirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::MovieFragmentHeadervirtual
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
MovieFragmentHeader() (defined in edash_packager::media::mp4::MovieFragmentHeader)edash_packager::media::mp4::MovieFragmentHeader
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::MovieFragmentHeadervirtual
sequence_number (defined in edash_packager::media::mp4::MovieFragmentHeader)edash_packager::media::mp4::MovieFragmentHeader
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~MovieFragmentHeader() (defined in edash_packager::media::mp4::MovieFragmentHeader)edash_packager::media::mp4::MovieFragmentHeadervirtual
+ + + + diff --git a/sdk/d0/dea/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader-members.html b/sdk/d0/dea/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader-members.html new file mode 100644 index 0000000000..b4e672a54a --- /dev/null +++ b/sdk/d0/dea/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader-members.html @@ -0,0 +1,121 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::ProtectionSystemSpecificHeader Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::ProtectionSystemSpecificHeader)edash_packager::media::mp4::ProtectionSystemSpecificHeadervirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::ProtectionSystemSpecificHeadervirtual
data (defined in edash_packager::media::mp4::ProtectionSystemSpecificHeader)edash_packager::media::mp4::ProtectionSystemSpecificHeader
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ProtectionSystemSpecificHeader() (defined in edash_packager::media::mp4::ProtectionSystemSpecificHeader)edash_packager::media::mp4::ProtectionSystemSpecificHeader
raw_box (defined in edash_packager::media::mp4::ProtectionSystemSpecificHeader)edash_packager::media::mp4::ProtectionSystemSpecificHeader
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::ProtectionSystemSpecificHeadervirtual
system_id (defined in edash_packager::media::mp4::ProtectionSystemSpecificHeader)edash_packager::media::mp4::ProtectionSystemSpecificHeader
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~ProtectionSystemSpecificHeader() (defined in edash_packager::media::mp4::ProtectionSystemSpecificHeader)edash_packager::media::mp4::ProtectionSystemSpecificHeadervirtual
+ + + + diff --git a/sdk/d0/df3/packager__util_8cc_source.html b/sdk/d0/df3/packager__util_8cc_source.html new file mode 100644 index 0000000000..092442eb00 --- /dev/null +++ b/sdk/d0/df3/packager__util_8cc_source.html @@ -0,0 +1,323 @@ + + + + + + +DASH Media Packaging SDK: app/packager_util.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
packager_util.cc
+
+
+
1 // Copyright 2014 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/app/packager_util.h"
+
8 
+
9 #include <gflags/gflags.h>
+
10 #include <iostream>
+
11 
+
12 #include "packager/app/fixed_key_encryption_flags.h"
+
13 #include "packager/app/mpd_flags.h"
+
14 #include "packager/app/muxer_flags.h"
+
15 #include "packager/app/widevine_encryption_flags.h"
+
16 #include "packager/base/logging.h"
+
17 #include "packager/base/strings/string_number_conversions.h"
+
18 #include "packager/media/base/media_stream.h"
+
19 #include "packager/media/base/muxer.h"
+
20 #include "packager/media/base/muxer_options.h"
+
21 #include "packager/media/base/request_signer.h"
+
22 #include "packager/media/base/stream_info.h"
+
23 #include "packager/media/base/widevine_key_source.h"
+
24 #include "packager/media/file/file.h"
+
25 #include "packager/mpd/base/mpd_builder.h"
+
26 
+
27 DEFINE_bool(dump_stream_info, false, "Dump demuxed stream info.");
+
28 
+
29 namespace edash_packager {
+
30 namespace media {
+
31 
+
32 void DumpStreamInfo(const std::vector<MediaStream*>& streams) {
+
33  printf("Found %zu stream(s).\n", streams.size());
+
34  for (size_t i = 0; i < streams.size(); ++i)
+
35  printf("Stream [%zu] %s\n", i, streams[i]->info()->ToString().c_str());
+
36 }
+
37 
+
38 scoped_ptr<RequestSigner> CreateSigner() {
+
39  scoped_ptr<RequestSigner> signer;
+
40 
+
41  if (!FLAGS_aes_signing_key.empty()) {
+
42  signer.reset(AesRequestSigner::CreateSigner(
+
43  FLAGS_signer, FLAGS_aes_signing_key, FLAGS_aes_signing_iv));
+
44  if (!signer) {
+
45  LOG(ERROR) << "Cannot create an AES signer object from '"
+
46  << FLAGS_aes_signing_key << "':'" << FLAGS_aes_signing_iv
+
47  << "'.";
+
48  return scoped_ptr<RequestSigner>();
+
49  }
+
50  } else if (!FLAGS_rsa_signing_key_path.empty()) {
+
51  std::string rsa_private_key;
+
52  if (!File::ReadFileToString(FLAGS_rsa_signing_key_path.c_str(),
+
53  &rsa_private_key)) {
+
54  LOG(ERROR) << "Failed to read from '" << FLAGS_rsa_signing_key_path
+
55  << "'.";
+
56  return scoped_ptr<RequestSigner>();
+
57  }
+
58  signer.reset(RsaRequestSigner::CreateSigner(FLAGS_signer, rsa_private_key));
+
59  if (!signer) {
+
60  LOG(ERROR) << "Cannot create a RSA signer object from '"
+
61  << FLAGS_rsa_signing_key_path << "'.";
+
62  return scoped_ptr<RequestSigner>();
+
63  }
+
64  }
+
65  return signer.Pass();
+
66 }
+
67 
+
68 scoped_ptr<KeySource> CreateEncryptionKeySource() {
+
69  scoped_ptr<KeySource> encryption_key_source;
+
70  if (FLAGS_enable_widevine_encryption) {
+
71  scoped_ptr<WidevineKeySource> widevine_key_source(
+
72  new WidevineKeySource(FLAGS_key_server_url));
+
73  if (!FLAGS_signer.empty()) {
+
74  scoped_ptr<RequestSigner> request_signer(CreateSigner());
+
75  if (!request_signer)
+
76  return scoped_ptr<KeySource>();
+
77  widevine_key_source->set_signer(request_signer.Pass());
+
78  }
+
79 
+
80  std::vector<uint8_t> content_id;
+
81  if (!base::HexStringToBytes(FLAGS_content_id, &content_id)) {
+
82  LOG(ERROR) << "Invalid content_id hex string specified.";
+
83  return scoped_ptr<KeySource>();
+
84  }
+
85  Status status = widevine_key_source->FetchKeys(content_id, FLAGS_policy);
+
86  if (!status.ok()) {
+
87  LOG(ERROR) << "Widevine encryption key source failed to fetch keys: "
+
88  << status.ToString();
+
89  return scoped_ptr<KeySource>();
+
90  }
+
91  encryption_key_source = widevine_key_source.Pass();
+
92  } else if (FLAGS_enable_fixed_key_encryption) {
+
93  encryption_key_source = KeySource::CreateFromHexStrings(
+
94  FLAGS_key_id, FLAGS_key, FLAGS_pssh, FLAGS_iv);
+
95  }
+
96  return encryption_key_source.Pass();
+
97 }
+
98 
+
99 scoped_ptr<KeySource> CreateDecryptionKeySource() {
+
100  scoped_ptr<KeySource> decryption_key_source;
+
101  if (FLAGS_enable_widevine_decryption) {
+
102  scoped_ptr<WidevineKeySource> widevine_key_source(
+
103  new WidevineKeySource(FLAGS_key_server_url));
+
104  if (!FLAGS_signer.empty()) {
+
105  scoped_ptr<RequestSigner> request_signer(CreateSigner());
+
106  if (!request_signer)
+
107  return scoped_ptr<KeySource>();
+
108  widevine_key_source->set_signer(request_signer.Pass());
+
109  }
+
110 
+
111  decryption_key_source = widevine_key_source.Pass();
+
112  } else if (FLAGS_enable_fixed_key_decryption) {
+
113  decryption_key_source =
+
114  KeySource::CreateFromHexStrings(FLAGS_key_id, FLAGS_key, "", "");
+
115  }
+
116  return decryption_key_source.Pass();
+
117 }
+
118 
+
119 bool AssignFlagsFromProfile() {
+
120  bool single_segment = FLAGS_single_segment;
+
121  if (FLAGS_profile == "on-demand") {
+
122  single_segment = true;
+
123  } else if (FLAGS_profile == "live") {
+
124  single_segment = false;
+
125  } else if (FLAGS_profile != "") {
+
126  fprintf(stderr, "ERROR: --profile '%s' is not supported.\n",
+
127  FLAGS_profile.c_str());
+
128  return false;
+
129  }
+
130 
+
131  if (FLAGS_single_segment != single_segment) {
+
132  FLAGS_single_segment = single_segment;
+
133  fprintf(stdout, "Profile %s: set --single_segment to %s.\n",
+
134  FLAGS_profile.c_str(), single_segment ? "true" : "false");
+
135  }
+
136  return true;
+
137 }
+
138 
+
139 bool GetMuxerOptions(MuxerOptions* muxer_options) {
+
140  DCHECK(muxer_options);
+
141 
+
142  muxer_options->single_segment = FLAGS_single_segment;
+
143  muxer_options->segment_duration = FLAGS_segment_duration;
+
144  muxer_options->fragment_duration = FLAGS_fragment_duration;
+
145  muxer_options->segment_sap_aligned = FLAGS_segment_sap_aligned;
+
146  muxer_options->fragment_sap_aligned = FLAGS_fragment_sap_aligned;
+
147  muxer_options->num_subsegments_per_sidx = FLAGS_num_subsegments_per_sidx;
+
148  muxer_options->temp_dir = FLAGS_temp_dir;
+
149  return true;
+
150 }
+
151 
+
152 bool GetMpdOptions(MpdOptions* mpd_options) {
+
153  DCHECK(mpd_options);
+
154 
+
155  mpd_options->availability_time_offset = FLAGS_availability_time_offset;
+
156  mpd_options->minimum_update_period = FLAGS_minimum_update_period;
+
157  mpd_options->min_buffer_time = FLAGS_min_buffer_time;
+
158  mpd_options->time_shift_buffer_depth = FLAGS_time_shift_buffer_depth;
+
159  mpd_options->suggested_presentation_delay =
+
160  FLAGS_suggested_presentation_delay;
+
161  return true;
+
162 }
+
163 
+
164 MediaStream* FindFirstStreamOfType(const std::vector<MediaStream*>& streams,
+
165  StreamType stream_type) {
+
166  typedef std::vector<MediaStream*>::const_iterator StreamIterator;
+
167  for (StreamIterator it = streams.begin(); it != streams.end(); ++it) {
+
168  if ((*it)->info()->stream_type() == stream_type)
+
169  return *it;
+
170  }
+
171  return NULL;
+
172 }
+
173 MediaStream* FindFirstVideoStream(const std::vector<MediaStream*>& streams) {
+
174  return FindFirstStreamOfType(streams, kStreamVideo);
+
175 }
+
176 MediaStream* FindFirstAudioStream(const std::vector<MediaStream*>& streams) {
+
177  return FindFirstStreamOfType(streams, kStreamAudio);
+
178 }
+
179 
+
180 bool AddStreamToMuxer(const std::vector<MediaStream*>& streams,
+
181  const std::string& stream_selector,
+
182  const std::string& language_override,
+
183  Muxer* muxer) {
+
184  DCHECK(muxer);
+
185 
+
186  MediaStream* stream = NULL;
+
187  if (stream_selector == "video") {
+
188  stream = FindFirstVideoStream(streams);
+
189  } else if (stream_selector == "audio") {
+
190  stream = FindFirstAudioStream(streams);
+
191  } else {
+
192  // Expect stream_selector to be a zero based stream id.
+
193  size_t stream_id;
+
194  if (!base::StringToSizeT(stream_selector, &stream_id) ||
+
195  stream_id >= streams.size()) {
+
196  LOG(ERROR) << "Invalid argument --stream=" << stream_selector << "; "
+
197  << "should be 'audio', 'video', or a number within [0, "
+
198  << streams.size() - 1 << "].";
+
199  return false;
+
200  }
+
201  stream = streams[stream_id];
+
202  DCHECK(stream);
+
203  }
+
204 
+
205  // This could occur only if stream_selector=audio|video and the corresponding
+
206  // stream does not exist in the input.
+
207  if (!stream) {
+
208  LOG(ERROR) << "No " << stream_selector << " stream found in the input.";
+
209  return false;
+
210  }
+
211 
+
212  if (!language_override.empty()) {
+
213  stream->info()->set_language(language_override);
+
214  }
+
215 
+
216  muxer->AddStream(stream);
+
217  return true;
+
218 }
+
219 
+
220 } // namespace media
+
221 } // namespace edash_packager
+
static bool ReadFileToString(const char *file_name, std::string *contents)
Definition: file.cc:160
+
static AesRequestSigner * CreateSigner(const std::string &signer_name, const std::string &aes_key_hex, const std::string &iv_hex)
+
static RsaRequestSigner * CreateSigner(const std::string &signer_name, const std::string &pkcs1_rsa_key)
+
static scoped_ptr< KeySource > CreateFromHexStrings(const std::string &key_id_hex, const std::string &key_hex, const std::string &pssh_data_hex, const std::string &iv_hex)
Definition: key_source.cc:100
+
+ + + + diff --git a/sdk/d0/df6/structedash__packager_1_1media_1_1mp4_1_1MovieExtends-members.html b/sdk/d0/df6/structedash__packager_1_1media_1_1mp4_1_1MovieExtends-members.html new file mode 100644 index 0000000000..10d2ba2ed2 --- /dev/null +++ b/sdk/d0/df6/structedash__packager_1_1media_1_1mp4_1_1MovieExtends-members.html @@ -0,0 +1,116 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::MovieExtends Member List
+
+
+ +

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

+ + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::MovieExtends)edash_packager::media::mp4::MovieExtendsvirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::MovieExtendsvirtual
header (defined in edash_packager::media::mp4::MovieExtends)edash_packager::media::mp4::MovieExtends
MovieExtends() (defined in edash_packager::media::mp4::MovieExtends)edash_packager::media::mp4::MovieExtends
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::MovieExtendsvirtual
tracks (defined in edash_packager::media::mp4::MovieExtends)edash_packager::media::mp4::MovieExtends
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~MovieExtends() (defined in edash_packager::media::mp4::MovieExtends)edash_packager::media::mp4::MovieExtendsvirtual
+ + + + diff --git a/sdk/d0/dfa/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample.html b/sdk/d0/dfa/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample.html new file mode 100644 index 0000000000..7fcbd68d5f --- /dev/null +++ b/sdk/d0/dfa/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample.html @@ -0,0 +1,124 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::wvm::DemuxStreamIdMediaSample Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::wvm::DemuxStreamIdMediaSample Struct Reference
+
+
+ + + + + + + + +

+Public Attributes

+uint32_t demux_stream_id
 
+uint32_t parsed_audio_or_video_stream_id
 
+scoped_refptr< MediaSamplemedia_sample
 
+

Detailed Description

+
+

Definition at line 28 of file wvm_media_parser.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d1/d02/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer-members.html b/sdk/d1/d02/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer-members.html new file mode 100644 index 0000000000..f2d4ce4f0b --- /dev/null +++ b/sdk/d1/d02/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer-members.html @@ -0,0 +1,127 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::BoxBuffer Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + + +
BoxBuffer(BoxReader *reader)edash_packager::media::mp4::BoxBufferinlineexplicit
BoxBuffer(BufferWriter *writer)edash_packager::media::mp4::BoxBufferinlineexplicit
IgnoreBytes(size_t num_bytes)edash_packager::media::mp4::BoxBufferinline
Pos() const edash_packager::media::mp4::BoxBufferinline
PrepareChildren()edash_packager::media::mp4::BoxBufferinline
reader()edash_packager::media::mp4::BoxBufferinline
Reading() const edash_packager::media::mp4::BoxBufferinline
ReadWriteChild(Box *box)edash_packager::media::mp4::BoxBufferinline
ReadWriteFourCC(FourCC *fourcc) (defined in edash_packager::media::mp4::BoxBuffer)edash_packager::media::mp4::BoxBufferinline
ReadWriteInt16(int16_t *v) (defined in edash_packager::media::mp4::BoxBuffer)edash_packager::media::mp4::BoxBufferinline
ReadWriteInt32(int32_t *v) (defined in edash_packager::media::mp4::BoxBuffer)edash_packager::media::mp4::BoxBufferinline
ReadWriteInt64(int64_t *v) (defined in edash_packager::media::mp4::BoxBuffer)edash_packager::media::mp4::BoxBufferinline
ReadWriteInt64NBytes(int64_t *v, size_t num_bytes) (defined in edash_packager::media::mp4::BoxBuffer)edash_packager::media::mp4::BoxBufferinline
ReadWriteUInt16(uint16_t *v) (defined in edash_packager::media::mp4::BoxBuffer)edash_packager::media::mp4::BoxBufferinline
ReadWriteUInt32(uint32_t *v) (defined in edash_packager::media::mp4::BoxBuffer)edash_packager::media::mp4::BoxBufferinline
ReadWriteUInt64(uint64_t *v) (defined in edash_packager::media::mp4::BoxBuffer)edash_packager::media::mp4::BoxBufferinline
ReadWriteUInt64NBytes(uint64_t *v, size_t num_bytes)edash_packager::media::mp4::BoxBufferinline
ReadWriteUInt8(uint8_t *v) (defined in edash_packager::media::mp4::BoxBuffer)edash_packager::media::mp4::BoxBufferinline
ReadWriteVector(std::vector< uint8_t > *vector, size_t count) (defined in edash_packager::media::mp4::BoxBuffer)edash_packager::media::mp4::BoxBufferinline
Size() const edash_packager::media::mp4::BoxBufferinline
TryReadWriteChild(Box *box)edash_packager::media::mp4::BoxBufferinline
writer()edash_packager::media::mp4::BoxBufferinline
~BoxBuffer() (defined in edash_packager::media::mp4::BoxBuffer)edash_packager::media::mp4::BoxBufferinline
+ + + + diff --git a/sdk/d1/d08/segmenter_8cc_source.html b/sdk/d1/d08/segmenter_8cc_source.html new file mode 100644 index 0000000000..d1136248b0 --- /dev/null +++ b/sdk/d1/d08/segmenter_8cc_source.html @@ -0,0 +1,552 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/segmenter.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
segmenter.cc
+
+
+
1 // Copyright 2014 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/formats/mp4/segmenter.h"
+
8 
+
9 #include <algorithm>
+
10 
+
11 #include "packager/base/stl_util.h"
+
12 #include "packager/media/base/buffer_writer.h"
+
13 #include "packager/media/base/key_source.h"
+
14 #include "packager/media/base/media_sample.h"
+
15 #include "packager/media/base/media_stream.h"
+
16 #include "packager/media/base/muxer_options.h"
+
17 #include "packager/media/base/video_stream_info.h"
+
18 #include "packager/media/event/muxer_listener.h"
+
19 #include "packager/media/event/progress_listener.h"
+
20 #include "packager/media/formats/mp4/box_definitions.h"
+
21 #include "packager/media/formats/mp4/key_rotation_fragmenter.h"
+
22 
+
23 namespace edash_packager {
+
24 namespace media {
+
25 namespace mp4 {
+
26 
+
27 namespace {
+
28 
+
29 // Generate 64bit IV by default.
+
30 const size_t kDefaultIvSize = 8u;
+
31 const size_t kCencKeyIdSize = 16u;
+
32 
+
33 // The version of cenc implemented here. CENC 4.
+
34 const int kCencSchemeVersion = 0x00010000;
+
35 
+
36 // The default KID for key rotation is all 0s.
+
37 const uint8_t kKeyRotationDefaultKeyId[] = {
+
38  0, 0, 0, 0, 0, 0, 0, 0,
+
39  0, 0, 0, 0, 0, 0, 0, 0
+
40 };
+
41 COMPILE_ASSERT(arraysize(kKeyRotationDefaultKeyId) == kCencKeyIdSize,
+
42  cenc_key_id_must_be_size_16);
+
43 
+
44 uint64_t Rescale(uint64_t time_in_old_scale,
+
45  uint32_t old_scale,
+
46  uint32_t new_scale) {
+
47  return static_cast<double>(time_in_old_scale) / old_scale * new_scale;
+
48 }
+
49 
+
50 void GenerateSinf(const EncryptionKey& encryption_key,
+
51  FourCC old_type,
+
52  ProtectionSchemeInfo* sinf) {
+
53  sinf->format.format = old_type;
+
54  sinf->type.type = FOURCC_CENC;
+
55  sinf->type.version = kCencSchemeVersion;
+
56  sinf->info.track_encryption.is_encrypted = true;
+
57  sinf->info.track_encryption.default_iv_size =
+
58  encryption_key.iv.empty() ? kDefaultIvSize : encryption_key.iv.size();
+
59  sinf->info.track_encryption.default_kid = encryption_key.key_id;
+
60 }
+
61 
+
62 void GenerateEncryptedSampleEntry(const EncryptionKey& encryption_key,
+
63  double clear_lead_in_seconds,
+
64  SampleDescription* description) {
+
65  DCHECK(description);
+
66  if (description->type == kVideo) {
+
67  DCHECK_EQ(1u, description->video_entries.size());
+
68 
+
69  // Add a second entry for clear content if needed.
+
70  if (clear_lead_in_seconds > 0)
+
71  description->video_entries.push_back(description->video_entries[0]);
+
72 
+
73  // Convert the first entry to an encrypted entry.
+
74  VideoSampleEntry& entry = description->video_entries[0];
+
75  GenerateSinf(encryption_key, entry.format, &entry.sinf);
+
76  entry.format = FOURCC_ENCV;
+
77  } else {
+
78  DCHECK_EQ(kAudio, description->type);
+
79  DCHECK_EQ(1u, description->audio_entries.size());
+
80 
+
81  // Add a second entry for clear content if needed.
+
82  if (clear_lead_in_seconds > 0)
+
83  description->audio_entries.push_back(description->audio_entries[0]);
+
84 
+
85  // Convert the first entry to an encrypted entry.
+
86  AudioSampleEntry& entry = description->audio_entries[0];
+
87  GenerateSinf(encryption_key, entry.format, &entry.sinf);
+
88  entry.format = FOURCC_ENCA;
+
89  }
+
90 }
+
91 
+
92 uint8_t GetNaluLengthSize(const StreamInfo& stream_info) {
+
93  if (stream_info.stream_type() != kStreamVideo)
+
94  return 0;
+
95  const VideoStreamInfo& video_stream_info =
+
96  static_cast<const VideoStreamInfo&>(stream_info);
+
97  return video_stream_info.nalu_length_size();
+
98 }
+
99 
+
100 KeySource::TrackType GetTrackTypeForEncryption(const StreamInfo& stream_info,
+
101  uint32_t max_sd_pixels) {
+
102  if (stream_info.stream_type() == kStreamAudio)
+
103  return KeySource::TRACK_TYPE_AUDIO;
+
104 
+
105  DCHECK_EQ(kStreamVideo, stream_info.stream_type());
+
106  const VideoStreamInfo& video_stream_info =
+
107  static_cast<const VideoStreamInfo&>(stream_info);
+
108  uint32_t pixels = video_stream_info.width() * video_stream_info.height();
+
109  return (pixels > max_sd_pixels) ? KeySource::TRACK_TYPE_HD
+
110  : KeySource::TRACK_TYPE_SD;
+
111 }
+
112 
+
113 } // namespace
+
114 
+
115 Segmenter::Segmenter(const MuxerOptions& options,
+
116  scoped_ptr<FileType> ftyp,
+
117  scoped_ptr<Movie> moov)
+
118  : options_(options),
+
119  ftyp_(ftyp.Pass()),
+
120  moov_(moov.Pass()),
+
121  moof_(new MovieFragment()),
+
122  fragment_buffer_(new BufferWriter()),
+
123  sidx_(new SegmentIndex()),
+
124  muxer_listener_(NULL),
+
125  progress_listener_(NULL),
+
126  progress_target_(0),
+
127  accumulated_progress_(0),
+
128  sample_duration_(0u) {}
+
129 
+
130 Segmenter::~Segmenter() { STLDeleteElements(&fragmenters_); }
+
131 
+
132 Status Segmenter::Initialize(const std::vector<MediaStream*>& streams,
+
133  MuxerListener* muxer_listener,
+
134  ProgressListener* progress_listener,
+
135  KeySource* encryption_key_source,
+
136  uint32_t max_sd_pixels,
+
137  double clear_lead_in_seconds,
+
138  double crypto_period_duration_in_seconds) {
+
139  DCHECK_LT(0u, streams.size());
+
140  muxer_listener_ = muxer_listener;
+
141  progress_listener_ = progress_listener;
+
142  moof_->header.sequence_number = 0;
+
143 
+
144  moof_->tracks.resize(streams.size());
+
145  segment_durations_.resize(streams.size());
+
146  fragmenters_.resize(streams.size());
+
147  const bool key_rotation_enabled = crypto_period_duration_in_seconds != 0;
+
148  const bool kInitialEncryptionInfo = true;
+
149 
+
150  for (uint32_t i = 0; i < streams.size(); ++i) {
+
151  stream_map_[streams[i]] = i;
+
152  moof_->tracks[i].header.track_id = i + 1;
+
153  if (streams[i]->info()->stream_type() == kStreamVideo) {
+
154  // Use the first video stream as the reference stream (which is 1-based).
+
155  if (sidx_->reference_id == 0)
+
156  sidx_->reference_id = i + 1;
+
157  }
+
158  if (!encryption_key_source) {
+
159  fragmenters_[i] = new Fragmenter(&moof_->tracks[i]);
+
160  continue;
+
161  }
+
162 
+
163  uint8_t nalu_length_size = GetNaluLengthSize(*streams[i]->info());
+
164  KeySource::TrackType track_type =
+
165  GetTrackTypeForEncryption(*streams[i]->info(), max_sd_pixels);
+
166  SampleDescription& description =
+
167  moov_->tracks[i].media.information.sample_table.description;
+
168 
+
169  if (key_rotation_enabled) {
+
170  // Fill encrypted sample entry with default key.
+
171  EncryptionKey encryption_key;
+
172  encryption_key.key_id.assign(
+
173  kKeyRotationDefaultKeyId,
+
174  kKeyRotationDefaultKeyId + arraysize(kKeyRotationDefaultKeyId));
+
175  GenerateEncryptedSampleEntry(encryption_key, clear_lead_in_seconds,
+
176  &description);
+
177  if (muxer_listener_) {
+
178  muxer_listener_->OnEncryptionInfoReady(
+
179  kInitialEncryptionInfo, encryption_key_source->UUID(),
+
180  encryption_key_source->SystemName(), encryption_key.key_id,
+
181  std::vector<uint8_t>());
+
182  }
+
183 
+
184  fragmenters_[i] = new KeyRotationFragmenter(
+
185  moof_.get(),
+
186  &moof_->tracks[i],
+
187  encryption_key_source,
+
188  track_type,
+
189  crypto_period_duration_in_seconds * streams[i]->info()->time_scale(),
+
190  clear_lead_in_seconds * streams[i]->info()->time_scale(),
+
191  nalu_length_size,
+
192  muxer_listener_);
+
193  continue;
+
194  }
+
195 
+
196  scoped_ptr<EncryptionKey> encryption_key(new EncryptionKey());
+
197  Status status =
+
198  encryption_key_source->GetKey(track_type, encryption_key.get());
+
199  if (!status.ok())
+
200  return status;
+
201 
+
202  GenerateEncryptedSampleEntry(*encryption_key, clear_lead_in_seconds,
+
203  &description);
+
204 
+
205  // One and only one pssh box is needed.
+
206  if (moov_->pssh.empty()) {
+
207  moov_->pssh.resize(1);
+
208  moov_->pssh[0].raw_box = encryption_key->pssh;
+
209 
+
210  // Also only one default key id.
+
211  if (muxer_listener_) {
+
212  muxer_listener_->OnEncryptionInfoReady(
+
213  kInitialEncryptionInfo,
+
214  encryption_key_source->UUID(), encryption_key_source->SystemName(),
+
215  encryption_key->key_id, encryption_key->pssh);
+
216  }
+
217  }
+
218 
+
219  fragmenters_[i] = new EncryptingFragmenter(
+
220  &moof_->tracks[i],
+
221  encryption_key.Pass(),
+
222  clear_lead_in_seconds * streams[i]->info()->time_scale(),
+
223  nalu_length_size);
+
224  }
+
225 
+
226  // Choose the first stream if there is no VIDEO.
+
227  if (sidx_->reference_id == 0)
+
228  sidx_->reference_id = 1;
+
229  sidx_->timescale = streams[GetReferenceStreamId()]->info()->time_scale();
+
230 
+
231  // Use media duration as progress target.
+
232  progress_target_ = streams[GetReferenceStreamId()]->info()->duration();
+
233 
+
234  // Use the reference stream's time scale as movie time scale.
+
235  moov_->header.timescale = sidx_->timescale;
+
236  moof_->header.sequence_number = 1;
+
237  return DoInitialize();
+
238 }
+
239 
+ +
241  for (std::vector<Fragmenter*>::iterator it = fragmenters_.begin();
+
242  it != fragmenters_.end();
+
243  ++it) {
+
244  Status status = FinalizeFragment(true, *it);
+
245  if (!status.ok())
+
246  return status;
+
247  }
+
248 
+
249  // Set tracks and moov durations.
+
250  // Note that the updated moov box will be written to output file for VOD case
+
251  // only.
+
252  for (std::vector<Track>::iterator track = moov_->tracks.begin();
+
253  track != moov_->tracks.end();
+
254  ++track) {
+
255  track->header.duration = Rescale(track->media.header.duration,
+
256  track->media.header.timescale,
+
257  moov_->header.timescale);
+
258  if (track->header.duration > moov_->header.duration)
+
259  moov_->header.duration = track->header.duration;
+
260  }
+
261  moov_->extends.header.fragment_duration = moov_->header.duration;
+
262 
+
263  return DoFinalize();
+
264 }
+
265 
+ +
267  scoped_refptr<MediaSample> sample) {
+
268  // Find the fragmenter for this stream.
+
269  DCHECK(stream);
+
270  DCHECK(stream_map_.find(stream) != stream_map_.end());
+
271  uint32_t stream_id = stream_map_[stream];
+
272  Fragmenter* fragmenter = fragmenters_[stream_id];
+
273 
+
274  // Set default sample duration if it has not been set yet.
+
275  if (moov_->extends.tracks[stream_id].default_sample_duration == 0) {
+
276  moov_->extends.tracks[stream_id].default_sample_duration =
+
277  sample->duration();
+
278  }
+
279 
+
280  if (fragmenter->fragment_finalized()) {
+
281  return Status(error::FRAGMENT_FINALIZED,
+
282  "Current fragment is finalized already.");
+
283  }
+
284 
+
285  bool finalize_fragment = false;
+
286  if (fragmenter->fragment_duration() >=
+
287  options_.fragment_duration * stream->info()->time_scale()) {
+
288  if (sample->is_key_frame() || !options_.fragment_sap_aligned) {
+
289  finalize_fragment = true;
+
290  }
+
291  }
+
292  bool finalize_segment = false;
+
293  if (segment_durations_[stream_id] >=
+
294  options_.segment_duration * stream->info()->time_scale()) {
+
295  if (sample->is_key_frame() || !options_.segment_sap_aligned) {
+
296  finalize_segment = true;
+
297  finalize_fragment = true;
+
298  }
+
299  }
+
300 
+
301  Status status;
+
302  if (finalize_fragment) {
+
303  status = FinalizeFragment(finalize_segment, fragmenter);
+
304  if (!status.ok())
+
305  return status;
+
306  }
+
307 
+
308  status = fragmenter->AddSample(sample);
+
309  if (!status.ok())
+
310  return status;
+
311 
+
312  if (sample_duration_ == 0)
+
313  sample_duration_ = sample->duration();
+
314  moov_->tracks[stream_id].media.header.duration += sample->duration();
+
315  segment_durations_[stream_id] += sample->duration();
+
316  DCHECK_GE(segment_durations_[stream_id], fragmenter->fragment_duration());
+
317  return Status::OK;
+
318 }
+
319 
+
320 uint32_t Segmenter::GetReferenceTimeScale() const {
+
321  return moov_->header.timescale;
+
322 }
+
323 
+
324 double Segmenter::GetDuration() const {
+
325  if (moov_->header.timescale == 0) {
+
326  // Handling the case where this is not properly initialized.
+
327  return 0.0;
+
328  }
+
329 
+
330  return static_cast<double>(moov_->header.duration) / moov_->header.timescale;
+
331 }
+
332 
+
333 void Segmenter::UpdateProgress(uint64_t progress) {
+
334  accumulated_progress_ += progress;
+
335 
+
336  if (!progress_listener_) return;
+
337  if (progress_target_ == 0) return;
+
338  // It might happen that accumulated progress exceeds progress_target due to
+
339  // computation errors, e.g. rounding error. Cap it so it never reports > 100%
+
340  // progress.
+
341  if (accumulated_progress_ >= progress_target_) {
+
342  progress_listener_->OnProgress(1.0);
+
343  } else {
+
344  progress_listener_->OnProgress(static_cast<double>(accumulated_progress_) /
+
345  progress_target_);
+
346  }
+
347 }
+
348 
+ +
350  if (!progress_listener_) return;
+
351  progress_listener_->OnProgress(1.0);
+
352 }
+
353 
+
354 Status Segmenter::FinalizeSegment() {
+
355  Status status = DoFinalizeSegment();
+
356 
+
357  // Reset segment information to initial state.
+
358  sidx_->references.clear();
+
359  std::vector<uint64_t>::iterator it = segment_durations_.begin();
+
360  for (; it != segment_durations_.end(); ++it)
+
361  *it = 0;
+
362 
+
363  return status;
+
364 }
+
365 
+
366 uint32_t Segmenter::GetReferenceStreamId() {
+
367  DCHECK(sidx_);
+
368  return sidx_->reference_id - 1;
+
369 }
+
370 
+
371 Status Segmenter::FinalizeFragment(bool finalize_segment,
+
372  Fragmenter* fragmenter) {
+
373  fragmenter->FinalizeFragment();
+
374 
+
375  // Check if all tracks are ready for fragmentation.
+
376  for (std::vector<Fragmenter*>::iterator it = fragmenters_.begin();
+
377  it != fragmenters_.end();
+
378  ++it) {
+
379  if (!(*it)->fragment_finalized())
+
380  return Status::OK;
+
381  }
+
382 
+
383  MediaData mdat;
+
384  // Fill in data offsets. Data offset base is moof size + mdat box size.
+
385  // (mdat is still empty, mdat size is the same as mdat box size).
+
386  uint64_t base = moof_->ComputeSize() + mdat.ComputeSize();
+
387  for (size_t i = 0; i < moof_->tracks.size(); ++i) {
+
388  TrackFragment& traf = moof_->tracks[i];
+
389  Fragmenter* fragmenter = fragmenters_[i];
+
390  if (fragmenter->aux_data()->Size() > 0) {
+
391  traf.auxiliary_offset.offsets[0] += base;
+
392  base += fragmenter->aux_data()->Size();
+
393  }
+
394  traf.runs[0].data_offset += base;
+
395  base += fragmenter->data()->Size();
+
396  }
+
397 
+
398  // Generate segment reference.
+
399  sidx_->references.resize(sidx_->references.size() + 1);
+
400  fragmenters_[GetReferenceStreamId()]->GenerateSegmentReference(
+
401  &sidx_->references[sidx_->references.size() - 1]);
+
402  sidx_->references[sidx_->references.size() - 1].referenced_size = base;
+
403 
+
404  // Write the fragment to buffer.
+
405  moof_->Write(fragment_buffer_.get());
+
406 
+
407  for (size_t i = 0; i < moof_->tracks.size(); ++i) {
+
408  Fragmenter* fragmenter = fragmenters_[i];
+
409  mdat.data_size =
+
410  fragmenter->aux_data()->Size() + fragmenter->data()->Size();
+
411  mdat.Write(fragment_buffer_.get());
+
412  if (fragmenter->aux_data()->Size()) {
+
413  fragment_buffer_->AppendBuffer(*fragmenter->aux_data());
+
414  }
+
415  fragment_buffer_->AppendBuffer(*fragmenter->data());
+
416  }
+
417 
+
418  // Increase sequence_number for next fragment.
+
419  ++moof_->header.sequence_number;
+
420 
+
421  if (finalize_segment)
+
422  return FinalizeSegment();
+
423 
+
424  return Status::OK;
+
425 }
+
426 
+
427 } // namespace mp4
+
428 } // namespace media
+
429 } // namespace edash_packager
+ +
virtual Status GetKey(TrackType track_type, EncryptionKey *key)
Definition: key_source.cc:46
+ + + + + + +
This class listens to progress updates events.
+
EncryptingFragmenter generates MP4 fragments with sample encrypted.
+ +
virtual Status AddSample(scoped_refptr< MediaSample > sample)
Definition: fragmenter.cc:36
+
Status AddSample(const MediaStream *stream, scoped_refptr< MediaSample > sample)
Definition: segmenter.cc:266
+ +
virtual std::string UUID()
Definition: key_source.cc:92
+ +
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:29
+ +
virtual void OnProgress(double progress)=0
+
void UpdateProgress(uint64_t progress)
Update segmentation progress using ProgressListener.
Definition: segmenter.cc:333
+
Status Initialize(const std::vector< MediaStream * > &streams, MuxerListener *muxer_listener, ProgressListener *progress_listener, KeySource *encryption_key_source, uint32_t max_sd_pixels, double clear_lead_in_seconds, double crypto_period_duration_in_seconds)
Definition: segmenter.cc:132
+
void SetComplete()
Set progress to 100%.
Definition: segmenter.cc:349
+
virtual std::string SystemName()
Definition: key_source.cc:96
+ + +
+ + + + diff --git a/sdk/d1/d13/status_8h_source.html b/sdk/d1/d13/status_8h_source.html new file mode 100644 index 0000000000..ed692f5765 --- /dev/null +++ b/sdk/d1/d13/status_8h_source.html @@ -0,0 +1,248 @@ + + + + + + +DASH Media Packaging SDK: media/base/status.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
status.h
+
+
+
1 // Copyright 2014 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_BASE_STATUS_H_
+
8 #define MEDIA_BASE_STATUS_H_
+
9 
+
10 #include <string>
+
11 
+
12 #include "packager/base/logging.h"
+
13 
+
14 namespace edash_packager {
+
15 namespace media {
+
16 
+
17 namespace error {
+
18 
+
20 enum Code {
+
21  // Not an error; returned on success
+
22  OK,
+
23 
+
24  // Unknown error. An example of where this error may be returned is
+
25  // errors raised by APIs that do not return enough error information
+
26  // may be converted to this error.
+
27  UNKNOWN,
+
28 
+
29  // The operation was cancelled (typically by the caller).
+
30  CANCELLED,
+
31 
+
32  // Client specified an invalid argument. INVALID_ARGUMENT indicates
+
33  // arguments that are problematic regardless of the state of the system
+
34  // (e.g. a malformed file name).
+
35  INVALID_ARGUMENT,
+
36 
+
37  // Operation is not implemented or not supported/enabled.
+
38  UNIMPLEMENTED,
+
39 
+
40  // Cannot open file.
+
41  FILE_FAILURE,
+
42 
+
43  // End of stream.
+
44  END_OF_STREAM,
+
45 
+
46  // Failure to get HTTP response successfully,
+
47  HTTP_FAILURE,
+
48 
+
49  // Unable to parse the media file.
+
50  PARSER_FAILURE,
+
51 
+
52  // Fail to mux the media file.
+
53  MUXER_FAILURE,
+
54 
+
55  // This track fragment is finalized.
+
56  FRAGMENT_FINALIZED,
+
57 
+
58  // Server errors. Receives malformed response from server.
+
59  SERVER_ERROR,
+
60 
+
61  // Internal errors. Some invariants have been broken.
+
62  INTERNAL_ERROR,
+
63 
+
64  // The operation was stopped.
+
65  STOPPED,
+
66 
+
67  // The operation timed out.
+
68  TIME_OUT,
+
69 
+
70  // Value was not found.
+
71  NOT_FOUND,
+
72 };
+
73 
+
74 } // namespace error
+
75 
+
76 class Status {
+
77  public:
+
79  Status() : error_code_(error::OK) {}
+
80 
+
84  Status(error::Code error_code, const std::string& error_message)
+
85  : error_code_(error_code) {
+
86  if (!ok())
+
87  error_message_ = error_message;
+
88  }
+
89 
+
90  ~Status() {}
+
91 
+
94  static const Status& OK; // Identical to 0-arg constructor.
+
95  static const Status& UNKNOWN;
+
97 
+
101  void SetError(error::Code error_code, const std::string& error_message) {
+
102  if (error_code == error::OK) {
+
103  Clear();
+
104  } else {
+
105  error_code_ = error_code;
+
106  error_message_ = error_message;
+
107  }
+
108  }
+
109 
+
118  void Update(const Status& new_status) {
+
119  if (ok())
+
120  *this = new_status;
+
121  }
+
122 
+
124  void Clear() {
+
125  error_code_ = error::OK;
+
126  error_message_ = "";
+
127  }
+
128 
+
129  bool ok() const { return error_code_ == error::OK; }
+
130  error::Code error_code() const { return error_code_; }
+
131  const std::string& error_message() const { return error_message_; }
+
132 
+
133  bool operator==(const Status& x) const {
+
134  return error_code_ == x.error_code() && error_message_ == x.error_message();
+
135  }
+
136  bool operator!=(const Status& x) const { return !(*this == x); }
+
137 
+
141  bool Matches(const Status& x) const { return error_code_ == x.error_code(); }
+
142 
+
144  std::string ToString() const;
+
145 
+
146  void Swap(Status* other) {
+
147  error::Code error_code = error_code_;
+
148  error_code_ = other->error_code_;
+
149  other->error_code_ = error_code;
+
150  error_message_.swap(other->error_message_);
+
151  }
+
152 
+
153  private:
+
154  error::Code error_code_;
+
155  std::string error_message_;
+
156 
+
157  // Not using DISALLOW_COPY_AND_ASSIGN here intentionally to allow the compiler
+
158  // generated copy constructor and assignment operator.
+
159 };
+
160 
+
161 extern std::ostream& operator<<(std::ostream& os, const Status& x);
+
162 
+
163 } // namespace media
+
164 } // namespace edash_packager
+
165 
+
166 #endif // MEDIA_BASE_STATUS_H_
+ +
void Update(const Status &new_status)
Definition: status.h:118
+
Status()
Creates a "successful" status.
Definition: status.h:79
+
void Clear()
Clear this status object to contain the OK code and no error message.
Definition: status.h:124
+
Status(error::Code error_code, const std::string &error_message)
Definition: status.h:84
+
void SetError(error::Code error_code, const std::string &error_message)
Definition: status.h:101
+
std::string ToString() const
Definition: status.cc:59
+
bool Matches(const Status &x) const
Definition: status.h:141
+
+ + + + diff --git a/sdk/d1/d16/structedash__packager_1_1xml_1_1XmlDeleter-members.html b/sdk/d1/d16/structedash__packager_1_1xml_1_1XmlDeleter-members.html new file mode 100644 index 0000000000..02a01922fa --- /dev/null +++ b/sdk/d1/d16/structedash__packager_1_1xml_1_1XmlDeleter-members.html @@ -0,0 +1,110 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::xml::XmlDeleter Member List
+
+
+ +

This is the complete list of members for edash_packager::xml::XmlDeleter, including all inherited members.

+ + + + + + + +
operator()(xmlSchemaParserCtxtPtr ptr) const (defined in edash_packager::xml::XmlDeleter)edash_packager::xml::XmlDeleterinline
operator()(xmlSchemaValidCtxtPtr ptr) const (defined in edash_packager::xml::XmlDeleter)edash_packager::xml::XmlDeleterinline
operator()(xmlSchemaPtr ptr) const (defined in edash_packager::xml::XmlDeleter)edash_packager::xml::XmlDeleterinline
operator()(xmlNodePtr ptr) const (defined in edash_packager::xml::XmlDeleter)edash_packager::xml::XmlDeleterinline
operator()(xmlDocPtr ptr) const (defined in edash_packager::xml::XmlDeleter)edash_packager::xml::XmlDeleterinline
operator()(xmlChar *ptr) const (defined in edash_packager::xml::XmlDeleter)edash_packager::xml::XmlDeleterinline
+ + + + diff --git a/sdk/d1/d1d/muxer__flags_8cc_source.html b/sdk/d1/d1d/muxer__flags_8cc_source.html new file mode 100644 index 0000000000..71c715d33c --- /dev/null +++ b/sdk/d1/d1d/muxer__flags_8cc_source.html @@ -0,0 +1,151 @@ + + + + + + +DASH Media Packaging SDK: app/muxer_flags.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
muxer_flags.cc
+
+
+
1 // Copyright 2014 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 // Defines Muxer flags.
+
8 
+
9 #include "packager/app/muxer_flags.h"
+
10 
+
11 DEFINE_string(profile,
+
12  "",
+
13  "Specify the target DASH profile: on-demand or live. This will "
+
14  "set proper option values to ensure conformance to the desired "
+
15  "profile.");
+
16 DEFINE_double(clear_lead,
+
17  10.0f,
+
18  "Clear lead in seconds if encryption is enabled.");
+
19 DEFINE_bool(single_segment,
+
20  true,
+
21  "Generate a single segment for the media presentation. This option "
+
22  "should be set for on demand profile.");
+
23 DEFINE_double(segment_duration,
+
24  10.0f,
+
25  "Segment duration in seconds. If single_segment is specified, "
+
26  "this parameter sets the duration of a subsegment; otherwise, "
+
27  "this parameter sets the duration of a segment. Actual segment "
+
28  "durations may not be exactly as requested.");
+
29 DEFINE_bool(segment_sap_aligned,
+
30  true,
+
31  "Force segments to begin with stream access points.");
+
32 DEFINE_double(fragment_duration,
+
33  10.0f,
+
34  "Fragment duration in seconds. Should not be larger than "
+
35  "the segment duration. Actual fragment durations may not be "
+
36  "exactly as requested.");
+
37 DEFINE_bool(fragment_sap_aligned,
+
38  true,
+
39  "Force fragments to begin with stream access points. This flag "
+
40  "implies segment_sap_aligned.");
+
41 DEFINE_int32(num_subsegments_per_sidx,
+
42  1,
+
43  "For ISO BMFF only. Set the number of subsegments in each "
+
44  "SIDX box. If 0, a single SIDX box is used per segment; if "
+
45  "-1, no SIDX box is used; Otherwise, the muxer packs N "
+
46  "subsegments in the root SIDX of the segment, with "
+
47  "segment_duration/N/fragment_duration fragments per "
+
48  "subsegment.");
+
49 DEFINE_string(temp_dir,
+
50  "",
+
51  "Specify a directory in which to store temporary (intermediate) "
+
52  " files. Used only if single_segment=true.");
+
53 
+
+ + + + diff --git a/sdk/d1/d27/key__fetcher_8h_source.html b/sdk/d1/d27/key__fetcher_8h_source.html new file mode 100644 index 0000000000..74370b13f8 --- /dev/null +++ b/sdk/d1/d27/key__fetcher_8h_source.html @@ -0,0 +1,134 @@ + + + + + + +DASH Media Packaging SDK: media/base/key_fetcher.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
key_fetcher.h
+
+
+
1 // Copyright 2014 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_BASE_KEY_FETCHER_H_
+
8 #define MEDIA_BASE_KEY_FETCHER_H_
+
9 
+
10 #include "base/macros.h"
+
11 #include "packager/media/base/status.h"
+
12 
+
13 namespace edash_packager {
+
14 namespace media {
+
15 
+
17 class KeyFetcher {
+
18  public:
+
19  KeyFetcher();
+
20  virtual ~KeyFetcher();
+
21 
+
28  virtual Status FetchKeys(const std::string& service_address,
+
29  const std::string& request,
+
30  std::string* response) = 0;
+
31 
+
32  private:
+
33  DISALLOW_COPY_AND_ASSIGN(KeyFetcher);
+
34 };
+
35 
+
36 } // namespace media
+
37 } // namespace edash_packager
+
38 
+
39 #endif // MEDIA_BASE_KEY_FETCHER_H_
+
40 
+
Base class for fetching keys from the license service.
Definition: key_fetcher.h:17
+ +
virtual Status FetchKeys(const std::string &service_address, const std::string &request, std::string *response)=0
+
+ + + + diff --git a/sdk/d1/d28/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator-members.html b/sdk/d1/d28/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator-members.html new file mode 100644 index 0000000000..91cb42cb94 --- /dev/null +++ b/sdk/d1/d28/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator-members.html @@ -0,0 +1,109 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::SyncSampleIterator Member List
+
+
+ +

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

+ + + + + + +
AdvanceSample()edash_packager::media::mp4::SyncSampleIterator
IsSyncSample() const edash_packager::media::mp4::SyncSampleIterator
IsSyncSample(uint32_t sample) const edash_packager::media::mp4::SyncSampleIterator
SyncSampleIterator(const SyncSample &sync_sample)edash_packager::media::mp4::SyncSampleIteratorexplicit
~SyncSampleIterator() (defined in edash_packager::media::mp4::SyncSampleIterator)edash_packager::media::mp4::SyncSampleIterator
+ + + + diff --git a/sdk/d1/d2a/structedash__packager_1_1media_1_1mp4_1_1TrackExtends-members.html b/sdk/d1/d2a/structedash__packager_1_1media_1_1mp4_1_1TrackExtends-members.html new file mode 100644 index 0000000000..6e9e9313c0 --- /dev/null +++ b/sdk/d1/d2a/structedash__packager_1_1media_1_1mp4_1_1TrackExtends-members.html @@ -0,0 +1,123 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::TrackExtends Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::TrackExtends)edash_packager::media::mp4::TrackExtendsvirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::TrackExtendsvirtual
default_sample_description_index (defined in edash_packager::media::mp4::TrackExtends)edash_packager::media::mp4::TrackExtends
default_sample_duration (defined in edash_packager::media::mp4::TrackExtends)edash_packager::media::mp4::TrackExtends
default_sample_flags (defined in edash_packager::media::mp4::TrackExtends)edash_packager::media::mp4::TrackExtends
default_sample_size (defined in edash_packager::media::mp4::TrackExtends)edash_packager::media::mp4::TrackExtends
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::TrackExtendsvirtual
track_id (defined in edash_packager::media::mp4::TrackExtends)edash_packager::media::mp4::TrackExtends
TrackExtends() (defined in edash_packager::media::mp4::TrackExtends)edash_packager::media::mp4::TrackExtends
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~TrackExtends() (defined in edash_packager::media::mp4::TrackExtends)edash_packager::media::mp4::TrackExtendsvirtual
+ + + + diff --git a/sdk/d1/d37/es__parser__h264_8h_source.html b/sdk/d1/d37/es__parser__h264_8h_source.html new file mode 100644 index 0000000000..4991c534d9 --- /dev/null +++ b/sdk/d1/d37/es__parser__h264_8h_source.html @@ -0,0 +1,211 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp2t/es_parser_h264.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
es_parser_h264.h
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_FORMATS_MP2T_ES_PARSER_H264_H_
+
6 #define MEDIA_FORMATS_MP2T_ES_PARSER_H264_H_
+
7 
+
8 #include <stdint.h>
+
9 
+
10 #include <list>
+
11 #include <utility>
+
12 
+
13 #include "packager/base/callback.h"
+
14 #include "packager/base/compiler_specific.h"
+
15 #include "packager/base/memory/scoped_ptr.h"
+
16 #include "packager/media/formats/mp2t/es_parser.h"
+
17 
+
18 namespace edash_packager {
+
19 namespace media {
+
20 
+
21 class H264ByteToUnitStreamConverter;
+
22 class H264Parser;
+
23 class OffsetByteQueue;
+
24 struct H264SPS;
+
25 
+
26 namespace mp2t {
+
27 
+
28 // Remark:
+
29 // In this h264 parser, frame splitting is based on AUD nals.
+
30 // Mpeg2 TS spec: "2.14 Carriage of Rec. ITU-T H.264 | ISO/IEC 14496-10 video"
+
31 // "Each AVC access unit shall contain an access unit delimiter NAL Unit;"
+
32 //
+
33 class EsParserH264 : public EsParser {
+
34  public:
+
35  EsParserH264(uint32_t pid,
+
36  const NewStreamInfoCB& new_stream_info_cb,
+
37  const EmitSampleCB& emit_sample_cb);
+
38  virtual ~EsParserH264();
+
39 
+
40  // EsParser implementation overrides.
+
41  virtual bool Parse(const uint8_t* buf,
+
42  int size,
+
43  int64_t pts,
+
44  int64_t dts) OVERRIDE;
+
45  virtual void Flush() OVERRIDE;
+
46  virtual void Reset() OVERRIDE;
+
47 
+
48  private:
+
49  struct TimingDesc {
+
50  int64_t dts;
+
51  int64_t pts;
+
52  };
+
53 
+
54  // Find the AUD located at or after |*stream_pos|.
+
55  // Return true if an AUD is found.
+
56  // If found, |*stream_pos| corresponds to the position of the AUD start code
+
57  // in the stream. Otherwise, |*stream_pos| corresponds to the last position
+
58  // of the start code parser.
+
59  bool FindAUD(int64_t* stream_pos);
+
60 
+
61  // Resumes the H264 ES parsing.
+
62  // Return true if successful.
+
63  bool ParseInternal();
+
64 
+
65  // Emit a frame whose position in the ES queue starts at |access_unit_pos|.
+
66  // Returns true if successful, false if no PTS is available for the frame.
+
67  bool EmitFrame(int64_t access_unit_pos,
+
68  int access_unit_size,
+
69  bool is_key_frame,
+
70  int pps_id);
+
71 
+
72  // Update the video decoder config based on an H264 SPS.
+
73  // Return true if successful.
+
74  bool UpdateVideoDecoderConfig(const H264SPS* sps);
+
75 
+
76  // Callbacks to pass the stream configuration and the frames.
+
77  NewStreamInfoCB new_stream_info_cb_;
+
78  EmitSampleCB emit_sample_cb_;
+
79 
+
80  // Bytes of the ES stream that have not been emitted yet.
+
81  scoped_ptr<media::OffsetByteQueue> es_queue_;
+
82  std::list<std::pair<int64_t, TimingDesc> > timing_desc_list_;
+
83 
+
84  // H264 parser state.
+
85  // - |current_access_unit_pos_| is pointing to an annexB syncword
+
86  // representing the first NALU of an H264 access unit.
+
87  scoped_ptr<H264Parser> h264_parser_;
+
88  int64_t current_access_unit_pos_;
+
89  int64_t next_access_unit_pos_;
+
90 
+
91  // Filter to convert H.264 Annex B byte stream to unit stream.
+
92  scoped_ptr<H264ByteToUnitStreamConverter> stream_converter_;
+
93 
+
94  // Last video decoder config.
+
95  scoped_refptr<StreamInfo> last_video_decoder_config_;
+
96  bool decoder_config_check_pending_;
+
97 
+
98  // Frame for which we do not yet have a duration.
+
99  scoped_refptr<MediaSample> pending_sample_;
+
100  uint64_t pending_sample_duration_;
+
101 
+
102  // Indicates whether waiting for first key frame.
+
103  bool waiting_for_key_frame_;
+
104 };
+
105 
+
106 } // namespace mp2t
+
107 } // namespace media
+
108 } // namespace edash_packager
+
109 
+
110 #endif
+ + + +
+ + + + diff --git a/sdk/d1/d38/classedash__packager_1_1MockRepresentation-members.html b/sdk/d1/d38/classedash__packager_1_1MockRepresentation-members.html new file mode 100644 index 0000000000..680016d07a --- /dev/null +++ b/sdk/d1/d38/classedash__packager_1_1MockRepresentation-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::MockRepresentation Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
AddContentProtectionElement(const ContentProtectionElement &element)edash_packager::Representationvirtual
AddNewSegment(uint64_t start_time, uint64_t duration, uint64_t size)edash_packager::Representationvirtual
GetXml()edash_packager::Representation
id() const edash_packager::Representationinline
Init()edash_packager::Representation
MOCK_METHOD1(AddContentProtectionElement, void(const ContentProtectionElement &element)) (defined in edash_packager::MockRepresentation)edash_packager::MockRepresentation
MOCK_METHOD1(SetSampleDuration, void(uint32_t sample_duration)) (defined in edash_packager::MockRepresentation)edash_packager::MockRepresentation
MOCK_METHOD2(UpdateContentProtectionPssh, void(const std::string &drm_uuid, const std::string &pssh)) (defined in edash_packager::MockRepresentation)edash_packager::MockRepresentation
MOCK_METHOD3(AddNewSegment, void(uint64_t start_time, uint64_t duration, uint64_t size)) (defined in edash_packager::MockRepresentation)edash_packager::MockRepresentation
MockRepresentation(uint32_t representation_id) (defined in edash_packager::MockRepresentation)edash_packager::MockRepresentationexplicit
Representation(const MediaInfo &media_info, const MpdOptions &mpd_options, uint32_t representation_id, scoped_ptr< RepresentationStateChangeListener > state_change_listener)edash_packager::Representationprotected
SetSampleDuration(uint32_t sample_duration)edash_packager::Representationvirtual
UpdateContentProtectionPssh(const std::string &drm_uuid, const std::string &pssh)edash_packager::Representationvirtual
~MockRepresentation() OVERRIDE (defined in edash_packager::MockRepresentation)edash_packager::MockRepresentationvirtual
~Representation() (defined in edash_packager::Representation)edash_packager::Representationvirtual
+ + + + diff --git a/sdk/d1/d3b/mpd__generator__flags_8h_source.html b/sdk/d1/d3b/mpd__generator__flags_8h_source.html new file mode 100644 index 0000000000..2d768e3fd5 --- /dev/null +++ b/sdk/d1/d3b/mpd__generator__flags_8h_source.html @@ -0,0 +1,116 @@ + + + + + + +DASH Media Packaging SDK: app/mpd_generator_flags.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mpd_generator_flags.h
+
+
+
1 // Copyright 2014 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 APP_MPD_GENERATOR_FLAGS_H_
+
8 #define APP_MPD_GENERATOR_FLAGS_H_
+
9 
+
10 #include <gflags/gflags.h>
+
11 
+
12 DEFINE_string(input, "", "Comma separated list of MediaInfo input files.");
+
13 DEFINE_string(output, "", "MPD output file name.");
+
14 DEFINE_string(base_urls,
+
15  "",
+
16  "Comma separated BaseURLs for the MPD. The values will be added "
+
17  "as <BaseURL> element(s) immediately under the <MPD> element.");
+
18 #endif // APP_MPD_GENERATOR_FLAGS_H_
+
+ + + + diff --git a/sdk/d1/d45/decoding__time__iterator_8cc_source.html b/sdk/d1/d45/decoding__time__iterator_8cc_source.html new file mode 100644 index 0000000000..df11c5cd7f --- /dev/null +++ b/sdk/d1/d45/decoding__time__iterator_8cc_source.html @@ -0,0 +1,176 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/decoding_time_iterator.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
decoding_time_iterator.cc
+
+
+
1 // Copyright 2014 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/formats/mp4/decoding_time_iterator.h"
+
8 
+
9 #include <algorithm>
+
10 
+
11 #include "packager/base/logging.h"
+
12 
+
13 namespace edash_packager {
+
14 namespace media {
+
15 namespace mp4 {
+
16 
+ +
18  const DecodingTimeToSample& decoding_time_to_sample)
+
19  : sample_index_(0),
+
20  decoding_time_table_(decoding_time_to_sample.decoding_time),
+
21  iterator_(decoding_time_table_.begin()) {}
+
22 DecodingTimeIterator::~DecodingTimeIterator() {}
+
23 
+ +
25  ++sample_index_;
+
26  if (sample_index_ >= iterator_->sample_count) {
+
27  ++iterator_;
+
28  if (iterator_ == decoding_time_table_.end())
+
29  return false;
+
30  sample_index_ = 0;
+
31  }
+
32  return true;
+
33 }
+
34 
+ +
36  return iterator_ != decoding_time_table_.end() &&
+
37  sample_index_ < iterator_->sample_count;
+
38 }
+
39 
+
40 uint64_t DecodingTimeIterator::Duration(uint32_t start_sample,
+
41  uint32_t end_sample) const {
+
42  DCHECK_LE(start_sample, end_sample);
+
43  uint32_t current_sample = 0;
+
44  uint32_t prev_sample = 0;
+
45  uint64_t duration = 0;
+
46  std::vector<DecodingTime>::const_iterator it = decoding_time_table_.begin();
+
47  for (; it != decoding_time_table_.end(); ++it) {
+
48  current_sample += it->sample_count;
+
49  if (current_sample >= start_sample) {
+
50  duration += (std::min(end_sample, current_sample) -
+
51  std::max(start_sample, prev_sample + 1) + 1) *
+
52  it->sample_delta;
+
53  if (current_sample >= end_sample)
+
54  break;
+
55  }
+
56  prev_sample = current_sample;
+
57  }
+
58  return duration;
+
59 }
+
60 
+ +
62  uint32_t num_samples = 0;
+
63  std::vector<DecodingTime>::const_iterator it = decoding_time_table_.begin();
+
64  for (; it != decoding_time_table_.end(); ++it) {
+
65  num_samples += it->sample_count;
+
66  }
+
67  return num_samples;
+
68 }
+
69 
+
70 } // namespace mp4
+
71 } // namespace media
+
72 } // namespace edash_packager
+
DecodingTimeIterator(const DecodingTimeToSample &decoding_time_to_sample)
Create DecodingTimeIterator from decoding time to sample box.
+ + + + +
uint64_t Duration(uint32_t start_sample, uint32_t end_sample) const
+
+ + + + diff --git a/sdk/d1/d4b/classedash__packager_1_1media_1_1mp2t_1_1TsPacket.html b/sdk/d1/d4b/classedash__packager_1_1media_1_1mp2t_1_1TsPacket.html new file mode 100644 index 0000000000..9eb6a06067 --- /dev/null +++ b/sdk/d1/d4b/classedash__packager_1_1media_1_1mp2t_1_1TsPacket.html @@ -0,0 +1,153 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp2t::TsPacket Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp2t::TsPacket Class Reference
+
+
+ + + + + + + + + + + + + + + + +

+Public Member Functions

+bool payload_unit_start_indicator () const
 
+int pid () const
 
+int continuity_counter () const
 
+bool discontinuity_indicator () const
 
+bool random_access_indicator () const
 
+const uint8_t * payload () const
 
+int payload_size () const
 
+ + + + + +

+Static Public Member Functions

+static int Sync (const uint8_t *buf, int size)
 
+static TsPacketParse (const uint8_t *buf, int size)
 
+ + + +

+Static Public Attributes

+static const int kPacketSize = 188
 
+

Detailed Description

+
+

Definition at line 19 of file ts_packet.h.

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d1/d4d/h264__bit__reader_8cc_source.html b/sdk/d1/d4d/h264__bit__reader_8cc_source.html new file mode 100644 index 0000000000..151bdb6043 --- /dev/null +++ b/sdk/d1/d4d/h264__bit__reader_8cc_source.html @@ -0,0 +1,213 @@ + + + + + + +DASH Media Packaging SDK: media/filters/h264_bit_reader.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
h264_bit_reader.cc
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/base/logging.h"
+
6 #include "packager/media/filters/h264_bit_reader.h"
+
7 
+
8 namespace edash_packager {
+
9 namespace media {
+
10 
+
11 H264BitReader::H264BitReader()
+
12  : data_(NULL),
+
13  bytes_left_(0),
+
14  curr_byte_(0),
+
15  num_remaining_bits_in_curr_byte_(0),
+
16  prev_two_bytes_(0),
+
17  emulation_prevention_bytes_(0) {}
+
18 
+
19 H264BitReader::~H264BitReader() {}
+
20 
+
21 bool H264BitReader::Initialize(const uint8_t* data, off_t size) {
+
22  DCHECK(data);
+
23 
+
24  if (size < 1)
+
25  return false;
+
26 
+
27  data_ = data;
+
28  bytes_left_ = size;
+
29  num_remaining_bits_in_curr_byte_ = 0;
+
30  // Initially set to 0xffff to accept all initial two-byte sequences.
+
31  prev_two_bytes_ = 0xffff;
+
32  emulation_prevention_bytes_ = 0;
+
33 
+
34  return true;
+
35 }
+
36 
+
37 bool H264BitReader::UpdateCurrByte() {
+
38  if (bytes_left_ < 1)
+
39  return false;
+
40 
+
41  // Emulation prevention three-byte detection.
+
42  // If a sequence of 0x000003 is found, skip (ignore) the last byte (0x03).
+
43  if (*data_ == 0x03 && (prev_two_bytes_ & 0xffff) == 0) {
+
44  // Detected 0x000003, skip last byte.
+
45  ++data_;
+
46  --bytes_left_;
+
47  ++emulation_prevention_bytes_;
+
48  // Need another full three bytes before we can detect the sequence again.
+
49  prev_two_bytes_ = 0xffff;
+
50 
+
51  if (bytes_left_ < 1)
+
52  return false;
+
53  }
+
54 
+
55  // Load a new byte and advance pointers.
+
56  curr_byte_ = *data_++ & 0xff;
+
57  --bytes_left_;
+
58  num_remaining_bits_in_curr_byte_ = 8;
+
59 
+
60  prev_two_bytes_ = (prev_two_bytes_ << 8) | curr_byte_;
+
61 
+
62  return true;
+
63 }
+
64 
+
65 // Read |num_bits| (1 to 31 inclusive) from the stream and return them
+
66 // in |out|, with first bit in the stream as MSB in |out| at position
+
67 // (|num_bits| - 1).
+
68 bool H264BitReader::ReadBits(int num_bits, int* out) {
+
69  int bits_left = num_bits;
+
70  *out = 0;
+
71  DCHECK(num_bits <= 31);
+
72 
+
73  while (num_remaining_bits_in_curr_byte_ < bits_left) {
+
74  // Take all that's left in current byte, shift to make space for the rest.
+
75  *out |= (curr_byte_ << (bits_left - num_remaining_bits_in_curr_byte_));
+
76  bits_left -= num_remaining_bits_in_curr_byte_;
+
77 
+
78  if (!UpdateCurrByte())
+
79  return false;
+
80  }
+
81 
+
82  *out |= (curr_byte_ >> (num_remaining_bits_in_curr_byte_ - bits_left));
+
83  *out &= ((1 << num_bits) - 1);
+
84  num_remaining_bits_in_curr_byte_ -= bits_left;
+
85 
+
86  return true;
+
87 }
+
88 
+
89 off_t H264BitReader::NumBitsLeft() {
+
90  return (num_remaining_bits_in_curr_byte_ + bytes_left_ * 8);
+
91 }
+
92 
+
93 bool H264BitReader::HasMoreRBSPData() {
+
94  // Make sure we have more bits, if we are at 0 bits in current byte
+
95  // and updating current byte fails, we don't have more data anyway.
+
96  if (num_remaining_bits_in_curr_byte_ == 0 && !UpdateCurrByte())
+
97  return false;
+
98 
+
99  // On last byte?
+
100  if (bytes_left_)
+
101  return true;
+
102 
+
103  // Last byte, look for stop bit;
+
104  // We have more RBSP data if the last non-zero bit we find is not the
+
105  // first available bit.
+
106  return (curr_byte_ &
+
107  ((1 << (num_remaining_bits_in_curr_byte_ - 1)) - 1)) != 0;
+
108 }
+
109 
+
110 size_t H264BitReader::NumEmulationPreventionBytesRead() {
+
111  return emulation_prevention_bytes_;
+
112 }
+
113 
+
114 } // namespace media
+
115 } // namespace edash_packager
+
+ + + + diff --git a/sdk/d1/d5d/structedash__packager_1_1MpdOptions.html b/sdk/d1/d5d/structedash__packager_1_1MpdOptions.html new file mode 100644 index 0000000000..4646f03779 --- /dev/null +++ b/sdk/d1/d5d/structedash__packager_1_1MpdOptions.html @@ -0,0 +1,135 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::MpdOptions Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::MpdOptions Struct Reference
+
+
+ +

Defines Mpd Options. + More...

+ +

#include <mpd_options.h>

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

+Public Attributes

+double availability_time_offset
 
+double minimum_update_period
 
+double min_buffer_time
 
+double time_shift_buffer_depth
 
+double suggested_presentation_delay
 
+

Detailed Description

+

Defines Mpd Options.

+ +

Definition at line 13 of file mpd_options.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/sdk/d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html b/sdk/d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html new file mode 100644 index 0000000000..f2dacb1376 --- /dev/null +++ b/sdk/d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html @@ -0,0 +1,194 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::SampleToGroup Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::SampleToGroup Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::SampleToGroup:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + + + +

+Public Attributes

+uint32_t grouping_type
 
+uint32_t grouping_type_parameter
 
+std::vector< SampleToGroupEntryentries
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 507 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::SampleToGroup::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1700 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.png b/sdk/d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.png new file mode 100644 index 0000000000..2ff236be70 Binary files /dev/null and b/sdk/d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.png differ diff --git a/sdk/d1/d72/language__utils_8cc_source.html b/sdk/d1/d72/language__utils_8cc_source.html new file mode 100644 index 0000000000..c41187182f --- /dev/null +++ b/sdk/d1/d72/language__utils_8cc_source.html @@ -0,0 +1,214 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/language_utils.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
language_utils.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/mpd/base/language_utils.h"
+
8 
+
9 #include "packager/base/logging.h"
+
10 
+
11 namespace {
+
12 
+
13 // A map from 3-letter language codes (ISO 639-2) to 2-letter language codes
+
14 // (ISO 639-1) for all languages which have both in the registry.
+
15 typedef struct {
+
16  const char iso_639_2[4]; // 3 letters + nul
+
17  const char iso_639_1[3]; // 2 letters + nul
+
18 } LanguageMapPairType;
+
19 const LanguageMapPairType kLanguageMap[] = {
+
20  { "aar", "aa" }, { "abk", "ab" }, { "afr", "af" }, { "aka", "ak" },
+
21  { "alb", "sq" }, { "amh", "am" }, { "ara", "ar" }, { "arg", "an" },
+
22  { "arm", "hy" }, { "asm", "as" }, { "ava", "av" }, { "ave", "ae" },
+
23  { "aym", "ay" }, { "aze", "az" }, { "bak", "ba" }, { "bam", "bm" },
+
24  { "baq", "eu" }, { "bel", "be" }, { "ben", "bn" }, { "bih", "bh" },
+
25  { "bis", "bi" }, { "bod", "bo" }, { "bos", "bs" }, { "bre", "br" },
+
26  { "bul", "bg" }, { "bur", "my" }, { "cat", "ca" }, { "ces", "cs" },
+
27  { "cha", "ch" }, { "che", "ce" }, { "chi", "zh" }, { "chu", "cu" },
+
28  { "chv", "cv" }, { "cor", "kw" }, { "cos", "co" }, { "cre", "cr" },
+
29  { "cym", "cy" }, { "cze", "cs" }, { "dan", "da" }, { "deu", "de" },
+
30  { "div", "dv" }, { "dut", "nl" }, { "dzo", "dz" }, { "ell", "el" },
+
31  { "eng", "en" }, { "epo", "eo" }, { "est", "et" }, { "eus", "eu" },
+
32  { "ewe", "ee" }, { "fao", "fo" }, { "fas", "fa" }, { "fij", "fj" },
+
33  { "fin", "fi" }, { "fra", "fr" }, { "fre", "fr" }, { "fry", "fy" },
+
34  { "ful", "ff" }, { "geo", "ka" }, { "ger", "de" }, { "gla", "gd" },
+
35  { "gle", "ga" }, { "glg", "gl" }, { "glv", "gv" }, { "gre", "el" },
+
36  { "grn", "gn" }, { "guj", "gu" }, { "hat", "ht" }, { "hau", "ha" },
+
37  { "heb", "he" }, { "her", "hz" }, { "hin", "hi" }, { "hmo", "ho" },
+
38  { "hrv", "hr" }, { "hun", "hu" }, { "hye", "hy" }, { "ibo", "ig" },
+
39  { "ice", "is" }, { "ido", "io" }, { "iii", "ii" }, { "iku", "iu" },
+
40  { "ile", "ie" }, { "ina", "ia" }, { "ind", "id" }, { "ipk", "ik" },
+
41  { "isl", "is" }, { "ita", "it" }, { "jav", "jv" }, { "jpn", "ja" },
+
42  { "kal", "kl" }, { "kan", "kn" }, { "kas", "ks" }, { "kat", "ka" },
+
43  { "kau", "kr" }, { "kaz", "kk" }, { "khm", "km" }, { "kik", "ki" },
+
44  { "kin", "rw" }, { "kir", "ky" }, { "kom", "kv" }, { "kon", "kg" },
+
45  { "kor", "ko" }, { "kua", "kj" }, { "kur", "ku" }, { "lao", "lo" },
+
46  { "lat", "la" }, { "lav", "lv" }, { "lim", "li" }, { "lin", "ln" },
+
47  { "lit", "lt" }, { "ltz", "lb" }, { "lub", "lu" }, { "lug", "lg" },
+
48  { "mac", "mk" }, { "mah", "mh" }, { "mal", "ml" }, { "mao", "mi" },
+
49  { "mar", "mr" }, { "may", "ms" }, { "mkd", "mk" }, { "mlg", "mg" },
+
50  { "mlt", "mt" }, { "mon", "mn" }, { "mri", "mi" }, { "msa", "ms" },
+
51  { "mya", "my" }, { "nau", "na" }, { "nav", "nv" }, { "nbl", "nr" },
+
52  { "nde", "nd" }, { "ndo", "ng" }, { "nep", "ne" }, { "nld", "nl" },
+
53  { "nno", "nn" }, { "nob", "nb" }, { "nor", "no" }, { "nya", "ny" },
+
54  { "oci", "oc" }, { "oji", "oj" }, { "ori", "or" }, { "orm", "om" },
+
55  { "oss", "os" }, { "pan", "pa" }, { "per", "fa" }, { "pli", "pi" },
+
56  { "pol", "pl" }, { "por", "pt" }, { "pus", "ps" }, { "que", "qu" },
+
57  { "roh", "rm" }, { "ron", "ro" }, { "rum", "ro" }, { "run", "rn" },
+
58  { "rus", "ru" }, { "sag", "sg" }, { "san", "sa" }, { "sin", "si" },
+
59  { "slk", "sk" }, { "slo", "sk" }, { "slv", "sl" }, { "sme", "se" },
+
60  { "smo", "sm" }, { "sna", "sn" }, { "snd", "sd" }, { "som", "so" },
+
61  { "sot", "st" }, { "spa", "es" }, { "sqi", "sq" }, { "srd", "sc" },
+
62  { "srp", "sr" }, { "ssw", "ss" }, { "sun", "su" }, { "swa", "sw" },
+
63  { "swe", "sv" }, { "tah", "ty" }, { "tam", "ta" }, { "tat", "tt" },
+
64  { "tel", "te" }, { "tgk", "tg" }, { "tgl", "tl" }, { "tha", "th" },
+
65  { "tib", "bo" }, { "tir", "ti" }, { "ton", "to" }, { "tsn", "tn" },
+
66  { "tso", "ts" }, { "tuk", "tk" }, { "tur", "tr" }, { "twi", "tw" },
+
67  { "uig", "ug" }, { "ukr", "uk" }, { "urd", "ur" }, { "uzb", "uz" },
+
68  { "ven", "ve" }, { "vie", "vi" }, { "vol", "vo" }, { "wel", "cy" },
+
69  { "wln", "wa" }, { "wol", "wo" }, { "xho", "xh" }, { "yid", "yi" },
+
70  { "yor", "yo" }, { "zha", "za" }, { "zho", "zh" }, { "zul", "zu" },
+
71 };
+
72 
+
73 } // namespace
+
74 
+
75 namespace edash_packager {
+
76 
+
77 std::string LanguageToShortestForm(const std::string& language) {
+
78  if (language.size() == 2) {
+
79  // Presumably already a valid ISO-639-1 code, and therefore conforms to
+
80  // BCP-47's requirement to use the shortest possible code.
+
81  return language;
+
82  }
+
83 
+
84  for (size_t i = 0; i < arraysize(kLanguageMap); ++i) {
+
85  if (language == kLanguageMap[i].iso_639_2) {
+
86  return kLanguageMap[i].iso_639_1;
+
87  }
+
88  }
+
89 
+
90  // This could happen legitimately for languages which have no 2-letter code,
+
91  // but that would imply that the input language code is a 3-letter code.
+
92  DCHECK_EQ(3u, language.size());
+
93  return language;
+
94 }
+
95 
+
96 std::string LanguageToISO_639_2(const std::string& language) {
+
97  if (language.size() == 3) {
+
98  // Presumably already a valid ISO-639-2 code.
+
99  return language;
+
100  }
+
101 
+
102  for (size_t i = 0; i < arraysize(kLanguageMap); ++i) {
+
103  if (language == kLanguageMap[i].iso_639_1) {
+
104  return kLanguageMap[i].iso_639_2;
+
105  }
+
106  }
+
107 
+
108  LOG(WARNING) << "No equivalent 3-letter language code for " << language;
+
109  // This is probably a mistake on the part of the user and should be treated
+
110  // as invalid input.
+
111  return "und";
+
112 }
+
113 
+
114 } // namespace edash_packager
+
std::string LanguageToShortestForm(const std::string &language)
+
std::string LanguageToISO_639_2(const std::string &language)
+
+ + + + diff --git a/sdk/d1/d72/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry-members.html b/sdk/d1/d72/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry-members.html new file mode 100644 index 0000000000..bca4fc2c1c --- /dev/null +++ b/sdk/d1/d72/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry-members.html @@ -0,0 +1,121 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::AudioSampleEntry Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
AudioSampleEntry() (defined in edash_packager::media::mp4::AudioSampleEntry)edash_packager::media::mp4::AudioSampleEntry
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::AudioSampleEntry)edash_packager::media::mp4::AudioSampleEntryvirtual
channelcount (defined in edash_packager::media::mp4::AudioSampleEntry)edash_packager::media::mp4::AudioSampleEntry
ComputeSize() OVERRIDEedash_packager::media::mp4::AudioSampleEntryvirtual
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() (defined in edash_packager::media::mp4::AudioSampleEntry)edash_packager::media::mp4::AudioSampleEntryvirtual
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
+ + + + diff --git a/sdk/d1/d74/mp2t__media__parser_8cc_source.html b/sdk/d1/d74/mp2t__media__parser_8cc_source.html new file mode 100644 index 0000000000..f2a85afd99 --- /dev/null +++ b/sdk/d1/d74/mp2t__media__parser_8cc_source.html @@ -0,0 +1,535 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp2t/mp2t_media_parser.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mp2t_media_parser.cc
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/formats/mp2t/mp2t_media_parser.h"
+
6 
+
7 #include "packager/base/bind.h"
+
8 #include "packager/base/memory/scoped_ptr.h"
+
9 #include "packager/base/stl_util.h"
+
10 #include "packager/media/base/media_sample.h"
+
11 #include "packager/media/base/stream_info.h"
+
12 #include "packager/media/formats/mp2t/es_parser.h"
+
13 #include "packager/media/formats/mp2t/es_parser_adts.h"
+
14 #include "packager/media/formats/mp2t/es_parser_h264.h"
+
15 #include "packager/media/formats/mp2t/mp2t_common.h"
+
16 #include "packager/media/formats/mp2t/ts_packet.h"
+
17 #include "packager/media/formats/mp2t/ts_section.h"
+
18 #include "packager/media/formats/mp2t/ts_section_pat.h"
+
19 #include "packager/media/formats/mp2t/ts_section_pes.h"
+
20 #include "packager/media/formats/mp2t/ts_section_pmt.h"
+
21 
+
22 namespace edash_packager {
+
23 namespace media {
+
24 namespace mp2t {
+
25 
+
26 enum StreamType {
+
27  // ISO-13818.1 / ITU H.222 Table 2.34 "Stream type assignments"
+
28  kStreamTypeMpeg1Audio = 0x3,
+
29  kStreamTypeAAC = 0xf,
+
30  kStreamTypeAVC = 0x1b,
+
31 };
+
32 
+
33 class PidState {
+
34  public:
+
35  enum PidType {
+
36  kPidPat,
+
37  kPidPmt,
+
38  kPidAudioPes,
+
39  kPidVideoPes,
+
40  };
+
41 
+
42  PidState(int pid, PidType pid_type,
+
43  scoped_ptr<TsSection> section_parser);
+
44 
+
45  // Extract the content of the TS packet and parse it.
+
46  // Return true if successful.
+
47  bool PushTsPacket(const TsPacket& ts_packet);
+
48 
+
49  // Flush the PID state (possibly emitting some pending frames)
+
50  // and reset its state.
+
51  void Flush();
+
52 
+
53  // Enable/disable the PID.
+
54  // Disabling a PID will reset its state and ignore any further incoming TS
+
55  // packets.
+
56  void Enable();
+
57  void Disable();
+
58  bool IsEnabled() const;
+
59 
+
60  PidType pid_type() const { return pid_type_; }
+
61 
+
62  scoped_refptr<StreamInfo>& config() { return config_; }
+
63  void set_config(scoped_refptr<StreamInfo>& config) { config_ = config; }
+
64 
+
65  SampleQueue& sample_queue() { return sample_queue_; }
+
66 
+
67  private:
+
68  void ResetState();
+
69 
+
70  int pid_;
+
71  PidType pid_type_;
+
72  scoped_ptr<TsSection> section_parser_;
+
73 
+
74  bool enable_;
+
75  int continuity_counter_;
+
76  scoped_refptr<StreamInfo> config_;
+
77  SampleQueue sample_queue_;
+
78 };
+
79 
+
80 PidState::PidState(int pid, PidType pid_type,
+
81  scoped_ptr<TsSection> section_parser)
+
82  : pid_(pid),
+
83  pid_type_(pid_type),
+
84  section_parser_(section_parser.Pass()),
+
85  enable_(false),
+
86  continuity_counter_(-1) {
+
87  DCHECK(section_parser_);
+
88 }
+
89 
+
90 bool PidState::PushTsPacket(const TsPacket& ts_packet) {
+
91  DCHECK_EQ(ts_packet.pid(), pid_);
+
92 
+
93  // The current PID is not part of the PID filter,
+
94  // just discard the incoming TS packet.
+
95  if (!enable_)
+
96  return true;
+
97 
+
98  int expected_continuity_counter = (continuity_counter_ + 1) % 16;
+
99  if (continuity_counter_ >= 0 &&
+
100  ts_packet.continuity_counter() != expected_continuity_counter) {
+
101  DVLOG(1) << "TS discontinuity detected for pid: " << pid_;
+
102  // TODO(tinskip): Handle discontinuity better.
+
103  return false;
+
104  }
+
105 
+
106  bool status = section_parser_->Parse(
+
107  ts_packet.payload_unit_start_indicator(),
+
108  ts_packet.payload(),
+
109  ts_packet.payload_size());
+
110 
+
111  // At the minimum, when parsing failed, auto reset the section parser.
+
112  // Components that use the Mp2tMediaParser can take further action if needed.
+
113  if (!status) {
+
114  DVLOG(1) << "Parsing failed for pid = " << pid_;
+
115  ResetState();
+
116  }
+
117 
+
118  return status;
+
119 }
+
120 
+
121 void PidState::Flush() {
+
122  section_parser_->Flush();
+
123  ResetState();
+
124 }
+
125 
+
126 void PidState::Enable() {
+
127  enable_ = true;
+
128 }
+
129 
+
130 void PidState::Disable() {
+
131  if (!enable_)
+
132  return;
+
133 
+
134  ResetState();
+
135  enable_ = false;
+
136 }
+
137 
+
138 bool PidState::IsEnabled() const {
+
139  return enable_;
+
140 }
+
141 
+
142 void PidState::ResetState() {
+
143  section_parser_->Reset();
+
144  continuity_counter_ = -1;
+
145 }
+
146 
+
147 Mp2tMediaParser::Mp2tMediaParser()
+
148  : sbr_in_mimetype_(false),
+
149  is_initialized_(false) {
+
150 }
+
151 
+
152 Mp2tMediaParser::~Mp2tMediaParser() {
+
153  STLDeleteValues(&pids_);
+
154 }
+
155 
+ +
157  const InitCB& init_cb,
+
158  const NewSampleCB& new_sample_cb,
+
159  KeySource* decryption_key_source) {
+
160  DCHECK(!is_initialized_);
+
161  DCHECK(init_cb_.is_null());
+
162  DCHECK(!init_cb.is_null());
+
163  DCHECK(!new_sample_cb.is_null());
+
164 
+
165  init_cb_ = init_cb;
+
166  new_sample_cb_ = new_sample_cb;
+
167 }
+
168 
+ +
170  DVLOG(1) << "Mp2tMediaParser::Flush";
+
171 
+
172  // Flush the buffers and reset the pids.
+
173  for (std::map<int, PidState*>::iterator it = pids_.begin();
+
174  it != pids_.end(); ++it) {
+
175  DVLOG(1) << "Flushing PID: " << it->first;
+
176  PidState* pid_state = it->second;
+
177  pid_state->Flush();
+
178  }
+
179  EmitRemainingSamples();
+
180  STLDeleteValues(&pids_);
+
181 
+
182  // Remove any bytes left in the TS buffer.
+
183  // (i.e. any partial TS packet => less than 188 bytes).
+
184  ts_byte_queue_.Reset();
+
185 }
+
186 
+
187 bool Mp2tMediaParser::Parse(const uint8_t* buf, int size) {
+
188  DVLOG(1) << "Mp2tMediaParser::Parse size=" << size;
+
189 
+
190  // Add the data to the parser state.
+
191  ts_byte_queue_.Push(buf, size);
+
192 
+
193  while (true) {
+
194  const uint8_t* ts_buffer;
+
195  int ts_buffer_size;
+
196  ts_byte_queue_.Peek(&ts_buffer, &ts_buffer_size);
+
197  if (ts_buffer_size < TsPacket::kPacketSize)
+
198  break;
+
199 
+
200  // Synchronization.
+
201  int skipped_bytes = TsPacket::Sync(ts_buffer, ts_buffer_size);
+
202  if (skipped_bytes > 0) {
+
203  DVLOG(1) << "Packet not aligned on a TS syncword:"
+
204  << " skipped_bytes=" << skipped_bytes;
+
205  ts_byte_queue_.Pop(skipped_bytes);
+
206  continue;
+
207  }
+
208 
+
209  // Parse the TS header, skipping 1 byte if the header is invalid.
+
210  scoped_ptr<TsPacket> ts_packet(TsPacket::Parse(ts_buffer, ts_buffer_size));
+
211  if (!ts_packet) {
+
212  DVLOG(1) << "Error: invalid TS packet";
+
213  ts_byte_queue_.Pop(1);
+
214  continue;
+
215  }
+
216  DVLOG(LOG_LEVEL_TS)
+
217  << "Processing PID=" << ts_packet->pid()
+
218  << " start_unit=" << ts_packet->payload_unit_start_indicator();
+
219 
+
220  // Parse the section.
+
221  std::map<int, PidState*>::iterator it = pids_.find(ts_packet->pid());
+
222  if (it == pids_.end() &&
+
223  ts_packet->pid() == TsSection::kPidPat) {
+
224  // Create the PAT state here if needed.
+
225  scoped_ptr<TsSection> pat_section_parser(
+
226  new TsSectionPat(
+
227  base::Bind(&Mp2tMediaParser::RegisterPmt,
+
228  base::Unretained(this))));
+
229  scoped_ptr<PidState> pat_pid_state(
+
230  new PidState(ts_packet->pid(), PidState::kPidPat,
+
231  pat_section_parser.Pass()));
+
232  pat_pid_state->Enable();
+
233  it = pids_.insert(
+
234  std::pair<int, PidState*>(ts_packet->pid(),
+
235  pat_pid_state.release())).first;
+
236  }
+
237 
+
238  if (it != pids_.end()) {
+
239  if (!it->second->PushTsPacket(*ts_packet))
+
240  return false;
+
241  } else {
+
242  DVLOG(LOG_LEVEL_TS) << "Ignoring TS packet for pid: " << ts_packet->pid();
+
243  }
+
244 
+
245  // Go to the next packet.
+
246  ts_byte_queue_.Pop(TsPacket::kPacketSize);
+
247  }
+
248 
+
249  // Emit the A/V buffers that kept accumulating during TS parsing.
+
250  return EmitRemainingSamples();
+
251 }
+
252 
+
253 void Mp2tMediaParser::RegisterPmt(int program_number, int pmt_pid) {
+
254  DVLOG(1) << "RegisterPmt:"
+
255  << " program_number=" << program_number
+
256  << " pmt_pid=" << pmt_pid;
+
257 
+
258  // Only one TS program is allowed. Ignore the incoming program map table,
+
259  // if there is already one registered.
+
260  for (std::map<int, PidState*>::iterator it = pids_.begin();
+
261  it != pids_.end(); ++it) {
+
262  PidState* pid_state = it->second;
+
263  if (pid_state->pid_type() == PidState::kPidPmt) {
+
264  DVLOG_IF(1, pmt_pid != it->first) << "More than one program is defined";
+
265  return;
+
266  }
+
267  }
+
268 
+
269  // Create the PMT state here if needed.
+
270  DVLOG(1) << "Create a new PMT parser";
+
271  scoped_ptr<TsSection> pmt_section_parser(
+
272  new TsSectionPmt(
+
273  base::Bind(&Mp2tMediaParser::RegisterPes,
+
274  base::Unretained(this), pmt_pid)));
+
275  scoped_ptr<PidState> pmt_pid_state(
+
276  new PidState(pmt_pid, PidState::kPidPmt, pmt_section_parser.Pass()));
+
277  pmt_pid_state->Enable();
+
278  pids_.insert(std::pair<int, PidState*>(pmt_pid, pmt_pid_state.release()));
+
279 }
+
280 
+
281 void Mp2tMediaParser::RegisterPes(int pmt_pid,
+
282  int pes_pid,
+
283  int stream_type) {
+
284  DVLOG(1) << "RegisterPes:"
+
285  << " pes_pid=" << pes_pid
+
286  << " stream_type=" << std::hex << stream_type << std::dec;
+
287  std::map<int, PidState*>::iterator it = pids_.find(pes_pid);
+
288  if (it != pids_.end())
+
289  return;
+
290 
+
291  // Create a stream parser corresponding to the stream type.
+
292  bool is_audio = false;
+
293  scoped_ptr<EsParser> es_parser;
+
294  if (stream_type == kStreamTypeAVC) {
+
295  es_parser.reset(
+
296  new EsParserH264(
+
297  pes_pid,
+
298  base::Bind(&Mp2tMediaParser::OnNewStreamInfo,
+
299  base::Unretained(this)),
+
300  base::Bind(&Mp2tMediaParser::OnEmitSample,
+
301  base::Unretained(this))));
+
302  } else if (stream_type == kStreamTypeAAC) {
+
303  es_parser.reset(
+
304  new EsParserAdts(
+
305  pes_pid,
+
306  base::Bind(&Mp2tMediaParser::OnNewStreamInfo,
+
307  base::Unretained(this)),
+
308  base::Bind(&Mp2tMediaParser::OnEmitSample,
+
309  base::Unretained(this)),
+
310  sbr_in_mimetype_));
+
311  is_audio = true;
+
312  } else {
+
313  return;
+
314  }
+
315 
+
316  // Create the PES state here.
+
317  DVLOG(1) << "Create a new PES state";
+
318  scoped_ptr<TsSection> pes_section_parser(
+
319  new TsSectionPes(es_parser.Pass()));
+
320  PidState::PidType pid_type =
+
321  is_audio ? PidState::kPidAudioPes : PidState::kPidVideoPes;
+
322  scoped_ptr<PidState> pes_pid_state(
+
323  new PidState(pes_pid, pid_type, pes_section_parser.Pass()));
+
324  pes_pid_state->Enable();
+
325  pids_.insert(std::pair<int, PidState*>(pes_pid, pes_pid_state.release()));
+
326 }
+
327 
+
328 void Mp2tMediaParser::OnNewStreamInfo(
+
329  scoped_refptr<StreamInfo>& new_stream_info) {
+
330  DCHECK(new_stream_info);
+
331  DVLOG(1) << "OnVideoConfigChanged for pid=" << new_stream_info->track_id();
+
332 
+
333  PidMap::iterator pid_state = pids_.find(new_stream_info->track_id());
+
334  if (pid_state == pids_.end()) {
+
335  LOG(ERROR) << "PID State for new stream not found (pid = "
+
336  << new_stream_info->track_id() << ").";
+
337  return;
+
338  }
+
339 
+
340  // Set the stream configuration information for the PID.
+
341  pid_state->second->set_config(new_stream_info);
+
342 
+
343  // Finish initialization if all streams have configs.
+
344  FinishInitializationIfNeeded();
+
345 }
+
346 
+
347 bool Mp2tMediaParser::FinishInitializationIfNeeded() {
+
348  // Nothing to be done if already initialized.
+
349  if (is_initialized_)
+
350  return true;
+
351 
+
352  // Wait for more data to come to finish initialization.
+
353  if (pids_.empty())
+
354  return true;
+
355 
+
356  std::vector<scoped_refptr<StreamInfo> > all_stream_info;
+
357  uint32_t num_es(0);
+
358  for (PidMap::const_iterator iter = pids_.begin(); iter != pids_.end();
+
359  ++iter) {
+
360  if (((iter->second->pid_type() == PidState::kPidAudioPes) ||
+
361  (iter->second->pid_type() == PidState::kPidVideoPes))) {
+
362  ++num_es;
+
363  if (iter->second->config())
+
364  all_stream_info.push_back(iter->second->config());
+
365  }
+
366  }
+
367  if (num_es && (all_stream_info.size() == num_es)) {
+
368  // All stream configurations have been received. Initialization can
+
369  // be completed.
+
370  init_cb_.Run(all_stream_info);
+
371  DVLOG(1) << "Mpeg2TS stream parser initialization done";
+
372  is_initialized_ = true;
+
373  }
+
374  return true;
+
375 }
+
376 
+
377 void Mp2tMediaParser::OnEmitSample(uint32_t pes_pid,
+
378  scoped_refptr<MediaSample>& new_sample) {
+
379  DCHECK(new_sample);
+
380  DVLOG(LOG_LEVEL_ES)
+
381  << "OnEmitSample: "
+
382  << " pid="
+
383  << pes_pid
+
384  << " size="
+
385  << new_sample->data_size()
+
386  << " dts="
+
387  << new_sample->dts()
+
388  << " pts="
+
389  << new_sample->pts();
+
390 
+
391  // Add the sample to the appropriate PID sample queue.
+
392  PidMap::iterator pid_state = pids_.find(pes_pid);
+
393  if (pid_state == pids_.end()) {
+
394  LOG(ERROR) << "PID State for new sample not found (pid = "
+
395  << pes_pid << ").";
+
396  return;
+
397  }
+
398  pid_state->second->sample_queue().push_back(new_sample);
+
399 }
+
400 
+
401 bool Mp2tMediaParser::EmitRemainingSamples() {
+
402  DVLOG(LOG_LEVEL_ES) << "Mp2tMediaParser::EmitRemainingBuffers";
+
403 
+
404  // No buffer should be sent until fully initialized.
+
405  if (!is_initialized_)
+
406  return true;
+
407 
+
408  // Buffer emission.
+
409  for (PidMap::const_iterator pid_iter = pids_.begin(); pid_iter != pids_.end();
+
410  ++pid_iter) {
+
411  SampleQueue& sample_queue = pid_iter->second->sample_queue();
+
412  for (SampleQueue::iterator sample_iter = sample_queue.begin();
+
413  sample_iter != sample_queue.end();
+
414  ++sample_iter) {
+
415  if (!new_sample_cb_.Run(pid_iter->first, *sample_iter)) {
+
416  // Error processing sample. Propagate error condition.
+
417  return false;
+
418  }
+
419  }
+
420  sample_queue.clear();
+
421  }
+
422 
+
423  return true;
+
424 }
+
425 
+
426 } // namespace mp2t
+
427 } // namespace media
+
428 } // namespace edash_packager
+
void Push(const uint8_t *data, int size)
Append new bytes to the end of the queue.
Definition: byte_queue.cc:29
+ + +
virtual void Init(const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source) OVERRIDE
+ +
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:29
+
void Reset()
Reset the queue to the empty state.
Definition: byte_queue.cc:24
+
virtual bool Parse(const uint8_t *buf, int size) OVERRIDE
+
void Peek(const uint8_t **data, int *size) const
Definition: byte_queue.cc:63
+
+ + + + diff --git a/sdk/d1/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk-members.html b/sdk/d1/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk-members.html new file mode 100644 index 0000000000..b506f98829 --- /dev/null +++ b/sdk/d1/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::SampleToChunk Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::SampleToChunk)edash_packager::media::mp4::SampleToChunkvirtual
chunk_info (defined in edash_packager::media::mp4::SampleToChunk)edash_packager::media::mp4::SampleToChunk
ComputeSize() OVERRIDEedash_packager::media::mp4::SampleToChunkvirtual
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::SampleToChunkvirtual
SampleToChunk() (defined in edash_packager::media::mp4::SampleToChunk)edash_packager::media::mp4::SampleToChunk
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~SampleToChunk() (defined in edash_packager::media::mp4::SampleToChunk)edash_packager::media::mp4::SampleToChunkvirtual
+ + + + diff --git a/sdk/d1/d78/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer.html b/sdk/d1/d78/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer.html new file mode 100644 index 0000000000..948942f42a --- /dev/null +++ b/sdk/d1/d78/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer.html @@ -0,0 +1,184 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::MP4Muxer Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::MP4Muxer Class Reference
+
+
+ +

#include <mp4_muxer.h>

+
+Inheritance diagram for edash_packager::media::mp4::MP4Muxer:
+
+
+ + +edash_packager::media::Muxer + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

MP4Muxer (const MuxerOptions &options)
 Create a MP4Muxer object from MuxerOptions.
 
- Public Member Functions inherited from edash_packager::media::Muxer
Muxer (const MuxerOptions &options)
 
void SetKeySource (KeySource *encryption_key_source, uint32_t max_sd_pixels, double clear_lead_in_seconds, double crypto_period_duration_in_seconds)
 
+void AddStream (MediaStream *stream)
 Add video/audio stream.
 
+Status Run ()
 Drive the remuxing from muxer side (pull).
 
void Cancel ()
 
void SetMuxerListener (scoped_ptr< MuxerListener > muxer_listener)
 
void SetProgressListener (scoped_ptr< ProgressListener > progress_listener)
 
+const std::vector< MediaStream * > & streams () const
 
void set_clock (base::Clock *clock)
 
+ + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from edash_packager::media::Muxer
+const MuxerOptionsoptions () const
 
+KeySourceencryption_key_source ()
 
+uint32_t max_sd_pixels () const
 
+double clear_lead_in_seconds () const
 
+double crypto_period_duration_in_seconds () const
 
+MuxerListenermuxer_listener ()
 
+ProgressListenerprogress_listener ()
 
+base::Clock * clock ()
 
+

Detailed Description

+

Implements MP4 Muxer for ISO-BMFF. Please refer to ISO/IEC 14496-12: ISO base media file format for details.

+ +

Definition at line 32 of file mp4_muxer.h.

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d1/d78/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer.png b/sdk/d1/d78/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer.png new file mode 100644 index 0000000000..db42ca9e9e Binary files /dev/null and b/sdk/d1/d78/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer.png differ diff --git a/sdk/d1/d7f/classedash__packager_1_1media_1_1BitReader-members.html b/sdk/d1/d7f/classedash__packager_1_1media_1_1BitReader-members.html new file mode 100644 index 0000000000..9020cbbfa5 --- /dev/null +++ b/sdk/d1/d7f/classedash__packager_1_1media_1_1BitReader-members.html @@ -0,0 +1,109 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::BitReader Member List
+
+
+ +

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

+ + + + + + +
BitReader(const uint8_t *data, off_t size)edash_packager::media::BitReader
bits_available() const edash_packager::media::BitReader
ReadBits(int num_bits, T *out)edash_packager::media::BitReaderinline
SkipBits(int num_bits)edash_packager::media::BitReader
~BitReader() (defined in edash_packager::media::BitReader)edash_packager::media::BitReader
+ + + + diff --git a/sdk/d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html b/sdk/d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html new file mode 100644 index 0000000000..8efa10afd6 --- /dev/null +++ b/sdk/d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html @@ -0,0 +1,200 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::SegmentIndex Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::SegmentIndex Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::SegmentIndex:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + + + + + + + +

+Public Attributes

+uint32_t reference_id
 
+uint32_t timescale
 
+uint64_t earliest_presentation_time
 
+uint64_t first_offset
 
+std::vector< SegmentReferencereferences
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 574 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::SegmentIndex::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1924 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.png b/sdk/d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.png new file mode 100644 index 0000000000..22f71fa821 Binary files /dev/null and b/sdk/d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.png differ diff --git a/sdk/d1/d82/adts__constants_8h_source.html b/sdk/d1/d82/adts__constants_8h_source.html new file mode 100644 index 0000000000..cd97a99efb --- /dev/null +++ b/sdk/d1/d82/adts__constants_8h_source.html @@ -0,0 +1,125 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mpeg/adts_constants.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
adts_constants.h
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_FORMATS_MPEG_ADTS_CONSTANTS_H_
+
6 #define MEDIA_FORMATS_MPEG_ADTS_CONSTANTS_H_
+
7 
+
8 #include <stddef.h>
+
9 
+
10 namespace edash_packager {
+
11 namespace media {
+
12 
+
13 enum {
+
14  kAdtsHeaderMinSize = 7,
+
15  kSamplesPerAACFrame = 1024,
+
16 };
+
17 
+
18 extern const int kAdtsFrequencyTable[];
+
19 extern const size_t kAdtsFrequencyTableSize;
+
20 
+
21 extern const int kAdtsNumChannelsTable[];
+
22 extern const size_t kAdtsNumChannelsTableSize;
+
23 
+
24 } // namespace media
+
25 } // namespace edash_packager
+
26 
+
27 #endif // MEDIA_FORMATS_MPEG_ADTS_CONSTANTS_H_
+
+ + + + diff --git a/sdk/d1/d86/classedash__packager_1_1media_1_1RsaPublicKey.html b/sdk/d1/d86/classedash__packager_1_1media_1_1RsaPublicKey.html new file mode 100644 index 0000000000..d0b52b5770 --- /dev/null +++ b/sdk/d1/d86/classedash__packager_1_1media_1_1RsaPublicKey.html @@ -0,0 +1,226 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::RsaPublicKey Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::RsaPublicKey Class Reference
+
+
+ +

Rsa public key, used for signature verification and encryption. + More...

+ +

#include <rsa_key.h>

+ + + + + + +

+Public Member Functions

bool Encrypt (const std::string &clear_message, std::string *encrypted_message)
 
bool VerifySignature (const std::string &message, const std::string &signature)
 
+ + + +

+Static Public Member Functions

static RsaPublicKeyCreate (const std::string &serialized_key)
 
+

Detailed Description

+

Rsa public key, used for signature verification and encryption.

+ +

Definition at line 53 of file rsa_key.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
RsaPublicKey * edash_packager::media::RsaPublicKey::Create (const std::string & serialized_key)
+
+static
+
+

Create an RsaPublicKey object using a DER encoded PKCS#1 RSAPublicKey.

+
Returns
The created RsaPrivateKey object on success, NULL otherwise.
+ +

Definition at line 180 of file rsa_key.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::RsaPublicKey::Encrypt (const std::string & clear_message,
std::string * encrypted_message 
)
+
+

Encrypt a message using RSA-OAEP.

+
Parameters
+ + +
encrypted_messagemust not be NULL.
+
+
+
Returns
true if successful, false otherwise.
+ +

Definition at line 185 of file rsa_key.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::RsaPublicKey::VerifySignature (const std::string & message,
const std::string & signature 
)
+
+

Verify RSASSA-PSS signature.

+
Returns
true if verification succeeds, false otherwise.
+ +

Definition at line 210 of file rsa_key.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d1/d8e/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample-members.html b/sdk/d1/d8e/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample-members.html new file mode 100644 index 0000000000..58ba201fdc --- /dev/null +++ b/sdk/d1/d8e/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::CompositionTimeToSample Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::CompositionTimeToSample)edash_packager::media::mp4::CompositionTimeToSamplevirtual
composition_offset (defined in edash_packager::media::mp4::CompositionTimeToSample)edash_packager::media::mp4::CompositionTimeToSample
CompositionTimeToSample() (defined in edash_packager::media::mp4::CompositionTimeToSample)edash_packager::media::mp4::CompositionTimeToSample
ComputeSize() OVERRIDEedash_packager::media::mp4::CompositionTimeToSamplevirtual
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::CompositionTimeToSamplevirtual
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~CompositionTimeToSample() (defined in edash_packager::media::mp4::CompositionTimeToSample)edash_packager::media::mp4::CompositionTimeToSamplevirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
+ + + + diff --git a/sdk/d1/d92/classedash__packager_1_1media_1_1OffsetByteQueue.html b/sdk/d1/d92/classedash__packager_1_1media_1_1OffsetByteQueue.html new file mode 100644 index 0000000000..8e3caa04fd --- /dev/null +++ b/sdk/d1/d92/classedash__packager_1_1media_1_1OffsetByteQueue.html @@ -0,0 +1,250 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::OffsetByteQueue Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::OffsetByteQueue Class Reference
+
+
+ +

#include <offset_byte_queue.h>

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

+Public Member Functions

void PeekAt (int64_t offset, const uint8_t **buf, int *size)
 
bool Trim (int64_t max_offset)
 
int64_t head ()
 
int64_t tail ()
 
These work like their underlying ByteQueue counterparts.
+void Reset ()
 
+void Push (const uint8_t *buf, int size)
 
+void Peek (const uint8_t **buf, int *size)
 
+void Pop (int count)
 
+

Detailed Description

+

Wrapper around ByteQueue, which encapsulates the notion of a monotonically-increasing byte offset. All buffer access is done by passing these offsets into this class, reducing the proliferation of many different meanings of "offset", "head", etc.

+ +

Definition at line 19 of file offset_byte_queue.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
int64_t edash_packager::media::OffsetByteQueue::head ()
+
+inline
+
+
Returns
The head position, in terms of the file's absolute offset.
+ +

Definition at line 52 of file offset_byte_queue.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void edash_packager::media::OffsetByteQueue::PeekAt (int64_t offset,
const uint8_t ** buf,
int * size 
)
+
+

Set buf to point at the first buffered byte corresponding to offset, and size to the number of bytes available starting from that offset.

+

It is an error if the offset is before the current head. It's not an error if the current offset is beyond tail(), but you will of course get back a null buf and a size of zero.

+ +

Definition at line 41 of file offset_byte_queue.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int64_t edash_packager::media::OffsetByteQueue::tail ()
+
+inline
+
+
Returns
The tail position (exclusive), in terms of the file's absolute offset.
+ +

Definition at line 55 of file offset_byte_queue.h.

+ +
+
+ +
+
+ + + + + + + + +
bool edash_packager::media::OffsetByteQueue::Trim (int64_t max_offset)
+
+

Mark the bytes up to (but not including) max_offset as ready for deletion. This is relatively inexpensive, but will not necessarily reduce the resident buffer size right away (or ever).

+
Returns
true if the full range of bytes were successfully trimmed, including the case where max_offset is less than the current head.
+
+false if max_offset > tail() (although all bytes currently buffered are still cleared).
+ +

Definition at line 51 of file offset_byte_queue.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d1/dc3/classedash__packager_1_1media_1_1LocalFile-members.html b/sdk/d1/dc3/classedash__packager_1_1media_1_1LocalFile-members.html new file mode 100644 index 0000000000..d115e3a579 --- /dev/null +++ b/sdk/d1/dc3/classedash__packager_1_1media_1_1LocalFile-members.html @@ -0,0 +1,122 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::LocalFile Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + +
Close() OVERRIDEedash_packager::media::LocalFilevirtual
Delete(const char *file_name)edash_packager::media::LocalFilestatic
File(const std::string &file_name) (defined in edash_packager::media::File)edash_packager::media::Fileinlineexplicitprotected
file_name() const edash_packager::media::Fileinline
Flush() OVERRIDEedash_packager::media::LocalFilevirtual
GetFileSize(const char *file_name)edash_packager::media::Filestatic
LocalFile(const char *file_name, const char *mode)edash_packager::media::LocalFile
Open() OVERRIDEedash_packager::media::LocalFileprotectedvirtual
edash_packager::media::File::Open(const char *file_name, const char *mode)edash_packager::media::Filestatic
OpenWithNoBuffering(const char *file_name, const char *mode)edash_packager::media::Filestatic
Read(void *buffer, uint64_t length) OVERRIDEedash_packager::media::LocalFilevirtual
ReadFileToString(const char *file_name, std::string *contents)edash_packager::media::Filestatic
Seek(uint64_t position) OVERRIDEedash_packager::media::LocalFilevirtual
Size() OVERRIDEedash_packager::media::LocalFilevirtual
Tell(uint64_t *position) OVERRIDEedash_packager::media::LocalFilevirtual
Write(const void *buffer, uint64_t length) OVERRIDEedash_packager::media::LocalFilevirtual
~File()edash_packager::media::Fileinlineprotectedvirtual
~LocalFile() (defined in edash_packager::media::LocalFile)edash_packager::media::LocalFileprotectedvirtual
+ + + + diff --git a/sdk/d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.html b/sdk/d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.html new file mode 100644 index 0000000000..11dca18c85 --- /dev/null +++ b/sdk/d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.html @@ -0,0 +1,183 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::PixelAspectRatioBox Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::PixelAspectRatioBox Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::PixelAspectRatioBox:
+
+
+ + +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + +

+Public Attributes

+uint32_t h_spacing
 
+uint32_t v_spacing
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 191 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::PixelAspectRatioBox::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 951 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.png b/sdk/d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.png new file mode 100644 index 0000000000..4237eaf844 Binary files /dev/null and b/sdk/d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.png differ diff --git a/sdk/d1/dcb/encrypting__fragmenter_8h_source.html b/sdk/d1/dcb/encrypting__fragmenter_8h_source.html new file mode 100644 index 0000000000..0e8ca1f35c --- /dev/null +++ b/sdk/d1/dcb/encrypting__fragmenter_8h_source.html @@ -0,0 +1,179 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/encrypting_fragmenter.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
encrypting_fragmenter.h
+
+
+
1 // Copyright 2014 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_FORMATS_MP4_ENCRYPTING_FRAGMENTER_H_
+
8 #define MEDIA_FORMATS_MP4_ENCRYPTING_FRAGMENTER_H_
+
9 
+
10 #include "packager/media/formats/mp4/fragmenter.h"
+
11 
+
12 namespace edash_packager {
+
13 namespace media {
+
14 
+
15 class AesCtrEncryptor;
+
16 struct EncryptionKey;
+
17 
+
18 namespace mp4 {
+
19 
+ +
22  public:
+ +
30  scoped_ptr<EncryptionKey> encryption_key,
+
31  int64_t clear_time,
+
32  uint8_t nalu_length_size);
+
33 
+
34  virtual ~EncryptingFragmenter();
+
35 
+
38  virtual Status AddSample(scoped_refptr<MediaSample> sample) OVERRIDE;
+
39  virtual Status InitializeFragment(int64_t first_sample_dts) OVERRIDE;
+
40  virtual void FinalizeFragment() OVERRIDE;
+
42 
+
43  protected:
+
46  virtual Status PrepareFragmentForEncryption(bool enable_encryption);
+
48  virtual void FinalizeFragmentForEncryption();
+
49 
+ +
54 
+
55  EncryptionKey* encryption_key() { return encryption_key_.get(); }
+
56  AesCtrEncryptor* encryptor() { return encryptor_.get(); }
+
57 
+
58  void set_encryption_key(scoped_ptr<EncryptionKey> encryption_key) {
+
59  encryption_key_ = encryption_key.Pass();
+
60  }
+
61 
+
62  private:
+
63  void EncryptBytes(uint8_t* data, uint32_t size);
+
64  Status EncryptSample(scoped_refptr<MediaSample> sample);
+
65 
+
66  // Should we enable subsample encryption?
+
67  bool IsSubsampleEncryptionRequired() { return nalu_length_size_ != 0; }
+
68 
+
69  scoped_ptr<EncryptionKey> encryption_key_;
+
70  scoped_ptr<AesCtrEncryptor> encryptor_;
+
71  // If this stream contains AVC, subsample encryption specifies that the size
+
72  // and type of NAL units remain unencrypted. This field specifies the size of
+
73  // the size field. Can be 1, 2 or 4 bytes.
+
74  const uint8_t nalu_length_size_;
+
75  int64_t clear_time_;
+
76 
+
77  DISALLOW_COPY_AND_ASSIGN(EncryptingFragmenter);
+
78 };
+
79 
+
80 } // namespace mp4
+
81 } // namespace media
+
82 } // namespace edash_packager
+
83 
+
84 #endif // MEDIA_FORMATS_MP4_ENCRYPTING_FRAGMENTER_H_
+ + + +
EncryptingFragmenter generates MP4 fragments with sample encrypted.
+ +
virtual Status AddSample(scoped_refptr< MediaSample > sample) OVERRIDE
+ + +
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.
+
virtual void FinalizeFragment() OVERRIDE
Finalize and optimize the fragment.
+
virtual Status InitializeFragment(int64_t first_sample_dts) OVERRIDE
+
+ + + + diff --git a/sdk/d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.html b/sdk/d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.html new file mode 100644 index 0000000000..7d5442a247 --- /dev/null +++ b/sdk/d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.html @@ -0,0 +1,189 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::FileType Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::FileType Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::FileType:
+
+
+ + +edash_packager::media::mp4::Box +edash_packager::media::mp4::SegmentType + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + +

+Public Attributes

+FourCC major_brand
 
+uint32_t minor_version
 
+std::vector< FourCC > compatible_brands
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 39 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::FileType::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

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

+ +

Definition at line 84 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.png b/sdk/d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.png new file mode 100644 index 0000000000..48d2fd5ab2 Binary files /dev/null and b/sdk/d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.png differ diff --git a/sdk/d1/dd0/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup-members.html b/sdk/d1/dd0/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup-members.html new file mode 100644 index 0000000000..a0efcc9975 --- /dev/null +++ b/sdk/d1/dd0/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup-members.html @@ -0,0 +1,121 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::SampleToGroup Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::SampleToGroup)edash_packager::media::mp4::SampleToGroupvirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::SampleToGroupvirtual
entries (defined in edash_packager::media::mp4::SampleToGroup)edash_packager::media::mp4::SampleToGroup
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
grouping_type (defined in edash_packager::media::mp4::SampleToGroup)edash_packager::media::mp4::SampleToGroup
grouping_type_parameter (defined in edash_packager::media::mp4::SampleToGroup)edash_packager::media::mp4::SampleToGroup
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::SampleToGroupvirtual
SampleToGroup() (defined in edash_packager::media::mp4::SampleToGroup)edash_packager::media::mp4::SampleToGroup
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~SampleToGroup() (defined in edash_packager::media::mp4::SampleToGroup)edash_packager::media::mp4::SampleToGroupvirtual
+ + + + diff --git a/sdk/d1/dd5/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode.html b/sdk/d1/dd5/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode.html new file mode 100644 index 0000000000..31b2653dc3 --- /dev/null +++ b/sdk/d1/dd5/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode.html @@ -0,0 +1,164 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::xml::RepresentationBaseXmlNode Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::xml::RepresentationBaseXmlNode Class Reference
+
+
+ +

#include <xml_node.h>

+
+Inheritance diagram for edash_packager::xml::RepresentationBaseXmlNode:
+
+
+ + +edash_packager::xml::XmlNode +edash_packager::xml::AdaptationSetXmlNode +edash_packager::xml::RepresentationXmlNode + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+bool AddContentProtectionElements (const std::list< ContentProtectionElement > &content_protection_elements)
 
- Public Member Functions inherited from edash_packager::xml::XmlNode
 XmlNode (const char *name)
 
bool AddChild (ScopedXmlPtr< xmlNode >::type child)
 
+bool AddElements (const std::vector< Element > &elements)
 Adds Elements to this node using the Element struct.
 
void SetStringAttribute (const char *attribute_name, const std::string &attribute)
 
void SetIntegerAttribute (const char *attribute_name, uint64_t number)
 
void SetFloatingPointAttribute (const char *attribute_name, double number)
 
void SetId (uint32_t id)
 
void SetContent (const std::string &content)
 
ScopedXmlPtr< xmlNode >::type PassScopedPtr ()
 
xmlNodePtr Release ()
 
xmlNodePtr GetRawPtr ()
 
+ + + +

+Protected Member Functions

RepresentationBaseXmlNode (const char *name)
 
+

Detailed Description

+

This corresponds to RepresentationBaseType in MPD. RepresentationBaseType is not a concrete element type so this should not get instantiated on its own. AdaptationSet and Representation are subtypes of this.

+ +

Definition at line 96 of file xml_node.h.

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d1/dd5/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode.png b/sdk/d1/dd5/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode.png new file mode 100644 index 0000000000..3db3d879d1 Binary files /dev/null and b/sdk/d1/dd5/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode.png differ diff --git a/sdk/d1/de2/composition__offset__iterator_8cc_source.html b/sdk/d1/de2/composition__offset__iterator_8cc_source.html new file mode 100644 index 0000000000..69da78f062 --- /dev/null +++ b/sdk/d1/de2/composition__offset__iterator_8cc_source.html @@ -0,0 +1,167 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/composition_offset_iterator.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
composition_offset_iterator.cc
+
+
+
1 // Copyright 2014 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/formats/mp4/composition_offset_iterator.h"
+
8 
+
9 #include "packager/base/logging.h"
+
10 
+
11 namespace edash_packager {
+
12 namespace media {
+
13 namespace mp4 {
+
14 
+ +
16  const CompositionTimeToSample& composition_time_to_sample)
+
17  : sample_index_(0),
+
18  composition_offset_table_(composition_time_to_sample.composition_offset),
+
19  iterator_(composition_offset_table_.begin()) {}
+
20 CompositionOffsetIterator::~CompositionOffsetIterator() {}
+
21 
+ +
23  ++sample_index_;
+
24  if (sample_index_ >= iterator_->sample_count) {
+
25  ++iterator_;
+
26  if (iterator_ == composition_offset_table_.end())
+
27  return false;
+
28  sample_index_ = 0;
+
29  }
+
30  return true;
+
31 }
+
32 
+ +
34  return iterator_ != composition_offset_table_.end() &&
+
35  sample_index_ < iterator_->sample_count;
+
36 }
+
37 
+
38 int64_t CompositionOffsetIterator::SampleOffset(uint32_t sample) const {
+
39  uint32_t current_sample = 0;
+
40  std::vector<CompositionOffset>::const_iterator it =
+
41  composition_offset_table_.begin();
+
42  for (; it != composition_offset_table_.end(); ++it) {
+
43  current_sample += it->sample_count;
+
44  if (current_sample >= sample)
+
45  return it->sample_offset;
+
46  }
+
47  DCHECK_LE(sample, current_sample) << " Sample is invalid";
+
48  return 0;
+
49 }
+
50 
+ +
52  uint32_t num_samples = 0;
+
53  std::vector<CompositionOffset>::const_iterator it =
+
54  composition_offset_table_.begin();
+
55  for (; it != composition_offset_table_.end(); ++it) {
+
56  num_samples += it->sample_count;
+
57  }
+
58  return num_samples;
+
59 }
+
60 
+
61 } // namespace mp4
+
62 } // namespace media
+
63 } // namespace edash_packager
+ + +
CompositionOffsetIterator(const CompositionTimeToSample &composition_time_to_sample)
Create CompositionOffsetIterator from composition time to sample box.
+ + + +
+ + + + diff --git a/sdk/d1/df0/aes__encryptor_8h_source.html b/sdk/d1/df0/aes__encryptor_8h_source.html new file mode 100644 index 0000000000..eef590256d --- /dev/null +++ b/sdk/d1/df0/aes__encryptor_8h_source.html @@ -0,0 +1,313 @@ + + + + + + +DASH Media Packaging SDK: media/base/aes_encryptor.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
aes_encryptor.h
+
+
+
1 // Copyright 2014 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 // AES Encryptor implementation using openssl.
+
8 
+
9 #ifndef MEDIA_BASE_AES_ENCRYPTOR_H_
+
10 #define MEDIA_BASE_AES_ENCRYPTOR_H_
+
11 
+
12 #include <string>
+
13 #include <vector>
+
14 
+
15 #include "packager/base/memory/scoped_ptr.h"
+
16 #include "packager/base/stl_util.h"
+
17 
+
18 struct aes_key_st;
+
19 typedef struct aes_key_st AES_KEY;
+
20 
+
21 namespace edash_packager {
+
22 namespace media {
+
23 
+
24 // Class which implements AES-CTR counter-mode encryption/decryption.
+ +
26  public:
+ +
28  ~AesCtrEncryptor();
+
29 
+
35  bool InitializeWithRandomIv(const std::vector<uint8_t>& key, uint8_t iv_size);
+
36 
+
42  bool InitializeWithIv(const std::vector<uint8_t>& key,
+
43  const std::vector<uint8_t>& iv);
+
44 
+
48  bool Encrypt(const uint8_t* plaintext,
+
49  size_t plaintext_size,
+
50  uint8_t* ciphertext);
+
51 
+
52  bool Encrypt(const std::vector<uint8_t>& plaintext,
+
53  std::vector<uint8_t>* ciphertext) {
+
54  ciphertext->resize(plaintext.size());
+
55  return Encrypt(&plaintext[0], plaintext.size(), &(*ciphertext)[0]);
+
56  }
+
57 
+
58  bool Encrypt(const std::string& plaintext, std::string* ciphertext) {
+
59  ciphertext->resize(plaintext.size());
+
60  return Encrypt(reinterpret_cast<const uint8_t*>(plaintext.data()),
+
61  plaintext.size(),
+
62  reinterpret_cast<uint8_t*>(string_as_array(ciphertext)));
+
63  }
+
65 
+
66  // For AES CTR, encryption and decryption are identical.
+
67  bool Decrypt(const uint8_t* ciphertext,
+
68  size_t ciphertext_size,
+
69  uint8_t* plaintext) {
+
70  return Encrypt(ciphertext, ciphertext_size, plaintext);
+
71  }
+
72 
+
73  bool Decrypt(const std::vector<uint8_t>& ciphertext,
+
74  std::vector<uint8_t>* plaintext) {
+
75  return Encrypt(ciphertext, plaintext);
+
76  }
+
77 
+
78  bool Decrypt(const std::string& ciphertext, std::string* plaintext) {
+
79  return Encrypt(ciphertext, plaintext);
+
80  }
+
81 
+
86  void UpdateIv();
+
87 
+
90  bool SetIv(const std::vector<uint8_t>& iv);
+
91 
+
92  const std::vector<uint8_t>& iv() const { return iv_; }
+
93 
+
94  uint32_t block_offset() const { return block_offset_; }
+
95 
+
96  private:
+
97  // Initialization vector, with size 8 or 16.
+
98  std::vector<uint8_t> iv_;
+
99  // Current block offset.
+
100  uint32_t block_offset_;
+
101  // Openssl AES_KEY.
+
102  scoped_ptr<AES_KEY> aes_key_;
+
103  // Current AES-CTR counter.
+
104  std::vector<uint8_t> counter_;
+
105  // Encrypted counter.
+
106  std::vector<uint8_t> encrypted_counter_;
+
107  // Keep track of whether the counter has overflowed.
+
108  bool counter_overflow_;
+
109 
+
110  DISALLOW_COPY_AND_ASSIGN(AesCtrEncryptor);
+
111 };
+
112 
+
113 // Class which implements AES-CBC (Cipher block chaining) encryption with
+
114 // PKCS#5 padding.
+ +
116  public:
+ + +
119 
+
125  bool InitializeWithIv(const std::vector<uint8_t>& key,
+
126  const std::vector<uint8_t>& iv);
+
127 
+
130  void Encrypt(const std::string& plaintext, std::string* ciphertext);
+
131 
+
133  bool SetIv(const std::vector<uint8_t>& iv);
+
134 
+
135  const std::vector<uint8_t>& iv() const { return iv_; }
+
136 
+
137  private:
+
138  std::vector<uint8_t> iv_;
+
139  scoped_ptr<AES_KEY> encrypt_key_;
+
140 
+
141  DISALLOW_COPY_AND_ASSIGN(AesCbcPkcs5Encryptor);
+
142 };
+
143 
+
144 // Class which implements AES-CBC (Cipher block chaining) decryption with
+
145 // PKCS#5 padding.
+ +
147  public:
+ + +
150 
+
156  bool InitializeWithIv(const std::vector<uint8_t>& key,
+
157  const std::vector<uint8_t>& iv);
+
158 
+
162  bool Decrypt(const std::string& ciphertext, std::string* plaintext);
+
163 
+
165  bool SetIv(const std::vector<uint8_t>& iv);
+
166 
+
167  const std::vector<uint8_t>& iv() const { return iv_; }
+
168 
+
169  private:
+
170  std::vector<uint8_t> iv_;
+
171  scoped_ptr<AES_KEY> decrypt_key_;
+
172 
+
173  DISALLOW_COPY_AND_ASSIGN(AesCbcPkcs5Decryptor);
+
174 };
+
175 
+
176 // Class which implements AES-CBC (Cipher block chaining) encryption with
+
177 // Ciphertext stealing.
+ +
179  public:
+ + +
182 
+
188  bool InitializeWithIv(const std::vector<uint8_t>& key,
+
189  const std::vector<uint8_t>& iv);
+
190 
+
196  void Encrypt(const uint8_t* plaintext, size_t size, uint8_t* ciphertext);
+
197 
+
201  void Encrypt(const std::vector<uint8_t>& plaintext,
+
202  std::vector<uint8_t>* ciphertext);
+
203 
+
206  bool SetIv(const std::vector<uint8_t>& iv);
+
207 
+
208  const std::vector<uint8_t>& iv() const { return iv_; }
+
209 
+
210  private:
+
211  std::vector<uint8_t> iv_;
+
212  scoped_ptr<AES_KEY> encrypt_key_;
+
213 
+
214  DISALLOW_COPY_AND_ASSIGN(AesCbcCtsEncryptor);
+
215 };
+
216 
+
217 // Class which implements AES-CBC (Cipher block chaining) decryption with
+
218 // Ciphertext stealing.
+ +
220  public:
+ + +
223 
+
229  bool InitializeWithIv(const std::vector<uint8_t>& key,
+
230  const std::vector<uint8_t>& iv);
+
231 
+
237  void Decrypt(const uint8_t* ciphertext, size_t size, uint8_t* plaintext);
+
238 
+
242  void Decrypt(const std::vector<uint8_t>& ciphertext,
+
243  std::vector<uint8_t>* plaintext);
+
244 
+
246  bool SetIv(const std::vector<uint8_t>& iv);
+
247 
+
248  const std::vector<uint8_t>& iv() const { return iv_; }
+
249 
+
250  private:
+
251  std::vector<uint8_t> iv_;
+
252  scoped_ptr<AES_KEY> decrypt_key_;
+
253 
+
254  DISALLOW_COPY_AND_ASSIGN(AesCbcCtsDecryptor);
+
255 };
+
256 
+
257 } // namespace media
+
258 } // namespace edash_packager
+
259 
+
260 #endif // MEDIA_BASE_AES_ENCRYPTOR_H_
+
void Encrypt(const uint8_t *plaintext, size_t size, uint8_t *ciphertext)
+
bool SetIv(const std::vector< uint8_t > &iv)
+
bool InitializeWithIv(const std::vector< uint8_t > &key, const std::vector< uint8_t > &iv)
+
void Decrypt(const uint8_t *ciphertext, size_t size, uint8_t *plaintext)
+
bool SetIv(const std::vector< uint8_t > &iv)
+
bool SetIv(const std::vector< uint8_t > &iv)
+
bool SetIv(const std::vector< uint8_t > &iv)
+ + +
bool SetIv(const std::vector< uint8_t > &iv)
+
bool InitializeWithIv(const std::vector< uint8_t > &key, const std::vector< uint8_t > &iv)
+
bool Decrypt(const std::string &ciphertext, std::string *plaintext)
+ +
void Encrypt(const std::string &plaintext, std::string *ciphertext)
+
bool InitializeWithIv(const std::vector< uint8_t > &key, const std::vector< uint8_t > &iv)
+
bool InitializeWithRandomIv(const std::vector< uint8_t > &key, uint8_t iv_size)
+
bool InitializeWithIv(const std::vector< uint8_t > &key, const std::vector< uint8_t > &iv)
+
bool InitializeWithIv(const std::vector< uint8_t > &key, const std::vector< uint8_t > &iv)
+ + + +
+ + + + diff --git a/sdk/d1/df1/multi__segment__segmenter_8cc_source.html b/sdk/d1/df1/multi__segment__segmenter_8cc_source.html new file mode 100644 index 0000000000..f6b23ff291 --- /dev/null +++ b/sdk/d1/df1/multi__segment__segmenter_8cc_source.html @@ -0,0 +1,311 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/multi_segment_segmenter.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
multi_segment_segmenter.cc
+
+
+
1 // Copyright 2014 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/formats/mp4/multi_segment_segmenter.h"
+
8 
+
9 #include "packager/base/strings/string_number_conversions.h"
+
10 #include "packager/base/strings/string_util.h"
+
11 #include "packager/media/base/buffer_writer.h"
+
12 #include "packager/media/base/media_stream.h"
+
13 #include "packager/media/base/muxer_options.h"
+
14 #include "packager/media/base/muxer_util.h"
+
15 #include "packager/media/event/muxer_listener.h"
+
16 #include "packager/media/file/file.h"
+
17 #include "packager/media/formats/mp4/box_definitions.h"
+
18 
+
19 namespace edash_packager {
+
20 namespace media {
+
21 namespace mp4 {
+
22 
+
23 MultiSegmentSegmenter::MultiSegmentSegmenter(const MuxerOptions& options,
+
24  scoped_ptr<FileType> ftyp,
+
25  scoped_ptr<Movie> moov)
+
26  : Segmenter(options, ftyp.Pass(), moov.Pass()),
+
27  styp_(new SegmentType),
+
28  num_segments_(0) {
+
29  // Use the same brands for styp as ftyp.
+
30  styp_->major_brand = Segmenter::ftyp()->major_brand;
+
31  styp_->compatible_brands = Segmenter::ftyp()->compatible_brands;
+
32 }
+
33 
+
34 MultiSegmentSegmenter::~MultiSegmentSegmenter() {}
+
35 
+
36 bool MultiSegmentSegmenter::GetInitRange(size_t* offset, size_t* size) {
+
37  DLOG(INFO) << "MultiSegmentSegmenter outputs init segment: "
+
38  << options().output_file_name;
+
39  return false;
+
40 }
+
41 
+
42 bool MultiSegmentSegmenter::GetIndexRange(size_t* offset, size_t* size) {
+
43  DLOG(INFO) << "MultiSegmentSegmenter does not have index range.";
+
44  return false;
+
45 }
+
46 
+
47 Status MultiSegmentSegmenter::DoInitialize() {
+
48  DCHECK(ftyp());
+
49  DCHECK(moov());
+
50  // Generate the output file with init segment.
+
51  File* file = File::Open(options().output_file_name.c_str(), "w");
+
52  if (file == NULL) {
+
53  return Status(error::FILE_FAILURE,
+
54  "Cannot open file for write " + options().output_file_name);
+
55  }
+
56  scoped_ptr<BufferWriter> buffer(new BufferWriter);
+
57  ftyp()->Write(buffer.get());
+
58  moov()->Write(buffer.get());
+
59  Status status = buffer->WriteToFile(file);
+
60  if (!file->Close()) {
+
61  LOG(WARNING) << "Failed to close the file properly: "
+
62  << options().output_file_name;
+
63  }
+
64  return status;
+
65 }
+
66 
+
67 Status MultiSegmentSegmenter::DoFinalize() {
+
68  SetComplete();
+
69  return Status::OK;
+
70 }
+
71 
+
72 Status MultiSegmentSegmenter::DoFinalizeSegment() {
+
73  DCHECK(sidx());
+
74  // earliest_presentation_time is the earliest presentation time of any
+
75  // access unit in the reference stream in the first subsegment.
+
76  // It will be re-calculated later when subsegments are finalized.
+
77  sidx()->earliest_presentation_time =
+
78  sidx()->references[0].earliest_presentation_time;
+
79 
+
80  if (options().num_subsegments_per_sidx <= 0)
+
81  return WriteSegment();
+
82 
+
83  // sidx() contains pre-generated segment references with one reference per
+
84  // fragment. Calculate |num_fragments_per_subsegment| and combine
+
85  // pre-generated references into final subsegment references.
+
86  uint32_t num_fragments = sidx()->references.size();
+
87  uint32_t num_fragments_per_subsegment =
+
88  (num_fragments - 1) / options().num_subsegments_per_sidx + 1;
+
89  if (num_fragments_per_subsegment <= 1)
+
90  return WriteSegment();
+
91 
+
92  uint32_t frag_index = 0;
+
93  uint32_t subseg_index = 0;
+
94  std::vector<SegmentReference>& refs = sidx()->references;
+
95  uint64_t first_sap_time =
+
96  refs[0].sap_delta_time + refs[0].earliest_presentation_time;
+
97  for (uint32_t i = 1; i < num_fragments; ++i) {
+
98  refs[subseg_index].referenced_size += refs[i].referenced_size;
+
99  refs[subseg_index].subsegment_duration += refs[i].subsegment_duration;
+
100  refs[subseg_index].earliest_presentation_time =
+
101  std::min(refs[subseg_index].earliest_presentation_time,
+
102  refs[i].earliest_presentation_time);
+
103  if (refs[subseg_index].sap_type == SegmentReference::TypeUnknown &&
+
104  refs[i].sap_type != SegmentReference::TypeUnknown) {
+
105  refs[subseg_index].sap_type = refs[i].sap_type;
+
106  first_sap_time =
+
107  refs[i].sap_delta_time + refs[i].earliest_presentation_time;
+
108  }
+
109  if (++frag_index >= num_fragments_per_subsegment) {
+
110  // Calculate sap delta time w.r.t. sidx_->earliest_presentation_time.
+
111  if (refs[subseg_index].sap_type != SegmentReference::TypeUnknown) {
+
112  refs[subseg_index].sap_delta_time =
+
113  first_sap_time - refs[subseg_index].earliest_presentation_time;
+
114  }
+
115  if (++i >= num_fragments)
+
116  break;
+
117  refs[++subseg_index] = refs[i];
+
118  first_sap_time =
+
119  refs[i].sap_delta_time + refs[i].earliest_presentation_time;
+
120  frag_index = 1;
+
121  }
+
122  }
+
123 
+
124  refs.resize(options().num_subsegments_per_sidx);
+
125 
+
126  // earliest_presentation_time is the earliest presentation time of any
+
127  // access unit in the reference stream in the first subsegment.
+
128  sidx()->earliest_presentation_time = refs[0].earliest_presentation_time;
+
129 
+
130  return WriteSegment();
+
131 }
+
132 
+
133 Status MultiSegmentSegmenter::WriteSegment() {
+
134  DCHECK(sidx());
+
135  DCHECK(fragment_buffer());
+
136  DCHECK(styp_);
+
137 
+
138  scoped_ptr<BufferWriter> buffer(new BufferWriter());
+
139  File* file;
+
140  std::string file_name;
+
141  if (options().segment_template.empty()) {
+
142  // Append the segment to output file if segment template is not specified.
+
143  file_name = options().output_file_name.c_str();
+
144  file = File::Open(file_name.c_str(), "a");
+
145  if (file == NULL) {
+
146  return Status(
+
147  error::FILE_FAILURE,
+
148  "Cannot open file for append " + options().output_file_name);
+
149  }
+
150  } else {
+
151  file = File::Open(GetSegmentName(options().segment_template,
+
152  sidx()->earliest_presentation_time,
+
153  num_segments_++,
+
154  options().bandwidth).c_str(),
+
155  "w");
+
156  if (file == NULL) {
+
157  return Status(error::FILE_FAILURE,
+
158  "Cannot open file for write " + file_name);
+
159  }
+
160  styp_->Write(buffer.get());
+
161  }
+
162 
+
163  // If num_subsegments_per_sidx is negative, no SIDX box is generated.
+
164  if (options().num_subsegments_per_sidx >= 0)
+
165  sidx()->Write(buffer.get());
+
166 
+
167  const size_t segment_size = buffer->Size() + fragment_buffer()->Size();
+
168  DCHECK_NE(segment_size, 0u);
+
169 
+
170  Status status = buffer->WriteToFile(file);
+
171  if (status.ok())
+
172  status = fragment_buffer()->WriteToFile(file);
+
173 
+
174  if (!file->Close())
+
175  LOG(WARNING) << "Failed to close the file properly: " << file_name;
+
176 
+
177  if (!status.ok())
+
178  return status;
+
179 
+
180  uint64_t segment_duration = 0;
+
181  // ISO/IEC 23009-1:2012: the value shall be identical to sum of the the
+
182  // values of all Subsegment_duration fields in the first ‘sidx’ box.
+
183  for (size_t i = 0; i < sidx()->references.size(); ++i)
+
184  segment_duration += sidx()->references[i].subsegment_duration;
+
185 
+
186  UpdateProgress(segment_duration);
+
187  if (muxer_listener()) {
+
188  muxer_listener()->OnSampleDurationReady(sample_duration());
+
189  muxer_listener()->OnNewSegment(
+
190  sidx()->earliest_presentation_time, segment_duration, segment_size);
+
191  }
+
192 
+
193  return Status::OK;
+
194 }
+
195 
+
196 } // namespace mp4
+
197 } // namespace media
+
198 } // namespace edash_packager
+ + +
Define an abstract file interface.
Definition: file.h:22
+
virtual bool Open()=0
Internal open. Should not be used directly.
+ + +
virtual bool GetInitRange(size_t *offset, size_t *size) OVERRIDE
+
virtual bool GetIndexRange(size_t *offset, size_t *size) OVERRIDE
+ +
void UpdateProgress(uint64_t progress)
Update segmentation progress using ProgressListener.
Definition: segmenter.cc:333
+ +
void Write(BufferWriter *writer)
Definition: box.cc:25
+
void SetComplete()
Set progress to 100%.
Definition: segmenter.cc:349
+
virtual void OnSampleDurationReady(uint32_t sample_duration)=0
+ +
+ + + + diff --git a/sdk/d1/dfc/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample-members.html b/sdk/d1/dfc/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample-members.html new file mode 100644 index 0000000000..db3a2634cd --- /dev/null +++ b/sdk/d1/dfc/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample-members.html @@ -0,0 +1,109 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::wvm::DemuxStreamIdMediaSample Member List
+
+
+ +

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

+ + + + + + +
demux_stream_id (defined in edash_packager::media::wvm::DemuxStreamIdMediaSample)edash_packager::media::wvm::DemuxStreamIdMediaSample
DemuxStreamIdMediaSample() (defined in edash_packager::media::wvm::DemuxStreamIdMediaSample)edash_packager::media::wvm::DemuxStreamIdMediaSample
media_sample (defined in edash_packager::media::wvm::DemuxStreamIdMediaSample)edash_packager::media::wvm::DemuxStreamIdMediaSample
parsed_audio_or_video_stream_id (defined in edash_packager::media::wvm::DemuxStreamIdMediaSample)edash_packager::media::wvm::DemuxStreamIdMediaSample
~DemuxStreamIdMediaSample() (defined in edash_packager::media::wvm::DemuxStreamIdMediaSample)edash_packager::media::wvm::DemuxStreamIdMediaSample
+ + + + diff --git a/sdk/d2/d02/timestamp_8h_source.html b/sdk/d2/d02/timestamp_8h_source.html new file mode 100644 index 0000000000..b720cadbc0 --- /dev/null +++ b/sdk/d2/d02/timestamp_8h_source.html @@ -0,0 +1,122 @@ + + + + + + +DASH Media Packaging SDK: media/base/timestamp.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
timestamp.h
+
+
+
1 // Copyright 2014 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 
+
8 #ifndef MEDIA_BASE_TIMESTAMP_H_
+
9 #define MEDIA_BASE_TIMESTAMP_H_
+
10 
+
11 #include <stdint.h>
+
12 
+
13 #include <limits>
+
14 
+
15 namespace edash_packager {
+
16 namespace media {
+
17 
+
18 const int64_t kNoTimestamp = std::numeric_limits<int64_t>::min();
+
19 const int64_t kInfiniteDuration = std::numeric_limits<int64_t>::max();
+
20 
+
21 } // namespace media
+
22 } // namespace edash_packager
+
23 
+
24 #endif // MEDIA_BASE_TIMESTAMP_H_
+
+ + + + diff --git a/sdk/d2/d0f/structedash__packager_1_1media_1_1mp4_1_1MediaInformation-members.html b/sdk/d2/d0f/structedash__packager_1_1media_1_1mp4_1_1MediaInformation-members.html new file mode 100644 index 0000000000..97747f5bf6 --- /dev/null +++ b/sdk/d2/d0f/structedash__packager_1_1media_1_1mp4_1_1MediaInformation-members.html @@ -0,0 +1,118 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::MediaInformation Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::MediaInformation)edash_packager::media::mp4::MediaInformationvirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::MediaInformationvirtual
dinf (defined in edash_packager::media::mp4::MediaInformation)edash_packager::media::mp4::MediaInformation
MediaInformation() (defined in edash_packager::media::mp4::MediaInformation)edash_packager::media::mp4::MediaInformation
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::MediaInformationvirtual
sample_table (defined in edash_packager::media::mp4::MediaInformation)edash_packager::media::mp4::MediaInformation
smhd (defined in edash_packager::media::mp4::MediaInformation)edash_packager::media::mp4::MediaInformation
vmhd (defined in edash_packager::media::mp4::MediaInformation)edash_packager::media::mp4::MediaInformation
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~MediaInformation() (defined in edash_packager::media::mp4::MediaInformation)edash_packager::media::mp4::MediaInformationvirtual
+ + + + diff --git a/sdk/d2/d17/ts__section__pat_8cc_source.html b/sdk/d2/d17/ts__section__pat_8cc_source.html new file mode 100644 index 0000000000..c6394d6657 --- /dev/null +++ b/sdk/d2/d17/ts__section__pat_8cc_source.html @@ -0,0 +1,222 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp2t/ts_section_pat.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ts_section_pat.cc
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/formats/mp2t/ts_section_pat.h"
+
6 
+
7 #include <vector>
+
8 
+
9 #include "packager/base/logging.h"
+
10 #include "packager/media/base/bit_reader.h"
+
11 #include "packager/media/formats/mp2t/mp2t_common.h"
+
12 
+
13 namespace edash_packager {
+
14 namespace media {
+
15 namespace mp2t {
+
16 
+
17 TsSectionPat::TsSectionPat(const RegisterPmtCb& register_pmt_cb)
+
18  : register_pmt_cb_(register_pmt_cb),
+
19  version_number_(-1) {
+
20 }
+
21 
+
22 TsSectionPat::~TsSectionPat() {
+
23 }
+
24 
+
25 bool TsSectionPat::ParsePsiSection(BitReader* bit_reader) {
+
26  // Read the fixed section length.
+
27  int table_id;
+
28  int section_syntax_indicator;
+
29  int dummy_zero;
+
30  int reserved;
+
31  int section_length;
+
32  int transport_stream_id;
+
33  int version_number;
+
34  int current_next_indicator;
+
35  int section_number;
+
36  int last_section_number;
+
37  RCHECK(bit_reader->ReadBits(8, &table_id));
+
38  RCHECK(bit_reader->ReadBits(1, &section_syntax_indicator));
+
39  RCHECK(bit_reader->ReadBits(1, &dummy_zero));
+
40  RCHECK(bit_reader->ReadBits(2, &reserved));
+
41  RCHECK(bit_reader->ReadBits(12, &section_length));
+
42  RCHECK(section_length >= 5);
+
43  RCHECK(section_length <= 1021);
+
44  RCHECK(bit_reader->ReadBits(16, &transport_stream_id));
+
45  RCHECK(bit_reader->ReadBits(2, &reserved));
+
46  RCHECK(bit_reader->ReadBits(5, &version_number));
+
47  RCHECK(bit_reader->ReadBits(1, &current_next_indicator));
+
48  RCHECK(bit_reader->ReadBits(8, &section_number));
+
49  RCHECK(bit_reader->ReadBits(8, &last_section_number));
+
50  section_length -= 5;
+
51 
+
52  // Perform a few verifications:
+
53  // - Table ID should be 0 for a PAT.
+
54  // - section_syntax_indicator should be one.
+
55  // - section length should not exceed 1021
+
56  RCHECK(table_id == 0x0);
+
57  RCHECK(section_syntax_indicator);
+
58  RCHECK(!dummy_zero);
+
59 
+
60  // Both the program table and the CRC have a size multiple of 4.
+
61  // Note for pmt_pid_count: minus 4 to account for the CRC.
+
62  RCHECK((section_length % 4) == 0);
+
63  int pmt_pid_count = (section_length - 4) / 4;
+
64 
+
65  // Read the variable length section: program table & crc.
+
66  std::vector<int> program_number_array(pmt_pid_count);
+
67  std::vector<int> pmt_pid_array(pmt_pid_count);
+
68  for (int k = 0; k < pmt_pid_count; k++) {
+
69  int reserved;
+
70  RCHECK(bit_reader->ReadBits(16, &program_number_array[k]));
+
71  RCHECK(bit_reader->ReadBits(3, &reserved));
+
72  RCHECK(bit_reader->ReadBits(13, &pmt_pid_array[k]));
+
73  }
+
74  int crc32;
+
75  RCHECK(bit_reader->ReadBits(32, &crc32));
+
76 
+
77  // Just ignore the PAT if not applicable yet.
+
78  if (!current_next_indicator) {
+
79  DVLOG(1) << "Not supported: received a PAT not applicable yet";
+
80  return true;
+
81  }
+
82 
+
83  // Ignore the program table if it hasn't changed.
+
84  if (version_number == version_number_)
+
85  return true;
+
86 
+
87  // Both the MSE and the HLS spec specifies that TS streams should convey
+
88  // exactly one program.
+
89  if (pmt_pid_count > 1) {
+
90  DVLOG(1) << "Multiple programs detected in the Mpeg2 TS stream";
+
91  return false;
+
92  }
+
93 
+
94  // Can now register the PMT.
+
95 #if !defined(NDEBUG)
+
96  int expected_version_number = version_number;
+
97  if (version_number_ >= 0)
+
98  expected_version_number = (version_number_ + 1) % 32;
+
99  DVLOG_IF(1, version_number != expected_version_number)
+
100  << "Unexpected version number: "
+
101  << version_number << " vs " << version_number_;
+
102 #endif
+
103  for (int k = 0; k < pmt_pid_count; k++) {
+
104  if (program_number_array[k] != 0) {
+
105  // Program numbers different from 0 correspond to PMT.
+
106  register_pmt_cb_.Run(program_number_array[k], pmt_pid_array[k]);
+
107  // Even if there are multiple programs, only one can be supported now.
+
108  // HLS: "Transport Stream segments MUST contain a single MPEG-2 Program."
+
109  break;
+
110  }
+
111  }
+
112  version_number_ = version_number;
+
113 
+
114  return true;
+
115 }
+
116 
+
117 void TsSectionPat::ResetPsiSection() {
+
118  version_number_ = -1;
+
119 }
+
120 
+
121 } // namespace mp2t
+
122 } // namespace media
+
123 } // namespace edash_packager
+
124 
+
+ + + + diff --git a/sdk/d2/d23/threaded__io__file_8cc_source.html b/sdk/d2/d23/threaded__io__file_8cc_source.html new file mode 100644 index 0000000000..61c1045fbe --- /dev/null +++ b/sdk/d2/d23/threaded__io__file_8cc_source.html @@ -0,0 +1,269 @@ + + + + + + +DASH Media Packaging SDK: media/file/threaded_io_file.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
threaded_io_file.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/file/threaded_io_file.h"
+
8 
+
9 #include "packager/base/bind.h"
+
10 #include "packager/base/bind_helpers.h"
+
11 #include "packager/base/threading/platform_thread.h"
+
12 #include "packager/media/base/closure_thread.h"
+
13 
+
14 namespace edash_packager {
+
15 namespace media {
+
16 
+
17 ThreadedIoFile::ThreadedIoFile(scoped_ptr<File, FileCloser> internal_file,
+
18  Mode mode,
+
19  uint64_t io_cache_size,
+
20  uint64_t io_block_size)
+
21  : File(internal_file->file_name()),
+
22  internal_file_(internal_file.Pass()),
+
23  mode_(mode),
+
24  cache_(io_cache_size),
+
25  io_buffer_(io_block_size),
+
26  size_(0),
+
27  eof_(false),
+
28  internal_file_error_(0) {
+
29  DCHECK(internal_file_);
+
30 }
+
31 
+
32 ThreadedIoFile::~ThreadedIoFile() {}
+
33 
+ +
35  DCHECK(internal_file_);
+
36 
+
37  if (!internal_file_->Open())
+
38  return false;
+
39 
+
40  size_ = internal_file_->Size();
+
41 
+
42  thread_.reset(new ClosureThread("ThreadedIoFile",
+
43  base::Bind(mode_ == kInputMode ?
+
44  &ThreadedIoFile::RunInInputMode :
+
45  &ThreadedIoFile::RunInOutputMode,
+
46  base::Unretained(this))));
+
47  thread_->Start();
+
48  return true;
+
49 }
+
50 
+ +
52  DCHECK(internal_file_);
+
53  DCHECK(thread_);
+
54 
+
55  if (mode_ == kOutputMode)
+
56  Flush();
+
57 
+
58  cache_.Close();
+
59  thread_->Join();
+
60 
+
61  bool result = internal_file_.release()->Close();
+
62  delete this;
+
63  return result;
+
64 }
+
65 
+
66 int64_t ThreadedIoFile::Read(void* buffer, uint64_t length) {
+
67  DCHECK(internal_file_);
+
68  DCHECK(thread_);
+
69  DCHECK_EQ(kInputMode, mode_);
+
70 
+
71  if (internal_file_error_)
+
72  return internal_file_error_;
+
73 
+
74  if (eof_ && !cache_.BytesCached())
+
75  return 0;
+
76 
+
77  return cache_.Read(buffer, length);
+
78 }
+
79 
+
80 int64_t ThreadedIoFile::Write(const void* buffer, uint64_t length) {
+
81  DCHECK(internal_file_);
+
82  DCHECK(thread_);
+
83  DCHECK_EQ(kOutputMode, mode_);
+
84 
+
85  if (internal_file_error_)
+
86  return internal_file_error_;
+
87 
+
88  size_ += length;
+
89  return cache_.Write(buffer, length);
+
90 }
+
91 
+ +
93  DCHECK(internal_file_);
+
94  DCHECK(thread_);
+
95 
+
96  return size_;
+
97 }
+
98 
+ +
100  DCHECK(internal_file_);
+
101  DCHECK(thread_);
+
102  DCHECK_EQ(kOutputMode, mode_);
+
103 
+
104  cache_.WaitUntilEmptyOrClosed();
+
105  return internal_file_->Flush();
+
106 }
+
107 
+
108 void ThreadedIoFile::RunInInputMode() {
+
109  DCHECK(internal_file_);
+
110  DCHECK(thread_);
+
111  DCHECK_EQ(kInputMode, mode_);
+
112 
+
113  while (true) {
+
114  int64_t read_result = internal_file_->Read(&io_buffer_[0],
+
115  io_buffer_.size());
+
116  if (read_result <= 0) {
+
117  eof_ = read_result == 0;
+
118  internal_file_error_ = read_result;
+
119  cache_.Close();
+
120  return;
+
121  }
+
122  cache_.Write(&io_buffer_[0], read_result);
+
123  }
+
124 }
+
125 
+
126 bool ThreadedIoFile::Seek(uint64_t position) {
+
127  NOTIMPLEMENTED();
+
128  return false;
+
129 }
+
130 
+
131 bool ThreadedIoFile::Tell(uint64_t* position) {
+
132  NOTIMPLEMENTED();
+
133  return false;
+
134 }
+
135 
+
136 void ThreadedIoFile::RunInOutputMode() {
+
137  DCHECK(internal_file_);
+
138  DCHECK(thread_);
+
139  DCHECK_EQ(kOutputMode, mode_);
+
140 
+
141  while (true) {
+
142  uint64_t write_bytes = cache_.Read(&io_buffer_[0], io_buffer_.size());
+
143  if (write_bytes == 0)
+
144  return;
+
145 
+
146  int64_t write_result = internal_file_->Write(&io_buffer_[0], write_bytes);
+
147  if (write_result < 0) {
+
148  internal_file_error_ = write_result;
+
149  cache_.Close();
+
150  return;
+
151  }
+
152  CHECK_EQ(write_result, static_cast<int64_t>(write_bytes));
+
153  }
+
154 }
+
155 
+
156 } // namespace media
+
157 } // namespace edash_packager
+ +
virtual int64_t Write(const void *buffer, uint64_t length) OVERRIDE
+ +
virtual int64_t Read(void *buffer, uint64_t length) OVERRIDE
+ +
void WaitUntilEmptyOrClosed()
Waits until the cache is empty or has been closed.
Definition: io_cache.cc:136
+
uint64_t Write(const void *buffer, uint64_t size)
Definition: io_cache.cc:66
+ + +
virtual bool Tell(uint64_t *position) OVERRIDE
+ +
virtual bool Open() OVERRIDE
Internal open. Should not be used directly.
+
virtual bool Seek(uint64_t position) OVERRIDE
+
uint64_t Read(void *buffer, uint64_t size)
Definition: io_cache.cc:38
+
+ + + + diff --git a/sdk/d2/d24/packager__util_8h_source.html b/sdk/d2/d24/packager__util_8h_source.html new file mode 100644 index 0000000000..ce03fc42d2 --- /dev/null +++ b/sdk/d2/d24/packager__util_8h_source.html @@ -0,0 +1,151 @@ + + + + + + +DASH Media Packaging SDK: app/packager_util.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
packager_util.h
+
+
+
1 // Copyright 2014 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 // Packager utility functions.
+
8 
+
9 #ifndef APP_PACKAGER_UTIL_H_
+
10 #define APP_PACKAGER_UTIL_H_
+
11 
+
12 #include <gflags/gflags.h>
+
13 #include <string>
+
14 #include <vector>
+
15 
+
16 #include "packager/base/memory/scoped_ptr.h"
+
17 
+
18 DECLARE_bool(dump_stream_info);
+
19 
+
20 namespace edash_packager {
+
21 
+
22 struct MpdOptions;
+
23 
+
24 namespace media {
+
25 
+
26 class KeySource;
+
27 class MediaInfo;
+
28 class MediaStream;
+
29 class Muxer;
+
30 struct MuxerOptions;
+
31 
+
33 void DumpStreamInfo(const std::vector<MediaStream*>& streams);
+
34 
+
39 scoped_ptr<KeySource> CreateEncryptionKeySource();
+
40 
+
45 scoped_ptr<KeySource> CreateDecryptionKeySource();
+
46 
+
48 bool AssignFlagsFromProfile();
+
49 
+
51 bool GetMuxerOptions(MuxerOptions* muxer_options);
+
52 
+
54 bool GetMpdOptions(edash_packager::MpdOptions* mpd_options);
+
55 
+
65 bool AddStreamToMuxer(const std::vector<MediaStream*>& streams,
+
66  const std::string& stream_selector,
+
67  const std::string& language_override,
+
68  Muxer* muxer);
+
69 
+
70 } // namespace media
+
71 } // namespace edash_packager
+
72 
+
73 #endif // APP_PACKAGER_UTIL_H_
+
Defines Mpd Options.
Definition: mpd_options.h:13
+
+ + + + diff --git a/sdk/d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html b/sdk/d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html new file mode 100644 index 0000000000..deaa7e7707 --- /dev/null +++ b/sdk/d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html @@ -0,0 +1,192 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::SampleGroupDescription Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::SampleGroupDescription Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::SampleGroupDescription:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + +

+Public Attributes

+uint32_t grouping_type
 
+std::vector
+< CencSampleEncryptionInfoEntry
entries
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 524 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::SampleGroupDescription::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1781 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.png b/sdk/d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.png new file mode 100644 index 0000000000..0cf907005a Binary files /dev/null and b/sdk/d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.png differ diff --git a/sdk/d2/d2d/structedash__packager_1_1media_1_1mp4_1_1MediaHeader-members.html b/sdk/d2/d2d/structedash__packager_1_1media_1_1mp4_1_1MediaHeader-members.html new file mode 100644 index 0000000000..d249c22ebc --- /dev/null +++ b/sdk/d2/d2d/structedash__packager_1_1media_1_1mp4_1_1MediaHeader-members.html @@ -0,0 +1,123 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::MediaHeader Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::MediaHeader)edash_packager::media::mp4::MediaHeadervirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::MediaHeadervirtual
creation_time (defined in edash_packager::media::mp4::MediaHeader)edash_packager::media::mp4::MediaHeader
duration (defined in edash_packager::media::mp4::MediaHeader)edash_packager::media::mp4::MediaHeader
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
language (defined in edash_packager::media::mp4::MediaHeader)edash_packager::media::mp4::MediaHeader
MediaHeader() (defined in edash_packager::media::mp4::MediaHeader)edash_packager::media::mp4::MediaHeader
modification_time (defined in edash_packager::media::mp4::MediaHeader)edash_packager::media::mp4::MediaHeader
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::MediaHeadervirtual
timescale (defined in edash_packager::media::mp4::MediaHeader)edash_packager::media::mp4::MediaHeader
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~MediaHeader() (defined in edash_packager::media::mp4::MediaHeader)edash_packager::media::mp4::MediaHeadervirtual
+ + + + diff --git a/sdk/d2/d48/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader-members.html b/sdk/d2/d48/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader-members.html new file mode 100644 index 0000000000..6e7a51d561 --- /dev/null +++ b/sdk/d2/d48/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader-members.html @@ -0,0 +1,113 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp2t::AdtsHeader Member List
+
+
+ +

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

+ + + + + + + + + + +
AdtsHeader() (defined in edash_packager::media::mp2t::AdtsHeader)edash_packager::media::mp2t::AdtsHeader
GetAdtsFrameSize(const uint8_t *data, size_t num_bytes)edash_packager::media::mp2t::AdtsHeaderstatic
GetAdtsHeaderSize(const uint8_t *data, size_t num_bytes)edash_packager::media::mp2t::AdtsHeaderstatic
GetAudioSpecificConfig(std::vector< uint8_t > *buffer) const edash_packager::media::mp2t::AdtsHeader
GetNumChannels() const edash_packager::media::mp2t::AdtsHeader
GetObjectType() const edash_packager::media::mp2t::AdtsHeader
GetSamplingFrequency() const edash_packager::media::mp2t::AdtsHeader
Parse(const uint8_t *adts_frame, size_t adts_frame_size)edash_packager::media::mp2t::AdtsHeader
~AdtsHeader() (defined in edash_packager::media::mp2t::AdtsHeader)edash_packager::media::mp2t::AdtsHeaderinline
+ + + + diff --git a/sdk/d2/d4b/structedash__packager_1_1media_1_1FileCloser-members.html b/sdk/d2/d4b/structedash__packager_1_1media_1_1FileCloser-members.html new file mode 100644 index 0000000000..478aa6fcff --- /dev/null +++ b/sdk/d2/d4b/structedash__packager_1_1media_1_1FileCloser-members.html @@ -0,0 +1,105 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::FileCloser Member List
+
+
+ +

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

+ + +
operator()(File *file) const (defined in edash_packager::media::FileCloser)edash_packager::media::FileCloserinline
+ + + + diff --git a/sdk/d2/d4d/file_8h_source.html b/sdk/d2/d4d/file_8h_source.html new file mode 100644 index 0000000000..90d3c1fb9d --- /dev/null +++ b/sdk/d2/d4d/file_8h_source.html @@ -0,0 +1,189 @@ + + + + + + +DASH Media Packaging SDK: media/file/file.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
file.h
+
+
+
1 // Copyright 2014 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 PACKAGER_FILE_FILE_H_
+
8 #define PACKAGER_FILE_FILE_H_
+
9 
+
10 #include <stdint.h>
+
11 
+
12 #include <string>
+
13 
+
14 #include "packager/base/macros.h"
+
15 
+
16 namespace edash_packager {
+
17 namespace media {
+
18 
+
19 extern const char* kLocalFilePrefix;
+
20 
+
22 class File {
+
23  public:
+
30  static File* Open(const char* file_name, const char* mode);
+
31 
+
38  static File* OpenWithNoBuffering(const char* file_name, const char* mode);
+
39 
+
43  static bool Delete(const char* file_name);
+
44 
+
50  virtual bool Close() = 0;
+
51 
+
58  virtual int64_t Read(void* buffer, uint64_t length) = 0;
+
59 
+
64  virtual int64_t Write(const void* buffer, uint64_t length) = 0;
+
65 
+
68  virtual int64_t Size() = 0;
+
69 
+
75  virtual bool Flush() = 0;
+
76 
+
80  virtual bool Seek(uint64_t position) = 0;
+
81 
+
86  virtual bool Tell(uint64_t* position) = 0;
+
87 
+
89  const std::string& file_name() const { return file_name_; }
+
90 
+
91  // ************************************************************
+
92  // * Static Methods: File-on-the-filesystem status
+
93  // ************************************************************
+
94 
+
97  static int64_t GetFileSize(const char* file_name);
+
98 
+
103  static bool ReadFileToString(const char* file_name, std::string* contents);
+
104 
+
105  protected:
+
106  explicit File(const std::string& file_name) : file_name_(file_name) {}
+
109  virtual ~File() {}
+
110 
+
112  virtual bool Open() = 0;
+
113 
+
114  private:
+
115  friend class ThreadedIoFile;
+
116 
+
117  // This is a file factory method, it creates a proper file, e.g.
+
118  // LocalFile, MemFile based on prefix.
+
119  static File* Create(const char* file_name, const char* mode);
+
120 
+
121  static File* CreateInternalFile(const char* file_name, const char* mode);
+
122 
+
123  std::string file_name_;
+
124  DISALLOW_COPY_AND_ASSIGN(File);
+
125 };
+
126 
+
127 } // namespace media
+
128 } // namespace edash_packager
+
129 
+
130 #endif // PACKAGER_FILE_FILE_H_
+
static bool ReadFileToString(const char *file_name, std::string *contents)
Definition: file.cc:160
+ +
virtual bool Seek(uint64_t position)=0
+
virtual int64_t Read(void *buffer, uint64_t length)=0
+
static bool Delete(const char *file_name)
Definition: file.cc:138
+
Define an abstract file interface.
Definition: file.h:22
+
virtual bool Open()=0
Internal open. Should not be used directly.
+
const std::string & file_name() const
Definition: file.h:89
+
virtual bool Tell(uint64_t *position)=0
+
virtual int64_t Size()=0
+ +
Declaration of class which implements a thread-safe circular buffer.
+ +
virtual int64_t Write(const void *buffer, uint64_t length)=0
+
static int64_t GetFileSize(const char *file_name)
Definition: file.cc:151
+
static File * OpenWithNoBuffering(const char *file_name, const char *mode)
Definition: file.cc:127
+
+ + + + diff --git a/sdk/d2/d50/structedash__packager_1_1media_1_1H264DecRefPicMarking.html b/sdk/d2/d50/structedash__packager_1_1media_1_1H264DecRefPicMarking.html new file mode 100644 index 0000000000..30f393ee6d --- /dev/null +++ b/sdk/d2/d50/structedash__packager_1_1media_1_1H264DecRefPicMarking.html @@ -0,0 +1,129 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::H264DecRefPicMarking Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::H264DecRefPicMarking Struct Reference
+
+
+ + + + + + + + + + + + +

+Public Attributes

+int memory_mgmnt_control_operation
 
+int difference_of_pic_nums_minus1
 
+int long_term_pic_num
 
+int long_term_frame_idx
 
+int max_long_term_frame_idx_plus1
 
+

Detailed Description

+
+

Definition at line 180 of file h264_parser.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/sdk/d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html b/sdk/d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html new file mode 100644 index 0000000000..2b06b8efd3 --- /dev/null +++ b/sdk/d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html @@ -0,0 +1,194 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::SampleAuxiliaryInformationSize Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::SampleAuxiliaryInformationSize Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::SampleAuxiliaryInformationSize:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + + + +

+Public Attributes

+uint8_t default_sample_info_size
 
+uint32_t sample_count
 
+std::vector< uint8_t > sample_info_sizes
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 65 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::SampleAuxiliaryInformationSize::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 186 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.png b/sdk/d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.png new file mode 100644 index 0000000000..3276cdce54 Binary files /dev/null and b/sdk/d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.png differ diff --git a/sdk/d2/d5b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt.html b/sdk/d2/d5b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt.html new file mode 100644 index 0000000000..ee5d8373b7 --- /dev/null +++ b/sdk/d2/d5b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt.html @@ -0,0 +1,163 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp2t::TsSectionPmt Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp2t::TsSectionPmt Class Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp2t::TsSectionPmt:
+
+
+ + +edash_packager::media::mp2t::TsSectionPsi +edash_packager::media::mp2t::TsSection + +
+ + + + + + + +

+Public Types

+typedef base::Callback< void(int,
+int)> 
RegisterPesCb
 
- Public Types inherited from edash_packager::media::mp2t::TsSection
enum  SpecialPid {
+  kPidPat = 0x0, +kPidCat = 0x1, +kPidTsdt = 0x2, +kPidNullPacket = 0x1fff, +
+  kPidMax = 0x1fff +
+ }
 
+ + + + + + + + + + + + + + +

+Public Member Functions

TsSectionPmt (const RegisterPesCb &register_pes_cb)
 
+virtual bool ParsePsiSection (BitReader *bit_reader) OVERRIDE
 
+virtual void ResetPsiSection () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp2t::TsSectionPsi
+virtual bool Parse (bool payload_unit_start_indicator, const uint8_t *buf, int size) OVERRIDE
 
+virtual void Flush () OVERRIDE
 
+virtual void Reset () OVERRIDE
 
+

Detailed Description

+
+

Definition at line 16 of file ts_section_pmt.h.

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d2/d5b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt.png b/sdk/d2/d5b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt.png new file mode 100644 index 0000000000..fef1c151c6 Binary files /dev/null and b/sdk/d2/d5b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt.png differ diff --git a/sdk/d2/d5d/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader-members.html b/sdk/d2/d5d/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader-members.html new file mode 100644 index 0000000000..2d2a9c3844 --- /dev/null +++ b/sdk/d2/d5d/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader-members.html @@ -0,0 +1,122 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::VideoMediaHeader Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::VideoMediaHeader)edash_packager::media::mp4::VideoMediaHeadervirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::VideoMediaHeadervirtual
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
graphicsmode (defined in edash_packager::media::mp4::VideoMediaHeader)edash_packager::media::mp4::VideoMediaHeader
opcolor_blue (defined in edash_packager::media::mp4::VideoMediaHeader)edash_packager::media::mp4::VideoMediaHeader
opcolor_green (defined in edash_packager::media::mp4::VideoMediaHeader)edash_packager::media::mp4::VideoMediaHeader
opcolor_red (defined in edash_packager::media::mp4::VideoMediaHeader)edash_packager::media::mp4::VideoMediaHeader
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::VideoMediaHeadervirtual
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
VideoMediaHeader() (defined in edash_packager::media::mp4::VideoMediaHeader)edash_packager::media::mp4::VideoMediaHeader
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~VideoMediaHeader() (defined in edash_packager::media::mp4::VideoMediaHeader)edash_packager::media::mp4::VideoMediaHeadervirtual
+ + + + diff --git a/sdk/d2/d62/simple__mpd__notifier_8h_source.html b/sdk/d2/d62/simple__mpd__notifier_8h_source.html new file mode 100644 index 0000000000..1dab23801c --- /dev/null +++ b/sdk/d2/d62/simple__mpd__notifier_8h_source.html @@ -0,0 +1,198 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/simple_mpd_notifier.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
simple_mpd_notifier.h
+
+
+
1 // Copyright 2014 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 MPD_BASE_SIMPLE_MPD_NOTIFIER_H_
+
8 #define MPD_BASE_SIMPLE_MPD_NOTIFIER_H_
+
9 
+
10 #include <map>
+
11 #include <string>
+
12 #include <vector>
+
13 
+
14 #include "packager/base/gtest_prod_util.h"
+
15 #include "packager/base/memory/scoped_ptr.h"
+
16 #include "packager/base/synchronization/lock.h"
+
17 #include "packager/mpd/base/mpd_notifier.h"
+
18 #include "packager/mpd/base/mpd_notifier_util.h"
+
19 
+
20 namespace edash_packager {
+
21 
+
22 class AdaptationSet;
+
23 class MpdBuilder;
+
24 class Representation;
+
25 class SimpleMpdNotifierTest;
+
26 
+
27 struct MpdOptions;
+
28 
+ +
32  public:
+
33  SimpleMpdNotifier(DashProfile dash_profile,
+
34  const MpdOptions& mpd_options,
+
35  const std::vector<std::string>& base_urls,
+
36  const std::string& output_path);
+
37  virtual ~SimpleMpdNotifier();
+
38 
+
41  virtual bool Init() OVERRIDE;
+
42  virtual bool NotifyNewContainer(const MediaInfo& media_info,
+
43  uint32_t* id) OVERRIDE;
+
44  virtual bool NotifySampleDuration(uint32_t container_id,
+
45  uint32_t sample_duration) OVERRIDE;
+
46  virtual bool NotifyNewSegment(uint32_t id,
+
47  uint64_t start_time,
+
48  uint64_t duration,
+
49  uint64_t size) OVERRIDE;
+
50  virtual bool NotifyEncryptionUpdate(
+
51  uint32_t container_id,
+
52  const std::string& drm_uuid,
+
53  const std::vector<uint8_t>& new_key_id,
+
54  const std::vector<uint8_t>& new_pssh) OVERRIDE;
+
55  virtual bool AddContentProtectionElement(
+
56  uint32_t id,
+
57  const ContentProtectionElement& content_protection_element) OVERRIDE;
+
58  virtual bool Flush() OVERRIDE;
+
60 
+
61  private:
+
62  friend class SimpleMpdNotifierTest;
+
63 
+
64  // Testing only method. Returns a pointer to MpdBuilder.
+
65  MpdBuilder* MpdBuilderForTesting() const {
+
66  return mpd_builder_.get();
+
67  }
+
68 
+
69  // Testing only method. Sets mpd_builder_.
+
70  void SetMpdBuilderForTesting(scoped_ptr<MpdBuilder> mpd_builder) {
+
71  mpd_builder_ = mpd_builder.Pass();
+
72  }
+
73 
+
74  // MPD output path.
+
75  std::string output_path_;
+
76  scoped_ptr<MpdBuilder> mpd_builder_;
+
77  base::Lock lock_;
+
78 
+
79  // [type][lang] = AdaptationSet
+
80  typedef std::map<ContentType, std::map<std::string, AdaptationSet*> >
+
81  AdaptationSetMap;
+
82  AdaptationSetMap adaptation_set_map_;
+
83 
+
84  typedef std::map<uint32_t, Representation*> RepresentationMap;
+
85  RepresentationMap representation_map_;
+
86 
+
87  DISALLOW_COPY_AND_ASSIGN(SimpleMpdNotifier);
+
88 };
+
89 
+
90 } // namespace edash_packager
+
91 
+
92 #endif // MPD_BASE_SIMPLE_MPD_NOTIFIER_H_
+
Defines Mpd Options.
Definition: mpd_options.h:13
+
DashProfile dash_profile() const
Definition: mpd_notifier.h:108
+ +
This class generates DASH MPDs (Media Presentation Descriptions).
Definition: mpd_builder.h:56
+
virtual bool NotifyNewSegment(uint32_t id, uint64_t start_time, uint64_t duration, uint64_t size) OVERRIDE
+ +
virtual bool NotifyEncryptionUpdate(uint32_t container_id, const std::string &drm_uuid, const std::vector< uint8_t > &new_key_id, const std::vector< uint8_t > &new_pssh) OVERRIDE
+ + +
virtual bool AddContentProtectionElement(uint32_t id, const ContentProtectionElement &content_protection_element) OVERRIDE
+
virtual bool NotifySampleDuration(uint32_t container_id, uint32_t sample_duration) OVERRIDE
+ +
virtual bool NotifyNewContainer(const MediaInfo &media_info, uint32_t *id) OVERRIDE
+
+ + + + diff --git a/sdk/d2/d6f/classBandwidthEstimator.html b/sdk/d2/d6f/classBandwidthEstimator.html new file mode 100644 index 0000000000..8fdca08035 --- /dev/null +++ b/sdk/d2/d6f/classBandwidthEstimator.html @@ -0,0 +1,159 @@ + + + + + + +DASH Media Packaging SDK: BandwidthEstimator Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
BandwidthEstimator Class Reference
+
+
+ + + + + + + + +

+Public Member Functions

 BandwidthEstimator (int num_blocks)
 
+void AddBlock (uint64_t size, double duration)
 
+uint64_t Estimate () const
 
+ + + +

+Static Public Attributes

+static const int kUseAllBlocks = 0
 
+

Detailed Description

+
+

Definition at line 15 of file bandwidth_estimator.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
BandwidthEstimator::BandwidthEstimator (int num_blocks)
+
+explicit
+
+
Parameters
+ + +
num_blocksis the number of latest blocks to use. Negative values use first N blocks. 0 uses all.
+
+
+ +

Definition at line 16 of file bandwidth_estimator.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html b/sdk/d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html new file mode 100644 index 0000000000..b06ecf99a2 --- /dev/null +++ b/sdk/d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html @@ -0,0 +1,180 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::SchemeInfo Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::SchemeInfo Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::SchemeInfo:
+
+
+ + +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + +

+Public Attributes

+TrackEncryption track_encryption
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 95 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::SchemeInfo::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 273 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.png b/sdk/d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.png new file mode 100644 index 0000000000..3f2e234dfc Binary files /dev/null and b/sdk/d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.png differ diff --git a/sdk/d2/d7b/simple__mpd__notifier_8cc_source.html b/sdk/d2/d7b/simple__mpd__notifier_8cc_source.html new file mode 100644 index 0000000000..17d0a95ae2 --- /dev/null +++ b/sdk/d2/d7b/simple__mpd__notifier_8cc_source.html @@ -0,0 +1,247 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/simple_mpd_notifier.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
simple_mpd_notifier.cc
+
+
+
1 // Copyright 2014 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/mpd/base/simple_mpd_notifier.h"
+
8 
+
9 #include "packager/base/logging.h"
+
10 #include "packager/mpd/base/mpd_builder.h"
+
11 #include "packager/mpd/base/mpd_notifier_util.h"
+
12 #include "packager/mpd/base/mpd_utils.h"
+
13 
+
14 namespace edash_packager {
+
15 
+
16 SimpleMpdNotifier::SimpleMpdNotifier(DashProfile dash_profile,
+
17  const MpdOptions& mpd_options,
+
18  const std::vector<std::string>& base_urls,
+
19  const std::string& output_path)
+
20  : MpdNotifier(dash_profile),
+
21  output_path_(output_path),
+
22  mpd_builder_(new MpdBuilder(dash_profile == kLiveProfile
+
23  ? MpdBuilder::kDynamic
+
24  : MpdBuilder::kStatic,
+
25  mpd_options)) {
+
26  DCHECK(dash_profile == kLiveProfile || dash_profile == kOnDemandProfile);
+
27  for (size_t i = 0; i < base_urls.size(); ++i)
+
28  mpd_builder_->AddBaseUrl(base_urls[i]);
+
29 }
+
30 
+
31 SimpleMpdNotifier::~SimpleMpdNotifier() {
+
32 }
+
33 
+ +
35  return true;
+
36 }
+
37 
+
38 bool SimpleMpdNotifier::NotifyNewContainer(const MediaInfo& media_info,
+
39  uint32_t* container_id) {
+
40  DCHECK(container_id);
+
41 
+
42  ContentType content_type = GetContentType(media_info);
+
43  if (content_type == kContentTypeUnknown)
+
44  return false;
+
45 
+
46  base::AutoLock auto_lock(lock_);
+
47  // TODO(kqyang): Consider adding a new method MpdBuilder::AddRepresentation.
+
48  // Most of the codes here can be moved inside.
+
49  std::string lang;
+
50  if (media_info.has_audio_info()) {
+
51  lang = media_info.audio_info().language();
+
52  }
+
53  AdaptationSet** adaptation_set = &adaptation_set_map_[content_type][lang];
+
54  if (*adaptation_set == NULL)
+
55  *adaptation_set = mpd_builder_->AddAdaptationSet(lang);
+
56 
+
57  DCHECK(*adaptation_set);
+
58  MediaInfo adjusted_media_info(media_info);
+
59  MpdBuilder::MakePathsRelativeToMpd(output_path_, &adjusted_media_info);
+
60  Representation* representation =
+
61  (*adaptation_set)->AddRepresentation(adjusted_media_info);
+
62  if (representation == NULL)
+
63  return false;
+
64 
+
65  // For SimpleMpdNotifier, just put it in Representation. It should still
+
66  // generate a valid MPD.
+
67  AddContentProtectionElements(media_info, representation);
+
68  *container_id = representation->id();
+
69  DCHECK(!ContainsKey(representation_map_, representation->id()));
+
70  representation_map_[representation->id()] = representation;
+
71  return true;
+
72 }
+
73 
+
74 bool SimpleMpdNotifier::NotifySampleDuration(uint32_t container_id,
+
75  uint32_t sample_duration) {
+
76  base::AutoLock auto_lock(lock_);
+
77  RepresentationMap::iterator it = representation_map_.find(container_id);
+
78  if (it == representation_map_.end()) {
+
79  LOG(ERROR) << "Unexpected container_id: " << container_id;
+
80  return false;
+
81  }
+
82  it->second->SetSampleDuration(sample_duration);
+
83  return true;
+
84 }
+
85 
+
86 bool SimpleMpdNotifier::NotifyNewSegment(uint32_t container_id,
+
87  uint64_t start_time,
+
88  uint64_t duration,
+
89  uint64_t size) {
+
90  base::AutoLock auto_lock(lock_);
+
91  RepresentationMap::iterator it = representation_map_.find(container_id);
+
92  if (it == representation_map_.end()) {
+
93  LOG(ERROR) << "Unexpected container_id: " << container_id;
+
94  return false;
+
95  }
+
96  it->second->AddNewSegment(start_time, duration, size);
+
97  return true;
+
98 }
+
99 
+ +
101  uint32_t container_id,
+
102  const std::string& drm_uuid,
+
103  const std::vector<uint8_t>& new_key_id,
+
104  const std::vector<uint8_t>& new_pssh) {
+
105  base::AutoLock auto_lock(lock_);
+
106  RepresentationMap::iterator it = representation_map_.find(container_id);
+
107  if (it == representation_map_.end()) {
+
108  LOG(ERROR) << "Unexpected container_id: " << container_id;
+
109  return false;
+
110  }
+
111  it->second->UpdateContentProtectionPssh(drm_uuid,
+
112  Uint8VectorToBase64(new_pssh));
+
113  return true;
+
114 }
+
115 
+ +
117  uint32_t container_id,
+
118  const ContentProtectionElement& content_protection_element) {
+
119  base::AutoLock auto_lock(lock_);
+
120  RepresentationMap::iterator it = representation_map_.find(container_id);
+
121  if (it == representation_map_.end()) {
+
122  LOG(ERROR) << "Unexpected container_id: " << container_id;
+
123  return false;
+
124  }
+
125  it->second->AddContentProtectionElement(content_protection_element);
+
126  return true;
+
127 }
+
128 
+ +
130  return WriteMpdToFile(output_path_, mpd_builder_.get());
+
131 }
+
132 
+
133 } // namespace edash_packager
+ +
void AddContentProtectionElements(const MediaInfo &media_info, Representation *parent)
Definition: mpd_utils.cc:253
+
static void MakePathsRelativeToMpd(const std::string &mpd_path, MediaInfo *media_info)
Definition: mpd_builder.cc:608
+
virtual bool NotifyNewSegment(uint32_t id, uint64_t start_time, uint64_t duration, uint64_t size) OVERRIDE
+ +
virtual bool NotifyEncryptionUpdate(uint32_t container_id, const std::string &drm_uuid, const std::vector< uint8_t > &new_key_id, const std::vector< uint8_t > &new_pssh) OVERRIDE
+
std::string Uint8VectorToBase64(const std::vector< uint8_t > &input)
Converts uint8 vector into base64 encoded string.
+ + +
virtual bool AddContentProtectionElement(uint32_t id, const ContentProtectionElement &content_protection_element) OVERRIDE
+
bool WriteMpdToFile(const std::string &output_path, MpdBuilder *mpd_builder)
+
virtual bool NotifySampleDuration(uint32_t container_id, uint32_t sample_duration) OVERRIDE
+ +
virtual bool NotifyNewContainer(const MediaInfo &media_info, uint32_t *id) OVERRIDE
+ +
ContentType GetContentType(const MediaInfo &media_info)
+
+ + + + diff --git a/sdk/d2/d7e/aac__audio__specific__config_8h_source.html b/sdk/d2/d7e/aac__audio__specific__config_8h_source.html new file mode 100644 index 0000000000..bc0f3bb768 --- /dev/null +++ b/sdk/d2/d7e/aac__audio__specific__config_8h_source.html @@ -0,0 +1,174 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/aac_audio_specific_config.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
aac_audio_specific_config.h
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_FORMATS_MP4_AAC_AUDIO_SPECIFIC_CONFIG_H_
+
6 #define MEDIA_FORMATS_MP4_AAC_AUDIO_SPECIFIC_CONFIG_H_
+
7 
+
8 #include <stddef.h>
+
9 #include <stdint.h>
+
10 
+
11 #include <vector>
+
12 
+
13 namespace edash_packager {
+
14 namespace media {
+
15 
+
16 class BitReader;
+
17 
+
18 namespace mp4 {
+
19 
+ +
25  public:
+ + +
28 
+
35  bool Parse(const std::vector<uint8_t>& data);
+
36 
+
40  uint32_t GetOutputSamplesPerSecond(bool sbr_in_mimetype) const;
+
41 
+
45  uint8_t GetNumChannels(bool sbr_in_mimetype) const;
+
46 
+
52  bool ConvertToADTS(std::vector<uint8_t>* buffer) const;
+
53 
+
55  uint8_t audio_object_type() const { return audio_object_type_; }
+
56 
+
58  uint32_t frequency() const { return frequency_; }
+
59 
+
61  uint8_t num_channels() const { return num_channels_; }
+
62 
+
64  static const size_t kADTSHeaderSize = 7;
+
65 
+
66  private:
+
67  bool SkipDecoderGASpecificConfig(BitReader* bit_reader) const;
+
68  bool SkipErrorSpecificConfig() const;
+
69  bool SkipGASpecificConfig(BitReader* bit_reader) const;
+
70 
+
71  // The following variables store the AAC specific configuration information
+
72  // that are used to generate the ADTS header.
+
73  uint8_t audio_object_type_;
+
74  uint8_t frequency_index_;
+
75  uint8_t channel_config_;
+
76  // Is Parametric Stereo on?
+
77  bool ps_present_;
+
78 
+
79  // The following variables store audio configuration information.
+
80  // They are based on the AAC specific configuration but can be overridden
+
81  // by extensions in elementary stream descriptor.
+
82  uint32_t frequency_;
+
83  uint32_t extension_frequency_;
+
84  uint8_t num_channels_;
+
85 };
+
86 
+
87 } // namespace mp4
+
88 } // namespace media
+
89 } // namespace edash_packager
+
90 
+
91 #endif // MEDIA_FORMATS_MP4_AAC_AUDIO_SPECIFIC_CONFIG_H_
+ + +
bool ConvertToADTS(std::vector< uint8_t > *buffer) const
+
static const size_t kADTSHeaderSize
Size in bytes of the ADTS header added by ConvertEsdsToADTS().
+ +
uint32_t GetOutputSamplesPerSecond(bool sbr_in_mimetype) const
+
A class to read bit streams.
Definition: bit_reader.h:17
+ + + +
+ + + + diff --git a/sdk/d2/d90/classedash__packager_1_1media_1_1Status.html b/sdk/d2/d90/classedash__packager_1_1media_1_1Status.html new file mode 100644 index 0000000000..bd9854a8c0 --- /dev/null +++ b/sdk/d2/d90/classedash__packager_1_1media_1_1Status.html @@ -0,0 +1,310 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::Status Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::Status Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Status ()
 Creates a "successful" status.
 
 Status (error::Code error_code, const std::string &error_message)
 
void SetError (error::Code error_code, const std::string &error_message)
 
void Update (const Status &new_status)
 
+void Clear ()
 Clear this status object to contain the OK code and no error message.
 
+bool ok () const
 
+error::Code error_code () const
 
+const std::string & error_message () const
 
+bool operator== (const Status &x) const
 
+bool operator!= (const Status &x) const
 
bool Matches (const Status &x) const
 
std::string ToString () const
 
+void Swap (Status *other)
 
+ + + + + + +

+Static Public Attributes

Some pre-defined Status objects.
+static const StatusOK = Status(error::OK, "")
 
+static const StatusUNKNOWN = Status(error::UNKNOWN, "")
 
+

Detailed Description

+
+

Definition at line 76 of file status.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
edash_packager::media::Status::Status (error::Code error_code,
const std::string & error_message 
)
+
+inline
+
+

Create a status with the specified code, and error message. If "error_code == error::OK", error_message is ignored and a Status object identical to Status::OK is constructed.

+ +

Definition at line 84 of file status.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
bool edash_packager::media::Status::Matches (const Statusx) const
+
+inline
+
+
Returns
true iff this has the same error_code as "x", i.e., the two Status objects are identical except possibly for the error message.
+ +

Definition at line 141 of file status.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void edash_packager::media::Status::SetError (error::Code error_code,
const std::string & error_message 
)
+
+inline
+
+

Store the specified error in this Status object. If "error_code == error::OK", error_message is ignored and a Status object identical to Status::OK is constructed.

+ +

Definition at line 101 of file status.h.

+ +
+
+ +
+
+ + + + + + + +
std::string edash_packager::media::Status::ToString () const
+
+
Returns
A combination of the error code name and message.
+ +

Definition at line 59 of file status.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void edash_packager::media::Status::Update (const Statusnew_status)
+
+inline
+
+

If "ok()", stores "new_status" into *this. If "!ok()", preserves the current "error_code()/error_message()",

+

Convenient way of keeping track of the first error encountered. Instead of: if (overall_status.ok()) overall_status = new_status Use: overall_status.Update(new_status);

+ +

Definition at line 118 of file status.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d2/d92/box__reader_8h_source.html b/sdk/d2/d92/box__reader_8h_source.html new file mode 100644 index 0000000000..3edfeea0b3 --- /dev/null +++ b/sdk/d2/d92/box__reader_8h_source.html @@ -0,0 +1,257 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/box_reader.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
box_reader.h
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_FORMATS_MP4_BOX_READER_H_
+
6 #define MEDIA_FORMATS_MP4_BOX_READER_H_
+
7 
+
8 #include <map>
+
9 #include <vector>
+
10 
+
11 #include "packager/base/compiler_specific.h"
+
12 #include "packager/base/logging.h"
+
13 #include "packager/media/base/buffer_reader.h"
+
14 #include "packager/media/formats/mp4/fourccs.h"
+
15 #include "packager/media/formats/mp4/rcheck.h"
+
16 
+
17 namespace edash_packager {
+
18 namespace media {
+
19 namespace mp4 {
+
20 
+
21 struct Box;
+
22 
+
24 class BoxReader : public BufferReader {
+
25  public:
+
26  ~BoxReader();
+
27 
+
38  static BoxReader* ReadTopLevelBox(const uint8_t* buf,
+
39  const size_t buf_size,
+
40  bool* err);
+
41 
+
51  static bool StartTopLevelBox(const uint8_t* buf,
+
52  const size_t buf_size,
+
53  FourCC* type,
+
54  uint64_t* box_size,
+
55  bool* err) WARN_UNUSED_RESULT;
+
56 
+
61  static bool IsValidTopLevelBox(const FourCC& type);
+
62 
+
67  bool ScanChildren() WARN_UNUSED_RESULT;
+
68 
+
70  bool ChildExist(Box* child) WARN_UNUSED_RESULT;
+
71 
+
75  bool ReadChild(Box* child) WARN_UNUSED_RESULT;
+
76 
+
79  bool TryReadChild(Box* child) WARN_UNUSED_RESULT;
+
80 
+
83  template <typename T>
+
84  bool ReadChildren(std::vector<T>* children) WARN_UNUSED_RESULT;
+
85 
+
88  template <typename T>
+
89  bool TryReadChildren(std::vector<T>* children) WARN_UNUSED_RESULT;
+
90 
+
94  template <typename T>
+
95  bool ReadAllChildren(std::vector<T>* children) WARN_UNUSED_RESULT;
+
96 
+
97  bool ReadFourCC(FourCC* fourcc) {
+
98  uint32_t val;
+
99  if (!Read4(&val))
+
100  return false;
+
101  *fourcc = static_cast<FourCC>(val);
+
102  return true;
+
103  }
+
104 
+
105  FourCC type() const { return type_; }
+
106 
+
107  private:
+
108  BoxReader(const uint8_t* buf, size_t size);
+
109 
+
110  // Must be called immediately after init. If the return is false, this
+
111  // indicates that the box header and its contents were not available in the
+
112  // stream or were nonsensical, and that the box must not be used further. In
+
113  // this case, if |*err| is false, the problem was simply a lack of data, and
+
114  // should only be an error condition if some higher-level component knows that
+
115  // no more data is coming (i.e. EOS or end of containing box). If |*err| is
+
116  // true, the error is unrecoverable and the stream should be aborted.
+
117  bool ReadHeader(bool* err);
+
118 
+
119  FourCC type_;
+
120 
+
121  typedef std::multimap<FourCC, BoxReader*> ChildMap;
+
122 
+
123  // The set of child box FourCCs and their corresponding buffer readers. Only
+
124  // valid if scanned_ is true.
+
125  ChildMap children_;
+
126  bool scanned_;
+
127 
+
128  DISALLOW_COPY_AND_ASSIGN(BoxReader);
+
129 };
+
130 
+
131 // Template definitions.
+
132 template <typename T>
+
133 bool BoxReader::ReadChildren(std::vector<T>* children) {
+
134  RCHECK(TryReadChildren(children) && !children->empty());
+
135  return true;
+
136 }
+
137 
+
138 template <typename T>
+
139 bool BoxReader::TryReadChildren(std::vector<T>* children) {
+
140  DCHECK(scanned_);
+
141  DCHECK(children->empty());
+
142 
+
143  children->resize(1);
+
144  FourCC child_type = (*children)[0].BoxType();
+
145 
+
146  ChildMap::iterator start_itr = children_.lower_bound(child_type);
+
147  ChildMap::iterator end_itr = children_.upper_bound(child_type);
+
148  children->resize(std::distance(start_itr, end_itr));
+
149  typename std::vector<T>::iterator child_itr = children->begin();
+
150  for (ChildMap::iterator itr = start_itr; itr != end_itr; ++itr) {
+
151  RCHECK(child_itr->Parse(itr->second));
+
152  delete itr->second;
+
153  ++child_itr;
+
154  }
+
155  children_.erase(start_itr, end_itr);
+
156 
+
157  DVLOG(2) << "Found " << children->size() << " " << FourCCToString(child_type)
+
158  << " boxes.";
+
159  return true;
+
160 }
+
161 
+
162 template <typename T>
+
163 bool BoxReader::ReadAllChildren(std::vector<T>* children) {
+
164  DCHECK(!scanned_);
+
165  scanned_ = true;
+
166 
+
167  while (pos() < size()) {
+
168  BoxReader child_reader(&data()[pos()], size() - pos());
+
169  bool err;
+
170  if (!child_reader.ReadHeader(&err))
+
171  return false;
+
172 
+
173  T child;
+
174  RCHECK(child.Parse(&child_reader));
+
175  children->push_back(child);
+
176  RCHECK(SkipBytes(child_reader.size()));
+
177  }
+
178 
+
179  return true;
+
180 }
+
181 
+
182 } // namespace mp4
+
183 } // namespace media
+
184 } // namespace edash_packager
+
185 
+
186 #endif // MEDIA_FORMATS_MP4_BOX_READER_H_
+
bool ReadChildren(std::vector< T > *children) WARN_UNUSED_RESULT
Definition: box_reader.h:133
+
bool ReadChild(Box *child) WARN_UNUSED_RESULT
Definition: box_reader.cc:123
+
static BoxReader * ReadTopLevelBox(const uint8_t *buf, const size_t buf_size, bool *err)
Definition: box_reader.cc:37
+
bool TryReadChild(Box *child) WARN_UNUSED_RESULT
Definition: box_reader.cc:140
+
bool ChildExist(Box *child) WARN_UNUSED_RESULT
Definition: box_reader.cc:136
+
static bool IsValidTopLevelBox(const FourCC &type)
Definition: box_reader.cc:78
+
bool ScanChildren() WARN_UNUSED_RESULT
Definition: box_reader.cc:103
+
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
+
bool SkipBytes(size_t num_bytes) WARN_UNUSED_RESULT
+ + +
bool ReadAllChildren(std::vector< T > *children) WARN_UNUSED_RESULT
Definition: box_reader.h:163
+
bool TryReadChildren(std::vector< T > *children) WARN_UNUSED_RESULT
Definition: box_reader.h:139
+
Class for reading MP4 boxes.
Definition: box_reader.h:24
+
+ + + + diff --git a/sdk/d2/da6/threaded__io__file_8h_source.html b/sdk/d2/da6/threaded__io__file_8h_source.html new file mode 100644 index 0000000000..ff133bb83f --- /dev/null +++ b/sdk/d2/da6/threaded__io__file_8h_source.html @@ -0,0 +1,174 @@ + + + + + + +DASH Media Packaging SDK: media/file/threaded_io_file.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
threaded_io_file.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 PACKAGER_FILE_THREADED_IO_FILE_H_
+
8 #define PACKAGER_FILE_THREADED_IO_FILE_H_
+
9 
+
10 #include "packager/base/memory/scoped_ptr.h"
+
11 #include "packager/base/synchronization/lock.h"
+
12 #include "packager/media/file/file.h"
+
13 #include "packager/media/file/file_closer.h"
+
14 #include "packager/media/file/io_cache.h"
+
15 
+
16 namespace edash_packager {
+
17 namespace media {
+
18 
+
19 class ClosureThread;
+
20 
+
22 class ThreadedIoFile : public File {
+
23  public:
+
24  enum Mode {
+
25  kInputMode,
+
26  kOutputMode
+
27  };
+
28 
+
29  ThreadedIoFile(scoped_ptr<File, FileCloser> internal_file,
+
30  Mode mode,
+
31  uint64_t io_cache_size,
+
32  uint64_t io_block_size);
+
33 
+
36  virtual bool Close() OVERRIDE;
+
37  virtual int64_t Read(void* buffer, uint64_t length) OVERRIDE;
+
38  virtual int64_t Write(const void* buffer, uint64_t length) OVERRIDE;
+
39  virtual int64_t Size() OVERRIDE;
+
40  virtual bool Flush() OVERRIDE;
+
41  virtual bool Seek(uint64_t position) OVERRIDE;
+
42  virtual bool Tell(uint64_t* position) OVERRIDE;
+
44 
+
45  protected:
+
46  virtual ~ThreadedIoFile();
+
47 
+
48  virtual bool Open() OVERRIDE;
+
49 
+
50  void RunInInputMode();
+
51  void RunInOutputMode();
+
52 
+
53  private:
+
54  scoped_ptr<File, FileCloser> internal_file_;
+
55  const Mode mode_;
+
56  IoCache cache_;
+
57  std::vector<uint8_t> io_buffer_;
+
58  scoped_ptr<ClosureThread> thread_;
+
59  uint64_t size_;
+
60  bool eof_;
+
61  int64_t internal_file_error_;
+
62 
+
63  DISALLOW_COPY_AND_ASSIGN(ThreadedIoFile);
+
64 };
+
65 
+
66 } // namespace media
+
67 } // namespace edash_packager
+
68 
+
69 #endif // PACKAGER_FILE_THREADED_IO_FILE_H
+
virtual int64_t Write(const void *buffer, uint64_t length) OVERRIDE
+ +
virtual int64_t Read(void *buffer, uint64_t length) OVERRIDE
+
Declaration of class which implements a thread-safe circular buffer.
Definition: io_cache.h:20
+
Define an abstract file interface.
Definition: file.h:22
+ + +
virtual bool Tell(uint64_t *position) OVERRIDE
+
virtual bool Open() OVERRIDE
Internal open. Should not be used directly.
+
Declaration of class which implements a thread-safe circular buffer.
+
virtual bool Seek(uint64_t position) OVERRIDE
+
+ + + + diff --git a/sdk/d2/dd9/structedash__packager_1_1media_1_1VideoStreamInfoParameters.html b/sdk/d2/dd9/structedash__packager_1_1media_1_1VideoStreamInfoParameters.html new file mode 100644 index 0000000000..61f0d84a6f --- /dev/null +++ b/sdk/d2/dd9/structedash__packager_1_1media_1_1VideoStreamInfoParameters.html @@ -0,0 +1,154 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::VideoStreamInfoParameters Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::VideoStreamInfoParameters Struct Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+int track_id
 
+uint32_t time_scale
 
+uint64_t duration
 
+VideoCodec codec
 
+std::string codec_string
 
+std::string language
 
+uint16_t width
 
+uint16_t height
 
+uint32_t pixel_width
 
+uint32_t pixel_height
 
+uint8_t nalu_length_size
 
+std::vector< uint8_t > extra_data
 
+bool is_encrypted
 
+

Detailed Description

+
+

Definition at line 50 of file muxer_listener_test_helper.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d2/de6/packager__main_8cc_source.html b/sdk/d2/de6/packager__main_8cc_source.html new file mode 100644 index 0000000000..7d0b0f9ee2 --- /dev/null +++ b/sdk/d2/de6/packager__main_8cc_source.html @@ -0,0 +1,440 @@ + + + + + + +DASH Media Packaging SDK: app/packager_main.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
packager_main.cc
+
+
+
1 // Copyright 2014 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 <gflags/gflags.h>
+
8 #include <iostream>
+
9 
+
10 #include "packager/app/fixed_key_encryption_flags.h"
+
11 #include "packager/app/libcrypto_threading.h"
+
12 #include "packager/app/mpd_flags.h"
+
13 #include "packager/app/muxer_flags.h"
+
14 #include "packager/app/packager_util.h"
+
15 #include "packager/app/stream_descriptor.h"
+
16 #include "packager/app/widevine_encryption_flags.h"
+
17 #include "packager/base/logging.h"
+
18 #include "packager/base/stl_util.h"
+
19 #include "packager/base/strings/string_split.h"
+
20 #include "packager/base/strings/stringprintf.h"
+
21 #include "packager/base/threading/simple_thread.h"
+
22 #include "packager/base/time/clock.h"
+
23 #include "packager/media/base/demuxer.h"
+
24 #include "packager/media/base/key_source.h"
+
25 #include "packager/media/base/muxer_options.h"
+
26 #include "packager/media/base/muxer_util.h"
+
27 #include "packager/media/event/mpd_notify_muxer_listener.h"
+
28 #include "packager/media/event/vod_media_info_dump_muxer_listener.h"
+
29 #include "packager/media/formats/mp4/mp4_muxer.h"
+
30 #include "packager/mpd/base/dash_iop_mpd_notifier.h"
+
31 #include "packager/mpd/base/mpd_builder.h"
+
32 #include "packager/mpd/base/simple_mpd_notifier.h"
+
33 
+
34 DEFINE_bool(use_fake_clock_for_muxer,
+
35  false,
+
36  "Set to true to use a fake clock for muxer. With this flag set, "
+
37  "creation time and modification time in outputs are set to 0. "
+
38  "Should only be used for testing.");
+
39 
+
40 namespace {
+
41 const char kUsage[] =
+
42  "Packager driver program. Sample Usage:\n"
+
43  "%s [flags] <stream_descriptor> ...\n"
+
44  "stream_descriptor consists of comma separated field_name/value pairs:\n"
+
45  "field_name=value,[field_name=value,]...\n"
+
46  "Supported field names are as follows:\n"
+
47  " - input (in): Required input/source media file path or network stream "
+
48  "URL.\n"
+
49  " - stream_selector (stream): Required field with value 'audio', 'video', "
+
50  "or stream number (zero based).\n"
+
51  " - output (out): Required output file (single file) or initialization "
+
52  "file path (multiple file).\n"
+
53  " - segment_template (segment): Optional value which specifies the "
+
54  "naming pattern for the segment files, and that the stream should be "
+
55  "split into multiple files. Its presence should be consistent across "
+
56  "streams.\n"
+
57  " - bandwidth (bw): Optional value which contains a user-specified "
+
58  "content bit rate for the stream, in bits/sec. If specified, this value is "
+
59  "propagated to the $Bandwidth$ template parameter for segment names. "
+
60  "If not specified, its value may be estimated.\n"
+
61  " - language (lang): Optional value which contains a user-specified "
+
62  "language tag. If specified, this value overrides any language metadata "
+
63  "in the input track.\n";
+
64 
+
65 enum ExitStatus {
+
66  kSuccess = 0,
+
67  kNoArgument,
+
68  kArgumentValidationFailed,
+
69  kPackagingFailed,
+
70  kInternalError,
+
71 };
+
72 } // namespace
+
73 
+
74 namespace edash_packager {
+
75 namespace media {
+
76 
+
77 // A fake clock that always return time 0 (epoch). Should only be used for
+
78 // testing.
+
79 class FakeClock : public base::Clock {
+
80  public:
+
81  virtual base::Time Now() OVERRIDE { return base::Time(); }
+
82 };
+
83 
+
84 // Demux, Mux(es) and worker thread used to remux a source file/stream.
+
85 class RemuxJob : public base::SimpleThread {
+
86  public:
+
87  RemuxJob(scoped_ptr<Demuxer> demuxer)
+
88  : SimpleThread("RemuxJob"),
+
89  demuxer_(demuxer.Pass()) {}
+
90 
+
91  virtual ~RemuxJob() {
+
92  STLDeleteElements(&muxers_);
+
93  }
+
94 
+
95  void AddMuxer(scoped_ptr<Muxer> mux) {
+
96  muxers_.push_back(mux.release());
+
97  }
+
98 
+
99  Demuxer* demuxer() { return demuxer_.get(); }
+
100  Status status() { return status_; }
+
101 
+
102  private:
+
103  virtual void Run() OVERRIDE {
+
104  DCHECK(demuxer_);
+
105  status_ = demuxer_->Run();
+
106  }
+
107 
+
108  scoped_ptr<Demuxer> demuxer_;
+
109  std::vector<Muxer*> muxers_;
+
110  Status status_;
+
111 
+
112  DISALLOW_COPY_AND_ASSIGN(RemuxJob);
+
113 };
+
114 
+
115 bool CreateRemuxJobs(const StreamDescriptorList& stream_descriptors,
+
116  const MuxerOptions& muxer_options,
+
117  FakeClock* fake_clock,
+
118  KeySource* key_source,
+
119  MpdNotifier* mpd_notifier,
+
120  std::vector<RemuxJob*>* remux_jobs) {
+
121  DCHECK(remux_jobs);
+
122 
+
123  std::string previous_input;
+
124  for (StreamDescriptorList::const_iterator stream_iter =
+
125  stream_descriptors.begin();
+
126  stream_iter != stream_descriptors.end();
+
127  ++stream_iter) {
+
128  // Process stream descriptor.
+
129  MuxerOptions stream_muxer_options(muxer_options);
+
130  stream_muxer_options.output_file_name = stream_iter->output;
+
131  if (!stream_iter->segment_template.empty()) {
+
132  if (!ValidateSegmentTemplate(stream_iter->segment_template)) {
+
133  LOG(ERROR) << "ERROR: segment template with '"
+
134  << stream_iter->segment_template << "' is invalid.";
+
135  return false;
+
136  }
+
137  stream_muxer_options.segment_template = stream_iter->segment_template;
+
138  }
+
139  stream_muxer_options.bandwidth = stream_iter->bandwidth;
+
140 
+
141  if (stream_iter->input != previous_input) {
+
142  // New remux job needed. Create demux and job thread.
+
143  scoped_ptr<Demuxer> demuxer(new Demuxer(stream_iter->input));
+
144  if (FLAGS_enable_widevine_decryption ||
+
145  FLAGS_enable_fixed_key_decryption) {
+
146  scoped_ptr<KeySource> key_source(CreateDecryptionKeySource());
+
147  if (!key_source)
+
148  return false;
+
149  demuxer->SetKeySource(key_source.Pass());
+
150  }
+
151  Status status = demuxer->Initialize();
+
152  if (!status.ok()) {
+
153  LOG(ERROR) << "Demuxer failed to initialize: " << status.ToString();
+
154  return false;
+
155  }
+
156  if (FLAGS_dump_stream_info) {
+
157  printf("\nFile \"%s\":\n", stream_iter->input.c_str());
+
158  DumpStreamInfo(demuxer->streams());
+
159  if (stream_iter->output.empty())
+
160  continue; // just need stream info.
+
161  }
+
162  remux_jobs->push_back(new RemuxJob(demuxer.Pass()));
+
163  previous_input = stream_iter->input;
+
164  }
+
165  DCHECK(!remux_jobs->empty());
+
166 
+
167  scoped_ptr<Muxer> muxer(new mp4::MP4Muxer(stream_muxer_options));
+
168  if (FLAGS_use_fake_clock_for_muxer) muxer->set_clock(fake_clock);
+
169 
+
170  if (key_source) {
+
171  muxer->SetKeySource(key_source,
+
172  FLAGS_max_sd_pixels,
+
173  FLAGS_clear_lead,
+
174  FLAGS_crypto_period_duration);
+
175  }
+
176 
+
177  scoped_ptr<MuxerListener> muxer_listener;
+
178  DCHECK(!(FLAGS_output_media_info && mpd_notifier));
+
179  if (FLAGS_output_media_info) {
+
180  const std::string output_media_info_file_name =
+
181  stream_muxer_options.output_file_name + ".media_info";
+
182  scoped_ptr<VodMediaInfoDumpMuxerListener>
+
183  vod_media_info_dump_muxer_listener(
+
184  new VodMediaInfoDumpMuxerListener(output_media_info_file_name));
+
185  vod_media_info_dump_muxer_listener->SetContentProtectionSchemeIdUri(
+
186  FLAGS_scheme_id_uri);
+
187  muxer_listener = vod_media_info_dump_muxer_listener.Pass();
+
188  }
+
189  if (mpd_notifier) {
+
190  scoped_ptr<MpdNotifyMuxerListener> mpd_notify_muxer_listener(
+
191  new MpdNotifyMuxerListener(mpd_notifier));
+
192  mpd_notify_muxer_listener->SetContentProtectionSchemeIdUri(
+
193  FLAGS_scheme_id_uri);
+
194  muxer_listener = mpd_notify_muxer_listener.Pass();
+
195  }
+
196 
+
197  if (muxer_listener)
+
198  muxer->SetMuxerListener(muxer_listener.Pass());
+
199 
+
200  if (!AddStreamToMuxer(remux_jobs->back()->demuxer()->streams(),
+
201  stream_iter->stream_selector,
+
202  stream_iter->language,
+
203  muxer.get()))
+
204  return false;
+
205  remux_jobs->back()->AddMuxer(muxer.Pass());
+
206  }
+
207 
+
208  return true;
+
209 }
+
210 
+
211 Status RunRemuxJobs(const std::vector<RemuxJob*>& remux_jobs) {
+
212  // Start the job threads.
+
213  for (std::vector<RemuxJob*>::const_iterator job_iter = remux_jobs.begin();
+
214  job_iter != remux_jobs.end();
+
215  ++job_iter) {
+
216  (*job_iter)->Start();
+
217  }
+
218 
+
219  // Wait for all jobs to complete or an error occurs.
+
220  Status status;
+
221  bool all_joined;
+
222  do {
+
223  all_joined = true;
+
224  for (std::vector<RemuxJob*>::const_iterator job_iter = remux_jobs.begin();
+
225  job_iter != remux_jobs.end();
+
226  ++job_iter) {
+
227  if ((*job_iter)->HasBeenJoined()) {
+
228  status = (*job_iter)->status();
+
229  if (!status.ok())
+
230  break;
+
231  } else {
+
232  all_joined = false;
+
233  (*job_iter)->Join();
+
234  }
+
235  }
+
236  } while (!all_joined && status.ok());
+
237 
+
238  return status;
+
239 }
+
240 
+
241 bool RunPackager(const StreamDescriptorList& stream_descriptors) {
+
242  if (!AssignFlagsFromProfile())
+
243  return false;
+
244 
+
245  if (FLAGS_output_media_info && !FLAGS_mpd_output.empty()) {
+
246  NOTIMPLEMENTED() << "ERROR: --output_media_info and --mpd_output do not "
+
247  "work together.";
+
248  return false;
+
249  }
+
250  if (FLAGS_output_media_info && !FLAGS_single_segment) {
+
251  // TODO(rkuroiwa, kqyang): Support partial media info dump for live.
+
252  NOTIMPLEMENTED() << "ERROR: --output_media_info is only supported if "
+
253  "--single_segment is true.";
+
254  return false;
+
255  }
+
256 
+
257  // Get basic muxer options.
+
258  MuxerOptions muxer_options;
+
259  if (!GetMuxerOptions(&muxer_options))
+
260  return false;
+
261 
+
262  MpdOptions mpd_options;
+
263  if (!GetMpdOptions(&mpd_options))
+
264  return false;
+
265 
+
266  // Create encryption key source if needed.
+
267  scoped_ptr<KeySource> encryption_key_source;
+
268  if (FLAGS_enable_widevine_encryption || FLAGS_enable_fixed_key_encryption) {
+
269  encryption_key_source = CreateEncryptionKeySource();
+
270  if (!encryption_key_source)
+
271  return false;
+
272  }
+
273 
+
274  scoped_ptr<MpdNotifier> mpd_notifier;
+
275  if (!FLAGS_mpd_output.empty()) {
+
276  DashProfile profile =
+
277  FLAGS_single_segment ? kOnDemandProfile : kLiveProfile;
+
278  std::vector<std::string> base_urls;
+
279  base::SplitString(FLAGS_base_urls, ',', &base_urls);
+
280  if (FLAGS_generate_dash_if_iop_compliant_mpd) {
+
281  mpd_notifier.reset(new DashIopMpdNotifier(profile, mpd_options, base_urls,
+
282  FLAGS_mpd_output));
+
283  } else {
+
284  mpd_notifier.reset(new SimpleMpdNotifier(profile, mpd_options, base_urls,
+
285  FLAGS_mpd_output));
+
286  }
+
287  if (!mpd_notifier->Init()) {
+
288  LOG(ERROR) << "MpdNotifier failed to initialize.";
+
289  return false;
+
290  }
+
291  }
+
292 
+
293  std::vector<RemuxJob*> remux_jobs;
+
294  STLElementDeleter<std::vector<RemuxJob*> > scoped_jobs_deleter(&remux_jobs);
+
295  FakeClock fake_clock;
+
296  if (!CreateRemuxJobs(stream_descriptors, muxer_options, &fake_clock,
+
297  encryption_key_source.get(), mpd_notifier.get(),
+
298  &remux_jobs)) {
+
299  return false;
+
300  }
+
301 
+
302  Status status = RunRemuxJobs(remux_jobs);
+
303  if (!status.ok()) {
+
304  LOG(ERROR) << "Packaging Error: " << status.ToString();
+
305  return false;
+
306  }
+
307 
+
308  printf("Packaging completed successfully.\n");
+
309  return true;
+
310 }
+
311 
+
312 int PackagerMain(int argc, char** argv) {
+
313  google::SetUsageMessage(base::StringPrintf(kUsage, argv[0]));
+
314  google::ParseCommandLineFlags(&argc, &argv, true);
+
315  if (argc < 2) {
+
316  google::ShowUsageWithFlags(argv[0]);
+
317  return kNoArgument;
+
318  }
+
319 
+ +
321  return kArgumentValidationFailed;
+
322 
+
323  edash_packager::media::LibcryptoThreading libcrypto_threading;
+
324  // TODO(tinskip): Make InsertStreamDescriptor a member of
+
325  // StreamDescriptorList.
+
326  StreamDescriptorList stream_descriptors;
+
327  for (int i = 1; i < argc; ++i) {
+
328  if (!InsertStreamDescriptor(argv[i], &stream_descriptors))
+
329  return kArgumentValidationFailed;
+
330  }
+
331  return RunPackager(stream_descriptors) ? kSuccess : kPackagingFailed;
+
332 }
+
333 
+
334 } // namespace media
+
335 } // namespace edash_packager
+
336 
+
337 int main(int argc, char** argv) {
+
338  return edash_packager::media::PackagerMain(argc, argv);
+
339 }
+ + +
Convenience class which initializes and terminates libcrypto threading.
+
+ + + + diff --git a/sdk/d2/deb/es__parser_8h_source.html b/sdk/d2/deb/es__parser_8h_source.html new file mode 100644 index 0000000000..acf0e01081 --- /dev/null +++ b/sdk/d2/deb/es__parser_8h_source.html @@ -0,0 +1,152 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp2t/es_parser.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
es_parser.h
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_FORMATS_MP2T_ES_PARSER_H_
+
6 #define MEDIA_FORMATS_MP2T_ES_PARSER_H_
+
7 
+
8 #include <stdint.h>
+
9 
+
10 #include "packager/base/callback.h"
+
11 #include "packager/base/memory/ref_counted.h"
+
12 
+
13 namespace edash_packager {
+
14 namespace media {
+
15 
+
16 class MediaSample;
+
17 class StreamInfo;
+
18 
+
19 namespace mp2t {
+
20 
+
21 class EsParser {
+
22  public:
+
23  typedef base::Callback<void(scoped_refptr<StreamInfo>&)> NewStreamInfoCB;
+
24  typedef base::Callback<void(uint32_t, scoped_refptr<MediaSample>&)>
+
25  EmitSampleCB;
+
26 
+
27  EsParser(uint32_t pid) : pid_(pid) {}
+
28  virtual ~EsParser() {}
+
29 
+
30  // ES parsing.
+
31  // Should use kNoTimestamp when a timestamp is not valid.
+
32  virtual bool Parse(const uint8_t* buf,
+
33  int size,
+
34  int64_t pts,
+
35  int64_t dts) = 0;
+
36 
+
37  // Flush any pending buffer.
+
38  virtual void Flush() = 0;
+
39 
+
40  // Reset the state of the ES parser.
+
41  virtual void Reset() = 0;
+
42 
+
43  uint32_t pid() { return pid_; }
+
44 
+
45  private:
+
46  uint32_t pid_;
+
47 };
+
48 
+
49 } // namespace mp2t
+
50 } // namespace media
+
51 } // namespace edash_packager
+
52 
+
53 #endif
+ +
+ + + + diff --git a/sdk/d2/df3/structedash__packager_1_1media_1_1mp4_1_1Edit-members.html b/sdk/d2/df3/structedash__packager_1_1media_1_1mp4_1_1Edit-members.html new file mode 100644 index 0000000000..6da95d0902 --- /dev/null +++ b/sdk/d2/df3/structedash__packager_1_1media_1_1mp4_1_1Edit-members.html @@ -0,0 +1,115 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::Edit Member List
+
+
+ +

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

+ + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::Edit)edash_packager::media::mp4::Editvirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::Editvirtual
Edit() (defined in edash_packager::media::mp4::Edit)edash_packager::media::mp4::Edit
list (defined in edash_packager::media::mp4::Edit)edash_packager::media::mp4::Edit
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::Editvirtual
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~Edit() (defined in edash_packager::media::mp4::Edit)edash_packager::media::mp4::Editvirtual
+ + + + diff --git a/sdk/d2/dfa/classedash__packager_1_1RepresentationStateChangeListener.html b/sdk/d2/dfa/classedash__packager_1_1RepresentationStateChangeListener.html new file mode 100644 index 0000000000..d7cd545d78 --- /dev/null +++ b/sdk/d2/dfa/classedash__packager_1_1RepresentationStateChangeListener.html @@ -0,0 +1,203 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::RepresentationStateChangeListener Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::RepresentationStateChangeListener Class Referenceabstract
+
+
+ + + + + + +

+Public Member Functions

virtual void OnNewSegmentForRepresentation (uint64_t start_time, uint64_t duration)=0
 
virtual void OnSetFrameRateForRepresentation (uint32_t frame_duration, uint32_t timescale)=0
 
+

Detailed Description

+
+

Definition at line 409 of file mpd_builder.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void edash_packager::RepresentationStateChangeListener::OnNewSegmentForRepresentation (uint64_t start_time,
uint64_t duration 
)
+
+pure virtual
+
+

Notifies the instance that a new (sub)segment was added to the Representation.

+
Parameters
+ + + +
start_timeis the start time of the new segment.
durationis the duration of the new segment.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void edash_packager::RepresentationStateChangeListener::OnSetFrameRateForRepresentation (uint32_t frame_duration,
uint32_t timescale 
)
+
+pure virtual
+
+

Notifies the instance that the frame rate was set for the Representation.

+
Parameters
+ + + +
frame_durationis the duration of a frame.
timescaleis the timescale of the Representation.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/sdk/d2/dfd/adts__header_8h_source.html b/sdk/d2/dfd/adts__header_8h_source.html new file mode 100644 index 0000000000..ec8a26702a --- /dev/null +++ b/sdk/d2/dfd/adts__header_8h_source.html @@ -0,0 +1,158 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp2t/adts_header.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
adts_header.h
+
+
+
1 // Copyright 2014 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_FORMATS_MP2T_ADTS_HEADER_H_
+
8 #define MEDIA_FORMATS_MP2T_ADTS_HEADER_H_
+
9 
+
10 #include <stdint.h>
+
11 
+
12 #include <vector>
+
13 
+
14 #include "packager/base/macros.h"
+
15 
+
16 namespace edash_packager {
+
17 namespace media {
+
18 namespace mp2t {
+
19 
+
22 class AdtsHeader {
+
23  public:
+
24  AdtsHeader();
+
25  ~AdtsHeader() {}
+
26 
+
32  static size_t GetAdtsFrameSize(const uint8_t* data, size_t num_bytes);
+
33 
+
38  static size_t GetAdtsHeaderSize(const uint8_t* data, size_t num_bytes);
+
39 
+
45  bool Parse(const uint8_t* adts_frame, size_t adts_frame_size);
+
46 
+
52  bool GetAudioSpecificConfig(std::vector<uint8_t>* buffer) const;
+
53 
+
55  uint8_t GetObjectType() const;
+
56 
+
58  uint32_t GetSamplingFrequency() const;
+
59 
+
61  uint8_t GetNumChannels() const;
+
62 
+
63  private:
+
64  bool valid_config_;
+
65  uint8_t profile_;
+
66  uint8_t sampling_frequency_index_;
+
67  uint8_t channel_configuration_;
+
68 
+
69  DISALLOW_COPY_AND_ASSIGN(AdtsHeader);
+
70 };
+
71 
+
72 } // namespace mp2t
+
73 } // namespace media
+
74 } // namespace edash_packager
+
75 
+
76 #endif // MEDIA_FORMATS_MP2T_ADTS_HEADER_H_
+
static size_t GetAdtsFrameSize(const uint8_t *data, size_t num_bytes)
Definition: adts_header.cc:23
+
bool Parse(const uint8_t *adts_frame, size_t adts_frame_size)
Definition: adts_header.cc:39
+ +
bool GetAudioSpecificConfig(std::vector< uint8_t > *buffer) const
Definition: adts_header.cc:85
+ +
static size_t GetAdtsHeaderSize(const uint8_t *data, size_t num_bytes)
Definition: adts_header.cc:31
+ + +
+ + + + diff --git a/sdk/d2/dfd/classedash__packager_1_1media_1_1MediaStream.html b/sdk/d2/dfd/classedash__packager_1_1media_1_1MediaStream.html new file mode 100644 index 0000000000..690496313b --- /dev/null +++ b/sdk/d2/dfd/classedash__packager_1_1media_1_1MediaStream.html @@ -0,0 +1,233 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::MediaStream Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::MediaStream Class Reference
+
+
+ +

#include <media_stream.h>

+ + + + +

+Public Types

enum  MediaStreamOperation { kPush, +kPull + }
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 MediaStream (scoped_refptr< StreamInfo > info, Demuxer *demuxer)
 
void Connect (Muxer *muxer)
 
+Status Start (MediaStreamOperation operation)
 Start the stream for pushing or pulling.
 
+Status PushSample (const scoped_refptr< MediaSample > &sample)
 Push sample to Muxer (triggered by Demuxer).
 
+Status PullSample (scoped_refptr< MediaSample > *sample)
 Pull sample from Demuxer (triggered by Muxer).
 
+Demuxerdemuxer ()
 
+Muxermuxer ()
 
+const scoped_refptr< StreamInfoinfo () const
 
std::string ToString () const
 
+

Detailed Description

+

MediaStream connects Demuxer to Muxer. It is an abstraction for a media elementary stream.

+ +

Definition at line 26 of file media_stream.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
edash_packager::media::MediaStream::MediaStream (scoped_refptr< StreamInfoinfo,
Demuxerdemuxer 
)
+
+

Create MediaStream from StreamInfo and Demuxer.

+
Parameters
+ + +
demuxercannot be NULL.
+
+
+ +

Definition at line 19 of file media_stream.cc.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
void edash_packager::media::MediaStream::Connect (Muxermuxer)
+
+

Connect the stream to Muxer.

+
Parameters
+ + +
muxercannot be NULL.
+
+
+ +

Definition at line 55 of file media_stream.cc.

+ +
+
+ +
+
+ + + + + + + +
std::string edash_packager::media::MediaStream::ToString () const
+
+
Returns
a human-readable string describing |*this|.
+ +

Definition at line 103 of file media_stream.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d3/d0e/classedash__packager_1_1media_1_1MpdNotifyMuxerListener.html b/sdk/d3/d0e/classedash__packager_1_1media_1_1MpdNotifyMuxerListener.html new file mode 100644 index 0000000000..e7b96d472f --- /dev/null +++ b/sdk/d3/d0e/classedash__packager_1_1media_1_1MpdNotifyMuxerListener.html @@ -0,0 +1,242 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::MpdNotifyMuxerListener Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::MpdNotifyMuxerListener Class Reference
+
+
+
+Inheritance diagram for edash_packager::media::MpdNotifyMuxerListener:
+
+
+ + +edash_packager::media::MuxerListener + +
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

 MpdNotifyMuxerListener (MpdNotifier *mpd_notifier)
 
void SetContentProtectionSchemeIdUri (const std::string &scheme_id_uri)
 
MuxerListener implementation overrides.
+virtual void OnEncryptionInfoReady (bool is_initial_encryption_info, const std::string &content_protection_uuid, const std::string &content_protection_name_version, const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &pssh) OVERRIDE
 
+virtual void OnMediaStart (const MuxerOptions &muxer_options, const StreamInfo &stream_info, uint32_t time_scale, ContainerType container_type) OVERRIDE
 
virtual void OnSampleDurationReady (uint32_t sample_duration) OVERRIDE
 
+virtual void OnMediaEnd (bool has_init_range, uint64_t init_range_start, uint64_t init_range_end, bool has_index_range, uint64_t index_range_start, uint64_t index_range_end, float duration_seconds, uint64_t file_size) OVERRIDE
 
+virtual void OnNewSegment (uint64_t start_time, uint64_t duration, uint64_t segment_file_size) OVERRIDE
 
+ + + + +

+Additional Inherited Members

- Public Types inherited from edash_packager::media::MuxerListener
enum  ContainerType { kContainerUnknown = 0, +kContainerMp4, +kContainerMpeg2ts, +kContainerWebM + }
 
+

Detailed Description

+
+

Definition at line 27 of file mpd_notify_muxer_listener.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
edash_packager::media::MpdNotifyMuxerListener::MpdNotifyMuxerListener (MpdNotifiermpd_notifier)
+
+explicit
+
+
Parameters
+ + +
mpd_notifiermust be initialized, i.e mpd_notifier->Init() must be called.
+
+
+ +

Definition at line 21 of file mpd_notify_muxer_listener.cc.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
void edash_packager::media::MpdNotifyMuxerListener::OnSampleDurationReady (uint32_t sample_duration)
+
+virtual
+
+

Called when the average sample duration of the media is determined.

+
Parameters
+ + +
sample_durationin timescale of the media.
+
+
+ +

Implements edash_packager::media::MuxerListener.

+ +

Definition at line 88 of file mpd_notify_muxer_listener.cc.

+ +
+
+ +
+
+ + + + + + + + +
void edash_packager::media::MpdNotifyMuxerListener::SetContentProtectionSchemeIdUri (const std::string & scheme_id_uri)
+
+

If the stream is encrypted use this as 'schemeIdUri' attribute for ContentProtection element.

+ +

Definition at line 30 of file mpd_notify_muxer_listener.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d3/d0e/classedash__packager_1_1media_1_1MpdNotifyMuxerListener.png b/sdk/d3/d0e/classedash__packager_1_1media_1_1MpdNotifyMuxerListener.png new file mode 100644 index 0000000000..d1def86513 Binary files /dev/null and b/sdk/d3/d0e/classedash__packager_1_1media_1_1MpdNotifyMuxerListener.png differ diff --git a/sdk/d3/d15/udp__file__win_8cc_source.html b/sdk/d3/d15/udp__file__win_8cc_source.html new file mode 100644 index 0000000000..c7230d054f --- /dev/null +++ b/sdk/d3/d15/udp__file__win_8cc_source.html @@ -0,0 +1,168 @@ + + + + + + +DASH Media Packaging SDK: media/file/udp_file_win.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
udp_file_win.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/file/udp_file.h"
+
8 
+
9 #include "packager/base/logging.h"
+
10 
+
11 namespace edash_packager {
+
12 namespace media {
+
13 
+
14 UdpFile::UdpFile(const char* file_name) : File(file_name), socket_(0) {
+
15 }
+
16 
+
17 UdpFile::~UdpFile() {}
+
18 
+
19 bool UdpFile::Close() {
+
20  NOTIMPLEMENTED();
+
21  delete this;
+
22  return false;
+
23 }
+
24 
+
25 int64_t UdpFile::Read(void* buffer, uint64_t length) {
+
26  NOTIMPLEMENTED();
+
27  return -1;
+
28 }
+
29 
+
30 int64_t UdpFile::Write(const void* buffer, uint64_t length) {
+
31  NOTIMPLEMENTED();
+
32  return -1;
+
33 }
+
34 
+
35 int64_t UdpFile::Size() {
+
36  NOTIMPLEMENTED();
+
37  return -1;
+
38 }
+
39 
+
40 bool UdpFile::Flush() {
+
41  NOTIMPLEMENTED();
+
42  return false;
+
43 }
+
44 
+
45 bool UdpFile::Seek(uint64_t position) {
+
46  NOTIMPLEMENTED();
+
47  return false;
+
48 }
+
49 
+
50 bool UdpFile::Tell(uint64_t* position) {
+
51  NOTIMPLEMENTED();
+
52  return false;
+
53 }
+
54 
+
55 bool UdpFile::Open() {
+
56  NOTIMPLEMENTED();
+
57  return false;
+
58 }
+
59 
+
60 } // namespace media
+
61 } // namespace edash_packager
+
UdpFile(const char *address_and_port)
+
virtual bool Flush() OVERRIDE
+
virtual bool Open() OVERRIDE
Internal open. Should not be used directly.
+
virtual bool Tell(uint64_t *position) OVERRIDE
+
virtual int64_t Write(const void *buffer, uint64_t length) OVERRIDE
+
virtual int64_t Read(void *buffer, uint64_t length) OVERRIDE
+
virtual int64_t Size() OVERRIDE
+
virtual bool Close() OVERRIDE
+
virtual bool Seek(uint64_t position) OVERRIDE
+
+ + + + diff --git a/sdk/d3/d19/io__cache_8h_source.html b/sdk/d3/d19/io__cache_8h_source.html new file mode 100644 index 0000000000..284c72627e --- /dev/null +++ b/sdk/d3/d19/io__cache_8h_source.html @@ -0,0 +1,164 @@ + + + + + + +DASH Media Packaging SDK: media/file/io_cache.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
io_cache.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 PACKAGER_FILE_IO_CACHE_H_
+
8 #define PACKAGER_FILE_IO_CACHE_H_
+
9 
+
10 #include <stdint.h>
+
11 #include <vector>
+
12 #include "packager/base/macros.h"
+
13 #include "packager/base/synchronization/lock.h"
+
14 #include "packager/base/synchronization/waitable_event.h"
+
15 
+
16 namespace edash_packager {
+
17 namespace media {
+
18 
+
20 class IoCache {
+
21  public:
+
22  explicit IoCache(uint64_t cache_size);
+
23  virtual ~IoCache();
+
24 
+
31  uint64_t Read(void* buffer, uint64_t size);
+
32 
+
40  uint64_t Write(const void* buffer, uint64_t size);
+
41 
+
43  void Clear();
+
44 
+
47  void Close();
+
48 
+
51  uint64_t BytesCached();
+
52 
+
55  uint64_t BytesFree();
+
56 
+ +
59 
+
60  private:
+
61  uint64_t BytesCachedInternal();
+
62  uint64_t BytesFreeInternal();
+
63 
+
64  const uint64_t cache_size_;
+
65  base::Lock lock_;
+
66  base::WaitableEvent read_event_;
+
67  base::WaitableEvent write_event_;
+
68  std::vector<uint8_t> circular_buffer_;
+
69  const uint8_t* end_ptr_;
+
70  uint8_t* r_ptr_;
+
71  uint8_t* w_ptr_;
+
72  bool closed_;
+
73 
+
74  DISALLOW_COPY_AND_ASSIGN(IoCache);
+
75 };
+
76 
+
77 } // namespace media
+
78 } // namespace edash_packager
+
79 
+
80 #endif // PACKAGER_FILE_IO_CACHE_H
+ +
Declaration of class which implements a thread-safe circular buffer.
Definition: io_cache.h:20
+ +
void WaitUntilEmptyOrClosed()
Waits until the cache is empty or has been closed.
Definition: io_cache.cc:136
+
uint64_t Write(const void *buffer, uint64_t size)
Definition: io_cache.cc:66
+ +
void Clear()
Empties the cache.
Definition: io_cache.cc:102
+
uint64_t Read(void *buffer, uint64_t size)
Definition: io_cache.cc:38
+
+ + + + diff --git a/sdk/d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html b/sdk/d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html new file mode 100644 index 0000000000..356942edb7 --- /dev/null +++ b/sdk/d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html @@ -0,0 +1,200 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::TrackExtends Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::TrackExtends Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::TrackExtends:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + + + + + + + +

+Public Attributes

+uint32_t track_id
 
+uint32_t default_sample_description_index
 
+uint32_t default_sample_duration
 
+uint32_t default_sample_size
 
+uint32_t default_sample_flags
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 409 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::TrackExtends::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1392 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.png b/sdk/d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.png new file mode 100644 index 0000000000..3f4d987d61 Binary files /dev/null and b/sdk/d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.png differ diff --git a/sdk/d3/d2f/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption-members.html b/sdk/d3/d2f/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption-members.html new file mode 100644 index 0000000000..cdfc618fc7 --- /dev/null +++ b/sdk/d3/d2f/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption-members.html @@ -0,0 +1,121 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::TrackEncryption Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::TrackEncryption)edash_packager::media::mp4::TrackEncryptionvirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::TrackEncryptionvirtual
default_iv_size (defined in edash_packager::media::mp4::TrackEncryption)edash_packager::media::mp4::TrackEncryption
default_kid (defined in edash_packager::media::mp4::TrackEncryption)edash_packager::media::mp4::TrackEncryption
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
is_encrypted (defined in edash_packager::media::mp4::TrackEncryption)edash_packager::media::mp4::TrackEncryption
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::TrackEncryptionvirtual
TrackEncryption() (defined in edash_packager::media::mp4::TrackEncryption)edash_packager::media::mp4::TrackEncryption
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~TrackEncryption() (defined in edash_packager::media::mp4::TrackEncryption)edash_packager::media::mp4::TrackEncryptionvirtual
+ + + + diff --git a/sdk/d3/d37/single__segment__segmenter_8cc_source.html b/sdk/d3/d37/single__segment__segmenter_8cc_source.html new file mode 100644 index 0000000000..49831c3395 --- /dev/null +++ b/sdk/d3/d37/single__segment__segmenter_8cc_source.html @@ -0,0 +1,349 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/single_segment_segmenter.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
single_segment_segmenter.cc
+
+
+
1 // Copyright 2014 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/formats/mp4/single_segment_segmenter.h"
+
8 
+
9 #include <inttypes.h>
+
10 #include <openssl/err.h>
+
11 #include <openssl/rand.h>
+
12 
+
13 #include "packager/base/file_util.h"
+
14 #include "packager/base/strings/stringprintf.h"
+
15 #include "packager/base/threading/platform_thread.h"
+
16 #include "packager/base/time/time.h"
+
17 #include "packager/media/base/buffer_writer.h"
+
18 #include "packager/media/base/media_stream.h"
+
19 #include "packager/media/base/muxer_options.h"
+
20 #include "packager/media/event/muxer_listener.h"
+
21 #include "packager/media/event/progress_listener.h"
+
22 #include "packager/media/file/file.h"
+
23 #include "packager/media/formats/mp4/box_definitions.h"
+
24 
+
25 namespace edash_packager {
+
26 namespace media {
+
27 namespace mp4 {
+
28 namespace {
+
29 // Create a temp file name using process/thread id and current time.
+
30 std::string TempFileName() {
+
31  int32_t tid = static_cast<int32_t>(base::PlatformThread::CurrentId());
+
32  int64_t rand = 0;
+
33  if (RAND_bytes(reinterpret_cast<uint8_t*>(&rand), sizeof(rand)) != 1) {
+
34  LOG(WARNING) << "RAND_bytes failed with error: "
+
35  << ERR_error_string(ERR_get_error(), NULL);
+
36  rand = base::Time::Now().ToInternalValue();
+
37  }
+
38  return base::StringPrintf("packager-tempfile-%x-%" PRIx64, tid, rand);
+
39 }
+
40 } // namespace
+
41 
+
42 SingleSegmentSegmenter::SingleSegmentSegmenter(const MuxerOptions& options,
+
43  scoped_ptr<FileType> ftyp,
+
44  scoped_ptr<Movie> moov)
+
45  : Segmenter(options, ftyp.Pass(), moov.Pass()) {}
+
46 
+
47 SingleSegmentSegmenter::~SingleSegmentSegmenter() {
+
48  if (temp_file_)
+
49  temp_file_.release()->Close();
+
50  if (!temp_file_name_.empty()) {
+
51  if (!File::Delete(temp_file_name_.c_str()))
+
52  LOG(ERROR) << "Unable to delete temporary file " << temp_file_name_;
+
53  }
+
54 }
+
55 
+
56 bool SingleSegmentSegmenter::GetInitRange(size_t* offset, size_t* size) {
+
57  // In Finalize, ftyp and moov gets written first so offset must be 0.
+
58  *offset = 0;
+
59  *size = ftyp()->ComputeSize() + moov()->ComputeSize();
+
60  return true;
+
61 }
+
62 
+
63 bool SingleSegmentSegmenter::GetIndexRange(size_t* offset, size_t* size) {
+
64  // Index range is right after init range so the offset must be the size of
+
65  // ftyp and moov.
+
66  *offset = ftyp()->ComputeSize() + moov()->ComputeSize();
+
67  *size = vod_sidx_->ComputeSize();
+
68  return true;
+
69 }
+
70 
+
71 Status SingleSegmentSegmenter::DoInitialize() {
+
72  // Single segment segmentation involves two stages:
+
73  // Stage 1: Create media subsegments from media samples
+
74  // Stage 2: Update media header (moov) which involves copying of media
+
75  // subsegments
+
76  // Assumes stage 2 takes similar amount of time as stage 1. The previous
+
77  // progress_target was set for stage 1. Times two to account for stage 2.
+
78  set_progress_target(progress_target() * 2);
+
79 
+
80  if (options().temp_dir.empty()) {
+
81  base::FilePath temp_file_path;
+
82  if (!base::CreateTemporaryFile(&temp_file_path)) {
+
83  LOG(ERROR) << "Failed to create temporary file.";
+
84  return Status(error::FILE_FAILURE, "Unable to create temporary file.");
+
85  }
+
86  temp_file_name_ = temp_file_path.value();
+
87  } else {
+
88  temp_file_name_ =
+
89  base::FilePath(options().temp_dir).Append(TempFileName()).value();
+
90  }
+
91  temp_file_.reset(File::Open(temp_file_name_.c_str(), "w"));
+
92  return temp_file_
+
93  ? Status::OK
+
94  : Status(error::FILE_FAILURE,
+
95  "Cannot open file to write " + temp_file_name_);
+
96 }
+
97 
+
98 Status SingleSegmentSegmenter::DoFinalize() {
+
99  DCHECK(temp_file_);
+
100  DCHECK(ftyp());
+
101  DCHECK(moov());
+
102  DCHECK(vod_sidx_);
+
103 
+
104  // Close the temp file to prepare for reading later.
+
105  if (!temp_file_.release()->Close()) {
+
106  return Status(error::FILE_FAILURE,
+
107  "Cannot close the temp file " + temp_file_name_);
+
108  }
+
109 
+
110  scoped_ptr<File, FileCloser> file(
+
111  File::Open(options().output_file_name.c_str(), "w"));
+
112  if (file == NULL) {
+
113  return Status(error::FILE_FAILURE,
+
114  "Cannot open file to write " + options().output_file_name);
+
115  }
+
116 
+
117  LOG(INFO) << "Update media header (moov) and rewrite the file to '"
+
118  << options().output_file_name << "'.";
+
119 
+
120  // Write ftyp, moov and sidx to output file.
+
121  scoped_ptr<BufferWriter> buffer(new BufferWriter());
+
122  ftyp()->Write(buffer.get());
+
123  moov()->Write(buffer.get());
+
124  vod_sidx_->Write(buffer.get());
+
125  Status status = buffer->WriteToFile(file.get());
+
126  if (!status.ok())
+
127  return status;
+
128 
+
129  // Load the temp file and write to output file.
+
130  scoped_ptr<File, FileCloser> temp_file(
+
131  File::Open(temp_file_name_.c_str(), "r"));
+
132  if (temp_file == NULL) {
+
133  return Status(error::FILE_FAILURE,
+
134  "Cannot open file to read " + temp_file_name_);
+
135  }
+
136 
+
137  // The target of 2nd stage of single segment segmentation.
+
138  const uint64_t re_segment_progress_target = progress_target() * 0.5;
+
139 
+
140  const int kBufSize = 0x200000; // 2MB.
+
141  scoped_ptr<uint8_t[]> buf(new uint8_t[kBufSize]);
+
142  while (true) {
+
143  int64_t size = temp_file->Read(buf.get(), kBufSize);
+
144  if (size == 0) {
+
145  break;
+
146  } else if (size < 0) {
+
147  return Status(error::FILE_FAILURE,
+
148  "Failed to read file " + temp_file_name_);
+
149  }
+
150  int64_t size_written = file->Write(buf.get(), size);
+
151  if (size_written != size) {
+
152  return Status(error::FILE_FAILURE,
+
153  "Failed to write file " + options().output_file_name);
+
154  }
+
155  UpdateProgress(static_cast<double>(size) / temp_file->Size() *
+
156  re_segment_progress_target);
+
157  }
+
158  SetComplete();
+
159  return Status::OK;
+
160 }
+
161 
+
162 Status SingleSegmentSegmenter::DoFinalizeSegment() {
+
163  DCHECK(sidx());
+
164  DCHECK(fragment_buffer());
+
165  // sidx() contains pre-generated segment references with one reference per
+
166  // fragment. In VOD, this segment is converted into a subsegment, i.e. one
+
167  // reference, which contains all the fragments in sidx().
+
168  std::vector<SegmentReference>& refs = sidx()->references;
+
169  SegmentReference& vod_ref = refs[0];
+
170  uint64_t first_sap_time =
+
171  refs[0].sap_delta_time + refs[0].earliest_presentation_time;
+
172  for (uint32_t i = 1; i < refs.size(); ++i) {
+
173  vod_ref.referenced_size += refs[i].referenced_size;
+
174  // NOTE: We calculate subsegment duration based on the total duration of
+
175  // this subsegment instead of subtracting earliest_presentation_time as
+
176  // indicated in the spec.
+
177  vod_ref.subsegment_duration += refs[i].subsegment_duration;
+
178  vod_ref.earliest_presentation_time = std::min(
+
179  vod_ref.earliest_presentation_time, refs[i].earliest_presentation_time);
+
180 
+
181  if (vod_ref.sap_type == SegmentReference::TypeUnknown &&
+
182  refs[i].sap_type != SegmentReference::TypeUnknown) {
+
183  vod_ref.sap_type = refs[i].sap_type;
+
184  first_sap_time =
+
185  refs[i].sap_delta_time + refs[i].earliest_presentation_time;
+
186  }
+
187  }
+
188  // Calculate sap delta time w.r.t. earliest_presentation_time.
+
189  if (vod_ref.sap_type != SegmentReference::TypeUnknown) {
+
190  vod_ref.sap_delta_time =
+
191  first_sap_time - vod_ref.earliest_presentation_time;
+
192  }
+
193 
+
194  // Create segment if it does not exist yet.
+
195  if (vod_sidx_ == NULL) {
+
196  vod_sidx_.reset(new SegmentIndex());
+
197  vod_sidx_->reference_id = sidx()->reference_id;
+
198  vod_sidx_->timescale = sidx()->timescale;
+
199 
+
200  if (vod_ref.earliest_presentation_time > 0) {
+
201  const double starting_time_in_seconds =
+
202  static_cast<double>(vod_ref.earliest_presentation_time) /
+
203  GetReferenceTimeScale();
+
204  // Give a warning if it is significant.
+
205  if (starting_time_in_seconds > 0.5) {
+
206  // Note that DASH IF player requires presentationTimeOffset to be set in
+
207  // Segment{Base,List,Template} if there is non-zero starting time. Since
+
208  // current Chromium's MSE implementation uses DTS, the player expects
+
209  // DTS to be used.
+
210  LOG(WARNING) << "Warning! Non-zero starting time (in seconds): "
+
211  << starting_time_in_seconds
+
212  << ". Manual adjustment of presentationTimeOffset in "
+
213  "mpd might be necessary.";
+
214  }
+
215  }
+
216  // Force earliest_presentation_time to start from 0 for VOD.
+
217  vod_sidx_->earliest_presentation_time = 0;
+
218  }
+
219  vod_sidx_->references.push_back(vod_ref);
+
220 
+
221  // Append fragment buffer to temp file.
+
222  size_t segment_size = fragment_buffer()->Size();
+
223  Status status = fragment_buffer()->WriteToFile(temp_file_.get());
+
224  if (!status.ok()) return status;
+
225 
+
226  UpdateProgress(vod_ref.subsegment_duration);
+
227  if (muxer_listener()) {
+
228  muxer_listener()->OnSampleDurationReady(sample_duration());
+
229  muxer_listener()->OnNewSegment(vod_ref.earliest_presentation_time,
+
230  vod_ref.subsegment_duration, segment_size);
+
231  }
+
232  return Status::OK;
+
233 }
+
234 
+
235 } // namespace mp4
+
236 } // namespace media
+
237 } // namespace edash_packager
+ +
static bool Delete(const char *file_name)
Definition: file.cc:138
+
virtual bool Open()=0
Internal open. Should not be used directly.
+ + + +
void UpdateProgress(uint64_t progress)
Update segmentation progress using ProgressListener.
Definition: segmenter.cc:333
+
virtual bool GetInitRange(size_t *offset, size_t *size) OVERRIDE
+
void Write(BufferWriter *writer)
Definition: box.cc:25
+
void SetComplete()
Set progress to 100%.
Definition: segmenter.cc:349
+
virtual bool GetIndexRange(size_t *offset, size_t *size) OVERRIDE
+
virtual uint32_t ComputeSize() OVERRIDE
+
virtual uint32_t ComputeSize() OVERRIDE
+
virtual void OnSampleDurationReady(uint32_t sample_duration)=0
+
+ + + + diff --git a/sdk/d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.html b/sdk/d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.html new file mode 100644 index 0000000000..4dcd53e36e --- /dev/null +++ b/sdk/d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.html @@ -0,0 +1,319 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::HttpKeyFetcher Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::HttpKeyFetcher Class Reference
+
+
+ +

#include <http_key_fetcher.h>

+
+Inheritance diagram for edash_packager::media::HttpKeyFetcher:
+
+
+ + +edash_packager::media::KeyFetcher + +
+ + + + + + + +

+Public Member Functions

HttpKeyFetcher ()
 Creates a fetcher with no timeout.
 
 HttpKeyFetcher (uint32_t timeout_in_seconds)
 
+ + + + + + + +

+KeyFetcher implementation overrides.

virtual Status FetchKeys (const std::string &url, const std::string &request, std::string *response) OVERRIDE
 
virtual Status Get (const std::string &url, std::string *response)
 
virtual Status Post (const std::string &url, const std::string &data, std::string *response)
 
+

Detailed Description

+

A KeyFetcher implementation that retrieves keys over HTTP(s). This class is not fully thread safe. It can be used in multi-thread environment once constructed, but it may not be safe to create a HttpKeyFetcher object when any other thread is running due to use of curl_global_init.

+ +

Definition at line 26 of file http_key_fetcher.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
edash_packager::media::HttpKeyFetcher::HttpKeyFetcher (uint32_t timeout_in_seconds)
+
+

Create a fetcher with timeout.

+
Parameters
+ + +
timeout_in_secondsspecifies the timeout in seconds.
+
+
+ +

Definition at line 73 of file http_key_fetcher.cc.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Status edash_packager::media::HttpKeyFetcher::FetchKeys (const std::string & service_address,
const std::string & request,
std::string * response 
)
+
+virtual
+
+

Fetch Keys from license service. |response| is owned by caller.

+
Parameters
+ + + + +
service_addresslicense service address.
requestJSON formatted request.
responseJSON formatted response. Owned by caller.
+
+
+
Returns
OK on success.
+ +

Implements edash_packager::media::KeyFetcher.

+ +

Definition at line 78 of file http_key_fetcher.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Status edash_packager::media::HttpKeyFetcher::Get (const std::string & url,
std::string * response 
)
+
+virtual
+
+

Fetch content using HTTP GET.

+
Parameters
+ + + +
urlspecifies the content URL.
[out]responsewill contain the body of the http response on success. It should not be NULL.
+
+
+
Returns
OK on success.
+ +

Definition at line 84 of file http_key_fetcher.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Status edash_packager::media::HttpKeyFetcher::Post (const std::string & url,
const std::string & data,
std::string * response 
)
+
+virtual
+
+

Fetch content using HTTP POST.

+
Parameters
+ + + +
urlspecifies the content URL.
[out]responsewill contain the body of the http response on success. It should not be NULL.
+
+
+
Returns
OK on success.
+ +

Definition at line 88 of file http_key_fetcher.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.png b/sdk/d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.png new file mode 100644 index 0000000000..0720598777 Binary files /dev/null and b/sdk/d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.png differ diff --git a/sdk/d3/d48/structedash__packager_1_1media_1_1mp4_1_1EditList-members.html b/sdk/d3/d48/structedash__packager_1_1media_1_1mp4_1_1EditList-members.html new file mode 100644 index 0000000000..215e092f46 --- /dev/null +++ b/sdk/d3/d48/structedash__packager_1_1media_1_1mp4_1_1EditList-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::EditList Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::EditList)edash_packager::media::mp4::EditListvirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::EditListvirtual
EditList() (defined in edash_packager::media::mp4::EditList)edash_packager::media::mp4::EditList
edits (defined in edash_packager::media::mp4::EditList)edash_packager::media::mp4::EditList
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::EditListvirtual
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~EditList() (defined in edash_packager::media::mp4::EditList)edash_packager::media::mp4::EditListvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
+ + + + diff --git a/sdk/d3/d52/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator-members.html b/sdk/d3/d52/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator-members.html new file mode 100644 index 0000000000..d093d8cb2f --- /dev/null +++ b/sdk/d3/d52/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator-members.html @@ -0,0 +1,114 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::ChunkInfoIterator Member List
+
+
+ +

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

+ + + + + + + + + + + +
AdvanceChunk()edash_packager::media::mp4::ChunkInfoIterator
AdvanceSample()edash_packager::media::mp4::ChunkInfoIterator
ChunkInfoIterator(const SampleToChunk &sample_to_chunk)edash_packager::media::mp4::ChunkInfoIteratorexplicit
current_chunk() const edash_packager::media::mp4::ChunkInfoIteratorinline
IsValid() const edash_packager::media::mp4::ChunkInfoIterator
LastFirstChunk() const edash_packager::media::mp4::ChunkInfoIteratorinline
NumSamples(uint32_t start_chunk, uint32_t end_chunk) const edash_packager::media::mp4::ChunkInfoIterator
sample_description_index() const edash_packager::media::mp4::ChunkInfoIteratorinline
samples_per_chunk() const edash_packager::media::mp4::ChunkInfoIteratorinline
~ChunkInfoIterator() (defined in edash_packager::media::mp4::ChunkInfoIterator)edash_packager::media::mp4::ChunkInfoIterator
+ + + + diff --git a/sdk/d3/d56/decrypt__config_8cc_source.html b/sdk/d3/d56/decrypt__config_8cc_source.html new file mode 100644 index 0000000000..f7fc258995 --- /dev/null +++ b/sdk/d3/d56/decrypt__config_8cc_source.html @@ -0,0 +1,126 @@ + + + + + + +DASH Media Packaging SDK: media/base/decrypt_config.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
decrypt_config.cc
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/base/decrypt_config.h"
+
6 
+
7 #include "packager/base/logging.h"
+
8 
+
9 namespace edash_packager {
+
10 namespace media {
+
11 
+
12 DecryptConfig::DecryptConfig(const std::vector<uint8_t>& key_id,
+
13  const std::vector<uint8_t>& iv,
+
14  const int data_offset,
+
15  const std::vector<SubsampleEntry>& subsamples)
+
16  : key_id_(key_id),
+
17  iv_(iv),
+
18  data_offset_(data_offset),
+
19  subsamples_(subsamples) {
+
20  CHECK_GT(key_id.size(), 0u);
+
21  CHECK_GE(data_offset, 0);
+
22 }
+
23 
+
24 DecryptConfig::~DecryptConfig() {}
+
25 
+
26 } // namespace media
+
27 } // namespace edash_packager
+
DecryptConfig(const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &iv, const int data_offset, const std::vector< SubsampleEntry > &subsamples)
+
+ + + + diff --git a/sdk/d3/d62/rcheck_8h_source.html b/sdk/d3/d62/rcheck_8h_source.html new file mode 100644 index 0000000000..91b52e231a --- /dev/null +++ b/sdk/d3/d62/rcheck_8h_source.html @@ -0,0 +1,116 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/rcheck.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
rcheck.h
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_FORMATS_MP4_RCHECK_H_
+
6 #define MEDIA_FORMATS_MP4_RCHECK_H_
+
7 
+
8 #include "packager/base/logging.h"
+
9 
+
10 #define RCHECK(x) \
+
11  do { \
+
12  if (!(x)) { \
+
13  LOG(ERROR) << "Failure while processing MP4: " << #x; \
+
14  return false; \
+
15  } \
+
16  } while (0)
+
17 
+
18 #endif // MEDIA_FORMATS_MP4_RCHECK_H_
+
+ + + + diff --git a/sdk/d3/d6b/classedash__packager_1_1media_1_1IoCache.html b/sdk/d3/d6b/classedash__packager_1_1media_1_1IoCache.html new file mode 100644 index 0000000000..0a3bd2a9e2 --- /dev/null +++ b/sdk/d3/d6b/classedash__packager_1_1media_1_1IoCache.html @@ -0,0 +1,273 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::IoCache Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::IoCache Class Reference
+
+
+ +

Declaration of class which implements a thread-safe circular buffer. + More...

+ +

#include <io_cache.h>

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

+Public Member Functions

IoCache (uint64_t cache_size)
 
uint64_t Read (void *buffer, uint64_t size)
 
uint64_t Write (const void *buffer, uint64_t size)
 
+void Clear ()
 Empties the cache.
 
void Close ()
 
uint64_t BytesCached ()
 
uint64_t BytesFree ()
 
+void WaitUntilEmptyOrClosed ()
 Waits until the cache is empty or has been closed.
 
+

Detailed Description

+

Declaration of class which implements a thread-safe circular buffer.

+ +

Definition at line 20 of file io_cache.h.

+

Member Function Documentation

+ +
+
+ + + + + + + +
uint64_t edash_packager::media::IoCache::BytesCached ()
+
+

Returns the number of bytes in the cache.

+
Returns
the number of bytes in the cache.
+ +

Definition at line 116 of file io_cache.cc.

+ +
+
+ +
+
+ + + + + + + +
uint64_t edash_packager::media::IoCache::BytesFree ()
+
+

Returns the number of free bytes in the cache.

+
Returns
the number of free bytes in the cache.
+ +

Definition at line 121 of file io_cache.cc.

+ +
+
+ +
+
+ + + + + + + +
void edash_packager::media::IoCache::Close ()
+
+

Close the cache. This will call any blocking calls to unblock, and the cache won't be usable thereafter.

+ +

Definition at line 109 of file io_cache.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
uint64_t edash_packager::media::IoCache::Read (void * buffer,
uint64_t size 
)
+
+

Read data from the cache. This function may block until there is data in the cache.

+
Parameters
+ + + +
bufferis a buffer into which to read the data from the cache.
sizeis the size of buffer.
+
+
+
Returns
the number of bytes read into buffer, or 0 if the call unblocked because the cache has been closed and is empty.
+ +

Definition at line 38 of file io_cache.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
uint64_t edash_packager::media::IoCache::Write (const void * buffer,
uint64_t size 
)
+
+

Write data to the cache. This function may block until there is enough room in the cache.

+
Parameters
+ + + +
bufferis a buffer containing the data to be written to the cache.
sizeis the size of the data to be written to the cache.
+
+
+
Returns
the amount of data written to the buffer (which will equal data), or 0 if the call unblocked because the cache has been closed.
+ +

Definition at line 66 of file io_cache.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html b/sdk/d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html new file mode 100644 index 0000000000..5b3744de4e --- /dev/null +++ b/sdk/d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html @@ -0,0 +1,194 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::SampleDescription Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::SampleDescription Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::SampleDescription:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + + + +

+Public Attributes

+TrackType type
 
+std::vector< VideoSampleEntryvideo_entries
 
+std::vector< AudioSampleEntryaudio_entries
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 233 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::SampleDescription::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 440 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.png b/sdk/d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.png new file mode 100644 index 0000000000..99c4442294 Binary files /dev/null and b/sdk/d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.png differ diff --git a/sdk/d3/d76/muxer__flags_8h_source.html b/sdk/d3/d76/muxer__flags_8h_source.html new file mode 100644 index 0000000000..da856aeefa --- /dev/null +++ b/sdk/d3/d76/muxer__flags_8h_source.html @@ -0,0 +1,122 @@ + + + + + + +DASH Media Packaging SDK: app/muxer_flags.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
muxer_flags.h
+
+
+
1 // Copyright 2014 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 // Defines Muxer flags.
+
8 
+
9 #ifndef APP_MUXER_FLAGS_H_
+
10 #define APP_MUXER_FLAGS_H_
+
11 
+
12 #include <gflags/gflags.h>
+
13 
+
14 DECLARE_string(profile);
+
15 DECLARE_double(clear_lead);
+
16 DECLARE_bool(single_segment);
+
17 DECLARE_double(segment_duration);
+
18 DECLARE_bool(segment_sap_aligned);
+
19 DECLARE_double(fragment_duration);
+
20 DECLARE_bool(fragment_sap_aligned);
+
21 DECLARE_int32(num_subsegments_per_sidx);
+
22 DECLARE_string(temp_dir);
+
23 
+
24 #endif // APP_MUXER_FLAGS_H_
+
+ + + + diff --git a/sdk/d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html b/sdk/d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html new file mode 100644 index 0000000000..eb1d67f0c5 --- /dev/null +++ b/sdk/d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html @@ -0,0 +1,198 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::SampleTable Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::SampleTable Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::SampleTable:
+
+
+ + +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + + + + + + +

+Public Attributes

+SampleDescription description
 
+DecodingTimeToSample decoding_time_to_sample
 
+CompositionTimeToSample composition_time_to_sample
 
+SampleToChunk sample_to_chunk
 
+SampleSize sample_size
 
+ChunkLargeOffset chunk_large_offset
 
+SyncSample sync_sample
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 317 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::SampleTable::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 763 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.png b/sdk/d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.png new file mode 100644 index 0000000000..aaff2cfdd2 Binary files /dev/null and b/sdk/d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.png differ diff --git a/sdk/d3/d80/muxer__util_8h_source.html b/sdk/d3/d80/muxer__util_8h_source.html new file mode 100644 index 0000000000..544afd109f --- /dev/null +++ b/sdk/d3/d80/muxer__util_8h_source.html @@ -0,0 +1,128 @@ + + + + + + +DASH Media Packaging SDK: media/base/muxer_util.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
muxer_util.h
+
+
+
1 // Copyright 2014 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 // Muxer utility functions.
+
8 
+
9 #ifndef MEDIA_BASE_MUXER_UTIL_H_
+
10 #define MEDIA_BASE_MUXER_UTIL_H_
+
11 
+
12 #include <stdint.h>
+
13 
+
14 #include <string>
+
15 
+
16 namespace edash_packager {
+
17 namespace media {
+
18 
+
23 // ISO/IEC 23009-1:2012 5.3.9.4.4, false otherwise.
+
24 bool ValidateSegmentTemplate(const std::string& segment_template);
+
25 
+
33 std::string GetSegmentName(const std::string& segment_template,
+
34  uint64_t segment_start_time,
+
35  uint32_t segment_index,
+
36  uint32_t bandwidth);
+
37 
+
38 } // namespace media
+
39 } // namespace edash_packager
+
40 
+
41 #endif // MEDIA_BASE_MUXER_UTIL_H_
+
+ + + + diff --git a/sdk/d3/d8a/classedash__packager_1_1RepresentationStateChangeListener-members.html b/sdk/d3/d8a/classedash__packager_1_1RepresentationStateChangeListener-members.html new file mode 100644 index 0000000000..5cffa1ccd2 --- /dev/null +++ b/sdk/d3/d8a/classedash__packager_1_1RepresentationStateChangeListener-members.html @@ -0,0 +1,108 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::RepresentationStateChangeListener Member List
+
+
+ +

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

+ + + + + +
OnNewSegmentForRepresentation(uint64_t start_time, uint64_t duration)=0edash_packager::RepresentationStateChangeListenerpure virtual
OnSetFrameRateForRepresentation(uint32_t frame_duration, uint32_t timescale)=0edash_packager::RepresentationStateChangeListenerpure virtual
RepresentationStateChangeListener() (defined in edash_packager::RepresentationStateChangeListener)edash_packager::RepresentationStateChangeListenerinline
~RepresentationStateChangeListener() (defined in edash_packager::RepresentationStateChangeListener)edash_packager::RepresentationStateChangeListenerinlinevirtual
+ + + + diff --git a/sdk/d3/d9b/structedash__packager_1_1media_1_1VideoStreamInfoParameters-members.html b/sdk/d3/d9b/structedash__packager_1_1media_1_1VideoStreamInfoParameters-members.html new file mode 100644 index 0000000000..dd44de8822 --- /dev/null +++ b/sdk/d3/d9b/structedash__packager_1_1media_1_1VideoStreamInfoParameters-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::VideoStreamInfoParameters Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
codec (defined in edash_packager::media::VideoStreamInfoParameters)edash_packager::media::VideoStreamInfoParameters
codec_string (defined in edash_packager::media::VideoStreamInfoParameters)edash_packager::media::VideoStreamInfoParameters
duration (defined in edash_packager::media::VideoStreamInfoParameters)edash_packager::media::VideoStreamInfoParameters
extra_data (defined in edash_packager::media::VideoStreamInfoParameters)edash_packager::media::VideoStreamInfoParameters
height (defined in edash_packager::media::VideoStreamInfoParameters)edash_packager::media::VideoStreamInfoParameters
is_encrypted (defined in edash_packager::media::VideoStreamInfoParameters)edash_packager::media::VideoStreamInfoParameters
language (defined in edash_packager::media::VideoStreamInfoParameters)edash_packager::media::VideoStreamInfoParameters
nalu_length_size (defined in edash_packager::media::VideoStreamInfoParameters)edash_packager::media::VideoStreamInfoParameters
pixel_height (defined in edash_packager::media::VideoStreamInfoParameters)edash_packager::media::VideoStreamInfoParameters
pixel_width (defined in edash_packager::media::VideoStreamInfoParameters)edash_packager::media::VideoStreamInfoParameters
time_scale (defined in edash_packager::media::VideoStreamInfoParameters)edash_packager::media::VideoStreamInfoParameters
track_id (defined in edash_packager::media::VideoStreamInfoParameters)edash_packager::media::VideoStreamInfoParameters
VideoStreamInfoParameters() (defined in edash_packager::media::VideoStreamInfoParameters)edash_packager::media::VideoStreamInfoParameters
width (defined in edash_packager::media::VideoStreamInfoParameters)edash_packager::media::VideoStreamInfoParameters
~VideoStreamInfoParameters() (defined in edash_packager::media::VideoStreamInfoParameters)edash_packager::media::VideoStreamInfoParameters
+ + + + diff --git a/sdk/d3/d9f/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor-members.html b/sdk/d3/d9f/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor-members.html new file mode 100644 index 0000000000..84886dc6b3 --- /dev/null +++ b/sdk/d3/d9f/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor-members.html @@ -0,0 +1,116 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::ESDescriptor Member List
+
+
+ +

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

+ + + + + + + + + + + + + +
ComputeSize() const (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptor
decoder_specific_info() const (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptorinline
ESDescriptor() (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptor
esid() const (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptorinline
IsAAC() const edash_packager::media::mp4::ESDescriptorinline
object_type() const (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptorinline
Parse(const std::vector< uint8_t > &data) (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptor
set_decoder_specific_info(const std::vector< uint8_t > &decoder_specific_info) (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptorinline
set_esid(uint16_t esid) (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptorinline
set_object_type(ObjectType object_type) (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptorinline
Write(BufferWriter *writer) const (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptor
~ESDescriptor() (defined in edash_packager::media::mp4::ESDescriptor)edash_packager::media::mp4::ESDescriptor
+ + + + diff --git a/sdk/d3/db6/cenc_8cc_source.html b/sdk/d3/db6/cenc_8cc_source.html new file mode 100644 index 0000000000..0dbbfd8302 --- /dev/null +++ b/sdk/d3/db6/cenc_8cc_source.html @@ -0,0 +1,191 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/cenc.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
cenc.cc
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/formats/mp4/cenc.h"
+
6 
+
7 #include <cstring>
+
8 
+
9 #include "packager/media/base/buffer_reader.h"
+
10 #include "packager/media/base/buffer_writer.h"
+
11 #include "packager/media/formats/mp4/rcheck.h"
+
12 
+
13 namespace {
+
14 // According to ISO/IEC FDIS 23001-7: CENC spec, IV should be either
+
15 // 64-bit (8-byte) or 128-bit (16-byte).
+
16 bool IsIvSizeValid(size_t iv_size) { return iv_size == 8 || iv_size == 16; }
+
17 
+
18 // 16-bit |clear_bytes| and 32-bit |cipher_bytes|.
+
19 const size_t kSubsampleEntrySize = sizeof(uint16_t) + sizeof(uint32_t);
+
20 } // namespace
+
21 
+
22 namespace edash_packager {
+
23 namespace media {
+
24 namespace mp4 {
+
25 
+
26 FrameCENCInfo::FrameCENCInfo() {}
+
27 FrameCENCInfo::FrameCENCInfo(const std::vector<uint8_t>& iv) : iv_(iv) {
+
28 }
+
29 FrameCENCInfo::~FrameCENCInfo() {}
+
30 
+
31 bool FrameCENCInfo::Parse(uint8_t iv_size, BufferReader* reader) {
+
32  DCHECK(reader);
+
33  // Mandated by CENC spec.
+
34  RCHECK(IsIvSizeValid(iv_size));
+
35 
+
36  iv_.resize(iv_size);
+
37  RCHECK(reader->ReadToVector(&iv_, iv_size));
+
38 
+
39  if (!reader->HasBytes(1))
+
40  return true;
+
41 
+
42  uint16_t subsample_count;
+
43  RCHECK(reader->Read2(&subsample_count) &&
+
44  reader->HasBytes(subsample_count * kSubsampleEntrySize));
+
45 
+
46  subsamples_.resize(subsample_count);
+
47  for (uint16_t i = 0; i < subsample_count; ++i) {
+
48  uint16_t clear_bytes;
+
49  uint32_t cipher_bytes;
+
50  RCHECK(reader->Read2(&clear_bytes) &&
+
51  reader->Read4(&cipher_bytes));
+
52  subsamples_[i].clear_bytes = clear_bytes;
+
53  subsamples_[i].cipher_bytes = cipher_bytes;
+
54  }
+
55  return true;
+
56 }
+
57 
+
58 void FrameCENCInfo::Write(BufferWriter* writer) const {
+
59  DCHECK(writer);
+
60  DCHECK(IsIvSizeValid(iv_.size()));
+
61  writer->AppendVector(iv_);
+
62 
+
63  uint16_t subsample_count = subsamples_.size();
+
64  if (subsample_count == 0)
+
65  return;
+
66  writer->AppendInt(subsample_count);
+
67 
+
68  for (uint16_t i = 0; i < subsample_count; ++i) {
+
69  writer->AppendInt(subsamples_[i].clear_bytes);
+
70  writer->AppendInt(subsamples_[i].cipher_bytes);
+
71  }
+
72 }
+
73 
+
74 size_t FrameCENCInfo::ComputeSize() const {
+
75  uint16_t subsample_count = subsamples_.size();
+
76  if (subsample_count == 0)
+
77  return iv_.size();
+
78 
+
79  return iv_.size() + sizeof(subsample_count) +
+
80  subsample_count * kSubsampleEntrySize;
+
81 }
+
82 
+
83 size_t FrameCENCInfo::GetTotalSizeOfSubsamples() const {
+
84  size_t size = 0;
+
85  for (size_t i = 0; i < subsamples_.size(); ++i) {
+
86  size += subsamples_[i].clear_bytes + subsamples_[i].cipher_bytes;
+
87  }
+
88  return size;
+
89 }
+
90 
+
91 } // namespace mp4
+
92 } // namespace media
+
93 } // namespace edash_packager
+
+ + + + diff --git a/sdk/d3/dbc/structedash__packager_1_1media_1_1H264WeightingFactors.html b/sdk/d3/dbc/structedash__packager_1_1media_1_1H264WeightingFactors.html new file mode 100644 index 0000000000..eb08032fec --- /dev/null +++ b/sdk/d3/dbc/structedash__packager_1_1media_1_1H264WeightingFactors.html @@ -0,0 +1,132 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::H264WeightingFactors Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::H264WeightingFactors Struct Reference
+
+
+ + + + + + + + + + + + + + +

+Public Attributes

+bool luma_weight_flag
 
+bool chroma_weight_flag
 
+int luma_weight [32]
 
+int luma_offset [32]
 
+int chroma_weight [32][2]
 
+int chroma_offset [32][2]
 
+

Detailed Description

+
+

Definition at line 171 of file h264_parser.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/sdk/d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html b/sdk/d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html new file mode 100644 index 0000000000..2c3bc94936 --- /dev/null +++ b/sdk/d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html @@ -0,0 +1,188 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::HandlerReference Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::HandlerReference Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::HandlerReference:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + +

+Public Attributes

+TrackType type
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 162 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::HandlerReference::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 869 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.png b/sdk/d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.png new file mode 100644 index 0000000000..d8983fa574 Binary files /dev/null and b/sdk/d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.png differ diff --git a/sdk/d3/dbe/demuxer_8cc_source.html b/sdk/d3/dbe/demuxer_8cc_source.html new file mode 100644 index 0000000000..48a358592c --- /dev/null +++ b/sdk/d3/dbe/demuxer_8cc_source.html @@ -0,0 +1,309 @@ + + + + + + +DASH Media Packaging SDK: media/base/demuxer.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
demuxer.cc
+
+
+
1 // Copyright 2014 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/base/demuxer.h"
+
8 
+
9 #include "packager/base/bind.h"
+
10 #include "packager/base/logging.h"
+
11 #include "packager/base/stl_util.h"
+
12 #include "packager/media/base/decryptor_source.h"
+
13 #include "packager/media/base/key_source.h"
+
14 #include "packager/media/base/media_sample.h"
+
15 #include "packager/media/base/media_stream.h"
+
16 #include "packager/media/base/stream_info.h"
+
17 #include "packager/media/file/file.h"
+
18 #include "packager/media/formats/mp2t/mp2t_media_parser.h"
+
19 #include "packager/media/formats/mp4/mp4_media_parser.h"
+
20 #include "packager/media/formats/wvm/wvm_media_parser.h"
+
21 
+
22 namespace {
+
23 const size_t kInitBufSize = 0x10000; // 65KB, sufficient to determine the
+
24  // container and likely all init data.
+
25 const size_t kBufSize = 0x200000; // 2MB
+
26 }
+
27 
+
28 namespace edash_packager {
+
29 namespace media {
+
30 
+
31 Demuxer::Demuxer(const std::string& file_name)
+
32  : file_name_(file_name),
+
33  media_file_(NULL),
+
34  init_event_received_(false),
+
35  container_name_(CONTAINER_UNKNOWN),
+
36  buffer_(new uint8_t[kBufSize]),
+
37  cancelled_(false) {
+
38 }
+
39 
+
40 Demuxer::~Demuxer() {
+
41  if (media_file_)
+
42  media_file_->Close();
+
43  STLDeleteElements(&streams_);
+
44 }
+
45 
+
46 void Demuxer::SetKeySource(scoped_ptr<KeySource> key_source) {
+
47  key_source_ = key_source.Pass();
+
48 }
+
49 
+ +
51  DCHECK(!media_file_);
+
52  DCHECK(!init_event_received_);
+
53 
+
54  LOG(INFO) << "Initialize Demuxer for file '" << file_name_ << "'.";
+
55 
+
56  media_file_ = File::Open(file_name_.c_str(), "r");
+
57  if (!media_file_) {
+
58  return Status(error::FILE_FAILURE,
+
59  "Cannot open file for reading " + file_name_);
+
60  }
+
61 
+
62  // Read enough bytes before detecting the container.
+
63  size_t bytes_read = 0;
+
64  while (bytes_read < kInitBufSize) {
+
65  int64_t read_result =
+
66  media_file_->Read(buffer_.get() + bytes_read, kInitBufSize);
+
67  if (read_result < 0)
+
68  return Status(error::FILE_FAILURE, "Cannot read file " + file_name_);
+
69  if (read_result == 0)
+
70  break;
+
71  bytes_read += read_result;
+
72  }
+
73  container_name_ = DetermineContainer(buffer_.get(), bytes_read);
+
74 
+
75  // Initialize media parser.
+
76  switch (container_name_) {
+
77  case CONTAINER_MOV:
+
78  parser_.reset(new mp4::MP4MediaParser());
+
79  break;
+
80  case CONTAINER_MPEG2TS:
+
81  parser_.reset(new mp2t::Mp2tMediaParser());
+
82  break;
+
83  case CONTAINER_MPEG2PS:
+
84  parser_.reset(new wvm::WvmMediaParser());
+
85  break;
+
86  default:
+
87  NOTIMPLEMENTED();
+
88  return Status(error::UNIMPLEMENTED, "Container not supported.");
+
89  }
+
90 
+
91  parser_->Init(base::Bind(&Demuxer::ParserInitEvent, base::Unretained(this)),
+
92  base::Bind(&Demuxer::NewSampleEvent, base::Unretained(this)),
+
93  key_source_.get());
+
94 
+
95  // Handle trailing 'moov'.
+
96  if (container_name_ == CONTAINER_MOV)
+
97  static_cast<mp4::MP4MediaParser*>(parser_.get())->LoadMoov(file_name_);
+
98 
+
99  if (!parser_->Parse(buffer_.get(), bytes_read)) {
+
100  init_parsing_status_ =
+
101  Status(error::PARSER_FAILURE, "Cannot parse media file " + file_name_);
+
102  }
+
103 
+
104  // Parse until init event received or on error.
+
105  while (!init_event_received_ && init_parsing_status_.ok())
+
106  init_parsing_status_ = Parse();
+
107  // Defer error reporting if init completed successfully.
+
108  return init_event_received_ ? Status::OK : init_parsing_status_;
+
109 }
+
110 
+
111 void Demuxer::ParserInitEvent(
+
112  const std::vector<scoped_refptr<StreamInfo> >& streams) {
+
113  init_event_received_ = true;
+
114 
+
115  std::vector<scoped_refptr<StreamInfo> >::const_iterator it = streams.begin();
+
116  for (; it != streams.end(); ++it) {
+
117  streams_.push_back(new MediaStream(*it, this));
+
118  }
+
119 }
+
120 
+
121 bool Demuxer::NewSampleEvent(uint32_t track_id,
+
122  const scoped_refptr<MediaSample>& sample) {
+
123  std::vector<MediaStream*>::iterator it = streams_.begin();
+
124  for (; it != streams_.end(); ++it) {
+
125  if (track_id == (*it)->info()->track_id()) {
+
126  return (*it)->PushSample(sample).ok();
+
127  }
+
128  }
+
129  return false;
+
130 }
+
131 
+ +
133  Status status;
+
134 
+
135  LOG(INFO) << "Demuxer::Run() on file '" << file_name_ << "'.";
+
136 
+
137  // Start the streams.
+
138  for (std::vector<MediaStream*>::iterator it = streams_.begin();
+
139  it != streams_.end();
+
140  ++it) {
+
141  status = (*it)->Start(MediaStream::kPush);
+
142  if (!status.ok())
+
143  return status;
+
144  }
+
145 
+
146  while (!cancelled_ && (status = Parse()).ok())
+
147  continue;
+
148 
+
149  if (cancelled_ && status.ok())
+
150  return Status(error::CANCELLED, "Demuxer run cancelled");
+
151 
+
152  if (status.error_code() == error::END_OF_STREAM) {
+
153  // Push EOS sample to muxer to indicate end of stream.
+
154  const scoped_refptr<MediaSample>& sample = MediaSample::CreateEOSBuffer();
+
155  for (std::vector<MediaStream*>::iterator it = streams_.begin();
+
156  it != streams_.end();
+
157  ++it) {
+
158  status = (*it)->PushSample(sample);
+
159  if (!status.ok())
+
160  return status;
+
161  }
+
162  }
+
163  return status;
+
164 }
+
165 
+ +
167  DCHECK(media_file_);
+
168  DCHECK(parser_);
+
169  DCHECK(buffer_);
+
170 
+
171  // Return early and avoid call Parse(...) again if it has already failed at
+
172  // the initialization.
+
173  if (!init_parsing_status_.ok())
+
174  return init_parsing_status_;
+
175 
+
176  int64_t bytes_read = media_file_->Read(buffer_.get(), kBufSize);
+
177  if (bytes_read == 0) {
+
178  parser_->Flush();
+
179  return Status(error::END_OF_STREAM, "");
+
180  } else if (bytes_read < 0) {
+
181  return Status(error::FILE_FAILURE, "Cannot read file " + file_name_);
+
182  }
+
183 
+
184  return parser_->Parse(buffer_.get(), bytes_read)
+
185  ? Status::OK
+
186  : Status(error::PARSER_FAILURE,
+
187  "Cannot parse media file " + file_name_);
+
188 }
+
189 
+ +
191  cancelled_ = true;
+
192 }
+
193 
+
194 } // namespace media
+
195 } // namespace edash_packager
+ + + + + +
void SetKeySource(scoped_ptr< KeySource > key_source)
Definition: demuxer.cc:46
+ +
virtual int64_t Read(void *buffer, uint64_t length)=0
+
const std::vector< MediaStream * > & streams()
Definition: demuxer.h:66
+
virtual bool Open()=0
Internal open. Should not be used directly.
+ +
static scoped_refptr< MediaSample > CreateEOSBuffer()
Definition: media_sample.cc:75
+ +
Status Parse()
Read from the source and send it to the parser.
Definition: demuxer.cc:166
+ +
Demuxer(const std::string &file_name)
Definition: demuxer.cc:31
+
+ + + + diff --git a/sdk/d3/dc0/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset-members.html b/sdk/d3/dc0/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset-members.html new file mode 100644 index 0000000000..42a61d54e5 --- /dev/null +++ b/sdk/d3/dc0/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::SampleAuxiliaryInformationOffset Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::SampleAuxiliaryInformationOffset)edash_packager::media::mp4::SampleAuxiliaryInformationOffsetvirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::SampleAuxiliaryInformationOffsetvirtual
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
offsets (defined in edash_packager::media::mp4::SampleAuxiliaryInformationOffset)edash_packager::media::mp4::SampleAuxiliaryInformationOffset
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::SampleAuxiliaryInformationOffsetvirtual
SampleAuxiliaryInformationOffset() (defined in edash_packager::media::mp4::SampleAuxiliaryInformationOffset)edash_packager::media::mp4::SampleAuxiliaryInformationOffset
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~SampleAuxiliaryInformationOffset() (defined in edash_packager::media::mp4::SampleAuxiliaryInformationOffset)edash_packager::media::mp4::SampleAuxiliaryInformationOffsetvirtual
+ + + + diff --git a/sdk/d3/dcc/classedash__packager_1_1media_1_1ProgressListener-members.html b/sdk/d3/dcc/classedash__packager_1_1media_1_1ProgressListener-members.html new file mode 100644 index 0000000000..32c470521f --- /dev/null +++ b/sdk/d3/dcc/classedash__packager_1_1media_1_1ProgressListener-members.html @@ -0,0 +1,107 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::ProgressListener Member List
+
+
+ +

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

+ + + + +
OnProgress(double progress)=0edash_packager::media::ProgressListenerpure virtual
ProgressListener() (defined in edash_packager::media::ProgressListener)edash_packager::media::ProgressListenerinlineprotected
~ProgressListener() (defined in edash_packager::media::ProgressListener)edash_packager::media::ProgressListenerinlinevirtual
+ + + + diff --git a/sdk/d3/dd0/classedash__packager_1_1media_1_1mp4_1_1BoxReader-members.html b/sdk/d3/dd0/classedash__packager_1_1media_1_1mp4_1_1BoxReader-members.html new file mode 100644 index 0000000000..2e7e2305d3 --- /dev/null +++ b/sdk/d3/dd0/classedash__packager_1_1media_1_1mp4_1_1BoxReader-members.html @@ -0,0 +1,135 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::BoxReader Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BufferReader(const uint8_t *buf, size_t size)edash_packager::media::BufferReaderinline
ChildExist(Box *child) WARN_UNUSED_RESULTedash_packager::media::mp4::BoxReader
data() const (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReaderinline
HasBytes(size_t count)edash_packager::media::BufferReaderinline
IsValidTopLevelBox(const FourCC &type)edash_packager::media::mp4::BoxReaderstatic
pos() const (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReaderinline
Read1(uint8_t *v) WARN_UNUSED_RESULTedash_packager::media::BufferReader
Read2(uint16_t *v) WARN_UNUSED_RESULT (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReader
Read2s(int16_t *v) WARN_UNUSED_RESULT (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReader
Read4(uint32_t *v) WARN_UNUSED_RESULT (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReader
Read4s(int32_t *v) WARN_UNUSED_RESULT (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReader
Read8(uint64_t *v) WARN_UNUSED_RESULT (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReader
Read8s(int64_t *v) WARN_UNUSED_RESULT (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReader
ReadAllChildren(std::vector< T > *children) WARN_UNUSED_RESULTedash_packager::media::mp4::BoxReader
ReadChild(Box *child) WARN_UNUSED_RESULTedash_packager::media::mp4::BoxReader
ReadChildren(std::vector< T > *children) WARN_UNUSED_RESULTedash_packager::media::mp4::BoxReader
ReadFourCC(FourCC *fourcc) (defined in edash_packager::media::mp4::BoxReader)edash_packager::media::mp4::BoxReaderinline
ReadNBytesInto8(uint64_t *v, size_t num_bytes) WARN_UNUSED_RESULTedash_packager::media::BufferReader
ReadNBytesInto8s(int64_t *v, size_t num_bytes) WARN_UNUSED_RESULT (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReader
ReadTopLevelBox(const uint8_t *buf, const size_t buf_size, bool *err)edash_packager::media::mp4::BoxReaderstatic
ReadToVector(std::vector< uint8_t > *t, size_t count) WARN_UNUSED_RESULT (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReader
ScanChildren() WARN_UNUSED_RESULTedash_packager::media::mp4::BoxReader
set_size(size_t size) (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReaderinline
size() const (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReaderinline
SkipBytes(size_t num_bytes) WARN_UNUSED_RESULTedash_packager::media::BufferReader
StartTopLevelBox(const uint8_t *buf, const size_t buf_size, FourCC *type, uint64_t *box_size, bool *err) WARN_UNUSED_RESULTedash_packager::media::mp4::BoxReaderstatic
TryReadChild(Box *child) WARN_UNUSED_RESULTedash_packager::media::mp4::BoxReader
TryReadChildren(std::vector< T > *children) WARN_UNUSED_RESULTedash_packager::media::mp4::BoxReader
type() const (defined in edash_packager::media::mp4::BoxReader)edash_packager::media::mp4::BoxReaderinline
~BoxReader() (defined in edash_packager::media::mp4::BoxReader)edash_packager::media::mp4::BoxReader
~BufferReader() (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReaderinline
+ + + + diff --git a/sdk/d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html b/sdk/d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html new file mode 100644 index 0000000000..ac286a7b03 --- /dev/null +++ b/sdk/d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html @@ -0,0 +1,186 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::Track Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::Track Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::Track:
+
+
+ + +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + +

+Public Attributes

+TrackHeader header
 
+Media media
 
+Edit edit
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 395 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::Track::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1346 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.png b/sdk/d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.png new file mode 100644 index 0000000000..5e50bdd4be Binary files /dev/null and b/sdk/d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.png differ diff --git a/sdk/d3/de7/structedash__packager_1_1media_1_1OnMediaEndParameters.html b/sdk/d3/de7/structedash__packager_1_1media_1_1OnMediaEndParameters.html new file mode 100644 index 0000000000..c4bdd68f1c --- /dev/null +++ b/sdk/d3/de7/structedash__packager_1_1media_1_1OnMediaEndParameters.html @@ -0,0 +1,138 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::OnMediaEndParameters Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::OnMediaEndParameters Struct Reference
+
+
+ + + + + + + + + + + + + + + + + + +

+Public Attributes

+bool has_init_range
 
+uint64_t init_range_start
 
+uint64_t init_range_end
 
+bool has_index_range
 
+uint64_t index_range_start
 
+uint64_t index_range_end
 
+float duration_seconds
 
+uint64_t file_size
 
+

Detailed Description

+
+

Definition at line 69 of file muxer_listener_test_helper.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/sdk/d3/df1/box__reader_8cc_source.html b/sdk/d3/df1/box__reader_8cc_source.html new file mode 100644 index 0000000000..72fe66f7c1 --- /dev/null +++ b/sdk/d3/df1/box__reader_8cc_source.html @@ -0,0 +1,303 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/box_reader.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
box_reader.cc
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/formats/mp4/box_reader.h"
+
6 
+
7 #include <inttypes.h>
+
8 
+
9 #include <limits>
+
10 
+
11 #include "packager/base/logging.h"
+
12 #include "packager/base/memory/scoped_ptr.h"
+
13 #include "packager/base/strings/stringprintf.h"
+
14 #include "packager/media/formats/mp4/box.h"
+
15 
+
16 namespace edash_packager {
+
17 namespace media {
+
18 namespace mp4 {
+
19 
+
20 BoxReader::BoxReader(const uint8_t* buf, size_t size)
+
21  : BufferReader(buf, size), type_(FOURCC_NULL), scanned_(false) {
+
22  DCHECK(buf);
+
23  DCHECK_LT(0u, size);
+
24 }
+
25 
+
26 BoxReader::~BoxReader() {
+
27  if (scanned_ && !children_.empty()) {
+
28  for (ChildMap::iterator itr = children_.begin(); itr != children_.end();
+
29  ++itr) {
+
30  DVLOG(1) << "Skipping unknown box: " << FourCCToString(itr->first);
+
31  delete itr->second;
+
32  }
+
33  }
+
34 }
+
35 
+
36 // static
+ +
38  const size_t buf_size,
+
39  bool* err) {
+
40  scoped_ptr<BoxReader> reader(new BoxReader(buf, buf_size));
+
41  if (!reader->ReadHeader(err))
+
42  return NULL;
+
43 
+
44  // We don't require the complete box to be available for MDAT box.
+
45  if (reader->type() == FOURCC_MDAT)
+
46  return reader.release();
+
47 
+
48  if (!IsValidTopLevelBox(reader->type())) {
+
49  *err = true;
+
50  return NULL;
+
51  }
+
52 
+
53  if (reader->size() <= buf_size)
+
54  return reader.release();
+
55 
+
56  return NULL;
+
57 }
+
58 
+
59 // static
+
60 bool BoxReader::StartTopLevelBox(const uint8_t* buf,
+
61  const size_t buf_size,
+
62  FourCC* type,
+
63  uint64_t* box_size,
+
64  bool* err) {
+
65  BoxReader reader(buf, buf_size);
+
66  if (!reader.ReadHeader(err))
+
67  return false;
+
68  if (!IsValidTopLevelBox(reader.type())) {
+
69  *err = true;
+
70  return false;
+
71  }
+
72  *type = reader.type();
+
73  *box_size = reader.size();
+
74  return true;
+
75 }
+
76 
+
77 // static
+
78 bool BoxReader::IsValidTopLevelBox(const FourCC& type) {
+
79  switch (type) {
+
80  case FOURCC_FTYP:
+
81  case FOURCC_PDIN:
+
82  case FOURCC_BLOC:
+
83  case FOURCC_MOOV:
+
84  case FOURCC_MOOF:
+
85  case FOURCC_MFRA:
+
86  case FOURCC_MDAT:
+
87  case FOURCC_FREE:
+
88  case FOURCC_SKIP:
+
89  case FOURCC_META:
+
90  case FOURCC_MECO:
+
91  case FOURCC_STYP:
+
92  case FOURCC_SIDX:
+
93  case FOURCC_SSIX:
+
94  case FOURCC_PRFT:
+
95  return true;
+
96  default:
+
97  // Hex is used to show nonprintable characters and aid in debugging
+
98  LOG(ERROR) << "Unrecognized top-level box type 0x" << std::hex << type;
+
99  return false;
+
100  }
+
101 }
+
102 
+ +
104  DCHECK(!scanned_);
+
105  scanned_ = true;
+
106 
+
107  while (pos() < size()) {
+
108  scoped_ptr<BoxReader> child(
+
109  new BoxReader(&data()[pos()], size() - pos()));
+
110  bool err;
+
111  if (!child->ReadHeader(&err))
+
112  return false;
+
113 
+
114  FourCC box_type = child->type();
+
115  size_t box_size = child->size();
+
116  children_.insert(std::pair<FourCC, BoxReader*>(box_type, child.release()));
+
117  RCHECK(SkipBytes(box_size));
+
118  }
+
119 
+
120  return true;
+
121 }
+
122 
+
123 bool BoxReader::ReadChild(Box* child) {
+
124  DCHECK(scanned_);
+
125  FourCC child_type = child->BoxType();
+
126 
+
127  ChildMap::iterator itr = children_.find(child_type);
+
128  RCHECK(itr != children_.end());
+
129  DVLOG(2) << "Found a " << FourCCToString(child_type) << " box.";
+
130  RCHECK(child->Parse(itr->second));
+
131  delete itr->second;
+
132  children_.erase(itr);
+
133  return true;
+
134 }
+
135 
+ +
137  return children_.count(child->BoxType()) > 0;
+
138 }
+
139 
+ +
141  if (!children_.count(child->BoxType()))
+
142  return true;
+
143  return ReadChild(child);
+
144 }
+
145 
+
146 bool BoxReader::ReadHeader(bool* err) {
+
147  uint64_t size = 0;
+
148  *err = false;
+
149 
+
150  if (!ReadNBytesInto8(&size, sizeof(uint32_t)) || !ReadFourCC(&type_))
+
151  return false;
+
152 
+
153  if (size == 0) {
+
154  // Boxes that run to EOS are not supported.
+
155  NOTIMPLEMENTED() << base::StringPrintf("Box '%s' run to EOS.",
+
156  FourCCToString(type_).c_str());
+
157  *err = true;
+
158  return false;
+
159  } else if (size == 1) {
+
160  if (!Read8(&size))
+
161  return false;
+
162  }
+
163 
+
164  // The box should have at least the size of what have been parsed.
+
165  if (size < pos()) {
+
166  LOG(ERROR) << base::StringPrintf("Box '%s' with size (%" PRIu64
+
167  ") is invalid.",
+
168  FourCCToString(type_).c_str(),
+
169  size);
+
170  *err = true;
+
171  return false;
+
172  }
+
173 
+
174  // 'mdat' box could have a 64-bit size; other boxes should be very small.
+
175  if (size > static_cast<uint64_t>(std::numeric_limits<int32_t>::max()) &&
+
176  type_ != FOURCC_MDAT) {
+
177  LOG(ERROR) << base::StringPrintf("Box '%s' size (%" PRIu64
+
178  ") is too large.",
+
179  FourCCToString(type_).c_str(),
+
180  size);
+
181  *err = true;
+
182  return false;
+
183  }
+
184 
+
185  // Note that the pos_ head has advanced to the byte immediately after the
+
186  // header, which is where we want it.
+
187  set_size(size);
+
188  return true;
+
189 }
+
190 
+
191 } // namespace mp4
+
192 } // namespace media
+
193 } // namespace edash_packager
+
bool ReadChild(Box *child) WARN_UNUSED_RESULT
Definition: box_reader.cc:123
+
static BoxReader * ReadTopLevelBox(const uint8_t *buf, const size_t buf_size, bool *err)
Definition: box_reader.cc:37
+
bool TryReadChild(Box *child) WARN_UNUSED_RESULT
Definition: box_reader.cc:140
+
bool ChildExist(Box *child) WARN_UNUSED_RESULT
Definition: box_reader.cc:136
+
static bool IsValidTopLevelBox(const FourCC &type)
Definition: box_reader.cc:78
+
bool ScanChildren() WARN_UNUSED_RESULT
Definition: box_reader.cc:103
+
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
+
bool SkipBytes(size_t num_bytes) WARN_UNUSED_RESULT
+
bool Parse(BoxReader *reader)
Definition: box.cc:19
+ +
bool ReadNBytesInto8(uint64_t *v, size_t num_bytes) WARN_UNUSED_RESULT
+
Class for reading MP4 boxes.
Definition: box_reader.h:24
+
+ + + + diff --git a/sdk/d3/dfa/classedash__packager_1_1MpdBuilder.html b/sdk/d3/dfa/classedash__packager_1_1MpdBuilder.html new file mode 100644 index 0000000000..9eb4bbcd0e --- /dev/null +++ b/sdk/d3/dfa/classedash__packager_1_1MpdBuilder.html @@ -0,0 +1,389 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::MpdBuilder Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::MpdBuilder Class Reference
+
+
+ +

This class generates DASH MPDs (Media Presentation Descriptions). + More...

+ +

#include <mpd_builder.h>

+
+Inheritance diagram for edash_packager::MpdBuilder:
+
+
+ + +edash_packager::MockMpdBuilder + +
+ + + + +

+Public Types

enum  MpdType { kStatic = 0, +kDynamic + }
 
+ + + + + + + + + + + + + +

+Public Member Functions

 MpdBuilder (MpdType type, const MpdOptions &mpd_options)
 
void AddBaseUrl (const std::string &base_url)
 
virtual AdaptationSetAddAdaptationSet (const std::string &lang)
 
bool WriteMpdToFile (media::File *output_file)
 
virtual bool ToString (std::string *output)
 
MpdType type () const
 
+ + + +

+Static Public Member Functions

static void MakePathsRelativeToMpd (const std::string &mpd_path, MediaInfo *media_info)
 
+ + + +

+Friends

+class DynamicMpdBuilderTest
 
+

Detailed Description

+

This class generates DASH MPDs (Media Presentation Descriptions).

+ +

Definition at line 56 of file mpd_builder.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
edash_packager::MpdBuilder::MpdBuilder (MpdType type,
const MpdOptionsmpd_options 
)
+
+

Constructs MpdBuilder.

+
Parameters
+ + +
typeindicates whether the MPD should be for VOD or live content (kStatic for VOD profile, or kDynamic for live profile).
+
+
+ +

Definition at line 380 of file mpd_builder.cc.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
AdaptationSet * edash_packager::MpdBuilder::AddAdaptationSet (const std::string & lang)
+
+virtual
+
+

Adds <AdaptationSet> to the MPD.

+
Parameters
+ + +
langis the language of the AdaptationSet. This can be empty for videos, for example.
+
+
+
Returns
The new adaptation set, which is owned by this instance.
+ +

Definition at line 392 of file mpd_builder.cc.

+ +
+
+ +
+
+ + + + + + + + +
void edash_packager::MpdBuilder::AddBaseUrl (const std::string & base_url)
+
+

Add <BaseURL> entry to the MPD.

+
Parameters
+ + +
base_urlURL for <BaseURL> entry.
+
+
+ +

Definition at line 387 of file mpd_builder.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void edash_packager::MpdBuilder::MakePathsRelativeToMpd (const std::string & mpd_path,
MediaInfo * media_info 
)
+
+static
+
+

Adjusts the fields of MediaInfo so that paths are relative to the specified MPD path.

+
Parameters
+ + + +
mpd_pathis the file path of the MPD file.
media_infois the MediaInfo object to be updated with relative paths.
+
+
+ +

Definition at line 608 of file mpd_builder.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool edash_packager::MpdBuilder::ToString (std::string * output)
+
+virtual
+
+

Writes the MPD to the given string.

+
Parameters
+ + +
[out]outputis an output string where the MPD gets written.
+
+
+
Returns
true on success, false otherwise.
+ +

Definition at line 410 of file mpd_builder.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
MpdType edash_packager::MpdBuilder::type () const
+
+inline
+
+
Returns
The mpd type.
+ +

Definition at line 91 of file mpd_builder.h.

+ +
+
+ +
+
+ + + + + + + + +
bool edash_packager::MpdBuilder::WriteMpdToFile (media::Fileoutput_file)
+
+

Write the MPD to specified file.

+
Parameters
+ + +
[out]output_fileis MPD destination. output_file will be flushed but not closed.
+
+
+
Returns
true on success, false otherwise.
+ +

Definition at line 404 of file mpd_builder.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d3/dfa/classedash__packager_1_1MpdBuilder.png b/sdk/d3/dfa/classedash__packager_1_1MpdBuilder.png new file mode 100644 index 0000000000..5e8e2ae277 Binary files /dev/null and b/sdk/d3/dfa/classedash__packager_1_1MpdBuilder.png differ diff --git a/sdk/d3/dfa/structedash__packager_1_1media_1_1H264SliceHeader-members.html b/sdk/d3/dfa/structedash__packager_1_1media_1_1H264SliceHeader-members.html new file mode 100644 index 0000000000..b99c31a35d --- /dev/null +++ b/sdk/d3/dfa/structedash__packager_1_1media_1_1H264SliceHeader-members.html @@ -0,0 +1,162 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::H264SliceHeader Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
adaptive_ref_pic_marking_mode_flag (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
bottom_field_flag (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
cabac_init_idc (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
chroma_log2_weight_denom (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
chroma_weight_l0_flag (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
chroma_weight_l1_flag (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
colour_plane_id (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
delta_pic_order_cnt (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
delta_pic_order_cnt_bottom (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
direct_spatial_mv_pred_flag (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
disable_deblocking_filter_idc (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
field_pic_flag (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
first_mb_in_slice (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
frame_num (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
H264SliceHeader() (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
header_bit_size (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
idr_pic_flag (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
idr_pic_id (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
IsBSlice() const (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
IsISlice() const (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
IsPSlice() const (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
IsSISlice() const (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
IsSPSlice() const (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
kBSlice enum value (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
kISlice enum value (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
kPSlice enum value (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
kRefListModSize enum value (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
kRefListSize enum value (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
kSISlice enum value (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
kSPSlice enum value (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
long_term_reference_flag (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
luma_log2_weight_denom (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
luma_weight_l0_flag (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
luma_weight_l1_flag (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
nal_ref_idc (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
nalu_data (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
nalu_size (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
no_output_of_prior_pics_flag (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
num_ref_idx_active_override_flag (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
num_ref_idx_l0_active_minus1 (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
num_ref_idx_l1_active_minus1 (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
pic_order_cnt_lsb (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
pic_parameter_set_id (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
pred_weight_table_l0 (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
pred_weight_table_l1 (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
redundant_pic_cnt (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
ref_list_l0_modifications (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
ref_list_l1_modifications (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
ref_pic_list_modification_flag_l0 (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
ref_pic_list_modification_flag_l1 (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
ref_pic_marking (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
slice_alpha_c0_offset_div2 (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
slice_beta_offset_div2 (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
slice_qp_delta (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
slice_qs_delta (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
slice_type (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
sp_for_switch_flag (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
Type enum name (defined in edash_packager::media::H264SliceHeader)edash_packager::media::H264SliceHeader
+ + + + diff --git a/sdk/d4/d0b/structedash__packager_1_1media_1_1mp4_1_1Media-members.html b/sdk/d4/d0b/structedash__packager_1_1media_1_1mp4_1_1Media-members.html new file mode 100644 index 0000000000..3b6b2d9ed7 --- /dev/null +++ b/sdk/d4/d0b/structedash__packager_1_1media_1_1mp4_1_1Media-members.html @@ -0,0 +1,117 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::Media Member List
+
+
+ +

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

+ + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::Media)edash_packager::media::mp4::Mediavirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::Mediavirtual
handler (defined in edash_packager::media::mp4::Media)edash_packager::media::mp4::Media
header (defined in edash_packager::media::mp4::Media)edash_packager::media::mp4::Media
information (defined in edash_packager::media::mp4::Media)edash_packager::media::mp4::Media
Media() (defined in edash_packager::media::mp4::Media)edash_packager::media::mp4::Media
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::Mediavirtual
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~Media() (defined in edash_packager::media::mp4::Media)edash_packager::media::mp4::Mediavirtual
+ + + + diff --git a/sdk/d4/d1d/classedash__packager_1_1media_1_1Muxer.html b/sdk/d4/d1d/classedash__packager_1_1media_1_1Muxer.html new file mode 100644 index 0000000000..c054fd93a7 --- /dev/null +++ b/sdk/d4/d1d/classedash__packager_1_1media_1_1Muxer.html @@ -0,0 +1,338 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::Muxer Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::Muxer Class Referenceabstract
+
+
+ +

#include <muxer.h>

+
+Inheritance diagram for edash_packager::media::Muxer:
+
+
+ + +edash_packager::media::mp4::MP4Muxer + +
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Muxer (const MuxerOptions &options)
 
void SetKeySource (KeySource *encryption_key_source, uint32_t max_sd_pixels, double clear_lead_in_seconds, double crypto_period_duration_in_seconds)
 
+void AddStream (MediaStream *stream)
 Add video/audio stream.
 
+Status Run ()
 Drive the remuxing from muxer side (pull).
 
void Cancel ()
 
void SetMuxerListener (scoped_ptr< MuxerListener > muxer_listener)
 
void SetProgressListener (scoped_ptr< ProgressListener > progress_listener)
 
+const std::vector< MediaStream * > & streams () const
 
void set_clock (base::Clock *clock)
 
+ + + + + + + + + + + + + + + + + +

+Protected Member Functions

+const MuxerOptionsoptions () const
 
+KeySourceencryption_key_source ()
 
+uint32_t max_sd_pixels () const
 
+double clear_lead_in_seconds () const
 
+double crypto_period_duration_in_seconds () const
 
+MuxerListenermuxer_listener ()
 
+ProgressListenerprogress_listener ()
 
+base::Clock * clock ()
 
+ + + +

+Friends

+class MediaStream
 
+

Detailed Description

+

Muxer is responsible for taking elementary stream samples and producing media containers. An optional KeySource can be provided to Muxer to generate encrypted outputs.

+ +

Definition at line 32 of file muxer.h.

+

Member Function Documentation

+ +
+
+ + + + + + + +
void edash_packager::media::Muxer::Cancel ()
+
+

Cancel a muxing job in progress. Will cause Run to exit with an error status of type CANCELLED.

+ +

Definition at line 78 of file muxer.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void edash_packager::media::Muxer::set_clock (base::Clock * clock)
+
+inline
+
+

Inject clock, mainly used for testing. The injected clock will be used to generate the creation time-stamp and modification time-stamp of the muxer output. If no clock is injected, the code uses base::Time::Now() to generate the time-stamps.

+
Parameters
+ + +
clockis the Clock to be injected.
+
+
+ +

Definition at line 78 of file muxer.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void edash_packager::media::Muxer::SetKeySource (KeySourceencryption_key_source,
uint32_t max_sd_pixels,
double clear_lead_in_seconds,
double crypto_period_duration_in_seconds 
)
+
+

Set encryption key source.

+
Parameters
+ + + + + +
encryption_key_sourcepoints to the encryption key source. The caller retains ownership, and should not be NULL.
max_sd_pixelsspecifies the threshold to determine whether a video track should be considered as SD or HD. If the track has more pixels per frame than max_sd_pixels, it is HD, SD otherwise.
clear_lead_in_secondsspecifies clear lead duration in seconds.
crypto_period_duration_in_secondsspecifies crypto period duration in seconds. A positive value means key rotation is enabled, the key source must support key rotation in this case.
+
+
+ +

Definition at line 27 of file muxer.cc.

+ +
+
+ +
+
+ + + + + + + + +
void edash_packager::media::Muxer::SetMuxerListener (scoped_ptr< MuxerListenermuxer_listener)
+
+

Set a MuxerListener event handler for this object.

+
Parameters
+ + +
muxer_listenershould not be NULL.
+
+
+ +

Definition at line 82 of file muxer.cc.

+ +
+
+ +
+
+ + + + + + + + +
void edash_packager::media::Muxer::SetProgressListener (scoped_ptr< ProgressListenerprogress_listener)
+
+

Set a ProgressListener event handler for this object.

+
Parameters
+ + +
progress_listenershould not be NULL.
+
+
+ +

Definition at line 86 of file muxer.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d4/d1d/classedash__packager_1_1media_1_1Muxer.png b/sdk/d4/d1d/classedash__packager_1_1media_1_1Muxer.png new file mode 100644 index 0000000000..5b9bf7934c Binary files /dev/null and b/sdk/d4/d1d/classedash__packager_1_1media_1_1Muxer.png differ diff --git a/sdk/d4/d2e/classedash__packager_1_1media_1_1mp4_1_1FrameCENCInfo-members.html b/sdk/d4/d2e/classedash__packager_1_1media_1_1mp4_1_1FrameCENCInfo-members.html new file mode 100644 index 0000000000..d534cb6d34 --- /dev/null +++ b/sdk/d4/d2e/classedash__packager_1_1media_1_1mp4_1_1FrameCENCInfo-members.html @@ -0,0 +1,114 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::FrameCENCInfo Member List
+
+
+ +

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

+ + + + + + + + + + + +
AddSubsample(const SubsampleEntry &subsample) (defined in edash_packager::media::mp4::FrameCENCInfo)edash_packager::media::mp4::FrameCENCInfoinline
ComputeSize() const (defined in edash_packager::media::mp4::FrameCENCInfo)edash_packager::media::mp4::FrameCENCInfo
FrameCENCInfo() (defined in edash_packager::media::mp4::FrameCENCInfo)edash_packager::media::mp4::FrameCENCInfo
FrameCENCInfo(const std::vector< uint8_t > &iv) (defined in edash_packager::media::mp4::FrameCENCInfo)edash_packager::media::mp4::FrameCENCInfoexplicit
GetTotalSizeOfSubsamples() const (defined in edash_packager::media::mp4::FrameCENCInfo)edash_packager::media::mp4::FrameCENCInfo
iv() const (defined in edash_packager::media::mp4::FrameCENCInfo)edash_packager::media::mp4::FrameCENCInfoinline
Parse(uint8_t iv_size, BufferReader *reader) (defined in edash_packager::media::mp4::FrameCENCInfo)edash_packager::media::mp4::FrameCENCInfo
subsamples() const (defined in edash_packager::media::mp4::FrameCENCInfo)edash_packager::media::mp4::FrameCENCInfoinline
Write(BufferWriter *writer) const (defined in edash_packager::media::mp4::FrameCENCInfo)edash_packager::media::mp4::FrameCENCInfo
~FrameCENCInfo() (defined in edash_packager::media::mp4::FrameCENCInfo)edash_packager::media::mp4::FrameCENCInfo
+ + + + diff --git a/sdk/d4/d37/io__cache_8cc_source.html b/sdk/d4/d37/io__cache_8cc_source.html new file mode 100644 index 0000000000..601e766c7a --- /dev/null +++ b/sdk/d4/d37/io__cache_8cc_source.html @@ -0,0 +1,250 @@ + + + + + + +DASH Media Packaging SDK: media/file/io_cache.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
io_cache.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/file/io_cache.h"
+
8 
+
9 #include <string.h>
+
10 
+
11 #include <algorithm>
+
12 
+
13 #include "packager/base/logging.h"
+
14 
+
15 namespace edash_packager {
+
16 
+
17 using base::AutoLock;
+
18 using base::AutoUnlock;
+
19 
+
20 namespace media {
+
21 
+
22 IoCache::IoCache(uint64_t cache_size)
+
23  : cache_size_(cache_size),
+
24  read_event_(false, false),
+
25  write_event_(false, false),
+
26  // Make the buffer one byte larger than the cache so that when the
+
27  // condition r_ptr == w_ptr is unambiguous (buffer empty).
+
28  circular_buffer_(cache_size + 1),
+
29  end_ptr_(&circular_buffer_[0] + cache_size + 1),
+
30  r_ptr_(&circular_buffer_[0]),
+
31  w_ptr_(&circular_buffer_[0]),
+
32  closed_(false) {}
+
33 
+
34 IoCache::~IoCache() {
+
35  Close();
+
36 }
+
37 
+
38 uint64_t IoCache::Read(void* buffer, uint64_t size) {
+
39  DCHECK(buffer);
+
40 
+
41  AutoLock lock(lock_);
+
42  while (!closed_ && (BytesCachedInternal() == 0)) {
+
43  AutoUnlock unlock(lock_);
+
44  write_event_.Wait();
+
45  }
+
46 
+
47  size = std::min(size, BytesCachedInternal());
+
48  uint64_t first_chunk_size(std::min(size, static_cast<uint64_t>(
+
49  end_ptr_ - r_ptr_)));
+
50  memcpy(buffer, r_ptr_, first_chunk_size);
+
51  r_ptr_ += first_chunk_size;
+
52  DCHECK_GE(end_ptr_, r_ptr_);
+
53  if (r_ptr_ == end_ptr_)
+
54  r_ptr_ = &circular_buffer_[0];
+
55  uint64_t second_chunk_size(size - first_chunk_size);
+
56  if (second_chunk_size) {
+
57  memcpy(static_cast<uint8_t*>(buffer) + first_chunk_size, r_ptr_,
+
58  second_chunk_size);
+
59  r_ptr_ += second_chunk_size;
+
60  DCHECK_GT(end_ptr_, r_ptr_);
+
61  }
+
62  read_event_.Signal();
+
63  return size;
+
64 }
+
65 
+
66 uint64_t IoCache::Write(const void* buffer, uint64_t size) {
+
67  DCHECK(buffer);
+
68 
+
69  const uint8_t* r_ptr(static_cast<const uint8_t*>(buffer));
+
70  uint64_t bytes_left(size);
+
71  while (bytes_left) {
+
72  AutoLock lock(lock_);
+
73  while (!closed_ && (BytesFreeInternal() == 0)) {
+
74  AutoUnlock unlock(lock_);
+
75  read_event_.Wait();
+
76  }
+
77  if (closed_)
+
78  return 0;
+
79 
+
80  uint64_t write_size(std::min(bytes_left, BytesFreeInternal()));
+
81  uint64_t first_chunk_size(std::min(write_size, static_cast<uint64_t>(
+
82  end_ptr_ - w_ptr_)));
+
83  memcpy(w_ptr_, r_ptr, first_chunk_size);
+
84  w_ptr_ += first_chunk_size;
+
85  DCHECK_GE(end_ptr_, w_ptr_);
+
86  if (w_ptr_ == end_ptr_)
+
87  w_ptr_ = &circular_buffer_[0];
+
88  r_ptr += first_chunk_size;
+
89  uint64_t second_chunk_size(write_size - first_chunk_size);
+
90  if (second_chunk_size) {
+
91  memcpy(w_ptr_, r_ptr, second_chunk_size);
+
92  w_ptr_ += second_chunk_size;
+
93  DCHECK_GT(end_ptr_, w_ptr_);
+
94  r_ptr += second_chunk_size;
+
95  }
+
96  bytes_left -= write_size;
+
97  write_event_.Signal();
+
98  }
+
99  return size;
+
100 }
+
101 
+ +
103  AutoLock lock(lock_);
+
104  r_ptr_ = w_ptr_ = &circular_buffer_[0];
+
105  // Let any writers know that there is room in the cache.
+
106  read_event_.Signal();
+
107 }
+
108 
+ +
110  AutoLock lock(lock_);
+
111  closed_ = true;
+
112  read_event_.Signal();
+
113  write_event_.Signal();
+
114 }
+
115 
+ +
117  AutoLock lock(lock_);
+
118  return BytesCachedInternal();
+
119 }
+
120 
+
121 uint64_t IoCache::BytesFree() {
+
122  AutoLock lock(lock_);
+
123  return BytesFreeInternal();
+
124 }
+
125 
+
126 uint64_t IoCache::BytesCachedInternal() {
+
127  return (r_ptr_ <= w_ptr_) ?
+
128  w_ptr_ - r_ptr_ :
+
129  (end_ptr_ - r_ptr_) + (w_ptr_ - &circular_buffer_[0]);
+
130 }
+
131 
+
132 uint64_t IoCache::BytesFreeInternal() {
+
133  return cache_size_ - BytesCachedInternal();
+
134 }
+
135 
+ +
137  AutoLock lock(lock_);
+
138  while (!closed_ && BytesCachedInternal()) {
+
139  AutoUnlock unlock(lock_);
+
140  read_event_.Wait();
+
141  }
+
142 }
+
143 
+
144 } // namespace media
+
145 } // namespace edash_packager
+ + +
void WaitUntilEmptyOrClosed()
Waits until the cache is empty or has been closed.
Definition: io_cache.cc:136
+
uint64_t Write(const void *buffer, uint64_t size)
Definition: io_cache.cc:66
+ +
void Clear()
Empties the cache.
Definition: io_cache.cc:102
+
uint64_t Read(void *buffer, uint64_t size)
Definition: io_cache.cc:38
+
+ + + + diff --git a/sdk/d4/d43/classedash__packager_1_1media_1_1KeyFetcher.html b/sdk/d4/d43/classedash__packager_1_1media_1_1KeyFetcher.html new file mode 100644 index 0000000000..60d893b748 --- /dev/null +++ b/sdk/d4/d43/classedash__packager_1_1media_1_1KeyFetcher.html @@ -0,0 +1,185 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::KeyFetcher Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::KeyFetcher Class Referenceabstract
+
+
+ +

Base class for fetching keys from the license service. + More...

+ +

#include <key_fetcher.h>

+
+Inheritance diagram for edash_packager::media::KeyFetcher:
+
+
+ + +edash_packager::media::HttpKeyFetcher + +
+ + + + +

+Public Member Functions

virtual Status FetchKeys (const std::string &service_address, const std::string &request, std::string *response)=0
 
+

Detailed Description

+

Base class for fetching keys from the license service.

+ +

Definition at line 17 of file key_fetcher.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual Status edash_packager::media::KeyFetcher::FetchKeys (const std::string & service_address,
const std::string & request,
std::string * response 
)
+
+pure virtual
+
+

Fetch Keys from license service. |response| is owned by caller.

+
Parameters
+ + + + +
service_addresslicense service address.
requestJSON formatted request.
responseJSON formatted response. Owned by caller.
+
+
+
Returns
OK on success.
+ +

Implemented in edash_packager::media::HttpKeyFetcher.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d4/d43/classedash__packager_1_1media_1_1KeyFetcher.png b/sdk/d4/d43/classedash__packager_1_1media_1_1KeyFetcher.png new file mode 100644 index 0000000000..7213e67051 Binary files /dev/null and b/sdk/d4/d43/classedash__packager_1_1media_1_1KeyFetcher.png differ diff --git a/sdk/d4/d55/classedash__packager_1_1media_1_1H264BitReader.html b/sdk/d4/d55/classedash__packager_1_1media_1_1H264BitReader.html new file mode 100644 index 0000000000..7bfe0d90cf --- /dev/null +++ b/sdk/d4/d55/classedash__packager_1_1media_1_1H264BitReader.html @@ -0,0 +1,130 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::H264BitReader Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::H264BitReader Class Reference
+
+
+ + + + + + + + + + + + +

+Public Member Functions

+bool Initialize (const uint8_t *data, off_t size)
 
+bool ReadBits (int num_bits, int *out)
 
+off_t NumBitsLeft ()
 
+bool HasMoreRBSPData ()
 
+size_t NumEmulationPreventionBytesRead ()
 
+

Detailed Description

+
+

Definition at line 22 of file h264_bit_reader.h.

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d4/d67/structedash__packager_1_1media_1_1mp4_1_1MovieFragment-members.html b/sdk/d4/d67/structedash__packager_1_1media_1_1mp4_1_1MovieFragment-members.html new file mode 100644 index 0000000000..8ac02e03c4 --- /dev/null +++ b/sdk/d4/d67/structedash__packager_1_1media_1_1mp4_1_1MovieFragment-members.html @@ -0,0 +1,117 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::MovieFragment Member List
+
+
+ +

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

+ + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::MovieFragment)edash_packager::media::mp4::MovieFragmentvirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::MovieFragmentvirtual
header (defined in edash_packager::media::mp4::MovieFragment)edash_packager::media::mp4::MovieFragment
MovieFragment() (defined in edash_packager::media::mp4::MovieFragment)edash_packager::media::mp4::MovieFragment
Parse(BoxReader *reader)edash_packager::media::mp4::Box
pssh (defined in edash_packager::media::mp4::MovieFragment)edash_packager::media::mp4::MovieFragment
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::MovieFragmentvirtual
tracks (defined in edash_packager::media::mp4::MovieFragment)edash_packager::media::mp4::MovieFragment
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~MovieFragment() (defined in edash_packager::media::mp4::MovieFragment)edash_packager::media::mp4::MovieFragmentvirtual
+ + + + diff --git a/sdk/d4/d71/structedash__packager_1_1xml_1_1ScopedXmlPtr-members.html b/sdk/d4/d71/structedash__packager_1_1xml_1_1ScopedXmlPtr-members.html new file mode 100644 index 0000000000..6de70fe77d --- /dev/null +++ b/sdk/d4/d71/structedash__packager_1_1xml_1_1ScopedXmlPtr-members.html @@ -0,0 +1,105 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::xml::ScopedXmlPtr< XmlType > Member List
+
+
+ +

This is the complete list of members for edash_packager::xml::ScopedXmlPtr< XmlType >, including all inherited members.

+ + +
type typedef (defined in edash_packager::xml::ScopedXmlPtr< XmlType >)edash_packager::xml::ScopedXmlPtr< XmlType >
+ + + + diff --git a/sdk/d4/d8f/structedash__packager_1_1media_1_1mp4_1_1MovieHeader-members.html b/sdk/d4/d8f/structedash__packager_1_1media_1_1mp4_1_1MovieHeader-members.html new file mode 100644 index 0000000000..d12689c321 --- /dev/null +++ b/sdk/d4/d8f/structedash__packager_1_1media_1_1mp4_1_1MovieHeader-members.html @@ -0,0 +1,125 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::MovieHeader Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::MovieHeader)edash_packager::media::mp4::MovieHeadervirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::MovieHeadervirtual
creation_time (defined in edash_packager::media::mp4::MovieHeader)edash_packager::media::mp4::MovieHeader
duration (defined in edash_packager::media::mp4::MovieHeader)edash_packager::media::mp4::MovieHeader
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
modification_time (defined in edash_packager::media::mp4::MovieHeader)edash_packager::media::mp4::MovieHeader
MovieHeader() (defined in edash_packager::media::mp4::MovieHeader)edash_packager::media::mp4::MovieHeader
next_track_id (defined in edash_packager::media::mp4::MovieHeader)edash_packager::media::mp4::MovieHeader
Parse(BoxReader *reader)edash_packager::media::mp4::Box
rate (defined in edash_packager::media::mp4::MovieHeader)edash_packager::media::mp4::MovieHeader
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::MovieHeadervirtual
timescale (defined in edash_packager::media::mp4::MovieHeader)edash_packager::media::mp4::MovieHeader
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
volume (defined in edash_packager::media::mp4::MovieHeader)edash_packager::media::mp4::MovieHeader
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~MovieHeader() (defined in edash_packager::media::mp4::MovieHeader)edash_packager::media::mp4::MovieHeadervirtual
+ + + + diff --git a/sdk/d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html b/sdk/d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html new file mode 100644 index 0000000000..8ae3f4f1ea --- /dev/null +++ b/sdk/d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html @@ -0,0 +1,243 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::DecodingTimeIterator Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::DecodingTimeIterator Class Reference
+
+
+ +

#include <decoding_time_iterator.h>

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

+Public Member Functions

DecodingTimeIterator (const DecodingTimeToSample &decoding_time_to_sample)
 Create DecodingTimeIterator from decoding time to sample box.
 
bool AdvanceSample ()
 
bool IsValid () const
 
uint32_t sample_delta () const
 
uint64_t Duration (uint32_t start_sample, uint32_t end_sample) const
 
uint32_t NumSamples () const
 
+

Detailed Description

+

Decoding time to sample box (STTS) iterator used to iterate through the compressed table. This class also provides convenient functions to query total number of samples and the duration from start_sample to end_sample.

+ +

Definition at line 24 of file decoding_time_iterator.h.

+

Member Function Documentation

+ +
+
+ + + + + + + +
bool edash_packager::media::mp4::DecodingTimeIterator::AdvanceSample ()
+
+

Advance to the next sample.

+
Returns
true if not past the last sample, false otherwise.
+ +

Definition at line 24 of file decoding_time_iterator.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
uint64_t edash_packager::media::mp4::DecodingTimeIterator::Duration (uint32_t start_sample,
uint32_t end_sample 
) const
+
+
Returns
Duration from start_sample to end_sample, both 1-based, inclusive.
+ +

Definition at line 40 of file decoding_time_iterator.cc.

+ +
+
+ +
+
+ + + + + + + +
bool edash_packager::media::mp4::DecodingTimeIterator::IsValid () const
+
+
Returns
true if the iterator is still valid, false if past the last sample.
+ +

Definition at line 35 of file decoding_time_iterator.cc.

+ +
+
+ +
+
+ + + + + + + +
uint32_t edash_packager::media::mp4::DecodingTimeIterator::NumSamples () const
+
+
Returns
Total number of samples in the table.
+ +

Definition at line 61 of file decoding_time_iterator.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::DecodingTimeIterator::sample_delta () const
+
+inline
+
+
Returns
Sample delta for current sample.
+ +

Definition at line 40 of file decoding_time_iterator.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d4/d92/structedash__packager_1_1media_1_1mp4_1_1MediaData.html b/sdk/d4/d92/structedash__packager_1_1media_1_1mp4_1_1MediaData.html new file mode 100644 index 0000000000..be125dff0f --- /dev/null +++ b/sdk/d4/d92/structedash__packager_1_1media_1_1mp4_1_1MediaData.html @@ -0,0 +1,131 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::MediaData Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::MediaData Struct Reference
+
+
+ + + + + + + + +

+Public Member Functions

+void Write (BufferWriter *buffer_writer)
 
+uint32_t ComputeSize ()
 
+FourCC BoxType () const
 
+ + + +

+Public Attributes

+uint32_t data_size
 
+

Detailed Description

+
+

Definition at line 586 of file box_definitions.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d4/d93/structedash__packager_1_1media_1_1H264SEIMessage.html b/sdk/d4/d93/structedash__packager_1_1media_1_1H264SEIMessage.html new file mode 100644 index 0000000000..7ac22aa61c --- /dev/null +++ b/sdk/d4/d93/structedash__packager_1_1media_1_1H264SEIMessage.html @@ -0,0 +1,135 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::H264SEIMessage Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::H264SEIMessage Struct Reference
+
+
+ + + + +

+Public Types

enum  Type { kSEIRecoveryPoint = 6 + }
 
+ + + + + + + + + + +

+Public Attributes

+int type
 
+int payload_size
 
+union {
+   H264SEIRecoveryPoint   recovery_point
 
}; 
 
+

Detailed Description

+
+

Definition at line 271 of file h264_parser.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d4/d9b/classedash__packager_1_1AdaptationSet-members.html b/sdk/d4/d9b/classedash__packager_1_1AdaptationSet-members.html new file mode 100644 index 0000000000..00e6049e82 --- /dev/null +++ b/sdk/d4/d9b/classedash__packager_1_1AdaptationSet-members.html @@ -0,0 +1,126 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::AdaptationSet Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + +
AdaptationSet(uint32_t adaptation_set_id, const std::string &lang, const MpdOptions &mpd_options, MpdBuilder::MpdType mpd_type, base::AtomicSequenceNumber *representation_counter)edash_packager::AdaptationSetprotected
AddContentProtectionElement(const ContentProtectionElement &element)edash_packager::AdaptationSetvirtual
AddRepresentation(const MediaInfo &media_info)edash_packager::AdaptationSetvirtual
AddRole(Role role)edash_packager::AdaptationSetvirtual
ForceSetSegmentAlignment(bool segment_alignment)edash_packager::AdaptationSet
GetXml()edash_packager::AdaptationSet
Group() const edash_packager::AdaptationSetvirtual
id() const (defined in edash_packager::AdaptationSet)edash_packager::AdaptationSetinline
kRoleAlternate enum value (defined in edash_packager::AdaptationSet)edash_packager::AdaptationSet
kRoleCaption enum value (defined in edash_packager::AdaptationSet)edash_packager::AdaptationSet
kRoleCommentary enum value (defined in edash_packager::AdaptationSet)edash_packager::AdaptationSet
kRoleDub enum value (defined in edash_packager::AdaptationSet)edash_packager::AdaptationSet
kRoleMain enum value (defined in edash_packager::AdaptationSet)edash_packager::AdaptationSet
kRoleSubtitle enum value (defined in edash_packager::AdaptationSet)edash_packager::AdaptationSet
kRoleSupplementary enum value (defined in edash_packager::AdaptationSet)edash_packager::AdaptationSet
MpdBuilder (defined in edash_packager::AdaptationSet)edash_packager::AdaptationSetfriend
OnNewSegmentForRepresentation(uint32_t representation_id, uint64_t start_time, uint64_t duration)edash_packager::AdaptationSet
OnSetFrameRateForRepresentation(uint32_t representation_id, uint32_t frame_duration, uint32_t timescale)edash_packager::AdaptationSet
Role enum name (defined in edash_packager::AdaptationSet)edash_packager::AdaptationSet
SetGroup(int group_number)edash_packager::AdaptationSetvirtual
UpdateContentProtectionPssh(const std::string &drm_uuid, const std::string &pssh)edash_packager::AdaptationSetvirtual
~AdaptationSet() (defined in edash_packager::AdaptationSet)edash_packager::AdaptationSetvirtual
+ + + + diff --git a/sdk/d4/da1/classedash__packager_1_1media_1_1DecryptConfig.html b/sdk/d4/da1/classedash__packager_1_1media_1_1DecryptConfig.html new file mode 100644 index 0000000000..c4dc0aa732 --- /dev/null +++ b/sdk/d4/da1/classedash__packager_1_1media_1_1DecryptConfig.html @@ -0,0 +1,191 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::DecryptConfig Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::DecryptConfig Class Reference
+
+
+ +

#include <decrypt_config.h>

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

+Public Member Functions

 DecryptConfig (const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &iv, const int data_offset, const std::vector< SubsampleEntry > &subsamples)
 
+const std::vector< uint8_t > & key_id () const
 
+const std::vector< uint8_t > & iv () const
 
+int data_offset () const
 
+const std::vector
+< SubsampleEntry > & 
subsamples () const
 
+ + + + +

+Static Public Attributes

+static const size_t kDecryptionKeySize = 16
 Keys are always 128 bits.
 
+

Detailed Description

+

Contains all the information that a decryptor needs to decrypt a media sample.

+ +

Definition at line 34 of file decrypt_config.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
edash_packager::media::DecryptConfig::DecryptConfig (const std::vector< uint8_t > & key_id,
const std::vector< uint8_t > & iv,
const int data_offset,
const std::vector< SubsampleEntry > & subsamples 
)
+
+
Parameters
+ + + + + +
key_idis the ID that references the decryption key.
ivis the initialization vector defined by the encryptor.
data_offsetis the amount of data that should be discarded from the head of the sample buffer before applying subsample information. A decrypted buffer will be shorter than an encrypted buffer by this amount.
subsamplesdefines the clear and encrypted portions of the sample as described in SubsampleEntry. A decrypted buffer will be equal in size to the sum of the subsample sizes.
+
+
+ +

Definition at line 12 of file decrypt_config.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d4/da4/classedash__packager_1_1media_1_1AesCbcCtsEncryptor-members.html b/sdk/d4/da4/classedash__packager_1_1media_1_1AesCbcCtsEncryptor-members.html new file mode 100644 index 0000000000..a13f2ebafb --- /dev/null +++ b/sdk/d4/da4/classedash__packager_1_1media_1_1AesCbcCtsEncryptor-members.html @@ -0,0 +1,111 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::AesCbcCtsEncryptor Member List
+
+
+ +

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

+ + + + + + + + +
AesCbcCtsEncryptor() (defined in edash_packager::media::AesCbcCtsEncryptor)edash_packager::media::AesCbcCtsEncryptor
Encrypt(const uint8_t *plaintext, size_t size, uint8_t *ciphertext)edash_packager::media::AesCbcCtsEncryptor
Encrypt(const std::vector< uint8_t > &plaintext, std::vector< uint8_t > *ciphertext)edash_packager::media::AesCbcCtsEncryptor
InitializeWithIv(const std::vector< uint8_t > &key, const std::vector< uint8_t > &iv)edash_packager::media::AesCbcCtsEncryptor
iv() const (defined in edash_packager::media::AesCbcCtsEncryptor)edash_packager::media::AesCbcCtsEncryptorinline
SetIv(const std::vector< uint8_t > &iv)edash_packager::media::AesCbcCtsEncryptor
~AesCbcCtsEncryptor() (defined in edash_packager::media::AesCbcCtsEncryptor)edash_packager::media::AesCbcCtsEncryptor
+ + + + diff --git a/sdk/d4/dca/structedash__packager_1_1media_1_1H264SEIRecoveryPoint.html b/sdk/d4/dca/structedash__packager_1_1media_1_1H264SEIRecoveryPoint.html new file mode 100644 index 0000000000..b059eb2adf --- /dev/null +++ b/sdk/d4/dca/structedash__packager_1_1media_1_1H264SEIRecoveryPoint.html @@ -0,0 +1,126 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::H264SEIRecoveryPoint Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::H264SEIRecoveryPoint Struct Reference
+
+
+ + + + + + + + + + +

+Public Attributes

+int recovery_frame_cnt
 
+bool exact_match_flag
 
+bool broken_link_flag
 
+int changing_slice_group_idc
 
+

Detailed Description

+
+

Definition at line 264 of file h264_parser.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/sdk/d4/dcb/classedash__packager_1_1media_1_1Status-members.html b/sdk/d4/dcb/classedash__packager_1_1media_1_1Status-members.html new file mode 100644 index 0000000000..9dd9c45fa4 --- /dev/null +++ b/sdk/d4/dcb/classedash__packager_1_1media_1_1Status-members.html @@ -0,0 +1,120 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::Status Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + +
Clear()edash_packager::media::Statusinline
error_code() const (defined in edash_packager::media::Status)edash_packager::media::Statusinline
error_message() const (defined in edash_packager::media::Status)edash_packager::media::Statusinline
Matches(const Status &x) const edash_packager::media::Statusinline
ok() const (defined in edash_packager::media::Status)edash_packager::media::Statusinline
OK (defined in edash_packager::media::Status)edash_packager::media::Statusstatic
operator!=(const Status &x) const (defined in edash_packager::media::Status)edash_packager::media::Statusinline
operator==(const Status &x) const (defined in edash_packager::media::Status)edash_packager::media::Statusinline
SetError(error::Code error_code, const std::string &error_message)edash_packager::media::Statusinline
Status()edash_packager::media::Statusinline
Status(error::Code error_code, const std::string &error_message)edash_packager::media::Statusinline
Swap(Status *other) (defined in edash_packager::media::Status)edash_packager::media::Statusinline
ToString() const edash_packager::media::Status
UNKNOWN (defined in edash_packager::media::Status)edash_packager::media::Statusstatic
Update(const Status &new_status)edash_packager::media::Statusinline
~Status() (defined in edash_packager::media::Status)edash_packager::media::Statusinline
+ + + + diff --git a/sdk/d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html b/sdk/d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html new file mode 100644 index 0000000000..67735597d0 --- /dev/null +++ b/sdk/d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html @@ -0,0 +1,191 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::SchemeType Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::SchemeType Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::SchemeType:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + +

+Public Attributes

+FourCC type
 
+uint32_t version
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 79 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::SchemeType::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 221 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.png b/sdk/d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.png new file mode 100644 index 0000000000..132b07105a Binary files /dev/null and b/sdk/d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.png differ diff --git a/sdk/d4/dcd/classedash__packager_1_1media_1_1OffsetByteQueue-members.html b/sdk/d4/dcd/classedash__packager_1_1media_1_1OffsetByteQueue-members.html new file mode 100644 index 0000000000..dc27659301 --- /dev/null +++ b/sdk/d4/dcd/classedash__packager_1_1media_1_1OffsetByteQueue-members.html @@ -0,0 +1,114 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::OffsetByteQueue Member List
+
+
+ +

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

+ + + + + + + + + + + +
head()edash_packager::media::OffsetByteQueueinline
OffsetByteQueue() (defined in edash_packager::media::OffsetByteQueue)edash_packager::media::OffsetByteQueue
Peek(const uint8_t **buf, int *size) (defined in edash_packager::media::OffsetByteQueue)edash_packager::media::OffsetByteQueue
PeekAt(int64_t offset, const uint8_t **buf, int *size)edash_packager::media::OffsetByteQueue
Pop(int count) (defined in edash_packager::media::OffsetByteQueue)edash_packager::media::OffsetByteQueue
Push(const uint8_t *buf, int size) (defined in edash_packager::media::OffsetByteQueue)edash_packager::media::OffsetByteQueue
Reset() (defined in edash_packager::media::OffsetByteQueue)edash_packager::media::OffsetByteQueue
tail()edash_packager::media::OffsetByteQueueinline
Trim(int64_t max_offset)edash_packager::media::OffsetByteQueue
~OffsetByteQueue() (defined in edash_packager::media::OffsetByteQueue)edash_packager::media::OffsetByteQueue
+ + + + diff --git a/sdk/d4/dce/structedash__packager_1_1media_1_1mp4_1_1SegmentReference.html b/sdk/d4/dce/structedash__packager_1_1media_1_1mp4_1_1SegmentReference.html new file mode 100644 index 0000000000..d3dc9fbe17 --- /dev/null +++ b/sdk/d4/dce/structedash__packager_1_1media_1_1mp4_1_1SegmentReference.html @@ -0,0 +1,151 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::SegmentReference Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::SegmentReference Struct Reference
+
+
+ + + + +

+Public Types

enum  SAPType {
+  TypeUnknown = 0, +Type1 = 1, +Type2 = 2, +Type3 = 3, +
+  Type4 = 4, +Type5 = 5, +Type6 = 6 +
+ }
 
+ + + + + + + + + + + + + + + +

+Public Attributes

+bool reference_type
 
+uint32_t referenced_size
 
+uint32_t subsegment_duration
 
+bool starts_with_sap
 
+SAPType sap_type
 
+uint32_t sap_delta_time
 
+uint64_t earliest_presentation_time
 
+

Detailed Description

+
+

Definition at line 552 of file box_definitions.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/sdk/d4/dd3/bit__reader_8h_source.html b/sdk/d4/dd3/bit__reader_8h_source.html new file mode 100644 index 0000000000..f66a94a4d0 --- /dev/null +++ b/sdk/d4/dd3/bit__reader_8h_source.html @@ -0,0 +1,166 @@ + + + + + + +DASH Media Packaging SDK: media/base/bit_reader.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
bit_reader.h
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_BASE_BIT_READER_H_
+
6 #define MEDIA_BASE_BIT_READER_H_
+
7 
+
8 #include <stdint.h>
+
9 #include <sys/types.h>
+
10 
+
11 #include "packager/base/logging.h"
+
12 
+
13 namespace edash_packager {
+
14 namespace media {
+
15 
+
17 class BitReader {
+
18  public:
+
22  BitReader(const uint8_t* data, off_t size);
+
23  ~BitReader();
+
24 
+
34  template <typename T>
+
35  bool ReadBits(int num_bits, T* out) {
+
36  DCHECK_LE(num_bits, static_cast<int>(sizeof(T) * 8));
+
37  uint64_t temp;
+
38  bool ret = ReadBitsInternal(num_bits, &temp);
+
39  *out = static_cast<T>(temp);
+
40  return ret;
+
41  }
+
42 
+
49  bool SkipBits(int num_bits);
+
50 
+
52  int bits_available() const;
+
53 
+
54  private:
+
55  // Help function used by ReadBits to avoid inlining the bit reading logic.
+
56  bool ReadBitsInternal(int num_bits, uint64_t* out);
+
57 
+
58  // Advance to the next byte, loading it into curr_byte_.
+
59  // If the num_remaining_bits_in_curr_byte_ is 0 after this function returns,
+
60  // the stream has reached the end.
+
61  void UpdateCurrByte();
+
62 
+
63  // Pointer to the next unread (not in curr_byte_) byte in the stream.
+
64  const uint8_t* data_;
+
65 
+
66  // Bytes left in the stream (without the curr_byte_).
+
67  off_t bytes_left_;
+
68 
+
69  // Contents of the current byte; first unread bit starting at position
+
70  // 8 - num_remaining_bits_in_curr_byte_ from MSB.
+
71  uint8_t curr_byte_;
+
72 
+
73  // Number of bits remaining in curr_byte_
+
74  int num_remaining_bits_in_curr_byte_;
+
75 
+
76  private:
+
77  DISALLOW_COPY_AND_ASSIGN(BitReader);
+
78 };
+
79 
+
80 } // namespace media
+
81 } // namespace edash_packager
+
82 
+
83 #endif // MEDIA_BASE_BIT_READER_H_
+
BitReader(const uint8_t *data, off_t size)
Definition: bit_reader.cc:12
+
bool ReadBits(int num_bits, T *out)
Definition: bit_reader.h:35
+ +
A class to read bit streams.
Definition: bit_reader.h:17
+
bool SkipBits(int num_bits)
Definition: bit_reader.cc:21
+
+ + + + diff --git a/sdk/d4/dd4/segmenter_8h_source.html b/sdk/d4/dd4/segmenter_8h_source.html new file mode 100644 index 0000000000..69eeda5951 --- /dev/null +++ b/sdk/d4/dd4/segmenter_8h_source.html @@ -0,0 +1,231 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/segmenter.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
segmenter.h
+
+
+
1 // Copyright 2014 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_FORMATS_MP4_SEGMENTER_H_
+
8 #define MEDIA_FORMATS_MP4_SEGMENTER_H_
+
9 
+
10 #include <map>
+
11 #include <vector>
+
12 
+
13 #include "packager/base/memory/ref_counted.h"
+
14 #include "packager/base/memory/scoped_ptr.h"
+
15 #include "packager/media/base/status.h"
+
16 
+
17 namespace edash_packager {
+
18 namespace media {
+
19 
+
20 struct MuxerOptions;
+
21 
+
22 class BufferWriter;
+
23 class KeySource;
+
24 class MediaSample;
+
25 class MediaStream;
+
26 class MuxerListener;
+
27 class ProgressListener;
+
28 
+
29 namespace mp4 {
+
30 
+
31 class Fragmenter;
+
32 
+
33 struct FileType;
+
34 struct Movie;
+
35 struct MovieFragment;
+
36 struct SegmentIndex;
+
37 
+
44 class Segmenter {
+
45  public:
+
46  Segmenter(const MuxerOptions& options,
+
47  scoped_ptr<FileType> ftyp,
+
48  scoped_ptr<Movie> moov);
+
49  virtual ~Segmenter();
+
50 
+
66  Status Initialize(const std::vector<MediaStream*>& streams,
+
67  MuxerListener* muxer_listener,
+
68  ProgressListener* progress_listener,
+
69  KeySource* encryption_key_source,
+
70  uint32_t max_sd_pixels,
+
71  double clear_lead_in_seconds,
+
72  double crypto_period_duration_in_seconds);
+
73 
+
76  Status Finalize();
+
77 
+
83  Status AddSample(const MediaStream* stream,
+
84  scoped_refptr<MediaSample> sample);
+
85 
+
88  virtual bool GetInitRange(size_t* offset, size_t* size) = 0;
+
89 
+
92  virtual bool GetIndexRange(size_t* offset, size_t* size) = 0;
+
93 
+
94  uint32_t GetReferenceTimeScale() const;
+
95 
+
97  double GetDuration() const;
+
98 
+
101  uint32_t sample_duration() const { return sample_duration_; }
+
102 
+
103  protected:
+
105  void UpdateProgress(uint64_t progress);
+
107  void SetComplete();
+
108 
+
109  const MuxerOptions& options() const { return options_; }
+
110  FileType* ftyp() { return ftyp_.get(); }
+
111  Movie* moov() { return moov_.get(); }
+
112  BufferWriter* fragment_buffer() { return fragment_buffer_.get(); }
+
113  SegmentIndex* sidx() { return sidx_.get(); }
+
114  MuxerListener* muxer_listener() { return muxer_listener_; }
+
115  uint64_t progress_target() { return progress_target_; }
+
116 
+
117  void set_progress_target(uint64_t progress_target) {
+
118  progress_target_ = progress_target;
+
119  }
+
120 
+
121  private:
+
122  virtual Status DoInitialize() = 0;
+
123  virtual Status DoFinalize() = 0;
+
124  virtual Status DoFinalizeSegment() = 0;
+
125 
+
126  Status FinalizeSegment();
+
127  uint32_t GetReferenceStreamId();
+
128 
+
129  Status FinalizeFragment(bool finalize_segment, Fragmenter* fragment);
+
130 
+
131  const MuxerOptions& options_;
+
132  scoped_ptr<FileType> ftyp_;
+
133  scoped_ptr<Movie> moov_;
+
134  scoped_ptr<MovieFragment> moof_;
+
135  scoped_ptr<BufferWriter> fragment_buffer_;
+
136  scoped_ptr<SegmentIndex> sidx_;
+
137  std::vector<Fragmenter*> fragmenters_;
+
138  std::vector<uint64_t> segment_durations_;
+
139  std::map<const MediaStream*, uint32_t> stream_map_;
+
140  bool end_of_segment_;
+
141  MuxerListener* muxer_listener_;
+
142  ProgressListener* progress_listener_;
+
143  uint64_t progress_target_;
+
144  uint64_t accumulated_progress_;
+
145  uint32_t sample_duration_;
+
146 
+
147  DISALLOW_COPY_AND_ASSIGN(Segmenter);
+
148 };
+
149 
+
150 } // namespace mp4
+
151 } // namespace media
+
152 } // namespace edash_packager
+
153 
+
154 #endif // MEDIA_FORMATS_MP4_SEGMENTER_H_
+ + +
This class listens to progress updates events.
+ +
Status AddSample(const MediaStream *stream, scoped_refptr< MediaSample > sample)
Definition: segmenter.cc:266
+ +
virtual bool GetInitRange(size_t *offset, size_t *size)=0
+ +
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:29
+ +
void UpdateProgress(uint64_t progress)
Update segmentation progress using ProgressListener.
Definition: segmenter.cc:333
+
Status Initialize(const std::vector< MediaStream * > &streams, MuxerListener *muxer_listener, ProgressListener *progress_listener, KeySource *encryption_key_source, uint32_t max_sd_pixels, double clear_lead_in_seconds, double crypto_period_duration_in_seconds)
Definition: segmenter.cc:132
+
virtual bool GetIndexRange(size_t *offset, size_t *size)=0
+
void SetComplete()
Set progress to 100%.
Definition: segmenter.cc:349
+
This structure contains the list of configuration options for Muxer.
Definition: muxer_options.h:18
+ +
+ + + + diff --git a/sdk/d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html b/sdk/d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html new file mode 100644 index 0000000000..7177f10d36 --- /dev/null +++ b/sdk/d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html @@ -0,0 +1,201 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::TrackFragment Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::TrackFragment Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::TrackFragment:
+
+
+ + +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + + + + + + + + +

+Public Attributes

+TrackFragmentHeader header
 
+std::vector< TrackFragmentRunruns
 
+bool decode_time_absent
 
+TrackFragmentDecodeTime decode_time
 
+SampleToGroup sample_to_group
 
+SampleGroupDescription sample_group_description
 
+SampleAuxiliaryInformationSize auxiliary_size
 
+SampleAuxiliaryInformationOffset auxiliary_offset
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 531 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::TrackFragment::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1834 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.png b/sdk/d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.png new file mode 100644 index 0000000000..78365b3c6d Binary files /dev/null and b/sdk/d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.png differ diff --git a/sdk/d4/de4/structedash__packager_1_1media_1_1SubsampleEntry.html b/sdk/d4/de4/structedash__packager_1_1media_1_1SubsampleEntry.html new file mode 100644 index 0000000000..5cc44fa324 --- /dev/null +++ b/sdk/d4/de4/structedash__packager_1_1media_1_1SubsampleEntry.html @@ -0,0 +1,123 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::SubsampleEntry Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::SubsampleEntry Struct Reference
+
+
+ +

#include <decrypt_config.h>

+ + + + + + +

+Public Attributes

+uint16_t clear_bytes
 
+uint32_t cipher_bytes
 
+

Detailed Description

+

The Common Encryption spec provides for subsample encryption, where portions of a sample are not encrypted. A SubsampleEntry specifies the number of clear and encrypted bytes in each subsample. For decryption, all of the encrypted bytes in a sample should be considered a single logical stream, regardless of how they are divided into subsamples, and the clear bytes should not be considered as part of decryption. This is logically equivalent to concatenating all cipher_bytes portions of subsamples, decrypting that result, and then copying each byte from the decrypted block over the corresponding encrypted byte.

+ +

Definition at line 27 of file decrypt_config.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/sdk/d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html b/sdk/d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html new file mode 100644 index 0000000000..61bf80378a --- /dev/null +++ b/sdk/d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html @@ -0,0 +1,233 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::CompositionOffsetIterator Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::CompositionOffsetIterator Class Reference
+
+
+ +

#include <composition_offset_iterator.h>

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

+Public Member Functions

CompositionOffsetIterator (const CompositionTimeToSample &composition_time_to_sample)
 Create CompositionOffsetIterator from composition time to sample box.
 
bool AdvanceSample ()
 
bool IsValid () const
 
int64_t sample_offset () const
 
int64_t SampleOffset (uint32_t sample) const
 
uint32_t NumSamples () const
 
+

Detailed Description

+

Composition time to sample box (CTTS) iterator used to iterate through the compressed table. This class also provides convenient functions to query total number of samples and the composition offset for a particular sample.

+ +

Definition at line 24 of file composition_offset_iterator.h.

+

Member Function Documentation

+ +
+
+ + + + + + + +
bool edash_packager::media::mp4::CompositionOffsetIterator::AdvanceSample ()
+
+

Advance the iterator to the next sample.

+
Returns
true if not past the last sample, false otherwise.
+ +

Definition at line 22 of file composition_offset_iterator.cc.

+ +
+
+ +
+
+ + + + + + + +
bool edash_packager::media::mp4::CompositionOffsetIterator::IsValid () const
+
+
Returns
true if the iterator is still valid, false if past the last sample.
+ +

Definition at line 33 of file composition_offset_iterator.cc.

+ +
+
+ +
+
+ + + + + + + +
uint32_t edash_packager::media::mp4::CompositionOffsetIterator::NumSamples () const
+
+
Returns
Total number of samples.
+ +

Definition at line 51 of file composition_offset_iterator.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int64_t edash_packager::media::mp4::CompositionOffsetIterator::sample_offset () const
+
+inline
+
+
Returns
Sample offset for current sample.
+ +

Definition at line 40 of file composition_offset_iterator.h.

+ +
+
+ +
+
+ + + + + + + + +
int64_t edash_packager::media::mp4::CompositionOffsetIterator::SampleOffset (uint32_t sample) const
+
+
Returns
Sample offset sample, 1-based.
+ +

Definition at line 38 of file composition_offset_iterator.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d4/de7/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize-members.html b/sdk/d4/de7/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize-members.html new file mode 100644 index 0000000000..bc8ebd5d72 --- /dev/null +++ b/sdk/d4/de7/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize-members.html @@ -0,0 +1,121 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::SampleAuxiliaryInformationSize Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::SampleAuxiliaryInformationSize)edash_packager::media::mp4::SampleAuxiliaryInformationSizevirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::SampleAuxiliaryInformationSizevirtual
default_sample_info_size (defined in edash_packager::media::mp4::SampleAuxiliaryInformationSize)edash_packager::media::mp4::SampleAuxiliaryInformationSize
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::SampleAuxiliaryInformationSizevirtual
sample_count (defined in edash_packager::media::mp4::SampleAuxiliaryInformationSize)edash_packager::media::mp4::SampleAuxiliaryInformationSize
sample_info_sizes (defined in edash_packager::media::mp4::SampleAuxiliaryInformationSize)edash_packager::media::mp4::SampleAuxiliaryInformationSize
SampleAuxiliaryInformationSize() (defined in edash_packager::media::mp4::SampleAuxiliaryInformationSize)edash_packager::media::mp4::SampleAuxiliaryInformationSize
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~SampleAuxiliaryInformationSize() (defined in edash_packager::media::mp4::SampleAuxiliaryInformationSize)edash_packager::media::mp4::SampleAuxiliaryInformationSizevirtual
+ + + + diff --git a/sdk/d4/df5/request__signer_8cc_source.html b/sdk/d4/df5/request__signer_8cc_source.html new file mode 100644 index 0000000000..0ef79c960a --- /dev/null +++ b/sdk/d4/df5/request__signer_8cc_source.html @@ -0,0 +1,184 @@ + + + + + + +DASH Media Packaging SDK: media/base/request_signer.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
request_signer.cc
+
+
+
1 // Copyright 2014 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/base/request_signer.h"
+
8 
+
9 #include "packager/base/sha1.h"
+
10 #include "packager/base/strings/string_number_conversions.h"
+
11 #include "packager/media/base/aes_encryptor.h"
+
12 #include "packager/media/base/rsa_key.h"
+
13 
+
14 namespace edash_packager {
+
15 namespace media {
+
16 
+
17 RequestSigner::RequestSigner(const std::string& signer_name)
+
18  : signer_name_(signer_name) {}
+
19 RequestSigner::~RequestSigner() {}
+
20 
+
21 AesRequestSigner::AesRequestSigner(const std::string& signer_name,
+
22  scoped_ptr<AesCbcPkcs5Encryptor> encryptor)
+
23  : RequestSigner(signer_name), aes_cbc_encryptor_(encryptor.Pass()) {
+
24  DCHECK(aes_cbc_encryptor_);
+
25 }
+
26 AesRequestSigner::~AesRequestSigner() {}
+
27 
+
28 AesRequestSigner* AesRequestSigner::CreateSigner(const std::string& signer_name,
+
29  const std::string& aes_key_hex,
+
30  const std::string& iv_hex) {
+
31  std::vector<uint8_t> aes_key;
+
32  if (!base::HexStringToBytes(aes_key_hex, &aes_key)) {
+
33  LOG(ERROR) << "Failed to convert hex string to bytes: " << aes_key_hex;
+
34  return NULL;
+
35  }
+
36  std::vector<uint8_t> iv;
+
37  if (!base::HexStringToBytes(iv_hex, &iv)) {
+
38  LOG(ERROR) << "Failed to convert hex string to bytes: " << iv_hex;
+
39  return NULL;
+
40  }
+
41 
+
42  scoped_ptr<AesCbcPkcs5Encryptor> encryptor(new AesCbcPkcs5Encryptor());
+
43  if (!encryptor->InitializeWithIv(aes_key, iv))
+
44  return NULL;
+
45  return new AesRequestSigner(signer_name, encryptor.Pass());
+
46 }
+
47 
+
48 bool AesRequestSigner::GenerateSignature(const std::string& message,
+
49  std::string* signature) {
+
50  aes_cbc_encryptor_->Encrypt(base::SHA1HashString(message), signature);
+
51  return true;
+
52 }
+
53 
+
54 RsaRequestSigner::RsaRequestSigner(const std::string& signer_name,
+
55  scoped_ptr<RsaPrivateKey> rsa_private_key)
+
56  : RequestSigner(signer_name), rsa_private_key_(rsa_private_key.Pass()) {
+
57  DCHECK(rsa_private_key_);
+
58 }
+
59 RsaRequestSigner::~RsaRequestSigner() {}
+
60 
+ +
62  const std::string& signer_name,
+
63  const std::string& pkcs1_rsa_key) {
+
64  scoped_ptr<RsaPrivateKey> rsa_private_key(
+
65  RsaPrivateKey::Create(pkcs1_rsa_key));
+
66  if (!rsa_private_key)
+
67  return NULL;
+
68  return new RsaRequestSigner(signer_name, rsa_private_key.Pass());
+
69 }
+
70 
+
71 bool RsaRequestSigner::GenerateSignature(const std::string& message,
+
72  std::string* signature) {
+
73  return rsa_private_key_->GenerateSignature(message, signature);
+
74 }
+
75 
+
76 } // namespace media
+
77 } // namespace edash_packager
+
virtual bool GenerateSignature(const std::string &message, std::string *signature) OVERRIDE
RequestSigner implementation override.
+
virtual bool GenerateSignature(const std::string &message, std::string *signature) OVERRIDE
RequestSigner implementation override.
+
static AesRequestSigner * CreateSigner(const std::string &signer_name, const std::string &aes_key_hex, const std::string &iv_hex)
+
static RsaPrivateKey * Create(const std::string &serialized_key)
Definition: rsa_key.cc:97
+
AesRequestSigner uses AES-CBC signing.
+
static RsaRequestSigner * CreateSigner(const std::string &signer_name, const std::string &pkcs1_rsa_key)
+
RsaRequestSigner uses RSA-PSS signing.
+
Abstract class used for signature generation.
+ +
+ + + + diff --git a/sdk/d4/df9/structedash__packager_1_1MpdOptions-members.html b/sdk/d4/df9/structedash__packager_1_1MpdOptions-members.html new file mode 100644 index 0000000000..ac7ca61cf7 --- /dev/null +++ b/sdk/d4/df9/structedash__packager_1_1MpdOptions-members.html @@ -0,0 +1,111 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::MpdOptions Member List
+
+
+ +

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

+ + + + + + + + +
availability_time_offset (defined in edash_packager::MpdOptions)edash_packager::MpdOptions
min_buffer_time (defined in edash_packager::MpdOptions)edash_packager::MpdOptions
minimum_update_period (defined in edash_packager::MpdOptions)edash_packager::MpdOptions
MpdOptions() (defined in edash_packager::MpdOptions)edash_packager::MpdOptionsinline
suggested_presentation_delay (defined in edash_packager::MpdOptions)edash_packager::MpdOptions
time_shift_buffer_depth (defined in edash_packager::MpdOptions)edash_packager::MpdOptions
~MpdOptions() (defined in edash_packager::MpdOptions)edash_packager::MpdOptionsinline
+ + + + diff --git a/sdk/d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html b/sdk/d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html new file mode 100644 index 0000000000..448b7b5de4 --- /dev/null +++ b/sdk/d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html @@ -0,0 +1,509 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::ProducerConsumerQueue< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::ProducerConsumerQueue< T > Class Template Reference
+
+
+ +

#include <producer_consumer_queue.h>

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

+Public Member Functions

 ProducerConsumerQueue (size_t capacity)
 
 ProducerConsumerQueue (size_t capacity, size_t starting_pos)
 
Status Push (const T &element, int64_t timeout_ms)
 
Status Pop (T *element, int64_t timeout_ms)
 
Status Peek (size_t pos, T *element, int64_t timeout_ms)
 
void Stop ()
 
bool Empty () const
 
size_t Size () const
 
size_t HeadPos () const
 
size_t TailPos () const
 
bool Stopped () const
 
+

Detailed Description

+

template<class T>
+class edash_packager::media::ProducerConsumerQueue< T >

+ +

A thread safe producer consumer queue implementation. It allows the standard push and pop operations. It also maintains a monotonically-increasing element position and allows peeking at the element at certain position.

+ +

Definition at line 28 of file producer_consumer_queue.h.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
edash_packager::media::ProducerConsumerQueue< T >::ProducerConsumerQueue (size_t capacity)
+
+explicit
+
+

Create a ProducerConsumerQueue starting from position 0.

+
Parameters
+ + +
capacityis the maximum number of elements that the queue can hold at once. A value of zero means unlimited capacity.
+
+
+ +

Definition at line 138 of file producer_consumer_queue.h.

+ +
+
+ +
+
+
+template<class T >
+ + + + + + + + + + + + + + + + + + +
edash_packager::media::ProducerConsumerQueue< T >::ProducerConsumerQueue (size_t capacity,
size_t starting_pos 
)
+
+

Create a ProducerConsumerQueue starting from indicated position.

+
Parameters
+ + + +
capacityis the maximum number of elements that the queue can hold at once. A value of zero means unlimited capacity.
starting_posis the starting head position.
+
+
+ +

Definition at line 147 of file producer_consumer_queue.h.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
bool edash_packager::media::ProducerConsumerQueue< T >::Empty () const
+
+inline
+
+
Returns
true if there are no elements in the queue.
+ +

Definition at line 88 of file producer_consumer_queue.h.

+ +
+
+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
size_t edash_packager::media::ProducerConsumerQueue< T >::HeadPos () const
+
+inline
+
+
Returns
The position of the head element in the queue. Note that the returned value may be meaningless if the queue is empty.
+ +

Definition at line 101 of file producer_consumer_queue.h.

+ +
+
+ +
+
+
+template<class T >
+ + + + + + + + + + + + + + + + + + + + + + + + +
Status edash_packager::media::ProducerConsumerQueue< T >::Peek (size_t pos,
T * element,
int64_t timeout_ms 
)
+
+

Peek at the element at the specified position from the queue. If the element is not available yet, block until it to be available or time out or stopped. NOTE: Elements before (pos - capacity/2) will be removed from the queue after Peek operation.

+
Parameters
+ + + + +
posrefers to the element position.
[out]elementreceives the peeked element.
timeout_msindicates timeout in milliseconds. A value of zero means return immediately. A negative value means waiting indefinitely.
+
+
+
Returns
STOPPED if Stop has been called and pos is out of range, INVALID_ARGUMENT if the pos < Head(), TIME_OUT if times out, OK otherwise.
+ +

Definition at line 252 of file producer_consumer_queue.h.

+ +
+
+ +
+
+
+template<class T >
+ + + + + + + + + + + + + + + + + + +
Status edash_packager::media::ProducerConsumerQueue< T >::Pop (T * element,
int64_t timeout_ms 
)
+
+

Pop an element from the front of the queue. If the queue is empty, block for an element to be available to be consumed or time out or stopped.

+
Parameters
+ + + +
[out]elementreceives the popped element.
timeout_msindicates timeout in milliseconds. A value of zero means return immediately. A negative value means waiting indefinitely.
+
+
+
Returns
STOPPED if Stop has been called and the queue is completely empty, TIME_OUT if times out, OK otherwise.
+ +

Definition at line 210 of file producer_consumer_queue.h.

+ +
+
+ +
+
+
+template<class T >
+ + + + + + + + + + + + + + + + + + +
Status edash_packager::media::ProducerConsumerQueue< T >::Push (const T & element,
int64_t timeout_ms 
)
+
+

Push an element to the back of the queue. If the queue has reached its capacity limit, block until spare capacity is available or time out or stopped.

+
Parameters
+ + + +
elementrefers the element to be pushed.
timeout_msindicates timeout in milliseconds. A value of zero means return immediately. A negative value means waiting indefinitely.
+
+
+
Returns
OK if the element was pushed successfully, STOPPED if Stop has has been called, TIME_OUT if times out.
+ +

Definition at line 161 of file producer_consumer_queue.h.

+ +
+
+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
size_t edash_packager::media::ProducerConsumerQueue< T >::Size () const
+
+inline
+
+
Returns
The number of elements in the queue.
+ +

Definition at line 94 of file producer_consumer_queue.h.

+ +
+
+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
void edash_packager::media::ProducerConsumerQueue< T >::Stop ()
+
+inline
+
+

Terminate Pop and Peek requests once the queue drains entirely. Also terminate all waiting and future Push requests immediately. Stop cannot stall.

+ +

Definition at line 79 of file producer_consumer_queue.h.

+ +
+
+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
bool edash_packager::media::ProducerConsumerQueue< T >::Stopped () const
+
+inline
+
+
Returns
true if the queue has been stopped using Stop(). This allows producers to check if they can add new elements to the queue.
+ +

Definition at line 115 of file producer_consumer_queue.h.

+ +
+
+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
size_t edash_packager::media::ProducerConsumerQueue< T >::TailPos () const
+
+inline
+
+
Returns
The position of the tail element in the queue. Note that the returned value may be meaningless if the queue is empty.
+ +

Definition at line 108 of file producer_consumer_queue.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/sdk/d5/d15/producer__consumer__queue_8h_source.html b/sdk/d5/d15/producer__consumer__queue_8h_source.html new file mode 100644 index 0000000000..7139430570 --- /dev/null +++ b/sdk/d5/d15/producer__consumer__queue_8h_source.html @@ -0,0 +1,382 @@ + + + + + + +DASH Media Packaging SDK: media/base/producer_consumer_queue.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
producer_consumer_queue.h
+
+
+
1 // Copyright 2014 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_BASE_PRODUCER_CONSUMER_QUEUE_H_
+
8 #define MEDIA_BASE_PRODUCER_CONSUMER_QUEUE_H_
+
9 
+
10 #include <deque>
+
11 
+
12 #include "packager/base/strings/stringprintf.h"
+
13 #include "packager/base/synchronization/condition_variable.h"
+
14 #include "packager/base/synchronization/lock.h"
+
15 #include "packager/base/timer/elapsed_timer.h"
+
16 #include "packager/media/base/status.h"
+
17 
+
18 namespace edash_packager {
+
19 namespace media {
+
20 
+
21 static const size_t kUnlimitedCapacity = 0u;
+
22 static const int64_t kInfiniteTimeout = -1;
+
23 
+
27 template <class T>
+ +
29  public:
+
33  explicit ProducerConsumerQueue(size_t capacity);
+
34 
+
39  ProducerConsumerQueue(size_t capacity, size_t starting_pos);
+
40 
+ +
42 
+
51  Status Push(const T& element, int64_t timeout_ms);
+
52 
+
60  Status Pop(T* element, int64_t timeout_ms);
+
61 
+
74  Status Peek(size_t pos, T* element, int64_t timeout_ms);
+
75 
+
79  void Stop() {
+
80  base::AutoLock l(lock_);
+
81  stop_requested_ = true;
+
82  not_empty_cv_.Broadcast();
+
83  not_full_cv_.Broadcast();
+
84  new_element_cv_.Broadcast();
+
85  }
+
86 
+
88  bool Empty() const {
+
89  base::AutoLock l(lock_);
+
90  return q_.empty();
+
91  }
+
92 
+
94  size_t Size() const {
+
95  base::AutoLock l(lock_);
+
96  return q_.size();
+
97  }
+
98 
+
101  size_t HeadPos() const {
+
102  base::AutoLock l(lock_);
+
103  return head_pos_;
+
104  }
+
105 
+
108  size_t TailPos() const {
+
109  base::AutoLock l(lock_);
+
110  return head_pos_ + q_.size() - 1;
+
111  }
+
112 
+
115  bool Stopped() const {
+
116  base::AutoLock l(lock_);
+
117  return stop_requested_;
+
118  }
+
119 
+
120  private:
+
121  // Move head_pos_ to center on pos.
+
122  void SlideHeadOnCenter(size_t pos);
+
123 
+
124  const size_t capacity_; // Maximum number of elements; zero means unlimited.
+
125  mutable base::Lock lock_; // Lock protecting all other variables below.
+
126  size_t head_pos_; // Head position.
+
127  std::deque<T> q_; // Internal queue holding the elements.
+
128  base::ConditionVariable not_empty_cv_;
+
129  base::ConditionVariable not_full_cv_;
+
130  base::ConditionVariable new_element_cv_;
+
131  bool stop_requested_; // True after Stop has been called.
+
132 
+
133  DISALLOW_COPY_AND_ASSIGN(ProducerConsumerQueue);
+
134 };
+
135 
+
136 // Implementations of non-inline functions.
+
137 template <class T>
+ +
139  : capacity_(capacity),
+
140  head_pos_(0),
+
141  not_empty_cv_(&lock_),
+
142  not_full_cv_(&lock_),
+
143  new_element_cv_(&lock_),
+
144  stop_requested_(false) {}
+
145 
+
146 template <class T>
+ +
148  size_t starting_pos)
+
149  : capacity_(capacity),
+
150  head_pos_(starting_pos),
+
151  not_empty_cv_(&lock_),
+
152  not_full_cv_(&lock_),
+
153  new_element_cv_(&lock_),
+
154  stop_requested_(false) {
+
155 }
+
156 
+
157 template <class T>
+ +
159 
+
160 template <class T>
+
161 Status ProducerConsumerQueue<T>::Push(const T& element, int64_t timeout_ms) {
+
162  base::AutoLock l(lock_);
+
163  bool woken = false;
+
164 
+
165  // Check for queue shutdown.
+
166  if (stop_requested_)
+
167  return Status(error::STOPPED, "");
+
168 
+
169  base::ElapsedTimer timer;
+
170  base::TimeDelta timeout_delta = base::TimeDelta::FromMilliseconds(timeout_ms);
+
171 
+
172  if (capacity_) {
+
173  while (q_.size() == capacity_) {
+
174  if (timeout_ms < 0) {
+
175  // Wait forever, or until Stop.
+
176  not_full_cv_.Wait();
+
177  } else {
+
178  base::TimeDelta elapsed = timer.Elapsed();
+
179  if (elapsed < timeout_delta) {
+
180  // Wait with timeout, or until Stop.
+
181  not_full_cv_.TimedWait(timeout_delta - elapsed);
+
182  } else {
+
183  // We're through waiting.
+
184  return Status(error::TIME_OUT, "Time out on pushing.");
+
185  }
+
186  }
+
187  // Re-check for queue shutdown after waking from Wait.
+
188  if (stop_requested_)
+
189  return Status(error::STOPPED, "");
+
190 
+
191  woken = true;
+
192  }
+
193  DCHECK_LT(q_.size(), capacity_);
+
194  }
+
195 
+
196  // Signal consumer to proceed if we are going to create some elements.
+
197  if (q_.empty())
+
198  not_empty_cv_.Signal();
+
199  new_element_cv_.Signal();
+
200 
+
201  q_.push_back(element);
+
202 
+
203  // Signal other producers if we just acquired more capacity.
+
204  if (woken && q_.size() != capacity_)
+
205  not_full_cv_.Signal();
+
206  return Status::OK;
+
207 }
+
208 
+
209 template <class T>
+
210 Status ProducerConsumerQueue<T>::Pop(T* element, int64_t timeout_ms) {
+
211  base::AutoLock l(lock_);
+
212  bool woken = false;
+
213 
+
214  base::ElapsedTimer timer;
+
215  base::TimeDelta timeout_delta = base::TimeDelta::FromMilliseconds(timeout_ms);
+
216 
+
217  while (q_.empty()) {
+
218  if (stop_requested_)
+
219  return Status(error::STOPPED, "");
+
220 
+
221  if (timeout_ms < 0) {
+
222  // Wait forever, or until Stop.
+
223  not_empty_cv_.Wait();
+
224  } else {
+
225  base::TimeDelta elapsed = timer.Elapsed();
+
226  if (elapsed < timeout_delta) {
+
227  // Wait with timeout, or until Stop.
+
228  not_empty_cv_.TimedWait(timeout_delta - elapsed);
+
229  } else {
+
230  // We're through waiting.
+
231  return Status(error::TIME_OUT, "Time out on popping.");
+
232  }
+
233  }
+
234  woken = true;
+
235  }
+
236 
+
237  // Signal producer to proceed if we are going to create some capacity.
+
238  if (q_.size() == capacity_)
+
239  not_full_cv_.Signal();
+
240 
+
241  *element = q_.front();
+
242  q_.pop_front();
+
243  ++head_pos_;
+
244 
+
245  // Signal other consumers if we have more elements.
+
246  if (woken && !q_.empty())
+
247  not_empty_cv_.Signal();
+
248  return Status::OK;
+
249 }
+
250 
+
251 template <class T>
+ +
253  T* element,
+
254  int64_t timeout_ms) {
+
255  base::AutoLock l(lock_);
+
256  if (pos < head_pos_) {
+
257  return Status(
+
258  error::INVALID_ARGUMENT,
+
259  base::StringPrintf(
+
260  "pos (%zu) is too small; head is at %zu.", pos, head_pos_));
+
261  }
+
262 
+
263  bool woken = false;
+
264 
+
265  base::ElapsedTimer timer;
+
266  base::TimeDelta timeout_delta = base::TimeDelta::FromMilliseconds(timeout_ms);
+
267 
+
268  // Move head to create some space (move the sliding window centered @ pos).
+
269  SlideHeadOnCenter(pos);
+
270 
+
271  while (pos >= head_pos_ + q_.size()) {
+
272  if (stop_requested_)
+
273  return Status(error::STOPPED, "");
+
274 
+
275  if (timeout_ms < 0) {
+
276  // Wait forever, or until Stop.
+
277  new_element_cv_.Wait();
+
278  } else {
+
279  base::TimeDelta elapsed = timer.Elapsed();
+
280  if (elapsed < timeout_delta) {
+
281  // Wait with timeout, or until Stop.
+
282  new_element_cv_.TimedWait(timeout_delta - elapsed);
+
283  } else {
+
284  // We're through waiting.
+
285  return Status(error::TIME_OUT, "Time out on peeking.");
+
286  }
+
287  }
+
288  // Move head to create some space (move the sliding window centered @ pos).
+
289  SlideHeadOnCenter(pos);
+
290  woken = true;
+
291  }
+
292 
+
293  *element = q_[pos - head_pos_];
+
294 
+
295  // Signal other consumers if we have more elements.
+
296  if (woken && !q_.empty())
+
297  new_element_cv_.Signal();
+
298  return Status::OK;
+
299 }
+
300 
+
301 template <class T>
+ +
303  lock_.AssertAcquired();
+
304 
+
305  if (capacity_) {
+
306  // Signal producer to proceed if we are going to create some capacity.
+
307  if (q_.size() == capacity_ && pos > head_pos_ + capacity_ / 2)
+
308  not_full_cv_.Signal();
+
309 
+
310  while (!q_.empty() && pos > head_pos_ + capacity_ / 2) {
+
311  ++head_pos_;
+
312  q_.pop_front();
+
313  }
+
314  }
+
315 }
+
316 
+
317 } // namespace media
+
318 } // namespace edash_packager
+
319 
+
320 #endif // MEDIA_BASE_PRODUCER_CONSUMER_QUEUE_H_
+ + + + +
Status Push(const T &element, int64_t timeout_ms)
+ +
Status Pop(T *element, int64_t timeout_ms)
+
Status Peek(size_t pos, T *element, int64_t timeout_ms)
+ + + + +
+ + + + diff --git a/sdk/d5/d18/structedash__packager_1_1media_1_1H264NALU-members.html b/sdk/d5/d18/structedash__packager_1_1media_1_1H264NALU-members.html new file mode 100644 index 0000000000..bc2f96aa55 --- /dev/null +++ b/sdk/d5/d18/structedash__packager_1_1media_1_1H264NALU-members.html @@ -0,0 +1,120 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::H264NALU Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + +
data (defined in edash_packager::media::H264NALU)edash_packager::media::H264NALU
H264NALU() (defined in edash_packager::media::H264NALU)edash_packager::media::H264NALU
kAUD enum value (defined in edash_packager::media::H264NALU)edash_packager::media::H264NALU
kCodedSliceExtension enum value (defined in edash_packager::media::H264NALU)edash_packager::media::H264NALU
kEOSeq enum value (defined in edash_packager::media::H264NALU)edash_packager::media::H264NALU
kEOStream enum value (defined in edash_packager::media::H264NALU)edash_packager::media::H264NALU
kIDRSlice enum value (defined in edash_packager::media::H264NALU)edash_packager::media::H264NALU
kNonIDRSlice enum value (defined in edash_packager::media::H264NALU)edash_packager::media::H264NALU
kPPS enum value (defined in edash_packager::media::H264NALU)edash_packager::media::H264NALU
kSEIMessage enum value (defined in edash_packager::media::H264NALU)edash_packager::media::H264NALU
kSPS enum value (defined in edash_packager::media::H264NALU)edash_packager::media::H264NALU
kUnspecified enum value (defined in edash_packager::media::H264NALU)edash_packager::media::H264NALU
nal_ref_idc (defined in edash_packager::media::H264NALU)edash_packager::media::H264NALU
nal_unit_type (defined in edash_packager::media::H264NALU)edash_packager::media::H264NALU
size (defined in edash_packager::media::H264NALU)edash_packager::media::H264NALU
Type enum name (defined in edash_packager::media::H264NALU)edash_packager::media::H264NALU
+ + + + diff --git a/sdk/d5/d1a/ts__section_8h_source.html b/sdk/d5/d1a/ts__section_8h_source.html new file mode 100644 index 0000000000..f452f1fd56 --- /dev/null +++ b/sdk/d5/d1a/ts__section_8h_source.html @@ -0,0 +1,142 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp2t/ts_section.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ts_section.h
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_FORMATS_MP2T_TS_SECTION_H_
+
6 #define MEDIA_FORMATS_MP2T_TS_SECTION_H_
+
7 
+
8 namespace edash_packager {
+
9 namespace media {
+
10 namespace mp2t {
+
11 
+
12 class TsSection {
+
13  public:
+
14  // From ISO/IEC 13818-1 or ITU H.222 spec: Table 2-3 - PID table.
+
15  enum SpecialPid {
+
16  kPidPat = 0x0,
+
17  kPidCat = 0x1,
+
18  kPidTsdt = 0x2,
+
19  kPidNullPacket = 0x1fff,
+
20  kPidMax = 0x1fff,
+
21  };
+
22 
+
23  virtual ~TsSection() {}
+
24 
+
25  // Parse the data bytes of the TS packet.
+
26  // Return true if parsing is successful.
+
27  virtual bool Parse(bool payload_unit_start_indicator,
+
28  const uint8_t* buf,
+
29  int size) = 0;
+
30 
+
31  // Process bytes that have not been processed yet (pending buffers in the
+
32  // pipe). Flush might thus results in frame emission, as an example.
+
33  virtual void Flush() = 0;
+
34 
+
35  // Reset the state of the parser to its initial state.
+
36  virtual void Reset() = 0;
+
37 };
+
38 
+
39 } // namespace mp2t
+
40 } // namespace media
+
41 } // namespace edash_packager
+
42 
+
43 #endif
+ +
+ + + + diff --git a/sdk/d5/d1f/classedash__packager_1_1media_1_1BufferReader-members.html b/sdk/d5/d1f/classedash__packager_1_1media_1_1BufferReader-members.html new file mode 100644 index 0000000000..0c5e9776fd --- /dev/null +++ b/sdk/d5/d1f/classedash__packager_1_1media_1_1BufferReader-members.html @@ -0,0 +1,122 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::BufferReader Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + +
BufferReader(const uint8_t *buf, size_t size)edash_packager::media::BufferReaderinline
data() const (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReaderinline
HasBytes(size_t count)edash_packager::media::BufferReaderinline
pos() const (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReaderinline
Read1(uint8_t *v) WARN_UNUSED_RESULTedash_packager::media::BufferReader
Read2(uint16_t *v) WARN_UNUSED_RESULT (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReader
Read2s(int16_t *v) WARN_UNUSED_RESULT (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReader
Read4(uint32_t *v) WARN_UNUSED_RESULT (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReader
Read4s(int32_t *v) WARN_UNUSED_RESULT (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReader
Read8(uint64_t *v) WARN_UNUSED_RESULT (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReader
Read8s(int64_t *v) WARN_UNUSED_RESULT (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReader
ReadNBytesInto8(uint64_t *v, size_t num_bytes) WARN_UNUSED_RESULTedash_packager::media::BufferReader
ReadNBytesInto8s(int64_t *v, size_t num_bytes) WARN_UNUSED_RESULT (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReader
ReadToVector(std::vector< uint8_t > *t, size_t count) WARN_UNUSED_RESULT (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReader
set_size(size_t size) (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReaderinline
size() const (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReaderinline
SkipBytes(size_t num_bytes) WARN_UNUSED_RESULTedash_packager::media::BufferReader
~BufferReader() (defined in edash_packager::media::BufferReader)edash_packager::media::BufferReaderinline
+ + + + diff --git a/sdk/d5/d26/classedash__packager_1_1media_1_1MediaParser-members.html b/sdk/d5/d26/classedash__packager_1_1media_1_1MediaParser-members.html new file mode 100644 index 0000000000..32d05e4d5d --- /dev/null +++ b/sdk/d5/d26/classedash__packager_1_1media_1_1MediaParser-members.html @@ -0,0 +1,111 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::MediaParser Member List
+
+
+ +

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

+ + + + + + + + +
Flush()=0edash_packager::media::MediaParserpure virtual
Init(const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source)=0edash_packager::media::MediaParserpure virtual
InitCB typedefedash_packager::media::MediaParser
MediaParser() (defined in edash_packager::media::MediaParser)edash_packager::media::MediaParserinline
NewSampleCB typedefedash_packager::media::MediaParser
Parse(const uint8_t *buf, int size)=0edash_packager::media::MediaParserpure virtual
~MediaParser() (defined in edash_packager::media::MediaParser)edash_packager::media::MediaParserinlinevirtual
+ + + + diff --git a/sdk/d5/d27/key__fetcher_8cc_source.html b/sdk/d5/d27/key__fetcher_8cc_source.html new file mode 100644 index 0000000000..504edb0159 --- /dev/null +++ b/sdk/d5/d27/key__fetcher_8cc_source.html @@ -0,0 +1,114 @@ + + + + + + +DASH Media Packaging SDK: media/base/key_fetcher.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
key_fetcher.cc
+
+
+
1 // Copyright 2014 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/base/key_fetcher.h"
+
8 
+
9 namespace edash_packager {
+
10 namespace media {
+
11 
+
12 KeyFetcher::KeyFetcher() {}
+
13 KeyFetcher::~KeyFetcher() {}
+
14 
+
15 } // namespace media
+
16 } // namespace edash_packager
+
+ + + + diff --git a/sdk/d5/d30/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter.html b/sdk/d5/d30/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter.html new file mode 100644 index 0000000000..e22128570d --- /dev/null +++ b/sdk/d5/d30/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter.html @@ -0,0 +1,200 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::H264ByteToUnitStreamConverter Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::H264ByteToUnitStreamConverter Class Reference
+
+
+ +

#include <h264_byte_to_unit_stream_converter.h>

+ + + + + + +

+Public Member Functions

bool ConvertByteStreamToNalUnitStream (const uint8_t *input_frame, size_t input_frame_size, std::vector< uint8_t > *output_frame)
 
bool GetAVCDecoderConfigurationRecord (std::vector< uint8_t > *decoder_config)
 
+ + + +

+Static Public Attributes

+static const size_t kUnitStreamNaluLengthSize = 4
 
+

Detailed Description

+

Class which converts H.264 byte streams (as specified in ISO/IEC 14496-10 Annex B) into H.264 NAL unit streams (as specified in ISO/IEC 14496-15).

+ +

Definition at line 22 of file h264_byte_to_unit_stream_converter.h.

+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool edash_packager::media::H264ByteToUnitStreamConverter::ConvertByteStreamToNalUnitStream (const uint8_t * input_frame,
size_t input_frame_size,
std::vector< uint8_t > * output_frame 
)
+
+

Converts a whole AVC byte stream encoded video frame to NAL unit stream format.

+
Parameters
+ + + + +
input_frameis a buffer containing a whole H.264 frame in byte stream format.
input_frame_sizeis the size of the H.264 frame, in bytes.
output_frameis a pointer to a vector which will receive the converted frame.
+
+
+
Returns
true if successful, false otherwise.
+ +

Definition at line 26 of file h264_byte_to_unit_stream_converter.cc.

+ +
+
+ +
+
+ + + + + + + + +
bool edash_packager::media::H264ByteToUnitStreamConverter::GetAVCDecoderConfigurationRecord (std::vector< uint8_t > * decoder_config)
+
+

Synthesizes an AVCDecoderConfigurationRecord from the SPS and PPS NAL units extracted from the AVC byte stream.

+
Parameters
+ + +
decoder_configis a pointer to a vector, which on successful return will contain the computed AVCDecoderConfigurationRecord.
+
+
+
Returns
true if successful, or false otherwise.
+ +

Definition at line 99 of file h264_byte_to_unit_stream_converter.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d5/d4a/classedash__packager_1_1media_1_1mp2t_1_1TsPacket-members.html b/sdk/d5/d4a/classedash__packager_1_1media_1_1mp2t_1_1TsPacket-members.html new file mode 100644 index 0000000000..b26b28f5da --- /dev/null +++ b/sdk/d5/d4a/classedash__packager_1_1media_1_1mp2t_1_1TsPacket-members.html @@ -0,0 +1,115 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp2t::TsPacket Member List
+
+
+ +

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

+ + + + + + + + + + + + +
continuity_counter() const (defined in edash_packager::media::mp2t::TsPacket)edash_packager::media::mp2t::TsPacketinline
discontinuity_indicator() const (defined in edash_packager::media::mp2t::TsPacket)edash_packager::media::mp2t::TsPacketinline
kPacketSize (defined in edash_packager::media::mp2t::TsPacket)edash_packager::media::mp2t::TsPacketstatic
Parse(const uint8_t *buf, int size) (defined in edash_packager::media::mp2t::TsPacket)edash_packager::media::mp2t::TsPacketstatic
payload() const (defined in edash_packager::media::mp2t::TsPacket)edash_packager::media::mp2t::TsPacketinline
payload_size() const (defined in edash_packager::media::mp2t::TsPacket)edash_packager::media::mp2t::TsPacketinline
payload_unit_start_indicator() const (defined in edash_packager::media::mp2t::TsPacket)edash_packager::media::mp2t::TsPacketinline
pid() const (defined in edash_packager::media::mp2t::TsPacket)edash_packager::media::mp2t::TsPacketinline
random_access_indicator() const (defined in edash_packager::media::mp2t::TsPacket)edash_packager::media::mp2t::TsPacketinline
Sync(const uint8_t *buf, int size) (defined in edash_packager::media::mp2t::TsPacket)edash_packager::media::mp2t::TsPacketstatic
~TsPacket() (defined in edash_packager::media::mp2t::TsPacket)edash_packager::media::mp2t::TsPacket
+ + + + diff --git a/sdk/d5/d4d/box_8cc_source.html b/sdk/d5/d4d/box_8cc_source.html new file mode 100644 index 0000000000..c32a433872 --- /dev/null +++ b/sdk/d5/d4d/box_8cc_source.html @@ -0,0 +1,175 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/box.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
box.cc
+
+
+
1 // Copyright 2014 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/formats/mp4/box.h"
+
8 
+
9 #include "packager/base/logging.h"
+
10 #include "packager/media/formats/mp4/box_buffer.h"
+
11 
+
12 namespace edash_packager {
+
13 namespace media {
+
14 namespace mp4 {
+
15 
+
16 Box::Box() : atom_size(0) {}
+
17 Box::~Box() {}
+
18 
+
19 bool Box::Parse(BoxReader* reader) {
+
20  DCHECK(reader != NULL);
+
21  BoxBuffer buffer(reader);
+
22  return ReadWrite(&buffer);
+
23 }
+
24 
+
25 void Box::Write(BufferWriter* writer) {
+
26  DCHECK(writer != NULL);
+
27  uint32_t size = ComputeSize();
+
28  DCHECK_EQ(size, this->atom_size);
+
29 
+
30  size_t buffer_size_before_write = writer->Size();
+
31  BoxBuffer buffer(writer);
+
32  CHECK(ReadWrite(&buffer));
+
33  DCHECK_EQ(this->atom_size, writer->Size() - buffer_size_before_write);
+
34 }
+
35 
+
36 bool Box::ReadWrite(BoxBuffer* buffer) {
+
37  if (buffer->Reading()) {
+
38  // Skip for read mode, which is handled already in BoxReader.
+
39  } else {
+
40  CHECK(buffer->ReadWriteUInt32(&this->atom_size));
+
41  FourCC fourcc = BoxType();
+
42  CHECK(buffer->ReadWriteFourCC(&fourcc));
+
43  }
+
44  return true;
+
45 }
+
46 
+
47 FullBox::FullBox() : version(0), flags(0) {}
+
48 FullBox::~FullBox() {}
+
49 
+ +
51  RCHECK(Box::ReadWrite(buffer));
+
52 
+
53  uint32_t vflags;
+
54  if (buffer->Reading()) {
+
55  RCHECK(buffer->ReadWriteUInt32(&vflags));
+
56  this->version = vflags >> 24;
+
57  this->flags = vflags & 0x00FFFFFF;
+
58  } else {
+
59  vflags = (this->version << 24) | this->flags;
+
60  RCHECK(buffer->ReadWriteUInt32(&vflags));
+
61  }
+
62  return true;
+
63 }
+
64 
+
65 } // namespace mp4
+
66 } // namespace media
+
67 } // namespace edash_packager
+
virtual bool ReadWrite(BoxBuffer *buffer)
Read/write the mp4 box from/to BoxBuffer.
Definition: box.cc:36
+
virtual uint32_t ComputeSize()=0
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
Definition: box.cc:50
+ +
bool Parse(BoxReader *reader)
Definition: box.cc:19
+ +
void Write(BufferWriter *writer)
Definition: box.cc:25
+
Class for reading MP4 boxes.
Definition: box_reader.h:24
+ + +
+ + + + diff --git a/sdk/d5/d52/ts__section__pes_8h_source.html b/sdk/d5/d52/ts__section__pes_8h_source.html new file mode 100644 index 0000000000..b056ca9f45 --- /dev/null +++ b/sdk/d5/d52/ts__section__pes_8h_source.html @@ -0,0 +1,169 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp2t/ts_section_pes.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ts_section_pes.h
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_FORMATS_MP2T_TS_SECTION_PES_H_
+
6 #define MEDIA_FORMATS_MP2T_TS_SECTION_PES_H_
+
7 
+
8 #include <stdint.h>
+
9 
+
10 #include "packager/base/compiler_specific.h"
+
11 #include "packager/base/memory/scoped_ptr.h"
+
12 #include "packager/media/base/byte_queue.h"
+
13 #include "packager/media/formats/mp2t/ts_section.h"
+
14 
+
15 namespace edash_packager {
+
16 namespace media {
+
17 namespace mp2t {
+
18 
+
19 class EsParser;
+
20 
+
21 class TsSectionPes : public TsSection {
+
22  public:
+
23  explicit TsSectionPes(scoped_ptr<EsParser> es_parser);
+
24  virtual ~TsSectionPes();
+
25 
+
26  // TsSection implementation.
+
27  virtual bool Parse(bool payload_unit_start_indicator,
+
28  const uint8_t* buf,
+
29  int size) OVERRIDE;
+
30  virtual void Flush() OVERRIDE;
+
31  virtual void Reset() OVERRIDE;
+
32 
+
33  private:
+
34  // Emit a reassembled PES packet.
+
35  // Return true if successful.
+
36  // |emit_for_unknown_size| is used to force emission for PES packets
+
37  // whose size is unknown.
+
38  bool Emit(bool emit_for_unknown_size);
+
39 
+
40  // Parse a PES packet, return true if successful.
+
41  bool ParseInternal(const uint8_t* raw_pes, int raw_pes_size);
+
42 
+
43  void ResetPesState();
+
44 
+
45  // Bytes of the current PES.
+
46  ByteQueue pes_byte_queue_;
+
47 
+
48  // ES parser.
+
49  scoped_ptr<EsParser> es_parser_;
+
50 
+
51  // Do not start parsing before getting a unit start indicator.
+
52  bool wait_for_pusi_;
+
53 
+
54  // Used to unroll PTS and DTS.
+
55  bool previous_pts_valid_;
+
56  int64_t previous_pts_;
+
57  bool previous_dts_valid_;
+
58  int64_t previous_dts_;
+
59 
+
60  DISALLOW_COPY_AND_ASSIGN(TsSectionPes);
+
61 };
+
62 
+
63 } // namespace mp2t
+
64 } // namespace media
+
65 } // namespace edash_packager
+
66 
+
67 #endif
+
68 
+ + + +
+ + + + diff --git a/sdk/d5/d54/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig-members.html b/sdk/d5/d54/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig-members.html new file mode 100644 index 0000000000..2f0b542cae --- /dev/null +++ b/sdk/d5/d54/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig-members.html @@ -0,0 +1,114 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::AACAudioSpecificConfig Member List
+
+
+ +

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

+ + + + + + + + + + + +
AACAudioSpecificConfig() (defined in edash_packager::media::mp4::AACAudioSpecificConfig)edash_packager::media::mp4::AACAudioSpecificConfig
audio_object_type() const edash_packager::media::mp4::AACAudioSpecificConfiginline
ConvertToADTS(std::vector< uint8_t > *buffer) const edash_packager::media::mp4::AACAudioSpecificConfig
frequency() const edash_packager::media::mp4::AACAudioSpecificConfiginline
GetNumChannels(bool sbr_in_mimetype) const edash_packager::media::mp4::AACAudioSpecificConfig
GetOutputSamplesPerSecond(bool sbr_in_mimetype) const edash_packager::media::mp4::AACAudioSpecificConfig
kADTSHeaderSizeedash_packager::media::mp4::AACAudioSpecificConfigstatic
num_channels() const edash_packager::media::mp4::AACAudioSpecificConfiginline
Parse(const std::vector< uint8_t > &data)edash_packager::media::mp4::AACAudioSpecificConfig
~AACAudioSpecificConfig() (defined in edash_packager::media::mp4::AACAudioSpecificConfig)edash_packager::media::mp4::AACAudioSpecificConfig
+ + + + diff --git a/sdk/d5/d62/classedash__packager_1_1media_1_1RsaPrivateKey.html b/sdk/d5/d62/classedash__packager_1_1media_1_1RsaPrivateKey.html new file mode 100644 index 0000000000..d4b86269df --- /dev/null +++ b/sdk/d5/d62/classedash__packager_1_1media_1_1RsaPrivateKey.html @@ -0,0 +1,232 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::RsaPrivateKey Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::RsaPrivateKey Class Reference
+
+
+ +

Rsa private key, used for message signing and decryption. + More...

+ +

#include <rsa_key.h>

+ + + + + + +

+Public Member Functions

bool Decrypt (const std::string &encrypted_message, std::string *decrypted_message)
 
bool GenerateSignature (const std::string &message, std::string *signature)
 
+ + + +

+Static Public Member Functions

static RsaPrivateKeyCreate (const std::string &serialized_key)
 
+

Detailed Description

+

Rsa private key, used for message signing and decryption.

+ +

Definition at line 24 of file rsa_key.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
RsaPrivateKey * edash_packager::media::RsaPrivateKey::Create (const std::string & serialized_key)
+
+static
+
+

Create an RsaPrivateKey object using a DER encoded PKCS#1 RSAPrivateKey.

+
Returns
The created RsaPrivateKey object on success, NULL otherwise.
+ +

Definition at line 97 of file rsa_key.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::RsaPrivateKey::Decrypt (const std::string & encrypted_message,
std::string * decrypted_message 
)
+
+

Decrypt a message using RSA-OAEP.

+
Parameters
+ + +
decrypted_messagemust not be NULL.
+
+
+
Returns
true if successful, false otherwise.
+ +

Definition at line 102 of file rsa_key.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::RsaPrivateKey::GenerateSignature (const std::string & message,
std::string * signature 
)
+
+

Generate RSASSA-PSS signature.

+
Parameters
+ + +
signaturemust not be NULL.
+
+
+
Returns
true if successful, false otherwise.
+ +

Definition at line 130 of file rsa_key.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d5/d63/network__util_8cc_source.html b/sdk/d5/d63/network__util_8cc_source.html new file mode 100644 index 0000000000..5bcec4da32 --- /dev/null +++ b/sdk/d5/d63/network__util_8cc_source.html @@ -0,0 +1,130 @@ + + + + + + +DASH Media Packaging SDK: media/base/network_util.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
network_util.cc
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/base/network_util.h"
+
6 
+
7 namespace edash_packager {
+
8 namespace media {
+
9 
+
10 uint32_t ntohlFromBuffer(const unsigned char* buf) {
+
11  return (static_cast<uint32_t>(buf[0]) << 24) |
+
12  (static_cast<uint32_t>(buf[1]) << 16) |
+
13  (static_cast<uint32_t>(buf[2]) << 8) | (static_cast<uint32_t>(buf[3]));
+
14 }
+
15 
+
16 uint16_t ntohsFromBuffer(const unsigned char* buf) {
+
17  return (static_cast<uint16_t>(buf[0]) << 8) | (static_cast<uint16_t>(buf[1]));
+
18 }
+
19 
+
20 uint64_t ntohllFromBuffer(const unsigned char* buf) {
+
21  return (static_cast<uint64_t>(buf[0]) << 56) |
+
22  (static_cast<uint64_t>(buf[1]) << 48) |
+
23  (static_cast<uint64_t>(buf[2]) << 40) |
+
24  (static_cast<uint64_t>(buf[3]) << 32) |
+
25  (static_cast<uint64_t>(buf[4]) << 24) |
+
26  (static_cast<uint64_t>(buf[5]) << 16) |
+
27  (static_cast<uint64_t>(buf[6]) << 8) | (static_cast<uint64_t>(buf[7]));
+
28 }
+
29 
+
30 } // namespace media
+
31 } // namespace edash_packager
+
32 
+
+ + + + diff --git a/sdk/d5/d6e/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader-members.html b/sdk/d5/d6e/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader-members.html new file mode 100644 index 0000000000..995593a6a0 --- /dev/null +++ b/sdk/d5/d6e/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::MovieExtendsHeader Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::MovieExtendsHeader)edash_packager::media::mp4::MovieExtendsHeadervirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::MovieExtendsHeadervirtual
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
fragment_duration (defined in edash_packager::media::mp4::MovieExtendsHeader)edash_packager::media::mp4::MovieExtendsHeader
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
MovieExtendsHeader() (defined in edash_packager::media::mp4::MovieExtendsHeader)edash_packager::media::mp4::MovieExtendsHeader
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::MovieExtendsHeadervirtual
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~MovieExtendsHeader() (defined in edash_packager::media::mp4::MovieExtendsHeader)edash_packager::media::mp4::MovieExtendsHeadervirtual
+ + + + diff --git a/sdk/d5/d7a/structedash__packager_1_1Element.html b/sdk/d5/d7a/structedash__packager_1_1Element.html new file mode 100644 index 0000000000..bb27989c91 --- /dev/null +++ b/sdk/d5/d7a/structedash__packager_1_1Element.html @@ -0,0 +1,128 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::Element Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::Element Struct Reference
+
+
+ + + + + + + + + + +

+Public Attributes

+std::string name
 
+std::map< std::string,
+std::string > 
attributes
 
+std::string content
 
+std::vector< Elementsubelements
 
+

Detailed Description

+
+

Definition at line 22 of file content_protection_element.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d5/d7b/box__definitions_8h_source.html b/sdk/d5/d7b/box__definitions_8h_source.html new file mode 100644 index 0000000000..d8671508ae --- /dev/null +++ b/sdk/d5/d7b/box__definitions_8h_source.html @@ -0,0 +1,766 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/box_definitions.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
box_definitions.h
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
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  virtual ~T(); \
+
35  virtual bool ReadWrite(BoxBuffer* buffer) OVERRIDE; \
+
36  virtual FourCC BoxType() const OVERRIDE; \
+
37  virtual 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;
+
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);
+
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;
+
205 
+
206  PixelAspectRatioBox pixel_aspect;
+ +
208 
+
209  // Currently expected to be present regardless of 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);
+
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);
+
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 };
+
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 };
+
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);
+
360 
+
361  std::vector<uint8_t> location;
+
362 };
+
363 
+ +
365  DECLARE_BOX_METHODS(DataReference);
+
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;
+
375 };
+
376 
+ +
378  DECLARE_BOX_METHODS(MediaInformation);
+
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;
+
407 };
+
408 
+ +
410  DECLARE_BOX_METHODS(TrackExtends);
+
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 };
+
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,
+
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 };
+
476 
+ +
478  enum TrackFragmentFlagsMasks {
+
479  kDataOffsetPresentMask = 0x000001,
+
480  kFirstSampleFlagsPresentMask = 0x000004,
+
481  kSampleDurationPresentMask = 0x000100,
+
482  kSampleSizePresentMask = 0x000200,
+
483  kSampleFlagsPresentMask = 0x000400,
+
484  kSampleCompTimeOffsetsPresentMask = 0x000800,
+
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;
+
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 };
+
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);
+
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;
+
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_
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/sdk/d5/d89/widevine__key__source_8cc_source.html b/sdk/d5/d89/widevine__key__source_8cc_source.html new file mode 100644 index 0000000000..d2eb30bb87 --- /dev/null +++ b/sdk/d5/d89/widevine__key__source_8cc_source.html @@ -0,0 +1,657 @@ + + + + + + +DASH Media Packaging SDK: media/base/widevine_key_source.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
widevine_key_source.cc
+
+
+
1 // Copyright 2014 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/base/widevine_key_source.h"
+
8 
+
9 #include "packager/base/base64.h"
+
10 #include "packager/base/bind.h"
+
11 #include "packager/base/json/json_reader.h"
+
12 #include "packager/base/json/json_writer.h"
+
13 #include "packager/base/memory/ref_counted.h"
+
14 #include "packager/base/stl_util.h"
+
15 #include "packager/media/base/http_key_fetcher.h"
+
16 #include "packager/media/base/producer_consumer_queue.h"
+
17 #include "packager/media/base/request_signer.h"
+
18 
+
19 #define RCHECK(x) \
+
20  do { \
+
21  if (!(x)) { \
+
22  LOG(ERROR) << "Failure while processing: " << #x; \
+
23  return false; \
+
24  } \
+
25  } while (0)
+
26 
+
27 namespace edash_packager {
+
28 namespace {
+
29 
+
30 const bool kEnableKeyRotation = true;
+
31 
+
32 const char kLicenseStatusOK[] = "OK";
+
33 // Server may return INTERNAL_ERROR intermittently, which is a transient error
+
34 // and the next client request may succeed without problem.
+
35 const char kLicenseStatusTransientError[] = "INTERNAL_ERROR";
+
36 
+
37 // Number of times to retry requesting keys in case of a transient error from
+
38 // the server.
+
39 const int kNumTransientErrorRetries = 5;
+
40 const int kFirstRetryDelayMilliseconds = 1000;
+
41 
+
42 // Default crypto period count, which is the number of keys to fetch on every
+
43 // key rotation enabled request.
+
44 const int kDefaultCryptoPeriodCount = 10;
+
45 const int kGetKeyTimeoutInSeconds = 5 * 60; // 5 minutes.
+
46 const int kKeyFetchTimeoutInSeconds = 60; // 1 minute.
+
47 
+
48 bool Base64StringToBytes(const std::string& base64_string,
+
49  std::vector<uint8_t>* bytes) {
+
50  DCHECK(bytes);
+
51  std::string str;
+
52  if (!base::Base64Decode(base64_string, &str))
+
53  return false;
+
54  bytes->assign(str.begin(), str.end());
+
55  return true;
+
56 }
+
57 
+
58 void BytesToBase64String(const std::vector<uint8_t>& bytes,
+
59  std::string* base64_string) {
+
60  DCHECK(base64_string);
+
61  base::Base64Encode(base::StringPiece(reinterpret_cast<const char*>
+
62  (bytes.data()), bytes.size()),
+
63  base64_string);
+
64 }
+
65 
+
66 bool GetKeyFromTrack(const base::DictionaryValue& track_dict,
+
67  std::vector<uint8_t>* key) {
+
68  DCHECK(key);
+
69  std::string key_base64_string;
+
70  RCHECK(track_dict.GetString("key", &key_base64_string));
+
71  VLOG(2) << "Key:" << key_base64_string;
+
72  RCHECK(Base64StringToBytes(key_base64_string, key));
+
73  return true;
+
74 }
+
75 
+
76 bool GetKeyIdFromTrack(const base::DictionaryValue& track_dict,
+
77  std::vector<uint8_t>* key_id) {
+
78  DCHECK(key_id);
+
79  std::string key_id_base64_string;
+
80  RCHECK(track_dict.GetString("key_id", &key_id_base64_string));
+
81  VLOG(2) << "Keyid:" << key_id_base64_string;
+
82  RCHECK(Base64StringToBytes(key_id_base64_string, key_id));
+
83  return true;
+
84 }
+
85 
+
86 bool GetPsshDataFromTrack(const base::DictionaryValue& track_dict,
+
87  std::vector<uint8_t>* pssh_data) {
+
88  DCHECK(pssh_data);
+
89 
+
90  const base::ListValue* pssh_list;
+
91  RCHECK(track_dict.GetList("pssh", &pssh_list));
+
92  // Invariant check. We don't want to crash in release mode if possible.
+
93  // The following code handles it gracefully if GetSize() does not return 1.
+
94  DCHECK_EQ(1u, pssh_list->GetSize());
+
95 
+
96  const base::DictionaryValue* pssh_dict;
+
97  RCHECK(pssh_list->GetDictionary(0, &pssh_dict));
+
98  std::string drm_type;
+
99  RCHECK(pssh_dict->GetString("drm_type", &drm_type));
+
100  if (drm_type != "WIDEVINE") {
+
101  LOG(ERROR) << "Expecting drm_type 'WIDEVINE', get '" << drm_type << "'.";
+
102  return false;
+
103  }
+
104  std::string pssh_data_base64_string;
+
105  RCHECK(pssh_dict->GetString("data", &pssh_data_base64_string));
+
106 
+
107  VLOG(2) << "Pssh Data:" << pssh_data_base64_string;
+
108  RCHECK(Base64StringToBytes(pssh_data_base64_string, pssh_data));
+
109  return true;
+
110 }
+
111 
+
112 } // namespace
+
113 
+
114 namespace media {
+
115 
+
116 // A ref counted wrapper for EncryptionKeyMap.
+
117 class WidevineKeySource::RefCountedEncryptionKeyMap
+
118  : public base::RefCountedThreadSafe<RefCountedEncryptionKeyMap> {
+
119  public:
+
120  explicit RefCountedEncryptionKeyMap(EncryptionKeyMap* encryption_key_map) {
+
121  DCHECK(encryption_key_map);
+
122  encryption_key_map_.swap(*encryption_key_map);
+
123  }
+
124 
+
125  std::map<KeySource::TrackType, EncryptionKey*>& map() {
+
126  return encryption_key_map_;
+
127  }
+
128 
+
129  private:
+
130  friend class base::RefCountedThreadSafe<RefCountedEncryptionKeyMap>;
+
131 
+
132  ~RefCountedEncryptionKeyMap() { STLDeleteValues(&encryption_key_map_); }
+
133 
+
134  EncryptionKeyMap encryption_key_map_;
+
135 
+
136  DISALLOW_COPY_AND_ASSIGN(RefCountedEncryptionKeyMap);
+
137 };
+
138 
+
139 WidevineKeySource::WidevineKeySource(const std::string& server_url)
+
140  : key_production_thread_("KeyProductionThread",
+
141  base::Bind(&WidevineKeySource::FetchKeysTask,
+
142  base::Unretained(this))),
+
143  key_fetcher_(new HttpKeyFetcher(kKeyFetchTimeoutInSeconds)),
+
144  server_url_(server_url),
+
145  crypto_period_count_(kDefaultCryptoPeriodCount),
+
146  key_production_started_(false),
+
147  start_key_production_(false, false),
+
148  first_crypto_period_index_(0) {
+
149  key_production_thread_.Start();
+
150 }
+
151 
+
152 WidevineKeySource::~WidevineKeySource() {
+
153  if (key_pool_)
+
154  key_pool_->Stop();
+
155  if (key_production_thread_.HasBeenStarted()) {
+
156  // Signal the production thread to start key production if it is not
+
157  // signaled yet so the thread can be joined.
+
158  start_key_production_.Signal();
+
159  key_production_thread_.Join();
+
160  }
+
161  STLDeleteValues(&encryption_key_map_);
+
162 }
+
163 
+
164 Status WidevineKeySource::FetchKeys(const std::vector<uint8_t>& content_id,
+
165  const std::string& policy) {
+
166  base::AutoLock scoped_lock(lock_);
+
167  request_dict_.Clear();
+
168  std::string content_id_base64_string;
+
169  BytesToBase64String(content_id, &content_id_base64_string);
+
170  request_dict_.SetString("content_id", content_id_base64_string);
+
171  request_dict_.SetString("policy", policy);
+
172  return FetchKeysInternal(!kEnableKeyRotation, 0, false);
+
173 }
+
174 
+
175 Status WidevineKeySource::FetchKeys(const std::vector<uint8_t>& pssh_data) {
+
176  base::AutoLock scoped_lock(lock_);
+
177  request_dict_.Clear();
+
178  std::string pssh_data_base64_string;
+
179  BytesToBase64String(pssh_data, &pssh_data_base64_string);
+
180  request_dict_.SetString("pssh_data", pssh_data_base64_string);
+
181  return FetchKeysInternal(!kEnableKeyRotation, 0, false);
+
182 }
+
183 
+ +
185  base::AutoLock scoped_lock(lock_);
+
186  request_dict_.Clear();
+
187  request_dict_.SetInteger("asset_id", asset_id);
+
188  return FetchKeysInternal(!kEnableKeyRotation, 0, true);
+
189 }
+
190 
+
191 Status WidevineKeySource::GetKey(TrackType track_type, EncryptionKey* key) {
+
192  DCHECK(key);
+
193  if (encryption_key_map_.find(track_type) == encryption_key_map_.end()) {
+
194  return Status(error::INTERNAL_ERROR,
+
195  "Cannot find key of type " + TrackTypeToString(track_type));
+
196  }
+
197  *key = *encryption_key_map_[track_type];
+
198  return Status::OK;
+
199 }
+
200 
+
201 Status WidevineKeySource::GetKey(const std::vector<uint8_t>& key_id,
+
202  EncryptionKey* key) {
+
203  DCHECK(key);
+
204  for (std::map<TrackType, EncryptionKey*>::iterator iter =
+
205  encryption_key_map_.begin();
+
206  iter != encryption_key_map_.end();
+
207  ++iter) {
+
208  if (iter->second->key_id == key_id) {
+
209  *key = *iter->second;
+
210  return Status::OK;
+
211  }
+
212  }
+
213  return Status(error::INTERNAL_ERROR,
+
214  "Cannot find key with specified key ID");
+
215 }
+
216 
+
217 Status WidevineKeySource::GetCryptoPeriodKey(uint32_t crypto_period_index,
+
218  TrackType track_type,
+
219  EncryptionKey* key) {
+
220  DCHECK(key_production_thread_.HasBeenStarted());
+
221  // TODO(kqyang): This is not elegant. Consider refactoring later.
+
222  {
+
223  base::AutoLock scoped_lock(lock_);
+
224  if (!key_production_started_) {
+
225  // Another client may have a slightly smaller starting crypto period
+
226  // index. Set the initial value to account for that.
+
227  first_crypto_period_index_ =
+
228  crypto_period_index ? crypto_period_index - 1 : 0;
+
229  DCHECK(!key_pool_);
+
230  key_pool_.reset(new EncryptionKeyQueue(crypto_period_count_,
+
231  first_crypto_period_index_));
+
232  start_key_production_.Signal();
+
233  key_production_started_ = true;
+
234  }
+
235  }
+
236  return GetKeyInternal(crypto_period_index, track_type, key);
+
237 }
+
238 
+
239 std::string WidevineKeySource::UUID() {
+
240  return "edef8ba9-79d6-4ace-a3c8-27dcd51d21ed";
+
241 }
+
242 
+
243 void WidevineKeySource::set_signer(scoped_ptr<RequestSigner> signer) {
+
244  signer_ = signer.Pass();
+
245 }
+
246 
+
247 void WidevineKeySource::set_key_fetcher(scoped_ptr<KeyFetcher> key_fetcher) {
+
248  key_fetcher_ = key_fetcher.Pass();
+
249 }
+
250 
+
251 Status WidevineKeySource::GetKeyInternal(uint32_t crypto_period_index,
+
252  TrackType track_type,
+
253  EncryptionKey* key) {
+
254  DCHECK(key_pool_);
+
255  DCHECK(key);
+
256  DCHECK_LE(track_type, NUM_VALID_TRACK_TYPES);
+
257  DCHECK_NE(track_type, TRACK_TYPE_UNKNOWN);
+
258 
+
259  scoped_refptr<RefCountedEncryptionKeyMap> ref_counted_encryption_key_map;
+
260  Status status =
+
261  key_pool_->Peek(crypto_period_index, &ref_counted_encryption_key_map,
+
262  kGetKeyTimeoutInSeconds * 1000);
+
263  if (!status.ok()) {
+
264  if (status.error_code() == error::STOPPED) {
+
265  CHECK(!common_encryption_request_status_.ok());
+
266  return common_encryption_request_status_;
+
267  }
+
268  return status;
+
269  }
+
270 
+
271  EncryptionKeyMap& encryption_key_map = ref_counted_encryption_key_map->map();
+
272  if (encryption_key_map.find(track_type) == encryption_key_map.end()) {
+
273  return Status(error::INTERNAL_ERROR,
+
274  "Cannot find key of type " + TrackTypeToString(track_type));
+
275  }
+
276  *key = *encryption_key_map[track_type];
+
277  return Status::OK;
+
278 }
+
279 
+
280 void WidevineKeySource::FetchKeysTask() {
+
281  // Wait until key production is signaled.
+
282  start_key_production_.Wait();
+
283  if (!key_pool_ || key_pool_->Stopped())
+
284  return;
+
285 
+
286  Status status = FetchKeysInternal(kEnableKeyRotation,
+
287  first_crypto_period_index_,
+
288  false);
+
289  while (status.ok()) {
+
290  first_crypto_period_index_ += crypto_period_count_;
+
291  status = FetchKeysInternal(kEnableKeyRotation,
+
292  first_crypto_period_index_,
+
293  false);
+
294  }
+
295  common_encryption_request_status_ = status;
+
296  key_pool_->Stop();
+
297 }
+
298 
+
299 Status WidevineKeySource::FetchKeysInternal(bool enable_key_rotation,
+
300  uint32_t first_crypto_period_index,
+
301  bool widevine_classic) {
+
302  std::string request;
+
303  FillRequest(enable_key_rotation,
+
304  first_crypto_period_index,
+
305  &request);
+
306 
+
307  std::string message;
+
308  Status status = GenerateKeyMessage(request, &message);
+
309  if (!status.ok())
+
310  return status;
+
311  VLOG(1) << "Message: " << message;
+
312 
+
313  std::string raw_response;
+
314  int64_t sleep_duration = kFirstRetryDelayMilliseconds;
+
315 
+
316  // Perform client side retries if seeing server transient error to workaround
+
317  // server limitation.
+
318  for (int i = 0; i < kNumTransientErrorRetries; ++i) {
+
319  status = key_fetcher_->FetchKeys(server_url_, message, &raw_response);
+
320  if (status.ok()) {
+
321  VLOG(1) << "Retry [" << i << "] Response:" << raw_response;
+
322 
+
323  std::string response;
+
324  if (!DecodeResponse(raw_response, &response)) {
+
325  return Status(error::SERVER_ERROR,
+
326  "Failed to decode response '" + raw_response + "'.");
+
327  }
+
328 
+
329  bool transient_error = false;
+
330  if (ExtractEncryptionKey(enable_key_rotation,
+
331  widevine_classic,
+
332  response,
+
333  &transient_error))
+
334  return Status::OK;
+
335 
+
336  if (!transient_error) {
+
337  return Status(
+
338  error::SERVER_ERROR,
+
339  "Failed to extract encryption key from '" + response + "'.");
+
340  }
+
341  } else if (status.error_code() != error::TIME_OUT) {
+
342  return status;
+
343  }
+
344 
+
345  // Exponential backoff.
+
346  if (i != kNumTransientErrorRetries - 1) {
+
347  base::PlatformThread::Sleep(
+
348  base::TimeDelta::FromMilliseconds(sleep_duration));
+
349  sleep_duration *= 2;
+
350  }
+
351  }
+
352  return Status(error::SERVER_ERROR,
+
353  "Failed to recover from server internal error.");
+
354 }
+
355 
+
356 void WidevineKeySource::FillRequest(bool enable_key_rotation,
+
357  uint32_t first_crypto_period_index,
+
358  std::string* request) {
+
359  DCHECK(request);
+
360  DCHECK(!request_dict_.empty());
+
361 
+
362  // Build tracks.
+
363  base::ListValue* tracks = new base::ListValue();
+
364 
+
365  base::DictionaryValue* track_sd = new base::DictionaryValue();
+
366  track_sd->SetString("type", "SD");
+
367  tracks->Append(track_sd);
+
368  base::DictionaryValue* track_hd = new base::DictionaryValue();
+
369  track_hd->SetString("type", "HD");
+
370  tracks->Append(track_hd);
+
371  base::DictionaryValue* track_audio = new base::DictionaryValue();
+
372  track_audio->SetString("type", "AUDIO");
+
373  tracks->Append(track_audio);
+
374 
+
375  request_dict_.Set("tracks", tracks);
+
376 
+
377  // Build DRM types.
+
378  base::ListValue* drm_types = new base::ListValue();
+
379  drm_types->AppendString("WIDEVINE");
+
380  request_dict_.Set("drm_types", drm_types);
+
381 
+
382  // Build key rotation fields.
+
383  if (enable_key_rotation) {
+
384  request_dict_.SetInteger("first_crypto_period_index",
+
385  first_crypto_period_index);
+
386  request_dict_.SetInteger("crypto_period_count", crypto_period_count_);
+
387  }
+
388 
+
389  base::JSONWriter::Write(&request_dict_, request);
+
390 }
+
391 
+
392 Status WidevineKeySource::GenerateKeyMessage(const std::string& request,
+
393  std::string* message) {
+
394  DCHECK(message);
+
395 
+
396  std::string request_base64_string;
+
397  base::Base64Encode(request, &request_base64_string);
+
398 
+
399  base::DictionaryValue request_dict;
+
400  request_dict.SetString("request", request_base64_string);
+
401 
+
402  // Sign the request.
+
403  if (signer_) {
+
404  std::string signature;
+
405  if (!signer_->GenerateSignature(request, &signature))
+
406  return Status(error::INTERNAL_ERROR, "Signature generation failed.");
+
407 
+
408  std::string signature_base64_string;
+
409  base::Base64Encode(signature, &signature_base64_string);
+
410 
+
411  request_dict.SetString("signature", signature_base64_string);
+
412  request_dict.SetString("signer", signer_->signer_name());
+
413  }
+
414 
+
415  base::JSONWriter::Write(&request_dict, message);
+
416  return Status::OK;
+
417 }
+
418 
+
419 bool WidevineKeySource::DecodeResponse(
+
420  const std::string& raw_response,
+
421  std::string* response) {
+
422  DCHECK(response);
+
423 
+
424  // Extract base64 formatted response from JSON formatted raw response.
+
425  scoped_ptr<base::Value> root(base::JSONReader::Read(raw_response));
+
426  if (!root) {
+
427  LOG(ERROR) << "'" << raw_response << "' is not in JSON format.";
+
428  return false;
+
429  }
+
430  const base::DictionaryValue* response_dict = NULL;
+
431  RCHECK(root->GetAsDictionary(&response_dict));
+
432 
+
433  std::string response_base64_string;
+
434  RCHECK(response_dict->GetString("response", &response_base64_string));
+
435  RCHECK(base::Base64Decode(response_base64_string, response));
+
436  return true;
+
437 }
+
438 
+
439 bool WidevineKeySource::ExtractEncryptionKey(
+
440  bool enable_key_rotation,
+
441  bool widevine_classic,
+
442  const std::string& response,
+
443  bool* transient_error) {
+
444  DCHECK(transient_error);
+
445  *transient_error = false;
+
446 
+
447  scoped_ptr<base::Value> root(base::JSONReader::Read(response));
+
448  if (!root) {
+
449  LOG(ERROR) << "'" << response << "' is not in JSON format.";
+
450  return false;
+
451  }
+
452 
+
453  const base::DictionaryValue* license_dict = NULL;
+
454  RCHECK(root->GetAsDictionary(&license_dict));
+
455 
+
456  std::string license_status;
+
457  RCHECK(license_dict->GetString("status", &license_status));
+
458  if (license_status != kLicenseStatusOK) {
+
459  LOG(ERROR) << "Received non-OK license response: " << response;
+
460  *transient_error = (license_status == kLicenseStatusTransientError);
+
461  return false;
+
462  }
+
463 
+
464  const base::ListValue* tracks;
+
465  RCHECK(license_dict->GetList("tracks", &tracks));
+
466  // Should have at least one track per crypto_period.
+
467  RCHECK(enable_key_rotation ? tracks->GetSize() >= 1 * crypto_period_count_
+
468  : tracks->GetSize() >= 1);
+
469 
+
470  int current_crypto_period_index = first_crypto_period_index_;
+
471 
+
472  EncryptionKeyMap encryption_key_map;
+
473  for (size_t i = 0; i < tracks->GetSize(); ++i) {
+
474  const base::DictionaryValue* track_dict;
+
475  RCHECK(tracks->GetDictionary(i, &track_dict));
+
476 
+
477  if (enable_key_rotation) {
+
478  int crypto_period_index;
+
479  RCHECK(
+
480  track_dict->GetInteger("crypto_period_index", &crypto_period_index));
+
481  if (crypto_period_index != current_crypto_period_index) {
+
482  if (crypto_period_index != current_crypto_period_index + 1) {
+
483  LOG(ERROR) << "Expecting crypto period index "
+
484  << current_crypto_period_index << " or "
+
485  << current_crypto_period_index + 1 << "; Seen "
+
486  << crypto_period_index << " at track " << i;
+
487  return false;
+
488  }
+
489  if (!PushToKeyPool(&encryption_key_map))
+
490  return false;
+
491  ++current_crypto_period_index;
+
492  }
+
493  }
+
494 
+
495  std::string track_type_str;
+
496  RCHECK(track_dict->GetString("type", &track_type_str));
+
497  TrackType track_type = GetTrackTypeFromString(track_type_str);
+
498  DCHECK_NE(TRACK_TYPE_UNKNOWN, track_type);
+
499  RCHECK(encryption_key_map.find(track_type) == encryption_key_map.end());
+
500 
+
501  scoped_ptr<EncryptionKey> encryption_key(new EncryptionKey());
+
502 
+
503  if (!GetKeyFromTrack(*track_dict, &encryption_key->key))
+
504  return false;
+
505 
+
506  // Get key ID and PSSH data for CENC content only.
+
507  if (!widevine_classic) {
+
508  if (!GetKeyIdFromTrack(*track_dict, &encryption_key->key_id))
+
509  return false;
+
510 
+
511  std::vector<uint8_t> pssh_data;
+
512  if (!GetPsshDataFromTrack(*track_dict, &pssh_data))
+
513  return false;
+
514  encryption_key->pssh = PsshBoxFromPsshData(pssh_data);
+
515  }
+
516  encryption_key_map[track_type] = encryption_key.release();
+
517  }
+
518 
+
519  DCHECK(!encryption_key_map.empty());
+
520  if (!enable_key_rotation) {
+
521  encryption_key_map_ = encryption_key_map;
+
522  return true;
+
523  }
+
524  return PushToKeyPool(&encryption_key_map);
+
525 }
+
526 
+
527 bool WidevineKeySource::PushToKeyPool(
+
528  EncryptionKeyMap* encryption_key_map) {
+
529  DCHECK(key_pool_);
+
530  DCHECK(encryption_key_map);
+
531  Status status =
+
532  key_pool_->Push(scoped_refptr<RefCountedEncryptionKeyMap>(
+
533  new RefCountedEncryptionKeyMap(encryption_key_map)),
+
534  kInfiniteTimeout);
+
535  encryption_key_map->clear();
+
536  if (!status.ok()) {
+
537  DCHECK_EQ(error::STOPPED, status.error_code());
+
538  return false;
+
539  }
+
540  return true;
+
541 }
+
542 
+
543 } // namespace media
+
544 } // namespace edash_packager
+
WidevineKeySource(const std::string &server_url)
+ + + + +
void set_signer(scoped_ptr< RequestSigner > signer)
+
virtual Status GetCryptoPeriodKey(uint32_t crypto_period_index, TrackType track_type, EncryptionKey *key) OVERRIDE
+
virtual Status FetchKeys(const std::vector< uint8_t > &content_id, const std::string &policy) OVERRIDE
+
void set_key_fetcher(scoped_ptr< KeyFetcher > key_fetcher)
+ +
static std::vector< uint8_t > PsshBoxFromPsshData(const std::vector< uint8_t > &pssh_data)
Definition: key_source.cc:164
+
virtual Status GetKey(TrackType track_type, EncryptionKey *key) OVERRIDE
+
static TrackType GetTrackTypeFromString(const std::string &track_type_string)
Convert string representation of track type to enum representation.
Definition: key_source.cc:136
+
static std::string TrackTypeToString(TrackType track_type)
Convert TrackType to string.
Definition: key_source.cc:150
+ +
+ + + + diff --git a/sdk/d5/d91/es__parser__adts_8cc_source.html b/sdk/d5/d91/es__parser__adts_8cc_source.html new file mode 100644 index 0000000000..a3fd893036 --- /dev/null +++ b/sdk/d5/d91/es__parser__adts_8cc_source.html @@ -0,0 +1,382 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp2t/es_parser_adts.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
es_parser_adts.cc
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/formats/mp2t/es_parser_adts.h"
+
6 
+
7 #include <stdint.h>
+
8 
+
9 #include <list>
+
10 
+
11 #include "packager/base/logging.h"
+
12 #include "packager/base/strings/string_number_conversions.h"
+
13 #include "packager/media/base/audio_timestamp_helper.h"
+
14 #include "packager/media/base/bit_reader.h"
+
15 #include "packager/media/base/media_sample.h"
+
16 #include "packager/media/base/timestamp.h"
+
17 #include "packager/media/formats/mp2t/adts_header.h"
+
18 #include "packager/media/formats/mp2t/mp2t_common.h"
+
19 #include "packager/media/formats/mpeg/adts_constants.h"
+
20 
+
21 namespace edash_packager {
+
22 namespace media {
+
23 
+
24 // Return true if buf corresponds to an ADTS syncword.
+
25 // |buf| size must be at least 2.
+
26 static bool isAdtsSyncWord(const uint8_t* buf) {
+
27  return (buf[0] == 0xff) && ((buf[1] & 0xf6) == 0xf0);
+
28 }
+
29 
+
30 // Look for an ADTS syncword.
+
31 // |new_pos| returns
+
32 // - either the byte position of the ADTS frame (if found)
+
33 // - or the byte position of 1st byte that was not processed (if not found).
+
34 // In every case, the returned value in |new_pos| is such that new_pos >= pos
+
35 // |frame_sz| returns the size of the ADTS frame (if found).
+
36 // Return whether a syncword was found.
+
37 static bool LookForSyncWord(const uint8_t* raw_es,
+
38  int raw_es_size,
+
39  int pos,
+
40  int* new_pos,
+
41  int* frame_sz) {
+
42  DCHECK_GE(pos, 0);
+
43  DCHECK_LE(pos, raw_es_size);
+
44 
+
45  int max_offset = raw_es_size - kAdtsHeaderMinSize;
+
46  if (pos >= max_offset) {
+
47  // Do not change the position if:
+
48  // - max_offset < 0: not enough bytes to get a full header
+
49  // Since pos >= 0, this is a subcase of the next condition.
+
50  // - pos >= max_offset: might be the case after reading one full frame,
+
51  // |pos| is then incremented by the frame size and might then point
+
52  // to the end of the buffer.
+
53  *new_pos = pos;
+
54  return false;
+
55  }
+
56 
+
57  for (int offset = pos; offset < max_offset; offset++) {
+
58  const uint8_t* cur_buf = &raw_es[offset];
+
59 
+
60  if (!isAdtsSyncWord(cur_buf))
+
61  // The first 12 bits must be 1.
+
62  // The layer field (2 bits) must be set to 0.
+
63  continue;
+
64 
+
65  int frame_size =
+
66  mp2t::AdtsHeader::GetAdtsFrameSize(cur_buf, kAdtsHeaderMinSize);
+
67  if (frame_size < kAdtsHeaderMinSize) {
+
68  // Too short to be an ADTS frame.
+
69  continue;
+
70  }
+
71 
+
72  // Check whether there is another frame
+
73  // |size| apart from the current one.
+
74  int remaining_size = raw_es_size - offset;
+
75  if (remaining_size >= frame_size + 2 &&
+
76  !isAdtsSyncWord(&cur_buf[frame_size])) {
+
77  continue;
+
78  }
+
79 
+
80  *new_pos = offset;
+
81  *frame_sz = frame_size;
+
82  return true;
+
83  }
+
84 
+
85  *new_pos = max_offset;
+
86  return false;
+
87 }
+
88 
+
89 namespace mp2t {
+
90 
+
91 EsParserAdts::EsParserAdts(uint32_t pid,
+
92  const NewStreamInfoCB& new_stream_info_cb,
+
93  const EmitSampleCB& emit_sample_cb,
+
94  bool sbr_in_mimetype)
+
95  : EsParser(pid),
+
96  new_stream_info_cb_(new_stream_info_cb),
+
97  emit_sample_cb_(emit_sample_cb),
+
98  sbr_in_mimetype_(sbr_in_mimetype) {
+
99 }
+
100 
+
101 EsParserAdts::~EsParserAdts() {
+
102 }
+
103 
+
104 bool EsParserAdts::Parse(const uint8_t* buf,
+
105  int size,
+
106  int64_t pts,
+
107  int64_t dts) {
+
108  int raw_es_size;
+
109  const uint8_t* raw_es;
+
110 
+
111  // The incoming PTS applies to the access unit that comes just after
+
112  // the beginning of |buf|.
+
113  if (pts != kNoTimestamp) {
+
114  es_byte_queue_.Peek(&raw_es, &raw_es_size);
+
115  pts_list_.push_back(EsPts(raw_es_size, pts));
+
116  }
+
117 
+
118  // Copy the input data to the ES buffer.
+
119  es_byte_queue_.Push(buf, size);
+
120  es_byte_queue_.Peek(&raw_es, &raw_es_size);
+
121 
+
122  // Look for every ADTS frame in the ES buffer starting at offset = 0
+
123  int es_position = 0;
+
124  int frame_size;
+
125  while (LookForSyncWord(raw_es, raw_es_size, es_position,
+
126  &es_position, &frame_size)) {
+
127  const uint8_t* frame_ptr = raw_es + es_position;
+
128  DVLOG(LOG_LEVEL_ES)
+
129  << "ADTS syncword @ pos=" << es_position
+
130  << " frame_size=" << frame_size;
+
131  DVLOG(LOG_LEVEL_ES)
+
132  << "ADTS header: "
+
133  << base::HexEncode(frame_ptr, kAdtsHeaderMinSize);
+
134 
+
135  // Do not process the frame if this one is a partial frame.
+
136  int remaining_size = raw_es_size - es_position;
+
137  if (frame_size > remaining_size)
+
138  break;
+
139 
+
140  size_t header_size = AdtsHeader::GetAdtsHeaderSize(frame_ptr, frame_size);
+
141 
+
142  // Update the audio configuration if needed.
+
143  DCHECK_GE(frame_size, kAdtsHeaderMinSize);
+
144  if (!UpdateAudioConfiguration(frame_ptr, frame_size))
+
145  return false;
+
146 
+
147  // Get the PTS & the duration of this access unit.
+
148  while (!pts_list_.empty() &&
+
149  pts_list_.front().first <= es_position) {
+
150  audio_timestamp_helper_->SetBaseTimestamp(pts_list_.front().second);
+
151  pts_list_.pop_front();
+
152  }
+
153 
+
154  int64_t current_pts = audio_timestamp_helper_->GetTimestamp();
+
155  int64_t frame_duration =
+
156  audio_timestamp_helper_->GetFrameDuration(kSamplesPerAACFrame);
+
157 
+
158  // Emit an audio frame.
+
159  bool is_key_frame = true;
+
160 
+
161  scoped_refptr<MediaSample> sample =
+ +
163  frame_ptr + header_size,
+
164  frame_size - header_size,
+
165  is_key_frame);
+
166  sample->set_pts(current_pts);
+
167  sample->set_dts(current_pts);
+
168  sample->set_duration(frame_duration);
+
169  emit_sample_cb_.Run(pid(), sample);
+
170 
+
171  // Update the PTS of the next frame.
+
172  audio_timestamp_helper_->AddFrames(kSamplesPerAACFrame);
+
173 
+
174  // Skip the current frame.
+
175  es_position += frame_size;
+
176  }
+
177 
+
178  // Discard all the bytes that have been processed.
+
179  DiscardEs(es_position);
+
180 
+
181  return true;
+
182 }
+
183 
+
184 void EsParserAdts::Flush() {
+
185 }
+
186 
+
187 void EsParserAdts::Reset() {
+
188  es_byte_queue_.Reset();
+
189  pts_list_.clear();
+
190  last_audio_decoder_config_ = scoped_refptr<AudioStreamInfo>();
+
191 }
+
192 
+
193 bool EsParserAdts::UpdateAudioConfiguration(const uint8_t* adts_frame,
+
194  size_t adts_frame_size) {
+
195  const uint8_t kAacSampleSizeBits(16);
+
196 
+
197  AdtsHeader adts_header;
+
198  if (!adts_header.Parse(adts_frame, adts_frame_size)) {
+
199  LOG(ERROR) << "Error parsing ADTS frame header.";
+
200  return false;
+
201  }
+
202  std::vector<uint8_t> audio_specific_config;
+
203  if (!adts_header.GetAudioSpecificConfig(&audio_specific_config))
+
204  return false;
+
205 
+
206  if (last_audio_decoder_config_) {
+
207  // Verify that the audio decoder config has not changed.
+
208  if (last_audio_decoder_config_->extra_data() == audio_specific_config) {
+
209  // Audio configuration has not changed.
+
210  return true;
+
211  }
+
212  NOTIMPLEMENTED() << "Varying audio configurations are not supported.";
+
213  return false;
+
214  }
+
215 
+
216  // The following code is written according to ISO 14496 Part 3 Table 1.11 and
+
217  // Table 1.22. (Table 1.11 refers to the capping to 48000, Table 1.22 refers
+
218  // to SBR doubling the AAC sample rate.)
+
219  int samples_per_second = adts_header.GetSamplingFrequency();
+
220  int extended_samples_per_second = sbr_in_mimetype_
+
221  ? std::min(2 * samples_per_second, 48000)
+
222  : samples_per_second;
+
223 
+
224  last_audio_decoder_config_ = scoped_refptr<StreamInfo>(
+
225  new AudioStreamInfo(
+
226  pid(),
+
227  kMpeg2Timescale,
+
228  kInfiniteDuration,
+
229  kCodecAAC,
+ +
231  adts_header.GetObjectType()),
+
232  std::string(),
+
233  kAacSampleSizeBits,
+
234  adts_header.GetNumChannels(),
+
235  extended_samples_per_second,
+
236  audio_specific_config.data(),
+
237  audio_specific_config.size(),
+
238  false));
+
239 
+
240  DVLOG(1) << "Sampling frequency: " << samples_per_second;
+
241  DVLOG(1) << "Extended sampling frequency: " << extended_samples_per_second;
+
242  DVLOG(1) << "Channel config: " << adts_header.GetNumChannels();
+
243  DVLOG(1) << "Object type: " << adts_header.GetObjectType();
+
244  // Reset the timestamp helper to use a new sampling frequency.
+
245  if (audio_timestamp_helper_) {
+
246  int64_t base_timestamp = audio_timestamp_helper_->GetTimestamp();
+
247  audio_timestamp_helper_.reset(
+
248  new AudioTimestampHelper(kMpeg2Timescale, samples_per_second));
+
249  audio_timestamp_helper_->SetBaseTimestamp(base_timestamp);
+
250  } else {
+
251  audio_timestamp_helper_.reset(
+
252  new AudioTimestampHelper(kMpeg2Timescale, extended_samples_per_second));
+
253  }
+
254 
+
255  // Audio config notification.
+
256  new_stream_info_cb_.Run(last_audio_decoder_config_);
+
257 
+
258  return true;
+
259 }
+
260 
+
261 void EsParserAdts::DiscardEs(int nbytes) {
+
262  DCHECK_GE(nbytes, 0);
+
263  if (nbytes <= 0)
+
264  return;
+
265 
+
266  // Adjust the ES position of each PTS.
+
267  for (EsPtsList::iterator it = pts_list_.begin(); it != pts_list_.end(); ++it)
+
268  it->first -= nbytes;
+
269 
+
270  // Discard |nbytes| of ES.
+
271  es_byte_queue_.Pop(nbytes);
+
272 }
+
273 
+
274 } // namespace mp2t
+
275 } // namespace media
+
276 } // namespace edash_packager
+
static size_t GetAdtsFrameSize(const uint8_t *data, size_t num_bytes)
Definition: adts_header.cc:23
+
void Push(const uint8_t *data, int size)
Append new bytes to the end of the queue.
Definition: byte_queue.cc:29
+ +
static scoped_refptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
Definition: media_sample.cc:47
+
static size_t GetAdtsHeaderSize(const uint8_t *data, size_t num_bytes)
Definition: adts_header.cc:31
+
void Reset()
Reset the queue to the empty state.
Definition: byte_queue.cc:24
+
static std::string GetCodecString(AudioCodec codec, uint8_t audio_object_type)
+
void Peek(const uint8_t **data, int *size) const
Definition: byte_queue.cc:63
+
+ + + + diff --git a/sdk/d5/d9c/classedash__packager_1_1MpdNotifierFactory-members.html b/sdk/d5/d9c/classedash__packager_1_1MpdNotifierFactory-members.html new file mode 100644 index 0000000000..cfc4f80bc1 --- /dev/null +++ b/sdk/d5/d9c/classedash__packager_1_1MpdNotifierFactory-members.html @@ -0,0 +1,107 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::MpdNotifierFactory Member List
+
+
+ +

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

+ + + + +
Create(DashProfile dash_profile, const MpdOptions &mpd_options, const std::vector< std::string > &base_urls, const std::string &output_path)=0 (defined in edash_packager::MpdNotifierFactory)edash_packager::MpdNotifierFactorypure virtual
MpdNotifierFactory() (defined in edash_packager::MpdNotifierFactory)edash_packager::MpdNotifierFactoryinline
~MpdNotifierFactory() (defined in edash_packager::MpdNotifierFactory)edash_packager::MpdNotifierFactoryinlinevirtual
+ + + + diff --git a/sdk/d5/da4/aes__encryptor_8cc_source.html b/sdk/d5/da4/aes__encryptor_8cc_source.html new file mode 100644 index 0000000000..55f8225819 --- /dev/null +++ b/sdk/d5/da4/aes__encryptor_8cc_source.html @@ -0,0 +1,576 @@ + + + + + + +DASH Media Packaging SDK: media/base/aes_encryptor.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
aes_encryptor.cc
+
+
+
1 // Copyright 2014 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/base/aes_encryptor.h"
+
8 
+
9 #include <openssl/aes.h>
+
10 #include <openssl/err.h>
+
11 #include <openssl/rand.h>
+
12 
+
13 #include "packager/base/logging.h"
+
14 
+
15 namespace {
+
16 
+
17 // Increment an 8-byte counter by 1. Return true if overflowed.
+
18 bool Increment64(uint8_t* counter) {
+
19  DCHECK(counter);
+
20  for (int i = 7; i >= 0; --i)
+
21  if (++counter[i] != 0)
+
22  return false;
+
23  return true;
+
24 }
+
25 
+
26 // According to ISO/IEC FDIS 23001-7: CENC spec, IV should be either
+
27 // 64-bit (8-byte) or 128-bit (16-byte).
+
28 bool IsIvSizeValid(size_t iv_size) { return iv_size == 8 || iv_size == 16; }
+
29 
+
30 // AES defines three key sizes: 128, 192 and 256 bits.
+
31 bool IsKeySizeValidForAes(size_t key_size) {
+
32  return key_size == 16 || key_size == 24 || key_size == 32;
+
33 }
+
34 
+
35 // CENC protection scheme uses 128-bit keys in counter mode.
+
36 const uint32_t kCencKeySize = 16;
+
37 
+
38 } // namespace
+
39 
+
40 namespace edash_packager {
+
41 namespace media {
+
42 
+
43 AesCtrEncryptor::AesCtrEncryptor()
+
44  : block_offset_(0),
+
45  encrypted_counter_(AES_BLOCK_SIZE, 0),
+
46  counter_overflow_(false) {
+
47  COMPILE_ASSERT(AES_BLOCK_SIZE == kCencKeySize,
+
48  cenc_key_size_should_be_the_same_as_aes_block_size);
+
49 }
+
50 
+
51 AesCtrEncryptor::~AesCtrEncryptor() {}
+
52 
+
53 bool AesCtrEncryptor::InitializeWithRandomIv(const std::vector<uint8_t>& key,
+
54  uint8_t iv_size) {
+
55  std::vector<uint8_t> iv(iv_size, 0);
+
56  if (RAND_bytes(&iv[0], iv_size) != 1) {
+
57  LOG(ERROR) << "RAND_bytes failed with error: "
+
58  << ERR_error_string(ERR_get_error(), NULL);
+
59  return false;
+
60  }
+
61  return InitializeWithIv(key, iv);
+
62 }
+
63 
+
64 bool AesCtrEncryptor::InitializeWithIv(const std::vector<uint8_t>& key,
+
65  const std::vector<uint8_t>& iv) {
+
66  if (key.size() != kCencKeySize) {
+
67  LOG(ERROR) << "Invalid key size of " << key.size() << " for CENC.";
+
68  return false;
+
69  }
+
70  if (!IsIvSizeValid(iv.size())) {
+
71  LOG(ERROR) << "Invalid IV size: " << iv.size();
+
72  return false;
+
73  }
+
74 
+
75  aes_key_.reset(new AES_KEY());
+
76  CHECK_EQ(AES_set_encrypt_key(&key[0], AES_BLOCK_SIZE * 8, aes_key_.get()), 0);
+
77  return SetIv(iv);
+
78 }
+
79 
+
80 bool AesCtrEncryptor::Encrypt(const uint8_t* plaintext,
+
81  size_t plaintext_size,
+
82  uint8_t* ciphertext) {
+
83  DCHECK(plaintext);
+
84  DCHECK(ciphertext);
+
85  DCHECK(aes_key_);
+
86 
+
87  for (size_t i = 0; i < plaintext_size; ++i) {
+
88  if (block_offset_ == 0) {
+
89  AES_encrypt(&counter_[0], &encrypted_counter_[0], aes_key_.get());
+
90  // As mentioned in ISO/IEC FDIS 23001-7: CENC spec, of the 16 byte counter
+
91  // block, bytes 8 to 15 (i.e. the least significant bytes) are used as a
+
92  // simple 64 bit unsigned integer that is incremented by one for each
+
93  // subsequent block of sample data processed and is kept in network byte
+
94  // order.
+
95  if (Increment64(&counter_[8]))
+
96  counter_overflow_ = true;
+
97  }
+
98  ciphertext[i] = plaintext[i] ^ encrypted_counter_[block_offset_];
+
99  block_offset_ = (block_offset_ + 1) % AES_BLOCK_SIZE;
+
100  }
+
101  return true;
+
102 }
+
103 
+
104 void AesCtrEncryptor::UpdateIv() {
+
105  block_offset_ = 0;
+
106 
+
107  // As recommended in ISO/IEC FDIS 23001-7: CENC spec, for 64-bit (8-byte)
+
108  // IV_Sizes, initialization vectors for subsequent samples can be created by
+
109  // incrementing the initialization vector of the previous sample.
+
110  // For 128-bit (16-byte) IV_Sizes, initialization vectors for subsequent
+
111  // samples should be created by adding the block count of the previous sample
+
112  // to the initialization vector of the previous sample.
+
113  if (iv_.size() == 8) {
+
114  Increment64(&iv_[0]);
+
115  counter_ = iv_;
+
116  counter_.resize(AES_BLOCK_SIZE, 0);
+
117  } else {
+
118  DCHECK_EQ(16u, iv_.size());
+
119  // Even though the block counter portion of the counter (bytes 8 to 15) is
+
120  // treated as a 64-bit number, it is recommended that the initialization
+
121  // vector is treated as a 128-bit number when calculating the next
+
122  // initialization vector from the previous one. The block counter portion
+
123  // is already incremented by number of blocks, the other 64 bits of the
+
124  // counter (bytes 0 to 7) is incremented here if the block counter portion
+
125  // has overflowed.
+
126  if (counter_overflow_)
+
127  Increment64(&counter_[0]);
+
128  iv_ = counter_;
+
129  }
+
130  counter_overflow_ = false;
+
131 }
+
132 
+
133 bool AesCtrEncryptor::SetIv(const std::vector<uint8_t>& iv) {
+
134  if (!IsIvSizeValid(iv.size())) {
+
135  LOG(ERROR) << "Invalid IV size: " << iv.size();
+
136  return false;
+
137  }
+
138 
+
139  block_offset_ = 0;
+
140  counter_ = iv_ = iv;
+
141  counter_.resize(AES_BLOCK_SIZE, 0);
+
142  return true;
+
143 }
+
144 
+
145 AesCbcPkcs5Encryptor::AesCbcPkcs5Encryptor() {}
+
146 AesCbcPkcs5Encryptor::~AesCbcPkcs5Encryptor() {}
+
147 
+
148 bool AesCbcPkcs5Encryptor::InitializeWithIv(const std::vector<uint8_t>& key,
+
149  const std::vector<uint8_t>& iv) {
+
150  if (!IsKeySizeValidForAes(key.size())) {
+
151  LOG(ERROR) << "Invalid AES key size: " << key.size();
+
152  return false;
+
153  }
+
154  if (iv.size() != AES_BLOCK_SIZE) {
+
155  LOG(ERROR) << "Invalid IV size: " << iv.size();
+
156  return false;
+
157  }
+
158 
+
159  encrypt_key_.reset(new AES_KEY());
+
160  CHECK_EQ(AES_set_encrypt_key(&key[0], key.size() * 8, encrypt_key_.get()), 0);
+
161 
+
162  iv_ = iv;
+
163  return true;
+
164 }
+
165 
+
166 void AesCbcPkcs5Encryptor::Encrypt(const std::string& plaintext,
+
167  std::string* ciphertext) {
+
168  DCHECK(ciphertext);
+
169  DCHECK(encrypt_key_);
+
170 
+
171  // Pad the input with PKCS5 padding.
+
172  const size_t num_padding_bytes =
+
173  AES_BLOCK_SIZE - (plaintext.size() % AES_BLOCK_SIZE);
+
174  std::string padded_text = plaintext;
+
175  padded_text.append(num_padding_bytes, static_cast<char>(num_padding_bytes));
+
176 
+
177  ciphertext->resize(padded_text.size());
+
178  std::vector<uint8_t> iv(iv_);
+
179  AES_cbc_encrypt(reinterpret_cast<const uint8_t*>(padded_text.data()),
+
180  reinterpret_cast<uint8_t*>(string_as_array(ciphertext)),
+
181  padded_text.size(),
+
182  encrypt_key_.get(),
+
183  &iv[0],
+
184  AES_ENCRYPT);
+
185 }
+
186 
+
187 bool AesCbcPkcs5Encryptor::SetIv(const std::vector<uint8_t>& iv) {
+
188  if (iv.size() != AES_BLOCK_SIZE) {
+
189  LOG(ERROR) << "Invalid IV size: " << iv.size();
+
190  return false;
+
191  }
+
192 
+
193  iv_ = iv;
+
194  return true;
+
195 }
+
196 
+
197 AesCbcPkcs5Decryptor::AesCbcPkcs5Decryptor() {}
+
198 AesCbcPkcs5Decryptor::~AesCbcPkcs5Decryptor() {}
+
199 
+
200 bool AesCbcPkcs5Decryptor::InitializeWithIv(const std::vector<uint8_t>& key,
+
201  const std::vector<uint8_t>& iv) {
+
202  if (!IsKeySizeValidForAes(key.size())) {
+
203  LOG(ERROR) << "Invalid AES key size: " << key.size();
+
204  return false;
+
205  }
+
206  if (iv.size() != AES_BLOCK_SIZE) {
+
207  LOG(ERROR) << "Invalid IV size: " << iv.size();
+
208  return false;
+
209  }
+
210 
+
211  decrypt_key_.reset(new AES_KEY());
+
212  CHECK_EQ(AES_set_decrypt_key(&key[0], key.size() * 8, decrypt_key_.get()), 0);
+
213 
+
214  iv_ = iv;
+
215  return true;
+
216 }
+
217 
+
218 bool AesCbcPkcs5Decryptor::Decrypt(const std::string& ciphertext,
+
219  std::string* plaintext) {
+
220  if ((ciphertext.size() % AES_BLOCK_SIZE) != 0) {
+
221  LOG(ERROR) << "Expecting cipher text size to be multiple of "
+
222  << AES_BLOCK_SIZE << ", got " << ciphertext.size();
+
223  return false;
+
224  }
+
225 
+
226  DCHECK(plaintext);
+
227  DCHECK(decrypt_key_);
+
228 
+
229  plaintext->resize(ciphertext.size());
+
230  AES_cbc_encrypt(reinterpret_cast<const uint8_t*>(ciphertext.data()),
+
231  reinterpret_cast<uint8_t*>(string_as_array(plaintext)),
+
232  ciphertext.size(),
+
233  decrypt_key_.get(),
+
234  &iv_[0],
+
235  AES_DECRYPT);
+
236 
+
237  // Strip off PKCS5 padding bytes.
+
238  const uint8_t num_padding_bytes = (*plaintext)[plaintext->size() - 1];
+
239  if (num_padding_bytes > AES_BLOCK_SIZE) {
+
240  LOG(ERROR) << "Padding length is too large : "
+
241  << static_cast<int>(num_padding_bytes);
+
242  return false;
+
243  }
+
244  plaintext->resize(plaintext->size() - num_padding_bytes);
+
245  return true;
+
246 }
+
247 
+
248 bool AesCbcPkcs5Decryptor::SetIv(const std::vector<uint8_t>& iv) {
+
249  if (iv.size() != AES_BLOCK_SIZE) {
+
250  LOG(ERROR) << "Invalid IV size: " << iv.size();
+
251  return false;
+
252  }
+
253 
+
254  iv_ = iv;
+
255  return true;
+
256 }
+
257 
+
258 AesCbcCtsEncryptor::AesCbcCtsEncryptor() {}
+
259 AesCbcCtsEncryptor::~AesCbcCtsEncryptor() {}
+
260 
+
261 bool AesCbcCtsEncryptor::InitializeWithIv(const std::vector<uint8_t>& key,
+
262  const std::vector<uint8_t>& iv) {
+
263  if (!IsKeySizeValidForAes(key.size())) {
+
264  LOG(ERROR) << "Invalid AES key size: " << key.size();
+
265  return false;
+
266  }
+
267  if (iv.size() != AES_BLOCK_SIZE) {
+
268  LOG(ERROR) << "Invalid IV size: " << iv.size();
+
269  return false;
+
270  }
+
271 
+
272  encrypt_key_.reset(new AES_KEY());
+
273  CHECK_EQ(AES_set_encrypt_key(&key[0], key.size() * 8, encrypt_key_.get()), 0);
+
274 
+
275  iv_ = iv;
+
276  return true;
+
277 }
+
278 
+
279 void AesCbcCtsEncryptor::Encrypt(const uint8_t* plaintext,
+
280  size_t size,
+
281  uint8_t* ciphertext) {
+
282  DCHECK(plaintext);
+
283  DCHECK(ciphertext);
+
284 
+
285  if (size < AES_BLOCK_SIZE) {
+
286  // Don't have a full block, leave unencrypted.
+
287  memcpy(ciphertext, plaintext, size);
+
288  return;
+
289  }
+
290 
+
291  std::vector<uint8_t> iv(iv_);
+
292  size_t residual_block_size = size % AES_BLOCK_SIZE;
+
293  size_t cbc_size = size - residual_block_size;
+
294 
+
295  // Encrypt everything but the residual block using CBC.
+
296  AES_cbc_encrypt(plaintext,
+
297  ciphertext,
+
298  cbc_size,
+
299  encrypt_key_.get(),
+
300  &iv[0],
+
301  AES_ENCRYPT);
+
302  if (residual_block_size == 0) {
+
303  // No residual block. No need to do ciphertext stealing.
+
304  return;
+
305  }
+
306 
+
307  // Zero-pad the residual block and encrypt using CBC.
+
308  std::vector<uint8_t> residual_block(plaintext + size - residual_block_size,
+
309  plaintext + size);
+
310  residual_block.resize(AES_BLOCK_SIZE, 0);
+
311  AES_cbc_encrypt(&residual_block[0],
+
312  &residual_block[0],
+
313  AES_BLOCK_SIZE,
+
314  encrypt_key_.get(),
+
315  &iv[0],
+
316  AES_ENCRYPT);
+
317 
+
318  // Replace the last full block with the zero-padded, encrypted residual block,
+
319  // and replace the residual block with the equivalent portion of the last full
+
320  // encrypted block. It may appear that some encrypted bits of the last full
+
321  // block are lost, but they are not, as they were used as the IV when
+
322  // encrypting the zero-padded residual block.
+
323  uint8_t* residual_ciphertext_block = ciphertext + size - residual_block_size;
+
324  memcpy(residual_ciphertext_block,
+
325  residual_ciphertext_block - AES_BLOCK_SIZE,
+
326  residual_block_size);
+
327  memcpy(residual_ciphertext_block - AES_BLOCK_SIZE,
+
328  residual_block.data(),
+
329  AES_BLOCK_SIZE);
+
330 }
+
331 
+
332 void AesCbcCtsEncryptor::Encrypt(const std::vector<uint8_t>& plaintext,
+
333  std::vector<uint8_t>* ciphertext) {
+
334  DCHECK(ciphertext);
+
335 
+
336  ciphertext->resize(plaintext.size(), 0);
+
337  if (plaintext.empty())
+
338  return;
+
339 
+
340  Encrypt(plaintext.data(), plaintext.size(), &(*ciphertext)[0]);
+
341 }
+
342 
+
343 bool AesCbcCtsEncryptor::SetIv(const std::vector<uint8_t>& iv) {
+
344  if (iv.size() != AES_BLOCK_SIZE) {
+
345  LOG(ERROR) << "Invalid IV size: " << iv.size();
+
346  return false;
+
347  }
+
348 
+
349  iv_ = iv;
+
350  return true;
+
351 }
+
352 
+
353 AesCbcCtsDecryptor::AesCbcCtsDecryptor() {}
+
354 AesCbcCtsDecryptor::~AesCbcCtsDecryptor() {}
+
355 
+
356 bool AesCbcCtsDecryptor::InitializeWithIv(const std::vector<uint8_t>& key,
+
357  const std::vector<uint8_t>& iv) {
+
358  if (!IsKeySizeValidForAes(key.size())) {
+
359  LOG(ERROR) << "Invalid AES key size: " << key.size();
+
360  return false;
+
361  }
+
362  if (iv.size() != AES_BLOCK_SIZE) {
+
363  LOG(ERROR) << "Invalid IV size: " << iv.size();
+
364  return false;
+
365  }
+
366 
+
367  decrypt_key_.reset(new AES_KEY());
+
368  CHECK_EQ(AES_set_decrypt_key(&key[0], key.size() * 8, decrypt_key_.get()), 0);
+
369 
+
370  iv_ = iv;
+
371  return true;
+
372 }
+
373 
+
374 void AesCbcCtsDecryptor::Decrypt(const uint8_t* ciphertext,
+
375  size_t size,
+
376  uint8_t* plaintext) {
+
377  DCHECK(ciphertext);
+
378  DCHECK(plaintext);
+
379 
+
380  if (size < AES_BLOCK_SIZE) {
+
381  // Don't have a full block, leave unencrypted.
+
382  memcpy(plaintext, ciphertext, size);
+
383  return;
+
384  }
+
385 
+
386  std::vector<uint8_t> iv(iv_);
+
387  size_t residual_block_size = size % AES_BLOCK_SIZE;
+
388 
+
389  if (residual_block_size == 0) {
+
390  // No residual block. No need to do ciphertext stealing.
+
391  AES_cbc_encrypt(ciphertext,
+
392  plaintext,
+
393  size,
+
394  decrypt_key_.get(),
+
395  &iv[0],
+
396  AES_DECRYPT);
+
397  return;
+
398  }
+
399 
+
400  // AES-CBC decrypt everything up to the next-to-last full block.
+
401  size_t cbc_size = size - residual_block_size;
+
402  if (cbc_size > AES_BLOCK_SIZE) {
+
403  AES_cbc_encrypt(ciphertext,
+
404  plaintext,
+
405  cbc_size - AES_BLOCK_SIZE,
+
406  decrypt_key_.get(),
+
407  &iv[0],
+
408  AES_DECRYPT);
+
409  }
+
410 
+
411  // Determine what the last IV should be so that we can "skip ahead" in the
+
412  // CBC decryption.
+
413  std::vector<uint8_t> last_iv(ciphertext + size - residual_block_size,
+
414  ciphertext + size);
+
415  last_iv.resize(AES_BLOCK_SIZE, 0);
+
416 
+
417  // Decrypt the next-to-last block using the IV determined above. This decrypts
+
418  // the residual block bits.
+
419  AES_cbc_encrypt(ciphertext + size - residual_block_size - AES_BLOCK_SIZE,
+
420  plaintext + size - residual_block_size - AES_BLOCK_SIZE,
+
421  AES_BLOCK_SIZE,
+
422  decrypt_key_.get(),
+
423  &last_iv[0],
+
424  AES_DECRYPT);
+
425 
+
426  // Swap back the residual block bits and the next-to-last full block.
+
427  if (plaintext == ciphertext) {
+
428  uint8_t* ptr1 = plaintext + size - residual_block_size;
+
429  uint8_t* ptr2 = plaintext + size - residual_block_size - AES_BLOCK_SIZE;
+
430  for (size_t i = 0; i < residual_block_size; ++i) {
+
431  uint8_t temp = *ptr1;
+
432  *ptr1 = *ptr2;
+
433  *ptr2 = temp;
+
434  ++ptr1;
+
435  ++ptr2;
+
436  }
+
437  } else {
+
438  uint8_t* residual_plaintext_block = plaintext + size - residual_block_size;
+
439  memcpy(residual_plaintext_block,
+
440  residual_plaintext_block - AES_BLOCK_SIZE,
+
441  residual_block_size);
+
442  memcpy(residual_plaintext_block - AES_BLOCK_SIZE,
+
443  ciphertext + size - residual_block_size,
+
444  residual_block_size);
+
445  }
+
446 
+
447  // Decrypt the last full block.
+
448  AES_cbc_encrypt(plaintext + size - residual_block_size - AES_BLOCK_SIZE,
+
449  plaintext + size - residual_block_size - AES_BLOCK_SIZE,
+
450  AES_BLOCK_SIZE,
+
451  decrypt_key_.get(),
+
452  &iv[0],
+
453  AES_DECRYPT);
+
454 }
+
455 
+
456 void AesCbcCtsDecryptor::Decrypt(const std::vector<uint8_t>& ciphertext,
+
457  std::vector<uint8_t>* plaintext) {
+
458  DCHECK(plaintext);
+
459 
+
460  plaintext->resize(ciphertext.size(), 0);
+
461  if (ciphertext.empty())
+
462  return;
+
463 
+
464  Decrypt(ciphertext.data(), ciphertext.size(), &(*plaintext)[0]);
+
465 }
+
466 
+
467 bool AesCbcCtsDecryptor::SetIv(const std::vector<uint8_t>& iv) {
+
468  if (iv.size() != AES_BLOCK_SIZE) {
+
469  LOG(ERROR) << "Invalid IV size: " << iv.size();
+
470  return false;
+
471  }
+
472 
+
473  iv_ = iv;
+
474  return true;
+
475 }
+
476 
+
477 } // namespace media
+
478 } // namespace edash_packager
+
+ + + + diff --git a/sdk/d5/db7/classedash__packager_1_1xml_1_1AdaptationSetXmlNode-members.html b/sdk/d5/db7/classedash__packager_1_1xml_1_1AdaptationSetXmlNode-members.html new file mode 100644 index 0000000000..fa0c678955 --- /dev/null +++ b/sdk/d5/db7/classedash__packager_1_1xml_1_1AdaptationSetXmlNode-members.html @@ -0,0 +1,122 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::xml::AdaptationSetXmlNode Member List
+
+
+ +

This is the complete list of members for edash_packager::xml::AdaptationSetXmlNode, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
AdaptationSetXmlNode() (defined in edash_packager::xml::AdaptationSetXmlNode)edash_packager::xml::AdaptationSetXmlNode
AddChild(ScopedXmlPtr< xmlNode >::type child)edash_packager::xml::XmlNode
AddContentProtectionElements(const std::list< ContentProtectionElement > &content_protection_elements) (defined in edash_packager::xml::RepresentationBaseXmlNode)edash_packager::xml::RepresentationBaseXmlNode
AddElements(const std::vector< Element > &elements)edash_packager::xml::XmlNode
AddRoleElement(const std::string &scheme_id_uri, const std::string &value)edash_packager::xml::AdaptationSetXmlNode
GetRawPtr()edash_packager::xml::XmlNode
PassScopedPtr()edash_packager::xml::XmlNode
Release()edash_packager::xml::XmlNode
RepresentationBaseXmlNode(const char *name) (defined in edash_packager::xml::RepresentationBaseXmlNode)edash_packager::xml::RepresentationBaseXmlNodeexplicitprotected
SetContent(const std::string &content)edash_packager::xml::XmlNode
SetFloatingPointAttribute(const char *attribute_name, double number)edash_packager::xml::XmlNode
SetId(uint32_t id)edash_packager::xml::XmlNode
SetIntegerAttribute(const char *attribute_name, uint64_t number)edash_packager::xml::XmlNode
SetStringAttribute(const char *attribute_name, const std::string &attribute)edash_packager::xml::XmlNode
XmlNode(const char *name)edash_packager::xml::XmlNodeexplicit
~AdaptationSetXmlNode() (defined in edash_packager::xml::AdaptationSetXmlNode)edash_packager::xml::AdaptationSetXmlNodevirtual
~RepresentationBaseXmlNode() (defined in edash_packager::xml::RepresentationBaseXmlNode)edash_packager::xml::RepresentationBaseXmlNodevirtual
~XmlNode() (defined in edash_packager::xml::XmlNode)edash_packager::xml::XmlNodevirtual
+ + + + diff --git a/sdk/d5/dba/ts__packet_8cc_source.html b/sdk/d5/dba/ts__packet_8cc_source.html new file mode 100644 index 0000000000..f62f482f12 --- /dev/null +++ b/sdk/d5/dba/ts__packet_8cc_source.html @@ -0,0 +1,312 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp2t/ts_packet.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ts_packet.cc
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/formats/mp2t/ts_packet.h"
+
6 
+
7 #include "packager/base/memory/scoped_ptr.h"
+
8 #include "packager/media/base/bit_reader.h"
+
9 #include "packager/media/formats/mp2t/mp2t_common.h"
+
10 
+
11 namespace edash_packager {
+
12 namespace media {
+
13 namespace mp2t {
+
14 
+
15 static const uint8_t kTsHeaderSyncword = 0x47;
+
16 
+
17 // static
+
18 int TsPacket::Sync(const uint8_t* buf, int size) {
+
19  int k = 0;
+
20  for (; k < size; k++) {
+
21  // Verify that we have 4 syncwords in a row when possible,
+
22  // this should improve synchronization robustness.
+
23  bool is_header = true;
+
24  for (int i = 0; i < 4; i++) {
+
25  int idx = k + i * kPacketSize;
+
26  if (idx >= size)
+
27  break;
+
28  if (buf[idx] != kTsHeaderSyncword) {
+
29  DVLOG(LOG_LEVEL_TS)
+
30  << "ByteSync" << idx << ": "
+
31  << std::hex << static_cast<int>(buf[idx]) << std::dec;
+
32  is_header = false;
+
33  break;
+
34  }
+
35  }
+
36  if (is_header)
+
37  break;
+
38  }
+
39 
+
40  DVLOG_IF(1, k != 0) << "SYNC: nbytes_skipped=" << k;
+
41  return k;
+
42 }
+
43 
+
44 // static
+
45 TsPacket* TsPacket::Parse(const uint8_t* buf, int size) {
+
46  if (size < kPacketSize) {
+
47  DVLOG(1) << "Buffer does not hold one full TS packet:"
+
48  << " buffer_size=" << size;
+
49  return NULL;
+
50  }
+
51 
+
52  DCHECK_EQ(buf[0], kTsHeaderSyncword);
+
53  if (buf[0] != kTsHeaderSyncword) {
+
54  DVLOG(1) << "Not on a TS syncword:"
+
55  << " buf[0]="
+
56  << std::hex << static_cast<int>(buf[0]) << std::dec;
+
57  return NULL;
+
58  }
+
59 
+
60  scoped_ptr<TsPacket> ts_packet(new TsPacket());
+
61  bool status = ts_packet->ParseHeader(buf);
+
62  if (!status) {
+
63  DVLOG(1) << "Parsing header failed";
+
64  return NULL;
+
65  }
+
66  return ts_packet.release();
+
67 }
+
68 
+
69 TsPacket::TsPacket() {
+
70 }
+
71 
+
72 TsPacket::~TsPacket() {
+
73 }
+
74 
+
75 bool TsPacket::ParseHeader(const uint8_t* buf) {
+
76  BitReader bit_reader(buf, kPacketSize);
+
77  payload_ = buf;
+
78  payload_size_ = kPacketSize;
+
79 
+
80  // Read the TS header: 4 bytes.
+
81  int syncword;
+
82  int transport_error_indicator;
+
83  int payload_unit_start_indicator;
+
84  int transport_priority;
+
85  int transport_scrambling_control;
+
86  int adaptation_field_control;
+
87  RCHECK(bit_reader.ReadBits(8, &syncword));
+
88  RCHECK(bit_reader.ReadBits(1, &transport_error_indicator));
+
89  RCHECK(bit_reader.ReadBits(1, &payload_unit_start_indicator));
+
90  RCHECK(bit_reader.ReadBits(1, &transport_priority));
+
91  RCHECK(bit_reader.ReadBits(13, &pid_));
+
92  RCHECK(bit_reader.ReadBits(2, &transport_scrambling_control));
+
93  RCHECK(bit_reader.ReadBits(2, &adaptation_field_control));
+
94  RCHECK(bit_reader.ReadBits(4, &continuity_counter_));
+
95  payload_unit_start_indicator_ = (payload_unit_start_indicator != 0);
+
96  payload_ += 4;
+
97  payload_size_ -= 4;
+
98 
+
99  // Default values when no adaptation field.
+
100  discontinuity_indicator_ = false;
+
101  random_access_indicator_ = false;
+
102 
+
103  // Done since no adaptation field.
+
104  if ((adaptation_field_control & 0x2) == 0)
+
105  return true;
+
106 
+
107  // Read the adaptation field if needed.
+
108  int adaptation_field_length;
+
109  RCHECK(bit_reader.ReadBits(8, &adaptation_field_length));
+
110  DVLOG(LOG_LEVEL_TS) << "adaptation_field_length=" << adaptation_field_length;
+
111  payload_ += 1;
+
112  payload_size_ -= 1;
+
113  if ((adaptation_field_control & 0x1) == 0 &&
+
114  adaptation_field_length != 183) {
+
115  DVLOG(1) << "adaptation_field_length=" << adaptation_field_length;
+
116  return false;
+
117  }
+
118  if ((adaptation_field_control & 0x1) == 1 &&
+
119  adaptation_field_length > 182) {
+
120  DVLOG(1) << "adaptation_field_length=" << adaptation_field_length;
+
121  // This is not allowed by the spec.
+
122  // However, some badly encoded streams are using
+
123  // adaptation_field_length = 183
+
124  return false;
+
125  }
+
126 
+
127  // adaptation_field_length = '0' is used to insert a single stuffing byte
+
128  // in the adaptation field of a transport stream packet.
+
129  if (adaptation_field_length == 0)
+
130  return true;
+
131 
+
132  bool status = ParseAdaptationField(&bit_reader, adaptation_field_length);
+
133  payload_ += adaptation_field_length;
+
134  payload_size_ -= adaptation_field_length;
+
135  return status;
+
136 }
+
137 
+
138 bool TsPacket::ParseAdaptationField(BitReader* bit_reader,
+
139  int adaptation_field_length) {
+
140  DCHECK_GT(adaptation_field_length, 0);
+
141  int adaptation_field_start_marker = bit_reader->bits_available() / 8;
+
142 
+
143  int discontinuity_indicator;
+
144  int random_access_indicator;
+
145  int elementary_stream_priority_indicator;
+
146  int pcr_flag;
+
147  int opcr_flag;
+
148  int splicing_point_flag;
+
149  int transport_private_data_flag;
+
150  int adaptation_field_extension_flag;
+
151  RCHECK(bit_reader->ReadBits(1, &discontinuity_indicator));
+
152  RCHECK(bit_reader->ReadBits(1, &random_access_indicator));
+
153  RCHECK(bit_reader->ReadBits(1, &elementary_stream_priority_indicator));
+
154  RCHECK(bit_reader->ReadBits(1, &pcr_flag));
+
155  RCHECK(bit_reader->ReadBits(1, &opcr_flag));
+
156  RCHECK(bit_reader->ReadBits(1, &splicing_point_flag));
+
157  RCHECK(bit_reader->ReadBits(1, &transport_private_data_flag));
+
158  RCHECK(bit_reader->ReadBits(1, &adaptation_field_extension_flag));
+
159  discontinuity_indicator_ = (discontinuity_indicator != 0);
+
160  random_access_indicator_ = (random_access_indicator != 0);
+
161 
+
162  if (pcr_flag) {
+
163  int64_t program_clock_reference_base;
+
164  int reserved;
+
165  int program_clock_reference_extension;
+
166  RCHECK(bit_reader->ReadBits(33, &program_clock_reference_base));
+
167  RCHECK(bit_reader->ReadBits(6, &reserved));
+
168  RCHECK(bit_reader->ReadBits(9, &program_clock_reference_extension));
+
169  }
+
170 
+
171  if (opcr_flag) {
+
172  int64_t original_program_clock_reference_base;
+
173  int reserved;
+
174  int original_program_clock_reference_extension;
+
175  RCHECK(bit_reader->ReadBits(33, &original_program_clock_reference_base));
+
176  RCHECK(bit_reader->ReadBits(6, &reserved));
+
177  RCHECK(
+
178  bit_reader->ReadBits(9, &original_program_clock_reference_extension));
+
179  }
+
180 
+
181  if (splicing_point_flag) {
+
182  int splice_countdown;
+
183  RCHECK(bit_reader->ReadBits(8, &splice_countdown));
+
184  }
+
185 
+
186  if (transport_private_data_flag) {
+
187  int transport_private_data_length;
+
188  RCHECK(bit_reader->ReadBits(8, &transport_private_data_length));
+
189  RCHECK(bit_reader->SkipBits(8 * transport_private_data_length));
+
190  }
+
191 
+
192  if (adaptation_field_extension_flag) {
+
193  int adaptation_field_extension_length;
+
194  RCHECK(bit_reader->ReadBits(8, &adaptation_field_extension_length));
+
195  RCHECK(bit_reader->SkipBits(8 * adaptation_field_extension_length));
+
196  }
+
197 
+
198  // The rest of the adaptation field should be stuffing bytes.
+
199  int adaptation_field_remaining_size = adaptation_field_length -
+
200  (adaptation_field_start_marker - bit_reader->bits_available() / 8);
+
201  RCHECK(adaptation_field_remaining_size >= 0);
+
202  for (int k = 0; k < adaptation_field_remaining_size; k++) {
+
203  int stuffing_byte;
+
204  RCHECK(bit_reader->ReadBits(8, &stuffing_byte));
+
205  RCHECK(stuffing_byte == 0xff);
+
206  }
+
207 
+
208  DVLOG(LOG_LEVEL_TS) << "random_access_indicator=" << random_access_indicator_;
+
209  return true;
+
210 }
+
211 
+
212 } // namespace mp2t
+
213 } // namespace media
+
214 } // namespace edash_packager
+
+ + + + diff --git a/sdk/d5/dce/classedash__packager_1_1media_1_1Demuxer.html b/sdk/d5/dce/classedash__packager_1_1media_1_1Demuxer.html new file mode 100644 index 0000000000..ca80161afa --- /dev/null +++ b/sdk/d5/dce/classedash__packager_1_1media_1_1Demuxer.html @@ -0,0 +1,302 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::Demuxer Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::Demuxer Class Reference
+
+
+ +

#include <demuxer.h>

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

+Public Member Functions

 Demuxer (const std::string &file_name)
 
void SetKeySource (scoped_ptr< KeySource > key_source)
 
Status Initialize ()
 
Status Run ()
 
+Status Parse ()
 Read from the source and send it to the parser.
 
void Cancel ()
 
const std::vector< MediaStream * > & streams ()
 
MediaContainerName container_name ()
 
+

Detailed Description

+

Demuxer is responsible for extracting elementary stream samples from a media file, e.g. an ISO BMFF file.

+ +

Definition at line 30 of file demuxer.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
edash_packager::media::Demuxer::Demuxer (const std::string & file_name)
+
+explicit
+
+
Parameters
+ + +
file_namespecifies the input source. It uses prefix matching to create a proper File object. The user can extend File to support a custom File object with its own prefix.
+
+
+ +

Definition at line 31 of file demuxer.cc.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
void edash_packager::media::Demuxer::Cancel ()
+
+

Cancel a demuxing job in progress. Will cause Run to exit with an error status of type CANCELLED.

+ +

Definition at line 190 of file demuxer.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
MediaContainerName edash_packager::media::Demuxer::container_name ()
+
+inline
+
+
Returns
Container name (type). Value is CONTAINER_UNKNOWN if the demuxer is not initialized.
+ +

Definition at line 70 of file demuxer.h.

+ +
+
+ +
+
+ + + + + + + +
Status edash_packager::media::Demuxer::Initialize ()
+
+

Initialize the Demuxer. Calling other public methods of this class without this method returning OK, results in an undefined behavior. This method primes the demuxer by parsing portions of the media file to extract stream information.

+
Returns
OK on success.
+ +

Definition at line 50 of file demuxer.cc.

+ +
+
+ +
+
+ + + + + + + +
Status edash_packager::media::Demuxer::Run ()
+
+

Drive the remuxing from demuxer side (push). Read the file and push the Data to Muxer until Eof.

+ +

Definition at line 132 of file demuxer.cc.

+ +
+
+ +
+
+ + + + + + + + +
void edash_packager::media::Demuxer::SetKeySource (scoped_ptr< KeySourcekey_source)
+
+

Set the KeySource for media decryption.

+
Parameters
+ + +
key_sourcepoints to the source of decryption keys. The key source must support fetching of keys for the type of media being demuxed.
+
+
+ +

Definition at line 46 of file demuxer.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const std::vector<MediaStream*>& edash_packager::media::Demuxer::streams ()
+
+inline
+
+
Returns
Streams in the media container being demuxed. The caller cannot add or remove streams from the returned vector, but the caller is allowed to change the internal state of the streams in the vector through MediaStream APIs.
+ +

Definition at line 66 of file demuxer.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d5/dcf/rsa__key_8h_source.html b/sdk/d5/dcf/rsa__key_8h_source.html new file mode 100644 index 0000000000..4b6aeff7b3 --- /dev/null +++ b/sdk/d5/dcf/rsa__key_8h_source.html @@ -0,0 +1,173 @@ + + + + + + +DASH Media Packaging SDK: media/base/rsa_key.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
rsa_key.h
+
+
+
1 // Copyright 2014 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 // Declaration of classes representing RSA private and public keys used
+
8 // for message signing, signature verification, encryption and decryption.
+
9 
+
10 #ifndef MEDIA_BASE_RSA_KEY_H_
+
11 #define MEDIA_BASE_RSA_KEY_H_
+
12 
+
13 #include <string>
+
14 
+
15 #include "packager/base/macros.h"
+
16 
+
17 struct rsa_st;
+
18 typedef struct rsa_st RSA;
+
19 
+
20 namespace edash_packager {
+
21 namespace media {
+
22 
+ +
25  public:
+
26  ~RsaPrivateKey();
+
27 
+
30  static RsaPrivateKey* Create(const std::string& serialized_key);
+
31 
+
35  bool Decrypt(const std::string& encrypted_message,
+
36  std::string* decrypted_message);
+
37 
+
41  bool GenerateSignature(const std::string& message, std::string* signature);
+
42 
+
43  private:
+
44  // RsaPrivateKey takes owership of |rsa_key|.
+
45  explicit RsaPrivateKey(RSA* rsa_key);
+
46 
+
47  RSA* rsa_key_; // owned
+
48 
+
49  DISALLOW_COPY_AND_ASSIGN(RsaPrivateKey);
+
50 };
+
51 
+
53 class RsaPublicKey {
+
54  public:
+
55  ~RsaPublicKey();
+
56 
+
59  static RsaPublicKey* Create(const std::string& serialized_key);
+
60 
+
64  bool Encrypt(const std::string& clear_message,
+
65  std::string* encrypted_message);
+
66 
+
69  bool VerifySignature(const std::string& message,
+
70  const std::string& signature);
+
71 
+
72  private:
+
73  // RsaPublicKey takes owership of |rsa_key|.
+
74  explicit RsaPublicKey(RSA* rsa_key);
+
75 
+
76  RSA* rsa_key_; // owned
+
77 
+
78  DISALLOW_COPY_AND_ASSIGN(RsaPublicKey);
+
79 };
+
80 
+
81 } // namespace media
+
82 } // namespace edash_packager
+
83 
+
84 #endif // MEDIA_BASE_RSA_KEY_H_
+
bool Decrypt(const std::string &encrypted_message, std::string *decrypted_message)
Definition: rsa_key.cc:102
+
bool GenerateSignature(const std::string &message, std::string *signature)
Definition: rsa_key.cc:130
+
static RsaPrivateKey * Create(const std::string &serialized_key)
Definition: rsa_key.cc:97
+
static RsaPublicKey * Create(const std::string &serialized_key)
Definition: rsa_key.cc:180
+
bool VerifySignature(const std::string &message, const std::string &signature)
Definition: rsa_key.cc:210
+
bool Encrypt(const std::string &clear_message, std::string *encrypted_message)
Definition: rsa_key.cc:185
+
Rsa public key, used for signature verification and encryption.
Definition: rsa_key.h:53
+
Rsa private key, used for message signing and decryption.
Definition: rsa_key.h:24
+
+ + + + diff --git a/sdk/d5/dda/ts__section__psi_8h_source.html b/sdk/d5/dda/ts__section__psi_8h_source.html new file mode 100644 index 0000000000..103e873417 --- /dev/null +++ b/sdk/d5/dda/ts__section__psi_8h_source.html @@ -0,0 +1,159 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp2t/ts_section_psi.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ts_section_psi.h
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_FORMATS_MP2T_TS_SECTION_PSI_H_
+
6 #define MEDIA_FORMATS_MP2T_TS_SECTION_PSI_H_
+
7 
+
8 #include "packager/base/compiler_specific.h"
+
9 #include "packager/media/base/byte_queue.h"
+
10 #include "packager/media/formats/mp2t/ts_section.h"
+
11 
+
12 namespace edash_packager {
+
13 namespace media {
+
14 
+
15 class BitReader;
+
16 
+
17 namespace mp2t {
+
18 
+
19 class TsSectionPsi : public TsSection {
+
20  public:
+
21  TsSectionPsi();
+
22  virtual ~TsSectionPsi();
+
23 
+
24  // TsSection implementation.
+
25  virtual bool Parse(bool payload_unit_start_indicator,
+
26  const uint8_t* buf,
+
27  int size) OVERRIDE;
+
28  virtual void Flush() OVERRIDE;
+
29  virtual void Reset() OVERRIDE;
+
30 
+
31  // Parse the content of the PSI section.
+
32  virtual bool ParsePsiSection(BitReader* bit_reader) = 0;
+
33 
+
34  // Reset the state of the PSI section.
+
35  virtual void ResetPsiSection() = 0;
+
36 
+
37  private:
+
38  void ResetPsiState();
+
39 
+
40  // Bytes of the current PSI.
+
41  ByteQueue psi_byte_queue_;
+
42 
+
43  // Do not start parsing before getting a unit start indicator.
+
44  bool wait_for_pusi_;
+
45 
+
46  // Number of leading bytes to discard (pointer field).
+
47  int leading_bytes_to_discard_;
+
48 
+
49  DISALLOW_COPY_AND_ASSIGN(TsSectionPsi);
+
50 };
+
51 
+
52 } // namespace mp2t
+
53 } // namespace media
+
54 } // namespace edash_packager
+
55 
+
56 #endif
+
57 
+ + +
A class to read bit streams.
Definition: bit_reader.h:17
+ +
+ + + + diff --git a/sdk/d5/ddf/classedash__packager_1_1media_1_1mp4_1_1FrameCENCInfo.html b/sdk/d5/ddf/classedash__packager_1_1media_1_1mp4_1_1FrameCENCInfo.html new file mode 100644 index 0000000000..901c68aae7 --- /dev/null +++ b/sdk/d5/ddf/classedash__packager_1_1media_1_1mp4_1_1FrameCENCInfo.html @@ -0,0 +1,140 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::FrameCENCInfo Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::FrameCENCInfo Class Reference
+
+
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

FrameCENCInfo (const std::vector< uint8_t > &iv)
 
+bool Parse (uint8_t iv_size, BufferReader *reader)
 
+void Write (BufferWriter *writer) const
 
+size_t ComputeSize () const
 
+size_t GetTotalSizeOfSubsamples () const
 
+void AddSubsample (const SubsampleEntry &subsample)
 
+const std::vector< uint8_t > & iv () const
 
+const std::vector
+< SubsampleEntry > & 
subsamples () const
 
+

Detailed Description

+
+

Definition at line 22 of file cenc.h.

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d5/de0/bit__reader_8cc_source.html b/sdk/d5/de0/bit__reader_8cc_source.html new file mode 100644 index 0000000000..756ec8a984 --- /dev/null +++ b/sdk/d5/de0/bit__reader_8cc_source.html @@ -0,0 +1,193 @@ + + + + + + +DASH Media Packaging SDK: media/base/bit_reader.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
bit_reader.cc
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/base/bit_reader.h"
+
6 
+
7 #include <algorithm>
+
8 
+
9 namespace edash_packager {
+
10 namespace media {
+
11 
+
12 BitReader::BitReader(const uint8_t* data, off_t size)
+
13  : data_(data), bytes_left_(size), num_remaining_bits_in_curr_byte_(0) {
+
14  DCHECK(data_ != NULL && bytes_left_ > 0);
+
15 
+
16  UpdateCurrByte();
+
17 }
+
18 
+
19 BitReader::~BitReader() {}
+
20 
+
21 bool BitReader::SkipBits(int num_bits) {
+
22  DCHECK_GE(num_bits, 0);
+
23 
+
24  // Skip any bits in the current byte waiting to be processed, then
+
25  // process full bytes until less than 8 bits remaining.
+
26  if (num_bits > num_remaining_bits_in_curr_byte_) {
+
27  num_bits -= num_remaining_bits_in_curr_byte_;
+
28  num_remaining_bits_in_curr_byte_ = 0;
+
29 
+
30  int num_bytes = num_bits / 8;
+
31  num_bits %= 8;
+
32  if (bytes_left_ < num_bytes) {
+
33  bytes_left_ = 0;
+
34  return false;
+
35  }
+
36  bytes_left_ -= num_bytes;
+
37  data_ += num_bytes;
+
38  UpdateCurrByte();
+
39 
+
40  // If there is no more data remaining, only return true if we
+
41  // skipped all that were requested.
+
42  if (num_remaining_bits_in_curr_byte_ == 0)
+
43  return (num_bits == 0);
+
44  }
+
45 
+
46  // Less than 8 bits remaining to skip. Use ReadBitsInternal to verify
+
47  // that the remaining bits we need exist, and adjust them as necessary
+
48  // for subsequent operations.
+
49  uint64_t not_needed;
+
50  return ReadBitsInternal(num_bits, &not_needed);
+
51 }
+
52 
+ +
54  return 8 * bytes_left_ + num_remaining_bits_in_curr_byte_;
+
55 }
+
56 
+
57 bool BitReader::ReadBitsInternal(int num_bits, uint64_t* out) {
+
58  DCHECK_LE(num_bits, 64);
+
59 
+
60  *out = 0;
+
61 
+
62  while (num_remaining_bits_in_curr_byte_ != 0 && num_bits != 0) {
+
63  int bits_to_take = std::min(num_remaining_bits_in_curr_byte_, num_bits);
+
64 
+
65  *out <<= bits_to_take;
+
66  *out += curr_byte_ >> (num_remaining_bits_in_curr_byte_ - bits_to_take);
+
67  num_bits -= bits_to_take;
+
68  num_remaining_bits_in_curr_byte_ -= bits_to_take;
+
69  curr_byte_ &= (1 << num_remaining_bits_in_curr_byte_) - 1;
+
70 
+
71  if (num_remaining_bits_in_curr_byte_ == 0)
+
72  UpdateCurrByte();
+
73  }
+
74 
+
75  return num_bits == 0;
+
76 }
+
77 
+
78 void BitReader::UpdateCurrByte() {
+
79  DCHECK_EQ(num_remaining_bits_in_curr_byte_, 0);
+
80 
+
81  if (bytes_left_ == 0)
+
82  return;
+
83 
+
84  // Load a new byte and advance pointers.
+
85  curr_byte_ = *data_;
+
86  ++data_;
+
87  --bytes_left_;
+
88  num_remaining_bits_in_curr_byte_ = 8;
+
89 }
+
90 
+
91 } // namespace media
+
92 } // namespace edash_packager
+
BitReader(const uint8_t *data, off_t size)
Definition: bit_reader.cc:12
+ +
bool SkipBits(int num_bits)
Definition: bit_reader.cc:21
+
+ + + + diff --git a/sdk/d5/dec/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser-members.html b/sdk/d5/dec/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser-members.html new file mode 100644 index 0000000000..20edbce77a --- /dev/null +++ b/sdk/d5/dec/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser-members.html @@ -0,0 +1,113 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::wvm::WvmMediaParser Member List
+
+
+ +

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

+ + + + + + + + + + +
Flush() OVERRIDEedash_packager::media::wvm::WvmMediaParservirtual
Init(const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source) OVERRIDEedash_packager::media::wvm::WvmMediaParservirtual
InitCB typedefedash_packager::media::MediaParser
MediaParser() (defined in edash_packager::media::MediaParser)edash_packager::media::MediaParserinline
NewSampleCB typedefedash_packager::media::MediaParser
Parse(const uint8_t *buf, int size) OVERRIDEedash_packager::media::wvm::WvmMediaParservirtual
WvmMediaParser() (defined in edash_packager::media::wvm::WvmMediaParser)edash_packager::media::wvm::WvmMediaParser
~MediaParser() (defined in edash_packager::media::MediaParser)edash_packager::media::MediaParserinlinevirtual
~WvmMediaParser() (defined in edash_packager::media::wvm::WvmMediaParser)edash_packager::media::wvm::WvmMediaParservirtual
+ + + + diff --git a/sdk/d5/def/ts__section__pmt_8h_source.html b/sdk/d5/def/ts__section__pmt_8h_source.html new file mode 100644 index 0000000000..00523aa2cf --- /dev/null +++ b/sdk/d5/def/ts__section__pmt_8h_source.html @@ -0,0 +1,141 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp2t/ts_section_pmt.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ts_section_pmt.h
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_FORMATS_MP2T_TS_SECTION_PMT_H_
+
6 #define MEDIA_FORMATS_MP2T_TS_SECTION_PMT_H_
+
7 
+
8 #include "packager/base/callback.h"
+
9 #include "packager/base/compiler_specific.h"
+
10 #include "packager/media/formats/mp2t/ts_section_psi.h"
+
11 
+
12 namespace edash_packager {
+
13 namespace media {
+
14 namespace mp2t {
+
15 
+
16 class TsSectionPmt : public TsSectionPsi {
+
17  public:
+
18  // RegisterPesCb::Run(int pes_pid, int stream_type);
+
19  // Stream type is defined in
+
20  // "Table 2-34 – Stream type assignments" in H.222
+
21  typedef base::Callback<void(int, int)> RegisterPesCb;
+
22 
+
23  explicit TsSectionPmt(const RegisterPesCb& register_pes_cb);
+
24  virtual ~TsSectionPmt();
+
25 
+
26  // Mpeg2TsPsiParser implementation.
+
27  virtual bool ParsePsiSection(BitReader* bit_reader) OVERRIDE;
+
28  virtual void ResetPsiSection() OVERRIDE;
+
29 
+
30  private:
+
31  RegisterPesCb register_pes_cb_;
+
32 
+
33  DISALLOW_COPY_AND_ASSIGN(TsSectionPmt);
+
34 };
+
35 
+
36 } // namespace mp2t
+
37 } // namespace media
+
38 } // namespace edash_packager
+
39 
+
40 #endif
+ + +
A class to read bit streams.
Definition: bit_reader.h:17
+
+ + + + diff --git a/sdk/d5/df8/classedash__packager_1_1media_1_1H264BitReader-members.html b/sdk/d5/df8/classedash__packager_1_1media_1_1H264BitReader-members.html new file mode 100644 index 0000000000..ded08f0e46 --- /dev/null +++ b/sdk/d5/df8/classedash__packager_1_1media_1_1H264BitReader-members.html @@ -0,0 +1,111 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::H264BitReader Member List
+
+
+ +

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

+ + + + + + + + +
H264BitReader() (defined in edash_packager::media::H264BitReader)edash_packager::media::H264BitReader
HasMoreRBSPData() (defined in edash_packager::media::H264BitReader)edash_packager::media::H264BitReader
Initialize(const uint8_t *data, off_t size) (defined in edash_packager::media::H264BitReader)edash_packager::media::H264BitReader
NumBitsLeft() (defined in edash_packager::media::H264BitReader)edash_packager::media::H264BitReader
NumEmulationPreventionBytesRead() (defined in edash_packager::media::H264BitReader)edash_packager::media::H264BitReader
ReadBits(int num_bits, int *out) (defined in edash_packager::media::H264BitReader)edash_packager::media::H264BitReader
~H264BitReader() (defined in edash_packager::media::H264BitReader)edash_packager::media::H264BitReader
+ + + + diff --git a/sdk/d5/dfc/file_8cc_source.html b/sdk/d5/dfc/file_8cc_source.html new file mode 100644 index 0000000000..b3a6885b31 --- /dev/null +++ b/sdk/d5/dfc/file_8cc_source.html @@ -0,0 +1,288 @@ + + + + + + +DASH Media Packaging SDK: media/file/file.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
file.cc
+
+
+
1 // Copyright 2014 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/file/file.h"
+
8 
+
9 #include <gflags/gflags.h>
+
10 #include "packager/base/logging.h"
+
11 #include "packager/base/memory/scoped_ptr.h"
+
12 #include "packager/media/file/local_file.h"
+
13 #include "packager/media/file/threaded_io_file.h"
+
14 #include "packager/media/file/udp_file.h"
+
15 #include "packager/base/strings/string_util.h"
+
16 
+
17 DEFINE_uint64(io_cache_size,
+
18  32ULL << 20,
+
19  "Size of the threaded I/O cache, in bytes. Specify 0 to disable "
+
20  "threaded I/O.");
+
21 DEFINE_uint64(io_block_size,
+
22  2ULL << 20,
+
23  "Size of the block size used for threaded I/O, in bytes.");
+
24 
+
25 namespace edash_packager {
+
26 namespace media {
+
27 
+
28 const char* kLocalFilePrefix = "file://";
+
29 const char* kUdpFilePrefix = "udp://";
+
30 
+
31 namespace {
+
32 
+
33 typedef File* (*FileFactoryFunction)(const char* file_name, const char* mode);
+
34 typedef bool (*FileDeleteFunction)(const char* file_name);
+
35 
+
36 struct SupportedTypeInfo {
+
37  const char* type;
+
38  size_t type_length;
+
39  const FileFactoryFunction factory_function;
+
40  const FileDeleteFunction delete_function;
+
41 };
+
42 
+
43 File* CreateLocalFile(const char* file_name, const char* mode) {
+
44  return new LocalFile(file_name, mode);
+
45 }
+
46 
+
47 bool DeleteLocalFile(const char* file_name) {
+
48  return LocalFile::Delete(file_name);
+
49 }
+
50 
+
51 File* CreateUdpFile(const char* file_name, const char* mode) {
+
52  if (base::strcasecmp(mode, "r")) {
+
53  NOTIMPLEMENTED() << "UdpFile only supports read (receive) mode.";
+
54  return NULL;
+
55  }
+
56  return new UdpFile(file_name);
+
57 }
+
58 
+
59 static const SupportedTypeInfo kSupportedTypeInfo[] = {
+
60  {
+
61  kLocalFilePrefix,
+
62  strlen(kLocalFilePrefix),
+
63  &CreateLocalFile,
+
64  &DeleteLocalFile
+
65  },
+
66  {
+
67  kUdpFilePrefix,
+
68  strlen(kUdpFilePrefix),
+
69  &CreateUdpFile,
+
70  NULL
+
71  },
+
72 };
+
73 
+
74 } // namespace
+
75 
+
76 File* File::Create(const char* file_name, const char* mode) {
+
77  scoped_ptr<File, FileCloser> internal_file(
+
78  CreateInternalFile(file_name, mode));
+
79 
+
80  if (FLAGS_io_cache_size) {
+
81  // Enable threaded I/O for "r", "w", and "a" modes only.
+
82  if (!strcmp(mode, "r")) {
+
83  return new ThreadedIoFile(internal_file.Pass(),
+
84  ThreadedIoFile::kInputMode,
+
85  FLAGS_io_cache_size,
+
86  FLAGS_io_block_size);
+
87  } else if (!strcmp(mode, "w") || !strcmp(mode, "a")) {
+
88  return new ThreadedIoFile(internal_file.Pass(),
+
89  ThreadedIoFile::kOutputMode,
+
90  FLAGS_io_cache_size,
+
91  FLAGS_io_block_size);
+
92  }
+
93  }
+
94 
+
95  // Threaded I/O is disabled.
+
96  DLOG(WARNING) << "Threaded I/O is disabled. Performance may be decreased.";
+
97  return internal_file.release();
+
98 }
+
99 
+
100 File* File::CreateInternalFile(const char* file_name, const char* mode) {
+
101  scoped_ptr<File, FileCloser> internal_file;
+
102  for (size_t i = 0; i < arraysize(kSupportedTypeInfo); ++i) {
+
103  const SupportedTypeInfo& type_info = kSupportedTypeInfo[i];
+
104  if (strncmp(type_info.type, file_name, type_info.type_length) == 0) {
+
105  internal_file.reset(type_info.factory_function(
+
106  file_name + type_info.type_length, mode));
+
107  }
+
108  }
+
109  // Otherwise we assume it is a local file
+
110  if (!internal_file)
+
111  internal_file.reset(CreateLocalFile(file_name, mode));
+
112 
+
113  return internal_file.release();
+
114 }
+
115 
+
116 File* File::Open(const char* file_name, const char* mode) {
+
117  File* file = File::Create(file_name, mode);
+
118  if (!file)
+
119  return NULL;
+
120  if (!file->Open()) {
+
121  delete file;
+
122  return NULL;
+
123  }
+
124  return file;
+
125 }
+
126 
+
127 File* File::OpenWithNoBuffering(const char* file_name, const char* mode) {
+
128  File* file = File::CreateInternalFile(file_name, mode);
+
129  if (!file)
+
130  return NULL;
+
131  if (!file->Open()) {
+
132  delete file;
+
133  return NULL;
+
134  }
+
135  return file;
+
136 }
+
137 
+
138 bool File::Delete(const char* file_name) {
+
139  for (size_t i = 0; i < arraysize(kSupportedTypeInfo); ++i) {
+
140  const SupportedTypeInfo& type_info = kSupportedTypeInfo[i];
+
141  if (strncmp(type_info.type, file_name, type_info.type_length) == 0) {
+
142  return type_info.delete_function ?
+
143  type_info.delete_function(file_name + type_info.type_length) :
+
144  false;
+
145  }
+
146  }
+
147  // Otherwise we assume it is a local file
+
148  return DeleteLocalFile(file_name);
+
149 }
+
150 
+
151 int64_t File::GetFileSize(const char* file_name) {
+
152  File* file = File::Open(file_name, "r");
+
153  if (!file)
+
154  return -1;
+
155  int64_t res = file->Size();
+
156  file->Close();
+
157  return res;
+
158 }
+
159 
+
160 bool File::ReadFileToString(const char* file_name, std::string* contents) {
+
161  DCHECK(contents);
+
162 
+
163  File* file = File::Open(file_name, "r");
+
164  if (!file)
+
165  return false;
+
166 
+
167  const size_t kBufferSize = 0x40000; // 256KB.
+
168  scoped_ptr<char[]> buf(new char[kBufferSize]);
+
169 
+
170  int64_t len;
+
171  while ((len = file->Read(buf.get(), kBufferSize)) > 0)
+
172  contents->append(buf.get(), len);
+
173 
+
174  file->Close();
+
175  return len == 0;
+
176 }
+
177 
+
178 } // namespace media
+
179 } // namespace edash_packager
+
static bool ReadFileToString(const char *file_name, std::string *contents)
Definition: file.cc:160
+ +
virtual int64_t Read(void *buffer, uint64_t length)=0
+
static bool Delete(const char *file_name)
Definition: file.cc:138
+
Define an abstract file interface.
Definition: file.h:22
+
virtual bool Open()=0
Internal open. Should not be used directly.
+
static File * Open(const char *file_name, const char *mode)
Definition: file.cc:116
+
virtual int64_t Size()=0
+
static bool Delete(const char *file_name)
Definition: local_file.cc:84
+
static int64_t GetFileSize(const char *file_name)
Definition: file.cc:151
+
static File * OpenWithNoBuffering(const char *file_name, const char *mode)
Definition: file.cc:127
+
+ + + + diff --git a/sdk/d6/d00/structedash__packager_1_1media_1_1mp4_1_1Box-members.html b/sdk/d6/d00/structedash__packager_1_1media_1_1mp4_1_1Box-members.html new file mode 100644 index 0000000000..365255f759 --- /dev/null +++ b/sdk/d6/d00/structedash__packager_1_1media_1_1mp4_1_1Box-members.html @@ -0,0 +1,113 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::Box Member List
+
+
+ +

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

+ + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxBuffer (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxfriend
BoxType() const =0 (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxpure virtual
ComputeSize()=0edash_packager::media::mp4::Boxpure virtual
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer)edash_packager::media::mp4::Boxprotectedvirtual
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
+ + + + diff --git a/sdk/d6/d06/classedash__packager_1_1media_1_1StreamInfo.html b/sdk/d6/d06/classedash__packager_1_1media_1_1StreamInfo.html new file mode 100644 index 0000000000..cafe87d774 --- /dev/null +++ b/sdk/d6/d06/classedash__packager_1_1media_1_1StreamInfo.html @@ -0,0 +1,236 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::StreamInfo Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::StreamInfo Class Referenceabstract
+
+
+ +

Abstract class holds stream information. + More...

+ +

#include <stream_info.h>

+
+Inheritance diagram for edash_packager::media::StreamInfo:
+
+
+ + +edash_packager::media::AudioStreamInfo +edash_packager::media::VideoStreamInfo + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

StreamInfo (StreamType stream_type, int track_id, uint32_t time_scale, uint64_t duration, const std::string &codec_string, const std::string &language, const uint8_t *extra_data, size_t extra_data_size, bool is_encrypted)
 
virtual bool IsValidConfig () const =0
 
virtual std::string ToString () const
 
+StreamType stream_type () const
 
+uint32_t track_id () const
 
+uint32_t time_scale () const
 
+uint64_t duration () const
 
+const std::string & codec_string () const
 
+const std::string & language () const
 
+bool is_encrypted () const
 
+const std::vector< uint8_t > & extra_data () const
 
+void set_duration (int duration)
 
+void set_extra_data (const std::vector< uint8_t > &data)
 
+void set_codec_string (const std::string &codec_string)
 
+void set_language (const std::string &language)
 
+ + + +

+Friends

+class base::RefCountedThreadSafe< StreamInfo >
 
+

Detailed Description

+

Abstract class holds stream information.

+ +

Definition at line 25 of file stream_info.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool edash_packager::media::StreamInfo::IsValidConfig () const
+
+pure virtual
+
+
Returns
true if this object has appropriate configuration values, false otherwise.
+ +

Implemented in edash_packager::media::AudioStreamInfo, and edash_packager::media::VideoStreamInfo.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
std::string edash_packager::media::StreamInfo::ToString () const
+
+virtual
+
+
Returns
A human-readable string describing the stream info.
+ +

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

+ +

Definition at line 40 of file stream_info.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d6/d06/classedash__packager_1_1media_1_1StreamInfo.png b/sdk/d6/d06/classedash__packager_1_1media_1_1StreamInfo.png new file mode 100644 index 0000000000..9fb5b3dd88 Binary files /dev/null and b/sdk/d6/d06/classedash__packager_1_1media_1_1StreamInfo.png differ diff --git a/sdk/d6/d10/classedash__packager_1_1media_1_1VideoStreamInfo-members.html b/sdk/d6/d10/classedash__packager_1_1media_1_1VideoStreamInfo-members.html new file mode 100644 index 0000000000..e17c7bbdfd --- /dev/null +++ b/sdk/d6/d10/classedash__packager_1_1media_1_1VideoStreamInfo-members.html @@ -0,0 +1,133 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::VideoStreamInfo Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
codec() const (defined in edash_packager::media::VideoStreamInfo)edash_packager::media::VideoStreamInfoinline
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
+ + + + diff --git a/sdk/d6/d12/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat-members.html b/sdk/d6/d12/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat-members.html new file mode 100644 index 0000000000..3a305d8f17 --- /dev/null +++ b/sdk/d6/d12/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat-members.html @@ -0,0 +1,115 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::OriginalFormat Member List
+
+
+ +

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

+ + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::OriginalFormat)edash_packager::media::mp4::OriginalFormatvirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::OriginalFormatvirtual
format (defined in edash_packager::media::mp4::OriginalFormat)edash_packager::media::mp4::OriginalFormat
OriginalFormat() (defined in edash_packager::media::mp4::OriginalFormat)edash_packager::media::mp4::OriginalFormat
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::OriginalFormatvirtual
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~OriginalFormat() (defined in edash_packager::media::mp4::OriginalFormat)edash_packager::media::mp4::OriginalFormatvirtual
+ + + + diff --git a/sdk/d6/d13/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator-members.html b/sdk/d6/d13/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator-members.html new file mode 100644 index 0000000000..7ed8ffcc49 --- /dev/null +++ b/sdk/d6/d13/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator-members.html @@ -0,0 +1,111 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::CompositionOffsetIterator Member List
+
+
+ +

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

+ + + + + + + + +
AdvanceSample()edash_packager::media::mp4::CompositionOffsetIterator
CompositionOffsetIterator(const CompositionTimeToSample &composition_time_to_sample)edash_packager::media::mp4::CompositionOffsetIteratorexplicit
IsValid() const edash_packager::media::mp4::CompositionOffsetIterator
NumSamples() const edash_packager::media::mp4::CompositionOffsetIterator
sample_offset() const edash_packager::media::mp4::CompositionOffsetIteratorinline
SampleOffset(uint32_t sample) const edash_packager::media::mp4::CompositionOffsetIterator
~CompositionOffsetIterator() (defined in edash_packager::media::mp4::CompositionOffsetIterator)edash_packager::media::mp4::CompositionOffsetIterator
+ + + + diff --git a/sdk/d6/d17/es__parser__h264_8cc_source.html b/sdk/d6/d17/es__parser__h264_8cc_source.html new file mode 100644 index 0000000000..5b3d58d1c0 --- /dev/null +++ b/sdk/d6/d17/es__parser__h264_8cc_source.html @@ -0,0 +1,490 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp2t/es_parser_h264.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
es_parser_h264.cc
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/formats/mp2t/es_parser_h264.h"
+
6 
+
7 #include <stdint.h>
+
8 
+
9 #include "packager/base/logging.h"
+
10 #include "packager/base/numerics/safe_conversions.h"
+
11 #include "packager/media/base/media_sample.h"
+
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]),
+
368  std::string(),
+
369  coded_width,
+
370  coded_height,
+
371  pixel_width,
+
372  pixel_height,
+
373  0,
+
374  H264ByteToUnitStreamConverter::kUnitStreamNaluLengthSize,
+
375  decoder_config_record.data(),
+
376  decoder_config_record.size(),
+
377  false));
+
378  DVLOG(1) << "Profile IDC: " << sps->profile_idc;
+
379  DVLOG(1) << "Level IDC: " << sps->level_idc;
+
380  DVLOG(1) << "log2_max_frame_num_minus4: " << sps->log2_max_frame_num_minus4;
+
381 
+
382  // Video config notification.
+
383  new_stream_info_cb_.Run(last_video_decoder_config_);
+
384 
+
385  return true;
+
386 }
+
387 
+
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/sdk/d6/d19/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription-members.html b/sdk/d6/d19/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription-members.html new file mode 100644 index 0000000000..8d91385689 --- /dev/null +++ b/sdk/d6/d19/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription-members.html @@ -0,0 +1,120 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::SampleGroupDescription Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::SampleGroupDescription)edash_packager::media::mp4::SampleGroupDescriptionvirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::SampleGroupDescriptionvirtual
entries (defined in edash_packager::media::mp4::SampleGroupDescription)edash_packager::media::mp4::SampleGroupDescription
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
grouping_type (defined in edash_packager::media::mp4::SampleGroupDescription)edash_packager::media::mp4::SampleGroupDescription
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::SampleGroupDescriptionvirtual
SampleGroupDescription() (defined in edash_packager::media::mp4::SampleGroupDescription)edash_packager::media::mp4::SampleGroupDescription
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~SampleGroupDescription() (defined in edash_packager::media::mp4::SampleGroupDescription)edash_packager::media::mp4::SampleGroupDescriptionvirtual
+ + + + diff --git a/sdk/d6/d1b/classedash__packager_1_1media_1_1ClosureThread-members.html b/sdk/d6/d1b/classedash__packager_1_1media_1_1ClosureThread-members.html new file mode 100644 index 0000000000..9a0e144032 --- /dev/null +++ b/sdk/d6/d1b/classedash__packager_1_1media_1_1ClosureThread-members.html @@ -0,0 +1,107 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::ClosureThread Member List
+
+
+ +

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

+ + + + +
ClosureThread(const std::string &name_prefix, const base::Closure &task)edash_packager::media::ClosureThreadexplicit
Run() OVERRIDEedash_packager::media::ClosureThreadprotectedvirtual
~ClosureThread()edash_packager::media::ClosureThreadvirtual
+ + + + diff --git a/sdk/d6/d2e/mpd__notifier__util_8cc_source.html b/sdk/d6/d2e/mpd__notifier__util_8cc_source.html new file mode 100644 index 0000000000..1a7de143f1 --- /dev/null +++ b/sdk/d6/d2e/mpd__notifier__util_8cc_source.html @@ -0,0 +1,178 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/mpd_notifier_util.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mpd_notifier_util.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/mpd/base/mpd_notifier_util.h"
+
8 
+
9 #include "packager/base/strings/string_number_conversions.h"
+
10 #include "packager/base/strings/string_util.h"
+
11 #include "packager/media/file/file_closer.h"
+
12 #include "packager/media/file/file.h"
+
13 #include "packager/mpd/base/mpd_utils.h"
+
14 
+
15 namespace edash_packager {
+
16 
+
17 using media::File;
+
18 using media::FileCloser;
+
19 
+
20 bool WriteMpdToFile(const std::string& output_path, MpdBuilder* mpd_builder) {
+
21  CHECK(!output_path.empty());
+
22 
+
23  std::string mpd;
+
24  if (!mpd_builder->ToString(&mpd)) {
+
25  LOG(ERROR) << "Failed to write MPD to string.";
+
26  return false;
+
27  }
+
28 
+
29  scoped_ptr<File, FileCloser> file(File::Open(output_path.c_str(), "w"));
+
30  if (!file) {
+
31  LOG(ERROR) << "Failed to open file for writing: " << output_path;
+
32  return false;
+
33  }
+
34 
+
35  const char* mpd_char_ptr = mpd.data();
+
36  size_t mpd_bytes_left = mpd.size();
+
37  while (mpd_bytes_left > 0) {
+
38  int64_t length = file->Write(mpd_char_ptr, mpd_bytes_left);
+
39  if (length <= 0) {
+
40  LOG(ERROR) << "Failed to write to file '" << output_path << "' ("
+
41  << length << ").";
+
42  return false;
+
43  }
+
44  mpd_char_ptr += length;
+
45  mpd_bytes_left -= length;
+
46  }
+
47  // Release the pointer because Close() destructs itself.
+
48  return file.release()->Close();
+
49 }
+
50 
+
51 ContentType GetContentType(const MediaInfo& media_info) {
+
52  const bool has_video = media_info.has_video_info();
+
53  const bool has_audio = media_info.has_audio_info();
+
54  const bool has_text = media_info.has_text_info();
+
55 
+
56  if (MoreThanOneTrue(has_video, has_audio, has_text)) {
+
57  NOTIMPLEMENTED() << "MediaInfo with more than one stream is not supported.";
+
58  return kContentTypeUnknown;
+
59  }
+
60  if (!AtLeastOneTrue(has_video, has_audio, has_text)) {
+
61  LOG(ERROR) << "MediaInfo should contain one audio, video, or text stream.";
+
62  return kContentTypeUnknown;
+
63  }
+
64  return has_video ? kContentTypeVideo
+
65  : (has_audio ? kContentTypeAudio : kContentTypeText);
+
66 }
+
67 
+
68 std::string Uint8VectorToBase64(const std::vector<uint8_t>& input) {
+
69  std::string output;
+
70  std::string input_in_string(input.begin(), input.end());
+
71  base::Base64Encode(input_in_string, &output);
+
72  return output;
+
73 }
+
74 
+
75 } // namespace edash_packager
+
This class generates DASH MPDs (Media Presentation Descriptions).
Definition: mpd_builder.h:56
+
std::string Uint8VectorToBase64(const std::vector< uint8_t > &input)
Converts uint8 vector into base64 encoded string.
+
bool WriteMpdToFile(const std::string &output_path, MpdBuilder *mpd_builder)
+
virtual bool ToString(std::string *output)
Definition: mpd_builder.cc:410
+
ContentType GetContentType(const MediaInfo &media_info)
+
+ + + + diff --git a/sdk/d6/d37/classedash__packager_1_1xml_1_1AdaptationSetXmlNode.html b/sdk/d6/d37/classedash__packager_1_1xml_1_1AdaptationSetXmlNode.html new file mode 100644 index 0000000000..eb947590fd --- /dev/null +++ b/sdk/d6/d37/classedash__packager_1_1xml_1_1AdaptationSetXmlNode.html @@ -0,0 +1,205 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::xml::AdaptationSetXmlNode Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::xml::AdaptationSetXmlNode Class Reference
+
+
+ +

AdaptationSetType specified in MPD. + More...

+ +

#include <xml_node.h>

+
+Inheritance diagram for edash_packager::xml::AdaptationSetXmlNode:
+
+
+ + +edash_packager::xml::RepresentationBaseXmlNode +edash_packager::xml::XmlNode + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

void AddRoleElement (const std::string &scheme_id_uri, const std::string &value)
 
- Public Member Functions inherited from edash_packager::xml::RepresentationBaseXmlNode
+bool AddContentProtectionElements (const std::list< ContentProtectionElement > &content_protection_elements)
 
- Public Member Functions inherited from edash_packager::xml::XmlNode
 XmlNode (const char *name)
 
bool AddChild (ScopedXmlPtr< xmlNode >::type child)
 
+bool AddElements (const std::vector< Element > &elements)
 Adds Elements to this node using the Element struct.
 
void SetStringAttribute (const char *attribute_name, const std::string &attribute)
 
void SetIntegerAttribute (const char *attribute_name, uint64_t number)
 
void SetFloatingPointAttribute (const char *attribute_name, double number)
 
void SetId (uint32_t id)
 
void SetContent (const std::string &content)
 
ScopedXmlPtr< xmlNode >::type PassScopedPtr ()
 
xmlNodePtr Release ()
 
xmlNodePtr GetRawPtr ()
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from edash_packager::xml::RepresentationBaseXmlNode
RepresentationBaseXmlNode (const char *name)
 
+

Detailed Description

+

AdaptationSetType specified in MPD.

+ +

Definition at line 113 of file xml_node.h.

+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void edash_packager::xml::AdaptationSetXmlNode::AddRoleElement (const std::string & scheme_id_uri,
const std::string & value 
)
+
+
Parameters
+ + + +
scheme_id_uriis content of the schemeIdUri attribute.
valueis the content of value attribute.
+
+
+ +

Definition at line 206 of file xml_node.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d6/d37/classedash__packager_1_1xml_1_1AdaptationSetXmlNode.png b/sdk/d6/d37/classedash__packager_1_1xml_1_1AdaptationSetXmlNode.png new file mode 100644 index 0000000000..2065e3a6d1 Binary files /dev/null and b/sdk/d6/d37/classedash__packager_1_1xml_1_1AdaptationSetXmlNode.png differ diff --git a/sdk/d6/d3a/classedash__packager_1_1media_1_1AesRequestSigner-members.html b/sdk/d6/d3a/classedash__packager_1_1media_1_1AesRequestSigner-members.html new file mode 100644 index 0000000000..42ab59a145 --- /dev/null +++ b/sdk/d6/d3a/classedash__packager_1_1media_1_1AesRequestSigner-members.html @@ -0,0 +1,110 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::AesRequestSigner Member List
+
+
+ +

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

+ + + + + + + +
CreateSigner(const std::string &signer_name, const std::string &aes_key_hex, const std::string &iv_hex)edash_packager::media::AesRequestSignerstatic
GenerateSignature(const std::string &message, std::string *signature) OVERRIDEedash_packager::media::AesRequestSignervirtual
RequestSigner(const std::string &signer_name) (defined in edash_packager::media::RequestSigner)edash_packager::media::RequestSignerexplicitprotected
signer_name() const (defined in edash_packager::media::RequestSigner)edash_packager::media::RequestSignerinline
~AesRequestSigner() (defined in edash_packager::media::AesRequestSigner)edash_packager::media::AesRequestSignervirtual
~RequestSigner() (defined in edash_packager::media::RequestSigner)edash_packager::media::RequestSignervirtual
+ + + + diff --git a/sdk/d6/d3b/chunk__info__iterator_8cc_source.html b/sdk/d6/d3b/chunk__info__iterator_8cc_source.html new file mode 100644 index 0000000000..667a8b1967 --- /dev/null +++ b/sdk/d6/d3b/chunk__info__iterator_8cc_source.html @@ -0,0 +1,179 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/chunk_info_iterator.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
chunk_info_iterator.cc
+
+
+
1 // Copyright 2014 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/formats/mp4/chunk_info_iterator.h"
+
8 
+
9 #include <algorithm>
+
10 #include <limits>
+
11 
+
12 #include "packager/base/logging.h"
+
13 
+
14 namespace edash_packager {
+
15 namespace media {
+
16 namespace mp4 {
+
17 
+ +
19  : chunk_sample_index_(0),
+
20  current_chunk_(0),
+
21  chunk_info_table_(sample_to_chunk.chunk_info),
+
22  iterator_(chunk_info_table_.begin()) {
+
23  if (iterator_ != chunk_info_table_.end())
+
24  current_chunk_ = iterator_->first_chunk;
+
25 }
+
26 ChunkInfoIterator::~ChunkInfoIterator() {}
+
27 
+ +
29  ++current_chunk_;
+
30  if (iterator_ + 1 != chunk_info_table_.end()) {
+
31  if (current_chunk_ >= (iterator_ + 1)->first_chunk)
+
32  ++iterator_;
+
33  }
+
34  chunk_sample_index_ = 0;
+
35  return true;
+
36 }
+
37 
+ +
39  ++chunk_sample_index_;
+
40  if (chunk_sample_index_ >= iterator_->samples_per_chunk)
+
41  AdvanceChunk();
+
42  return true;
+
43 }
+
44 
+ +
46  return iterator_ != chunk_info_table_.end() &&
+
47  chunk_sample_index_ < iterator_->samples_per_chunk;
+
48 }
+
49 
+
50 uint32_t ChunkInfoIterator::NumSamples(uint32_t start_chunk,
+
51  uint32_t end_chunk) const {
+
52  DCHECK_LE(start_chunk, end_chunk);
+
53 
+
54  uint32_t last_chunk = 0;
+
55  uint32_t num_samples = 0;
+
56  for (std::vector<ChunkInfo>::const_iterator it = chunk_info_table_.begin();
+
57  it != chunk_info_table_.end();
+
58  ++it) {
+
59  last_chunk = (it + 1 == chunk_info_table_.end())
+
60  ? std::numeric_limits<uint32_t>::max()
+
61  : (it + 1)->first_chunk - 1;
+
62  if (last_chunk >= start_chunk) {
+
63  num_samples += (std::min(end_chunk, last_chunk) -
+
64  std::max(start_chunk, it->first_chunk) + 1) *
+
65  it->samples_per_chunk;
+
66  if (last_chunk >= end_chunk)
+
67  break;
+
68  }
+
69  }
+
70  return num_samples;
+
71 }
+
72 
+
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.
+ + +
+ + + + diff --git a/sdk/d6/d41/encrypting__fragmenter_8cc_source.html b/sdk/d6/d41/encrypting__fragmenter_8cc_source.html new file mode 100644 index 0000000000..b1f523241f --- /dev/null +++ b/sdk/d6/d41/encrypting__fragmenter_8cc_source.html @@ -0,0 +1,284 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/encrypting_fragmenter.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
encrypting_fragmenter.cc
+
+
+
1 // Copyright 2014 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/formats/mp4/encrypting_fragmenter.h"
+
8 
+
9 #include "packager/media/base/aes_encryptor.h"
+
10 #include "packager/media/base/buffer_reader.h"
+
11 #include "packager/media/base/key_source.h"
+
12 #include "packager/media/base/media_sample.h"
+
13 #include "packager/media/formats/mp4/box_definitions.h"
+
14 #include "packager/media/formats/mp4/cenc.h"
+
15 
+
16 namespace {
+
17 // Generate 64bit IV by default.
+
18 const size_t kDefaultIvSize = 8u;
+
19 } // namespace
+
20 
+
21 namespace edash_packager {
+
22 namespace media {
+
23 namespace mp4 {
+
24 
+ +
26  TrackFragment* traf,
+
27  scoped_ptr<EncryptionKey> encryption_key,
+
28  int64_t clear_time,
+
29  uint8_t nalu_length_size)
+
30  : Fragmenter(traf),
+
31  encryption_key_(encryption_key.Pass()),
+
32  nalu_length_size_(nalu_length_size),
+
33  clear_time_(clear_time) {
+
34  DCHECK(encryption_key_);
+
35 }
+
36 EncryptingFragmenter::~EncryptingFragmenter() {}
+
37 
+
38 
+
39 Status EncryptingFragmenter::AddSample(scoped_refptr<MediaSample> sample) {
+
40  DCHECK(sample);
+
41  if (!fragment_initialized()) {
+
42  Status status = InitializeFragment(sample->dts());
+
43  if (!status.ok())
+
44  return status;
+
45  }
+
46  if (encryptor_) {
+
47  Status status = EncryptSample(sample);
+
48  if (!status.ok())
+
49  return status;
+
50  }
+
51  return Fragmenter::AddSample(sample);
+
52 }
+
53 
+ +
55  Status status = Fragmenter::InitializeFragment(first_sample_dts);
+
56  if (!status.ok())
+
57  return status;
+
58 
+
59  traf()->auxiliary_size.sample_info_sizes.clear();
+
60  traf()->auxiliary_offset.offsets.clear();
+
61 
+
62  const bool enable_encryption = clear_time_ <= 0;
+
63  if (!enable_encryption) {
+
64  // This fragment should be in clear text.
+
65  // At most two sample description entries, an encrypted entry and a clear
+
66  // entry, are generated. The 1-based clear entry index is always 2.
+
67  const uint32_t kClearSampleDescriptionIndex = 2;
+
68 
+
69  traf()->header.flags |=
+
70  TrackFragmentHeader::kSampleDescriptionIndexPresentMask;
+
71  traf()->header.sample_description_index = kClearSampleDescriptionIndex;
+
72  }
+
73  return PrepareFragmentForEncryption(enable_encryption);
+
74 }
+
75 
+ +
77  if (encryptor_) {
+
78  DCHECK_LE(clear_time_, 0);
+ +
80  } else {
+
81  DCHECK_GT(clear_time_, 0);
+
82  clear_time_ -= fragment_duration();
+
83  }
+ +
85 }
+
86 
+ +
88  bool enable_encryption) {
+
89  return (!enable_encryption || encryptor_) ? Status::OK : CreateEncryptor();
+
90 }
+
91 
+ +
93  // The offset will be adjusted in Segmenter after knowing moof size.
+
94  traf()->auxiliary_offset.offsets.push_back(0);
+
95 
+
96  // Optimize saiz box.
+
97  SampleAuxiliaryInformationSize& saiz = traf()->auxiliary_size;
+
98  saiz.sample_count = traf()->runs[0].sample_sizes.size();
+
99  if (!saiz.sample_info_sizes.empty()) {
+
100  if (!OptimizeSampleEntries(&saiz.sample_info_sizes,
+
101  &saiz.default_sample_info_size)) {
+
102  saiz.default_sample_info_size = 0;
+
103  }
+
104  } else {
+
105  // |sample_info_sizes| table is filled in only for subsample encryption,
+
106  // otherwise |sample_info_size| is just the IV size.
+
107  DCHECK(!IsSubsampleEncryptionRequired());
+
108  saiz.default_sample_info_size = encryptor_->iv().size();
+
109  }
+
110 }
+
111 
+ +
113  DCHECK(encryption_key_);
+
114 
+
115  scoped_ptr<AesCtrEncryptor> encryptor(new AesCtrEncryptor());
+
116  const bool initialized = encryption_key_->iv.empty()
+
117  ? encryptor->InitializeWithRandomIv(
+
118  encryption_key_->key, kDefaultIvSize)
+
119  : encryptor->InitializeWithIv(
+
120  encryption_key_->key, encryption_key_->iv);
+
121  if (!initialized)
+
122  return Status(error::MUXER_FAILURE, "Failed to create the encryptor.");
+
123  encryptor_ = encryptor.Pass();
+
124  return Status::OK;
+
125 }
+
126 
+
127 void EncryptingFragmenter::EncryptBytes(uint8_t* data, uint32_t size) {
+
128  DCHECK(encryptor_);
+
129  CHECK(encryptor_->Encrypt(data, size, data));
+
130 }
+
131 
+
132 Status EncryptingFragmenter::EncryptSample(scoped_refptr<MediaSample> sample) {
+
133  DCHECK(encryptor_);
+
134 
+
135  FrameCENCInfo cenc_info(encryptor_->iv());
+
136  uint8_t* data = sample->writable_data();
+
137  if (!IsSubsampleEncryptionRequired()) {
+
138  EncryptBytes(data, sample->data_size());
+
139  } else {
+
140  BufferReader reader(data, sample->data_size());
+
141  while (reader.HasBytes(1)) {
+
142  uint64_t nalu_length;
+
143  if (!reader.ReadNBytesInto8(&nalu_length, nalu_length_size_))
+
144  return Status(error::MUXER_FAILURE, "Fail to read nalu_length.");
+
145 
+
146  SubsampleEntry subsample;
+
147  subsample.clear_bytes = nalu_length_size_ + 1;
+
148  subsample.cipher_bytes = nalu_length - 1;
+
149  if (!reader.SkipBytes(nalu_length)) {
+
150  return Status(error::MUXER_FAILURE,
+
151  "Sample size does not match nalu_length.");
+
152  }
+
153 
+
154  EncryptBytes(data + subsample.clear_bytes, subsample.cipher_bytes);
+
155  cenc_info.AddSubsample(subsample);
+
156  data += nalu_length_size_ + nalu_length;
+
157  }
+
158 
+
159  // The length of per-sample auxiliary datum, defined in CENC ch. 7.
+
160  traf()->auxiliary_size.sample_info_sizes.push_back(cenc_info.ComputeSize());
+
161  }
+
162 
+
163  cenc_info.Write(aux_data());
+
164  encryptor_->UpdateIv();
+
165  return Status::OK;
+
166 }
+
167 
+
168 } // namespace mp4
+
169 } // namespace media
+
170 } // namespace edash_packager
+ + + + +
virtual Status InitializeFragment(int64_t first_sample_dts)
Definition: fragmenter.cc:73
+
virtual Status AddSample(scoped_refptr< MediaSample > sample)
Definition: fragmenter.cc:36
+
virtual Status AddSample(scoped_refptr< MediaSample > sample) OVERRIDE
+
bool OptimizeSampleEntries(std::vector< T > *entries, T *default_value)
Definition: fragmenter.h:90
+ + +
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.
+
virtual void FinalizeFragment()
Finalize and optimize the fragment.
Definition: fragmenter.cc:91
+
virtual void FinalizeFragment() OVERRIDE
Finalize and optimize the fragment.
+
virtual Status InitializeFragment(int64_t first_sample_dts) OVERRIDE
+
+ + + + diff --git a/sdk/d6/d48/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl-members.html b/sdk/d6/d48/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl-members.html new file mode 100644 index 0000000000..dbe7a844ad --- /dev/null +++ b/sdk/d6/d48/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::DataEntryUrl Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::DataEntryUrl)edash_packager::media::mp4::DataEntryUrlvirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::DataEntryUrlvirtual
DataEntryUrl() (defined in edash_packager::media::mp4::DataEntryUrl)edash_packager::media::mp4::DataEntryUrl
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
location (defined in edash_packager::media::mp4::DataEntryUrl)edash_packager::media::mp4::DataEntryUrl
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::DataEntryUrlvirtual
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~DataEntryUrl() (defined in edash_packager::media::mp4::DataEntryUrl)edash_packager::media::mp4::DataEntryUrlvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
+ + + + diff --git a/sdk/d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html b/sdk/d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html new file mode 100644 index 0000000000..14ad35c41f --- /dev/null +++ b/sdk/d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html @@ -0,0 +1,180 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::DataInformation Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::DataInformation Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::DataInformation:
+
+
+ + +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + +

+Public Attributes

+DataReference dref
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 371 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::DataInformation::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1270 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.png b/sdk/d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.png new file mode 100644 index 0000000000..ecb67b7a7b Binary files /dev/null and b/sdk/d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.png differ diff --git a/sdk/d6/d5e/structedash__packager_1_1media_1_1H264SEIRecoveryPoint-members.html b/sdk/d6/d5e/structedash__packager_1_1media_1_1H264SEIRecoveryPoint-members.html new file mode 100644 index 0000000000..57af4b003d --- /dev/null +++ b/sdk/d6/d5e/structedash__packager_1_1media_1_1H264SEIRecoveryPoint-members.html @@ -0,0 +1,108 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::H264SEIRecoveryPoint Member List
+
+
+ +

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

+ + + + + +
broken_link_flag (defined in edash_packager::media::H264SEIRecoveryPoint)edash_packager::media::H264SEIRecoveryPoint
changing_slice_group_idc (defined in edash_packager::media::H264SEIRecoveryPoint)edash_packager::media::H264SEIRecoveryPoint
exact_match_flag (defined in edash_packager::media::H264SEIRecoveryPoint)edash_packager::media::H264SEIRecoveryPoint
recovery_frame_cnt (defined in edash_packager::media::H264SEIRecoveryPoint)edash_packager::media::H264SEIRecoveryPoint
+ + + + diff --git a/sdk/d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html b/sdk/d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html new file mode 100644 index 0000000000..2697bdc059 --- /dev/null +++ b/sdk/d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html @@ -0,0 +1,188 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::DataEntryUrl Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::DataEntryUrl Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::DataEntryUrl:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + +

+Public Attributes

+std::vector< uint8_t > location
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 358 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::DataEntryUrl::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1230 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.png b/sdk/d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.png new file mode 100644 index 0000000000..89905b021c Binary files /dev/null and b/sdk/d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.png differ diff --git a/sdk/d6/d6e/ts__section__pes_8cc_source.html b/sdk/d6/d6e/ts__section__pes_8cc_source.html new file mode 100644 index 0000000000..0c677427c6 --- /dev/null +++ b/sdk/d6/d6e/ts__section__pes_8cc_source.html @@ -0,0 +1,413 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp2t/ts_section_pes.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ts_section_pes.cc
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/formats/mp2t/ts_section_pes.h"
+
6 
+
7 #include "packager/base/logging.h"
+
8 #include "packager/base/strings/string_number_conversions.h"
+
9 #include "packager/media/base/bit_reader.h"
+
10 #include "packager/media/base/timestamp.h"
+
11 #include "packager/media/formats/mp2t/es_parser.h"
+
12 #include "packager/media/formats/mp2t/mp2t_common.h"
+
13 
+
14 static const int kPesStartCode = 0x000001;
+
15 
+
16 // Given that |time| is coded using 33 bits,
+
17 // UnrollTimestamp returns the corresponding unrolled timestamp.
+
18 // The unrolled timestamp is defined by:
+
19 // |time| + k * (2 ^ 33)
+
20 // where k is estimated so that the unrolled timestamp
+
21 // is as close as possible to |previous_unrolled_time|.
+
22 static int64_t UnrollTimestamp(int64_t previous_unrolled_time, int64_t time) {
+
23  // Mpeg2 TS timestamps have an accuracy of 33 bits.
+
24  const int nbits = 33;
+
25 
+
26  // |timestamp| has a precision of |nbits|
+
27  // so make sure the highest bits are set to 0.
+
28  DCHECK_EQ((time >> nbits), 0);
+
29 
+
30  // Consider 3 possibilities to estimate the missing high bits of |time|.
+
31  int64_t previous_unrolled_time_high = (previous_unrolled_time >> nbits);
+
32  int64_t time0 = ((previous_unrolled_time_high - 1) << nbits) | time;
+
33  int64_t time1 = ((previous_unrolled_time_high + 0) << nbits) | time;
+
34  int64_t time2 = ((previous_unrolled_time_high + 1) << nbits) | time;
+
35 
+
36  // Select the min absolute difference with the current time
+
37  // so as to ensure time continuity.
+
38  int64_t diff0 = time0 - previous_unrolled_time;
+
39  int64_t diff1 = time1 - previous_unrolled_time;
+
40  int64_t diff2 = time2 - previous_unrolled_time;
+
41  if (diff0 < 0)
+
42  diff0 = -diff0;
+
43  if (diff1 < 0)
+
44  diff1 = -diff1;
+
45  if (diff2 < 0)
+
46  diff2 = -diff2;
+
47 
+
48  int64_t unrolled_time;
+
49  int64_t min_diff;
+
50  if (diff1 < diff0) {
+
51  unrolled_time = time1;
+
52  min_diff = diff1;
+
53  } else {
+
54  unrolled_time = time0;
+
55  min_diff = diff0;
+
56  }
+
57  if (diff2 < min_diff)
+
58  unrolled_time = time2;
+
59 
+
60  return unrolled_time;
+
61 }
+
62 
+
63 static bool IsTimestampSectionValid(int64_t timestamp_section) {
+
64  // |pts_section| has 40 bits:
+
65  // - starting with either '0010' or '0011' or '0001'
+
66  // - and ending with a marker bit.
+
67  // See ITU H.222 standard - PES section.
+
68 
+
69  // Verify that all the marker bits are set to one.
+
70  return ((timestamp_section & 0x1) != 0) &&
+
71  ((timestamp_section & 0x10000) != 0) &&
+
72  ((timestamp_section & 0x100000000LL) != 0);
+
73 }
+
74 
+
75 static int64_t ConvertTimestampSectionToTimestamp(int64_t timestamp_section) {
+
76  return (((timestamp_section >> 33) & 0x7) << 30) |
+
77  (((timestamp_section >> 17) & 0x7fff) << 15) |
+
78  (((timestamp_section >> 1) & 0x7fff) << 0);
+
79 }
+
80 
+
81 namespace edash_packager {
+
82 namespace media {
+
83 namespace mp2t {
+
84 
+
85 TsSectionPes::TsSectionPes(scoped_ptr<EsParser> es_parser)
+
86  : es_parser_(es_parser.release()),
+
87  wait_for_pusi_(true),
+
88  previous_pts_valid_(false),
+
89  previous_pts_(0),
+
90  previous_dts_valid_(false),
+
91  previous_dts_(0) {
+
92  DCHECK(es_parser_);
+
93 }
+
94 
+
95 TsSectionPes::~TsSectionPes() {
+
96 }
+
97 
+
98 bool TsSectionPes::Parse(bool payload_unit_start_indicator,
+
99  const uint8_t* buf,
+
100  int size) {
+
101  // Ignore partial PES.
+
102  if (wait_for_pusi_ && !payload_unit_start_indicator)
+
103  return true;
+
104 
+
105  bool parse_result = true;
+
106  if (payload_unit_start_indicator) {
+
107  // Try emitting a packet since we might have a pending PES packet
+
108  // with an undefined size.
+
109  // In this case, a unit is emitted when the next unit is coming.
+
110  int raw_pes_size;
+
111  const uint8_t* raw_pes;
+
112  pes_byte_queue_.Peek(&raw_pes, &raw_pes_size);
+
113  if (raw_pes_size > 0)
+
114  parse_result = Emit(true);
+
115 
+
116  // Reset the state.
+
117  ResetPesState();
+
118 
+
119  // Update the state.
+
120  wait_for_pusi_ = false;
+
121  }
+
122 
+
123  // Add the data to the parser state.
+
124  if (size > 0)
+
125  pes_byte_queue_.Push(buf, size);
+
126 
+
127  // Try emitting the current PES packet.
+
128  return (parse_result && Emit(false));
+
129 }
+
130 
+
131 void TsSectionPes::Flush() {
+
132  // Try emitting a packet since we might have a pending PES packet
+
133  // with an undefined size.
+
134  Emit(true);
+
135 
+
136  // Flush the underlying ES parser.
+
137  es_parser_->Flush();
+
138 }
+
139 
+
140 void TsSectionPes::Reset() {
+
141  ResetPesState();
+
142 
+
143  previous_pts_valid_ = false;
+
144  previous_pts_ = 0;
+
145  previous_dts_valid_ = false;
+
146  previous_dts_ = 0;
+
147 
+
148  es_parser_->Reset();
+
149 }
+
150 
+
151 bool TsSectionPes::Emit(bool emit_for_unknown_size) {
+
152  int raw_pes_size;
+
153  const uint8_t* raw_pes;
+
154  pes_byte_queue_.Peek(&raw_pes, &raw_pes_size);
+
155 
+
156  // A PES should be at least 6 bytes.
+
157  // Wait for more data to come if not enough bytes.
+
158  if (raw_pes_size < 6)
+
159  return true;
+
160 
+
161  // Check whether we have enough data to start parsing.
+
162  int pes_packet_length =
+
163  (static_cast<int>(raw_pes[4]) << 8) |
+
164  (static_cast<int>(raw_pes[5]));
+
165  if ((pes_packet_length == 0 && !emit_for_unknown_size) ||
+
166  (pes_packet_length != 0 && raw_pes_size < pes_packet_length + 6)) {
+
167  // Wait for more data to come either because:
+
168  // - there are not enough bytes,
+
169  // - or the PES size is unknown and the "force emit" flag is not set.
+
170  // (PES size might be unknown for video PES packet).
+
171  return true;
+
172  }
+
173  DVLOG(LOG_LEVEL_PES) << "pes_packet_length=" << pes_packet_length;
+
174 
+
175  // Parse the packet.
+
176  bool parse_result = ParseInternal(raw_pes, raw_pes_size);
+
177 
+
178  // Reset the state.
+
179  ResetPesState();
+
180 
+
181  return parse_result;
+
182 }
+
183 
+
184 bool TsSectionPes::ParseInternal(const uint8_t* raw_pes, int raw_pes_size) {
+
185  BitReader bit_reader(raw_pes, raw_pes_size);
+
186 
+
187  // Read up to the pes_packet_length (6 bytes).
+
188  int packet_start_code_prefix;
+
189  int stream_id;
+
190  int pes_packet_length;
+
191  RCHECK(bit_reader.ReadBits(24, &packet_start_code_prefix));
+
192  RCHECK(bit_reader.ReadBits(8, &stream_id));
+
193  RCHECK(bit_reader.ReadBits(16, &pes_packet_length));
+
194 
+
195  RCHECK(packet_start_code_prefix == kPesStartCode);
+
196  DVLOG(LOG_LEVEL_PES) << "stream_id=" << std::hex << stream_id << std::dec;
+
197  if (pes_packet_length == 0)
+
198  pes_packet_length = bit_reader.bits_available() / 8;
+
199 
+
200  // Ignore the PES for unknown stream IDs.
+
201  // See ITU H.222 Table 2-22 "Stream_id assignments"
+
202  bool is_audio_stream_id = ((stream_id & 0xe0) == 0xc0);
+
203  bool is_video_stream_id = ((stream_id & 0xf0) == 0xe0);
+
204  if (!is_audio_stream_id && !is_video_stream_id)
+
205  return true;
+
206 
+
207  // Read up to "pes_header_data_length".
+
208  int dummy_2;
+
209  int PES_scrambling_control;
+
210  int PES_priority;
+
211  int data_alignment_indicator;
+
212  int copyright;
+
213  int original_or_copy;
+
214  int pts_dts_flags;
+
215  int escr_flag;
+
216  int es_rate_flag;
+
217  int dsm_trick_mode_flag;
+
218  int additional_copy_info_flag;
+
219  int pes_crc_flag;
+
220  int pes_extension_flag;
+
221  int pes_header_data_length;
+
222  RCHECK(bit_reader.ReadBits(2, &dummy_2));
+
223  RCHECK(dummy_2 == 0x2);
+
224  RCHECK(bit_reader.ReadBits(2, &PES_scrambling_control));
+
225  RCHECK(bit_reader.ReadBits(1, &PES_priority));
+
226  RCHECK(bit_reader.ReadBits(1, &data_alignment_indicator));
+
227  RCHECK(bit_reader.ReadBits(1, &copyright));
+
228  RCHECK(bit_reader.ReadBits(1, &original_or_copy));
+
229  RCHECK(bit_reader.ReadBits(2, &pts_dts_flags));
+
230  RCHECK(bit_reader.ReadBits(1, &escr_flag));
+
231  RCHECK(bit_reader.ReadBits(1, &es_rate_flag));
+
232  RCHECK(bit_reader.ReadBits(1, &dsm_trick_mode_flag));
+
233  RCHECK(bit_reader.ReadBits(1, &additional_copy_info_flag));
+
234  RCHECK(bit_reader.ReadBits(1, &pes_crc_flag));
+
235  RCHECK(bit_reader.ReadBits(1, &pes_extension_flag));
+
236  RCHECK(bit_reader.ReadBits(8, &pes_header_data_length));
+
237  int pes_header_start_size = bit_reader.bits_available() / 8;
+
238 
+
239  // Compute the size and the offset of the ES payload.
+
240  // "6" for the 6 bytes read before and including |pes_packet_length|.
+
241  // "3" for the 3 bytes read before and including |pes_header_data_length|.
+
242  int es_size = pes_packet_length - 3 - pes_header_data_length;
+
243  int es_offset = 6 + 3 + pes_header_data_length;
+
244  RCHECK(es_size >= 0);
+
245  RCHECK(es_offset + es_size <= raw_pes_size);
+
246 
+
247  // Read the timing information section.
+
248  bool is_pts_valid = false;
+
249  bool is_dts_valid = false;
+
250  int64_t pts_section = 0;
+
251  int64_t dts_section = 0;
+
252  if (pts_dts_flags == 0x2) {
+
253  RCHECK(bit_reader.ReadBits(40, &pts_section));
+
254  RCHECK((((pts_section >> 36) & 0xf) == 0x2) &&
+
255  IsTimestampSectionValid(pts_section));
+
256  is_pts_valid = true;
+
257  }
+
258  if (pts_dts_flags == 0x3) {
+
259  RCHECK(bit_reader.ReadBits(40, &pts_section));
+
260  RCHECK(bit_reader.ReadBits(40, &dts_section));
+
261  RCHECK((((pts_section >> 36) & 0xf) == 0x3) &&
+
262  IsTimestampSectionValid(pts_section));
+
263  RCHECK((((dts_section >> 36) & 0xf) == 0x1) &&
+
264  IsTimestampSectionValid(dts_section));
+
265  is_pts_valid = true;
+
266  is_dts_valid = true;
+
267  }
+
268 
+
269  // Convert and unroll the timestamps.
+
270  int64_t media_pts(kNoTimestamp);
+
271  int64_t media_dts(kNoTimestamp);
+
272  if (is_pts_valid) {
+
273  int64_t pts = ConvertTimestampSectionToTimestamp(pts_section);
+
274  if (previous_pts_valid_)
+
275  pts = UnrollTimestamp(previous_pts_, pts);
+
276  previous_pts_ = pts;
+
277  previous_pts_valid_ = true;
+
278  media_pts = pts;
+
279  }
+
280  if (is_dts_valid) {
+
281  int64_t dts = ConvertTimestampSectionToTimestamp(dts_section);
+
282  if (previous_dts_valid_)
+
283  dts = UnrollTimestamp(previous_dts_, dts);
+
284  previous_dts_ = dts;
+
285  previous_dts_valid_ = true;
+
286  media_dts = dts;
+
287  }
+
288 
+
289  // Discard the rest of the PES packet header.
+
290  DCHECK_EQ(bit_reader.bits_available() % 8, 0);
+
291  int pes_header_remaining_size = pes_header_data_length -
+
292  (pes_header_start_size - bit_reader.bits_available() / 8);
+
293  RCHECK(pes_header_remaining_size >= 0);
+
294 
+
295  // Read the PES packet.
+
296  DVLOG(LOG_LEVEL_PES)
+
297  << "Emit a reassembled PES:"
+
298  << " size=" << es_size
+
299  << " pts=" << media_pts
+
300  << " dts=" << media_dts
+
301  << " data_alignment_indicator=" << data_alignment_indicator;
+
302  return es_parser_->Parse(&raw_pes[es_offset], es_size, media_pts, media_dts);
+
303 }
+
304 
+
305 void TsSectionPes::ResetPesState() {
+
306  pes_byte_queue_.Reset();
+
307  wait_for_pusi_ = true;
+
308 }
+
309 
+
310 } // namespace mp2t
+
311 } // namespace media
+
312 } // namespace edash_packager
+
void Push(const uint8_t *data, int size)
Append new bytes to the end of the queue.
Definition: byte_queue.cc:29
+
void Reset()
Reset the queue to the empty state.
Definition: byte_queue.cc:24
+
void Peek(const uint8_t **data, int *size) const
Definition: byte_queue.cc:63
+
+ + + + diff --git a/sdk/d6/d71/scoped__xml__ptr_8h_source.html b/sdk/d6/d71/scoped__xml__ptr_8h_source.html new file mode 100644 index 0000000000..a66ade0a96 --- /dev/null +++ b/sdk/d6/d71/scoped__xml__ptr_8h_source.html @@ -0,0 +1,144 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/xml/scoped_xml_ptr.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
scoped_xml_ptr.h
+
+
+
1 // Copyright 2014 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 // scoped_ptr alias for libxml2 objects. Deleters for the objects are also
+
8 // defined in this file.
+
9 
+
10 #ifndef MPD_BASE_XML_SCOPED_XML_PTR_H_
+
11 #define MPD_BASE_XML_SCOPED_XML_PTR_H_
+
12 
+
13 #include <libxml/tree.h>
+
14 #include <libxml/xmlschemas.h>
+
15 
+
16 #include "packager/base/memory/scoped_ptr.h"
+
17 
+
18 namespace edash_packager {
+
19 namespace xml {
+
20 
+
23 struct XmlDeleter {
+
24  // Called by scoped_ptr. http://goo.gl/YaLbcS
+
25  inline void operator()(xmlSchemaParserCtxtPtr ptr) const {
+
26  xmlSchemaFreeParserCtxt(ptr);
+
27  }
+
28  inline void operator()(xmlSchemaValidCtxtPtr ptr) const {
+
29  xmlSchemaFreeValidCtxt(ptr);
+
30  }
+
31  inline void operator()(xmlSchemaPtr ptr) const { xmlSchemaFree(ptr); }
+
32  inline void operator()(xmlNodePtr ptr) const { xmlFreeNode(ptr); }
+
33  inline void operator()(xmlDocPtr ptr) const { xmlFreeDoc(ptr); }
+
34  inline void operator()(xmlChar* ptr) const { xmlFree(ptr); }
+
35 };
+
36 
+
37 // C++11 allows template alias but standards before it do not. This struct is
+
38 // for aliasing scoped_ptr with libxml2 object deleter.
+
40 template <typename XmlType>
+
41 struct ScopedXmlPtr {
+
42  typedef scoped_ptr<XmlType, XmlDeleter> type;
+
43 };
+
44 
+
45 } // namespace xml
+
46 } // namespace edash_packager
+
47 #endif // MPD_BASE_XML_SCOPED_XML_PTR_H_
+ +
scoped_ptr for libxml2 resources.
+
+ + + + diff --git a/sdk/d6/d77/dash__iop__mpd__notifier_8h_source.html b/sdk/d6/d77/dash__iop__mpd__notifier_8h_source.html new file mode 100644 index 0000000000..54f71de941 --- /dev/null +++ b/sdk/d6/d77/dash__iop__mpd__notifier_8h_source.html @@ -0,0 +1,227 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/dash_iop_mpd_notifier.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
dash_iop_mpd_notifier.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 MPD_BASE_DASH_IOP_MPD_NOTIFIER_H_
+
8 #define MPD_BASE_DASH_IOP_MPD_NOTIFIER_H_
+
9 
+
10 #include "packager/mpd/base/mpd_notifier.h"
+
11 
+
12 #include <list>
+
13 #include <map>
+
14 #include <string>
+
15 #include <vector>
+
16 
+
17 #include "packager/mpd/base/mpd_builder.h"
+
18 #include "packager/mpd/base/mpd_notifier_util.h"
+
19 #include "packager/mpd/base/mpd_options.h"
+
20 
+
21 namespace edash_packager {
+
22 
+ +
30  public:
+
31  DashIopMpdNotifier(DashProfile dash_profile,
+
32  const MpdOptions& mpd_options,
+
33  const std::vector<std::string>& base_urls,
+
34  const std::string& output_path);
+
35  virtual ~DashIopMpdNotifier() OVERRIDE;
+
36 
+
40  virtual bool Init() OVERRIDE;
+
41  virtual bool NotifyNewContainer(const MediaInfo& media_info,
+
42  uint32_t* id) OVERRIDE;
+
43  virtual bool NotifySampleDuration(uint32_t container_id,
+
44  uint32_t sample_duration) OVERRIDE;
+
45  virtual bool NotifyNewSegment(uint32_t id,
+
46  uint64_t start_time,
+
47  uint64_t duration,
+
48  uint64_t size) OVERRIDE;
+
49  virtual bool NotifyEncryptionUpdate(
+
50  uint32_t container_id,
+
51  const std::string& drm_uuid,
+
52  const std::vector<uint8_t>& new_key_id,
+
53  const std::vector<uint8_t>& new_pssh) OVERRIDE;
+
54  virtual bool AddContentProtectionElement(
+
55  uint32_t id,
+
56  const ContentProtectionElement& content_protection_element) OVERRIDE;
+
57  virtual bool Flush() OVERRIDE;
+
59 
+
60  private:
+
61  friend class DashIopMpdNotifierTest;
+
62 
+
63  // Maps representation ID to Representation.
+
64  typedef std::map<uint32_t, Representation*> RepresentationMap;
+
65 
+
66  // Maps AdaptationSet ID to ProtectedContent.
+
67  typedef std::map<uint32_t, MediaInfo::ProtectedContent> ProtectedContentMap;
+
68 
+
69  // Checks the protected_content field of media_info and returns a non-null
+
70  // AdaptationSet* for a new Representation.
+
71  // This does not necessarily return a new AdaptationSet. If
+
72  // media_info.protected_content completely matches with an existing
+
73  // AdaptationSet, then it will return the pointer.
+
74  AdaptationSet* GetAdaptationSetForMediaInfo(const MediaInfo& media_info,
+
75  ContentType type,
+
76  const std::string& language);
+
77 
+
78  // Sets a group id for |adaptation_set| if applicable.
+
79  // If a group ID is already assigned, then this returns immediately.
+
80  // |type| and |language| are the type and language of |adaptation_set|.
+
81  void SetGroupId(ContentType type,
+
82  const std::string& language,
+
83  AdaptationSet* adaptation_set);
+
84 
+
85  // Helper function to get a new AdaptationSet; registers the values
+
86  // to the fields (maps) of the instance.
+
87  // If the media is encrypted, registers data to protected_content_map_.
+
88  AdaptationSet* NewAdaptationSet(const MediaInfo& media_info,
+
89  const std::string& language,
+
90  std::list<AdaptationSet*>* adaptation_sets);
+
91 
+
92  // Testing only method. Returns a pointer to MpdBuilder.
+
93  MpdBuilder* MpdBuilderForTesting() const {
+
94  return mpd_builder_.get();
+
95  }
+
96 
+
97  // Testing only method. Sets mpd_builder_.
+
98  void SetMpdBuilderForTesting(scoped_ptr<MpdBuilder> mpd_builder) {
+
99  mpd_builder_ = mpd_builder.Pass();
+
100  }
+
101 
+
102  // [type][lang] = list<AdaptationSet>
+
103  // Note: lang can be empty, e.g. for video.
+
104  std::map<ContentType, std::map<std::string, std::list<AdaptationSet*> > >
+
105  adaptation_set_list_map_;
+
106  RepresentationMap representation_map_;
+
107 
+
108  // Used to check whether a Representation should be added to an AdaptationSet.
+
109  ProtectedContentMap protected_content_map_;
+
110 
+
111  // MPD output path.
+
112  std::string output_path_;
+
113  scoped_ptr<MpdBuilder> mpd_builder_;
+
114  base::Lock lock_;
+
115 
+
116  // Next group ID to use for AdapationSets that can be grouped.
+
117  int next_group_id_;
+
118 
+
119  // Maps Representation ID to AdaptationSet. This is for updating the PSSH.
+
120  std::map<uint32_t, AdaptationSet*> representation_id_to_adaptation_set_;
+
121 };
+
122 
+
123 } // namespace edash_packager
+
124 
+
125 #endif // MPD_BASE_DASH_IOP_MPD_NOTIFIER_H_
+
virtual bool NotifyEncryptionUpdate(uint32_t container_id, const std::string &drm_uuid, const std::vector< uint8_t > &new_key_id, const std::vector< uint8_t > &new_pssh) OVERRIDE
+
virtual bool NotifyNewSegment(uint32_t id, uint64_t start_time, uint64_t duration, uint64_t size) OVERRIDE
+ +
Defines Mpd Options.
Definition: mpd_options.h:13
+
virtual bool NotifyNewContainer(const MediaInfo &media_info, uint32_t *id) OVERRIDE
+
DashProfile dash_profile() const
Definition: mpd_notifier.h:108
+
virtual bool NotifySampleDuration(uint32_t container_id, uint32_t sample_duration) OVERRIDE
+
This class generates DASH MPDs (Media Presentation Descriptions).
Definition: mpd_builder.h:56
+ + + + + +
virtual bool AddContentProtectionElement(uint32_t id, const ContentProtectionElement &content_protection_element) OVERRIDE
+
+ + + + diff --git a/sdk/d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html b/sdk/d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html new file mode 100644 index 0000000000..b1c528eabe --- /dev/null +++ b/sdk/d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html @@ -0,0 +1,186 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::ChunkOffset Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::ChunkOffset Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::ChunkOffset:
+
+
+ + +edash_packager::media::mp4::ChunkLargeOffset +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from edash_packager::media::mp4::ChunkLargeOffset
+std::vector< uint64_t > offsets
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 306 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::ChunkOffset::ComputeSize ()
+
+virtual
+
+

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

+ +

Reimplemented from edash_packager::media::mp4::ChunkLargeOffset.

+ +

Definition at line 652 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.png b/sdk/d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.png new file mode 100644 index 0000000000..baab734a0d Binary files /dev/null and b/sdk/d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.png differ diff --git a/sdk/d6/d80/classedash__packager_1_1media_1_1Demuxer-members.html b/sdk/d6/d80/classedash__packager_1_1media_1_1Demuxer-members.html new file mode 100644 index 0000000000..6279d8b9ca --- /dev/null +++ b/sdk/d6/d80/classedash__packager_1_1media_1_1Demuxer-members.html @@ -0,0 +1,113 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::Demuxer Member List
+
+
+ +

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

+ + + + + + + + + + +
Cancel()edash_packager::media::Demuxer
container_name()edash_packager::media::Demuxerinline
Demuxer(const std::string &file_name)edash_packager::media::Demuxerexplicit
Initialize()edash_packager::media::Demuxer
Parse()edash_packager::media::Demuxer
Run()edash_packager::media::Demuxer
SetKeySource(scoped_ptr< KeySource > key_source)edash_packager::media::Demuxer
streams()edash_packager::media::Demuxerinline
~Demuxer() (defined in edash_packager::media::Demuxer)edash_packager::media::Demuxer
+ + + + diff --git a/sdk/d6/d81/classedash__packager_1_1media_1_1LibcryptoThreading-members.html b/sdk/d6/d81/classedash__packager_1_1media_1_1LibcryptoThreading-members.html new file mode 100644 index 0000000000..ab5081d20a --- /dev/null +++ b/sdk/d6/d81/classedash__packager_1_1media_1_1LibcryptoThreading-members.html @@ -0,0 +1,106 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::LibcryptoThreading Member List
+
+
+ +

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

+ + + +
LibcryptoThreading() (defined in edash_packager::media::LibcryptoThreading)edash_packager::media::LibcryptoThreading
~LibcryptoThreading() (defined in edash_packager::media::LibcryptoThreading)edash_packager::media::LibcryptoThreading
+ + + + diff --git a/sdk/d6/d86/bandwidth__estimator_8cc_source.html b/sdk/d6/d86/bandwidth__estimator_8cc_source.html new file mode 100644 index 0000000000..8c92a2a9b7 --- /dev/null +++ b/sdk/d6/d86/bandwidth__estimator_8cc_source.html @@ -0,0 +1,162 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/bandwidth_estimator.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
bandwidth_estimator.cc
+
+
+
1 // Copyright 2014 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/mpd/base/bandwidth_estimator.h"
+
8 
+
9 #include <cmath>
+
10 #include <cstdlib>
+
11 
+
12 #include "packager/base/logging.h"
+
13 
+
14 const int BandwidthEstimator::kUseAllBlocks = 0;
+
15 
+ +
17  : num_blocks_for_estimation_(num_blocks),
+
18  harmonic_mean_denominator_(0.0),
+
19  num_blocks_added_(0) {}
+
20 BandwidthEstimator::~BandwidthEstimator() {}
+
21 
+
22 void BandwidthEstimator::AddBlock(uint64_t size, double duration) {
+
23  DCHECK_GT(duration, 0.0);
+
24  DCHECK_GT(size, 0u);
+
25 
+
26  if (num_blocks_for_estimation_ < 0 &&
+
27  static_cast<int>(history_.size()) >= -1 * num_blocks_for_estimation_) {
+
28  // Short circuiting the case where |num_blocks_for_estimation_| number of
+
29  // blocks have been added already.
+
30  return;
+
31  }
+
32 
+
33  const int kBitsInByte = 8;
+
34  const double bits_per_second_reciprocal = duration / (kBitsInByte * size);
+
35  harmonic_mean_denominator_ += bits_per_second_reciprocal;
+
36  if (num_blocks_for_estimation_ == kUseAllBlocks) {
+
37  DCHECK_EQ(history_.size(), 0u);
+
38  ++num_blocks_added_;
+
39  return;
+
40  }
+
41 
+
42  history_.push_back(bits_per_second_reciprocal);
+
43  if (num_blocks_for_estimation_ > 0 &&
+
44  static_cast<int>(history_.size()) > num_blocks_for_estimation_) {
+
45  harmonic_mean_denominator_ -= history_.front();
+
46  history_.pop_front();
+
47  }
+
48 
+
49  DCHECK_NE(num_blocks_for_estimation_, kUseAllBlocks);
+
50  DCHECK_LE(static_cast<int>(history_.size()), abs(num_blocks_for_estimation_));
+
51  DCHECK_EQ(num_blocks_added_, 0u);
+
52  return;
+
53 }
+
54 
+
55 uint64_t BandwidthEstimator::Estimate() const {
+
56  if (harmonic_mean_denominator_ == 0.0)
+
57  return 0;
+
58 
+
59  const uint64_t num_blocks = num_blocks_for_estimation_ == kUseAllBlocks
+
60  ? num_blocks_added_
+
61  : history_.size();
+
62  return static_cast<uint64_t>(ceil(num_blocks / harmonic_mean_denominator_));
+
63 }
+
BandwidthEstimator(int num_blocks)
+
+ + + + diff --git a/sdk/d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html b/sdk/d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html new file mode 100644 index 0000000000..eb17f0705e --- /dev/null +++ b/sdk/d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html @@ -0,0 +1,183 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::MovieExtends Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::MovieExtends Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::MovieExtends:
+
+
+ + +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + +

+Public Attributes

+MovieExtendsHeader header
 
+std::vector< TrackExtendstracks
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 419 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::MovieExtends::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1418 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.png b/sdk/d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.png new file mode 100644 index 0000000000..e233a72b70 Binary files /dev/null and b/sdk/d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.png differ diff --git a/sdk/d6/d8f/structedash__packager_1_1media_1_1mp4_1_1FullBox.html b/sdk/d6/d8f/structedash__packager_1_1media_1_1mp4_1_1FullBox.html new file mode 100644 index 0000000000..7d01ade707 --- /dev/null +++ b/sdk/d6/d8f/structedash__packager_1_1media_1_1mp4_1_1FullBox.html @@ -0,0 +1,189 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::FullBox Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::FullBox Struct Reference
+
+
+ +

#include <box.h>

+
+Inheritance diagram for edash_packager::media::mp4::FullBox:
+
+
+ + +edash_packager::media::mp4::Box +edash_packager::media::mp4::ChunkLargeOffset +edash_packager::media::mp4::CompactSampleSize +edash_packager::media::mp4::CompositionTimeToSample +edash_packager::media::mp4::DataEntryUrl +edash_packager::media::mp4::DataReference +edash_packager::media::mp4::DecodingTimeToSample +edash_packager::media::mp4::EditList +edash_packager::media::mp4::ElementaryStreamDescriptor +edash_packager::media::mp4::HandlerReference +edash_packager::media::mp4::MediaHeader +edash_packager::media::mp4::MovieExtendsHeader +edash_packager::media::mp4::MovieFragmentHeader +edash_packager::media::mp4::MovieHeader +edash_packager::media::mp4::ProtectionSystemSpecificHeader +edash_packager::media::mp4::SampleAuxiliaryInformationOffset +edash_packager::media::mp4::SampleAuxiliaryInformationSize +edash_packager::media::mp4::SampleDescription +edash_packager::media::mp4::SampleGroupDescription +edash_packager::media::mp4::SampleSize +edash_packager::media::mp4::SampleToChunk +edash_packager::media::mp4::SampleToGroup +edash_packager::media::mp4::SchemeType +edash_packager::media::mp4::SegmentIndex +edash_packager::media::mp4::SoundMediaHeader +edash_packager::media::mp4::SyncSample +edash_packager::media::mp4::TrackEncryption +edash_packager::media::mp4::TrackExtends +edash_packager::media::mp4::TrackFragmentDecodeTime +edash_packager::media::mp4::TrackFragmentHeader +edash_packager::media::mp4::TrackFragmentRun +edash_packager::media::mp4::TrackHeader +edash_packager::media::mp4::VideoMediaHeader + +
+ + + + + + +

+Public Attributes

+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Protected Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+ + + + + + + + + + + + + +

+Additional Inherited Members

- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
virtual uint32_t ComputeSize ()=0
 
+virtual FourCC BoxType () const =0
 
- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+

Defines FullBox, the other base ISO BMFF box objects as defined in ISO 14496-12:2012 ISO BMFF section 4.2. All ISO BMFF compatible boxes inherit from either Box or FullBox.

+ +

Definition at line 58 of file box.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d6/d8f/structedash__packager_1_1media_1_1mp4_1_1FullBox.png b/sdk/d6/d8f/structedash__packager_1_1media_1_1mp4_1_1FullBox.png new file mode 100644 index 0000000000..d1a1fe3057 Binary files /dev/null and b/sdk/d6/d8f/structedash__packager_1_1media_1_1mp4_1_1FullBox.png differ diff --git a/sdk/d6/d96/structedash__packager_1_1media_1_1mp4_1_1SampleDescription-members.html b/sdk/d6/d96/structedash__packager_1_1media_1_1mp4_1_1SampleDescription-members.html new file mode 100644 index 0000000000..a57b1d9577 --- /dev/null +++ b/sdk/d6/d96/structedash__packager_1_1media_1_1mp4_1_1SampleDescription-members.html @@ -0,0 +1,121 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::SampleDescription Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
audio_entries (defined in edash_packager::media::mp4::SampleDescription)edash_packager::media::mp4::SampleDescription
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::SampleDescription)edash_packager::media::mp4::SampleDescriptionvirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::SampleDescriptionvirtual
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::SampleDescriptionvirtual
SampleDescription() (defined in edash_packager::media::mp4::SampleDescription)edash_packager::media::mp4::SampleDescription
type (defined in edash_packager::media::mp4::SampleDescription)edash_packager::media::mp4::SampleDescription
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
video_entries (defined in edash_packager::media::mp4::SampleDescription)edash_packager::media::mp4::SampleDescription
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~SampleDescription() (defined in edash_packager::media::mp4::SampleDescription)edash_packager::media::mp4::SampleDescriptionvirtual
+ + + + diff --git a/sdk/d6/d97/classedash__packager_1_1media_1_1UdpFile-members.html b/sdk/d6/d97/classedash__packager_1_1media_1_1UdpFile-members.html new file mode 100644 index 0000000000..ca451cadf5 --- /dev/null +++ b/sdk/d6/d97/classedash__packager_1_1media_1_1UdpFile-members.html @@ -0,0 +1,122 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::UdpFile Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + +
Close() OVERRIDEedash_packager::media::UdpFilevirtual
Delete(const char *file_name)edash_packager::media::Filestatic
File(const std::string &file_name) (defined in edash_packager::media::File)edash_packager::media::Fileinlineexplicitprotected
file_name() const edash_packager::media::Fileinline
Flush() OVERRIDEedash_packager::media::UdpFilevirtual
GetFileSize(const char *file_name)edash_packager::media::Filestatic
Open() OVERRIDEedash_packager::media::UdpFileprotectedvirtual
edash_packager::media::File::Open(const char *file_name, const char *mode)edash_packager::media::Filestatic
OpenWithNoBuffering(const char *file_name, const char *mode)edash_packager::media::Filestatic
Read(void *buffer, uint64_t length) OVERRIDEedash_packager::media::UdpFilevirtual
ReadFileToString(const char *file_name, std::string *contents)edash_packager::media::Filestatic
Seek(uint64_t position) OVERRIDEedash_packager::media::UdpFilevirtual
Size() OVERRIDEedash_packager::media::UdpFilevirtual
Tell(uint64_t *position) OVERRIDEedash_packager::media::UdpFilevirtual
UdpFile(const char *address_and_port)edash_packager::media::UdpFileexplicit
Write(const void *buffer, uint64_t length) OVERRIDEedash_packager::media::UdpFilevirtual
~File()edash_packager::media::Fileinlineprotectedvirtual
~UdpFile() (defined in edash_packager::media::UdpFile)edash_packager::media::UdpFileprotectedvirtual
+ + + + diff --git a/sdk/d6/d9b/h264__parser_8h_source.html b/sdk/d6/d9b/h264__parser_8h_source.html new file mode 100644 index 0000000000..472b5e8cf8 --- /dev/null +++ b/sdk/d6/d9b/h264__parser_8h_source.html @@ -0,0 +1,543 @@ + + + + + + +DASH Media Packaging SDK: media/filters/h264_parser.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
h264_parser.h
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 //
+
5 // This file contains an implementation of an H264 Annex-B video stream parser.
+
6 
+
7 #ifndef MEDIA_FILTERS_H264_PARSER_H_
+
8 #define MEDIA_FILTERS_H264_PARSER_H_
+
9 
+
10 #include <stdint.h>
+
11 #include <sys/types.h>
+
12 
+
13 #include <map>
+
14 
+
15 #include "packager/media/filters/h264_bit_reader.h"
+
16 
+
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 };
+
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();
+
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;
+
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;
+
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;
+
251 
+
252  bool adaptive_ref_pic_marking_mode_flag;
+
253  H264DecRefPicMarking ref_pic_marking[kRefListSize];
+
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  };
+
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);
+
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);
+
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);
+
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_
+ + + + + + + + + + + +
+ + + + diff --git a/sdk/d6/d9c/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes-members.html b/sdk/d6/d9c/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes-members.html new file mode 100644 index 0000000000..1d3da39f93 --- /dev/null +++ b/sdk/d6/d9c/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes-members.html @@ -0,0 +1,116 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp2t::TsSectionPes Member List
+
+
+ +

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

+ + + + + + + + + + + + + +
Flush() OVERRIDE (defined in edash_packager::media::mp2t::TsSectionPes)edash_packager::media::mp2t::TsSectionPesvirtual
kPidCat enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
kPidMax enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
kPidNullPacket enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
kPidPat enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
kPidTsdt enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
Parse(bool payload_unit_start_indicator, const uint8_t *buf, int size) OVERRIDE (defined in edash_packager::media::mp2t::TsSectionPes)edash_packager::media::mp2t::TsSectionPesvirtual
Reset() OVERRIDE (defined in edash_packager::media::mp2t::TsSectionPes)edash_packager::media::mp2t::TsSectionPesvirtual
SpecialPid enum name (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
TsSectionPes(scoped_ptr< EsParser > es_parser) (defined in edash_packager::media::mp2t::TsSectionPes)edash_packager::media::mp2t::TsSectionPesexplicit
~TsSection() (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSectioninlinevirtual
~TsSectionPes() (defined in edash_packager::media::mp2t::TsSectionPes)edash_packager::media::mp2t::TsSectionPesvirtual
+ + + + diff --git a/sdk/d6/da0/ts__section__pat_8h_source.html b/sdk/d6/da0/ts__section__pat_8h_source.html new file mode 100644 index 0000000000..77c3a23038 --- /dev/null +++ b/sdk/d6/da0/ts__section__pat_8h_source.html @@ -0,0 +1,143 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp2t/ts_section_pat.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ts_section_pat.h
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_FORMATS_MP2T_TS_SECTION_PAT_H_
+
6 #define MEDIA_FORMATS_MP2T_TS_SECTION_PAT_H_
+
7 
+
8 #include "packager/base/callback.h"
+
9 #include "packager/base/compiler_specific.h"
+
10 #include "packager/media/formats/mp2t/ts_section_psi.h"
+
11 
+
12 namespace edash_packager {
+
13 namespace media {
+
14 namespace mp2t {
+
15 
+
16 class TsSectionPat : public TsSectionPsi {
+
17  public:
+
18  // RegisterPmtCb::Run(int program_number, int pmt_pid);
+
19  typedef base::Callback<void(int, int)> RegisterPmtCb;
+
20 
+
21  explicit TsSectionPat(const RegisterPmtCb& register_pmt_cb);
+
22  virtual ~TsSectionPat();
+
23 
+
24  // TsSectionPsi implementation.
+
25  virtual bool ParsePsiSection(BitReader* bit_reader) OVERRIDE;
+
26  virtual void ResetPsiSection() OVERRIDE;
+
27 
+
28  private:
+
29  RegisterPmtCb register_pmt_cb_;
+
30 
+
31  // Parameters from the PAT.
+
32  int version_number_;
+
33 
+
34  DISALLOW_COPY_AND_ASSIGN(TsSectionPat);
+
35 };
+
36 
+
37 } // namespace mp2t
+
38 } // namespace media
+
39 } // namespace edash_packager
+
40 
+
41 #endif
+
42 
+ + +
A class to read bit streams.
Definition: bit_reader.h:17
+
+ + + + diff --git a/sdk/d6/da2/classedash__packager_1_1media_1_1AesCbcCtsEncryptor.html b/sdk/d6/da2/classedash__packager_1_1media_1_1AesCbcCtsEncryptor.html new file mode 100644 index 0000000000..c01872ba28 --- /dev/null +++ b/sdk/d6/da2/classedash__packager_1_1media_1_1AesCbcCtsEncryptor.html @@ -0,0 +1,266 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::AesCbcCtsEncryptor Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::AesCbcCtsEncryptor Class Reference
+
+
+ + + + + + + + + + + + +

+Public Member Functions

bool InitializeWithIv (const std::vector< uint8_t > &key, const std::vector< uint8_t > &iv)
 
void Encrypt (const uint8_t *plaintext, size_t size, uint8_t *ciphertext)
 
void Encrypt (const std::vector< uint8_t > &plaintext, std::vector< uint8_t > *ciphertext)
 
bool SetIv (const std::vector< uint8_t > &iv)
 
+const std::vector< uint8_t > & iv () const
 
+

Detailed Description

+
+

Definition at line 178 of file aes_encryptor.h.

+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void edash_packager::media::AesCbcCtsEncryptor::Encrypt (const uint8_t * plaintext,
size_t size,
uint8_t * ciphertext 
)
+
+
Parameters
+ + + + +
plaintextpoints to the data to be encrypted.
sizeis the number of bytes to be encrypted. If less than 16 bytes, it will be copied in the clear.
ciphertextshould not be NULL. The buffer should be at least size bytes in length.
+
+
+ +

Definition at line 279 of file aes_encryptor.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void edash_packager::media::AesCbcCtsEncryptor::Encrypt (const std::vector< uint8_t > & plaintext,
std::vector< uint8_t > * ciphertext 
)
+
+
Parameters
+ + + +
plaintextcontains the data to be encrypted. If less than 16 bytes in size, it will be copied in the clear.
ciphertextshould not be NULL. Caller retains ownership.
+
+
+ +

Definition at line 332 of file aes_encryptor.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::AesCbcCtsEncryptor::InitializeWithIv (const std::vector< uint8_t > & key,
const std::vector< uint8_t > & iv 
)
+
+

Initialize the encryptor with specified key and IV.

+
Parameters
+ + + +
keyshould be 128 bits or 192 bits or 256 bits in size as defined in AES spec.
ivshould be 16 bytes in size.
+
+
+
Returns
true on successful initialization, false otherwise.
+ +

Definition at line 261 of file aes_encryptor.cc.

+ +
+
+ +
+
+ + + + + + + + +
bool edash_packager::media::AesCbcCtsEncryptor::SetIv (const std::vector< uint8_t > & iv)
+
+
Parameters
+ + +
ivis the initialization vector. Should be 16 bytes in size.
+
+
+
Returns
true if successful, false if the input is invalid.
+ +

Definition at line 343 of file aes_encryptor.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d6/da3/classedash__packager_1_1media_1_1H264Parser.html b/sdk/d6/da3/classedash__packager_1_1media_1_1H264Parser.html new file mode 100644 index 0000000000..9244827c5e --- /dev/null +++ b/sdk/d6/da3/classedash__packager_1_1media_1_1H264Parser.html @@ -0,0 +1,162 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::H264Parser Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::H264Parser Class Reference
+
+
+ + + + +

+Public Types

enum  Result { kOk, +kInvalidStream, +kUnsupportedStream, +kEOStream + }
 
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+void Reset ()
 
+void SetStream (const uint8_t *stream, off_t stream_size)
 
+Result AdvanceToNextNALU (H264NALU *nalu)
 
+Result ParseSPS (int *sps_id)
 
+Result ParsePPS (int *pps_id)
 
+Result ParseSPSFromArray (const uint8_t *sps_data, size_t sps_data_size, int *sps_id)
 
+const H264SPSGetSPS (int sps_id)
 
+const H264PPSGetPPS (int pps_id)
 
+Result ParseSliceHeader (const H264NALU &nalu, H264SliceHeader *shdr)
 
+Result ParseSEI (H264SEIMessage *sei_msg)
 
+ + + +

+Static Public Member Functions

+static bool FindStartCode (const uint8_t *data, off_t data_size, off_t *offset, off_t *start_code_size)
 
+

Detailed Description

+
+

Definition at line 289 of file h264_parser.h.

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d6/da3/mpd__builder_8h_source.html b/sdk/d6/da3/mpd__builder_8h_source.html new file mode 100644 index 0000000000..cde1a87a17 --- /dev/null +++ b/sdk/d6/da3/mpd__builder_8h_source.html @@ -0,0 +1,545 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/mpd_builder.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mpd_builder.h
+
+
+
1 // Copyright 2014 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 // This file contains the MpdBuilder, AdaptationSet, and Representation class
+
8 // declarations.
+
9 // http://goo.gl/UrsSlF
+
10 //
+
14 
+
15 #ifndef MPD_BASE_MPD_BUILDER_H_
+
16 #define MPD_BASE_MPD_BUILDER_H_
+
17 
+
18 #include <stdint.h>
+
19 
+
20 #include <list>
+
21 #include <map>
+
22 #include <set>
+
23 #include <string>
+
24 
+
25 #include "packager/base/atomic_sequence_num.h"
+
26 #include "packager/base/gtest_prod_util.h"
+
27 #include "packager/base/stl_util.h"
+
28 #include "packager/base/synchronization/lock.h"
+
29 #include "packager/mpd/base/bandwidth_estimator.h"
+
30 #include "packager/mpd/base/content_protection_element.h"
+
31 #include "packager/mpd/base/media_info.pb.h"
+
32 #include "packager/mpd/base/mpd_options.h"
+
33 #include "packager/mpd/base/segment_info.h"
+
34 #include "packager/mpd/base/xml/scoped_xml_ptr.h"
+
35 
+
36 // TODO(rkuroiwa): For classes with |id_|, consider removing the field and let
+
37 // the MPD (XML) generation functions take care of assigning an ID to each
+
38 // element.
+
39 namespace edash_packager {
+
40 
+
41 namespace media {
+
42 class File;
+
43 } // namespace media
+
44 
+
45 class AdaptationSet;
+
46 class Representation;
+
47 
+
48 namespace xml {
+
49 
+
50 class XmlNode;
+
51 class RepresentationXmlNode;
+
52 
+
53 } // namespace xml
+
54 
+
56 class MpdBuilder {
+
57  public:
+
58  enum MpdType {
+
59  kStatic = 0,
+
60  kDynamic
+
61  };
+
62 
+
66  MpdBuilder(MpdType type, const MpdOptions& mpd_options);
+
67  virtual ~MpdBuilder();
+
68 
+
71  void AddBaseUrl(const std::string& base_url);
+
72 
+
77  virtual AdaptationSet* AddAdaptationSet(const std::string& lang);
+
78 
+
83  bool WriteMpdToFile(media::File* output_file);
+
84 
+
88  virtual bool ToString(std::string* output);
+
89 
+
91  MpdType type() const { return type_; }
+
92 
+
98  static void MakePathsRelativeToMpd(const std::string& mpd_path,
+
99  MediaInfo* media_info);
+
100 
+
101  private:
+
102  // DynamicMpdBuilderTest needs to set availabilityStartTime so that the test
+
103  // doesn't need to depend on current time.
+
104  friend class DynamicMpdBuilderTest;
+
105 
+
106  bool ToStringImpl(std::string* output);
+
107 
+
108  // This is a helper method for writing out MPDs, called from WriteMpdToFile()
+
109  // and ToString().
+
110  template <typename OutputType>
+
111  bool WriteMpdToOutput(OutputType* output);
+
112 
+
113  // Returns the document pointer to the MPD. This must be freed by the caller
+
114  // using appropriate xmlDocPtr freeing function.
+
115  // On failure, this returns NULL.
+
116  xmlDocPtr GenerateMpd();
+
117 
+
118  // Set MPD attributes common to all profiles. Uses non-zero |mpd_options_| to
+
119  // set attributes for the MPD.
+
120  void AddCommonMpdInfo(xml::XmlNode* mpd_node);
+
121 
+
122  // Adds 'static' MPD attributes and elements to |mpd_node|. This assumes that
+
123  // the first child element is a Period element.
+
124  void AddStaticMpdInfo(xml::XmlNode* mpd_node);
+
125 
+
126  // Same as AddStaticMpdInfo() but for 'dynamic' MPDs.
+
127  void AddDynamicMpdInfo(xml::XmlNode* mpd_node);
+
128 
+
129  float GetStaticMpdDuration(xml::XmlNode* mpd_node);
+
130 
+
131  // Set MPD attributes for dynamic profile MPD. Uses non-zero |mpd_options_| as
+
132  // well as various calculations to set attributes for the MPD.
+
133  void SetDynamicMpdAttributes(xml::XmlNode* mpd_node);
+
134 
+
135  // Gets the earliest, normalized segment timestamp. Returns true if
+
136  // successful, false otherwise.
+
137  bool GetEarliestTimestamp(double* timestamp_seconds);
+
138 
+
139  MpdType type_;
+
140  MpdOptions mpd_options_;
+
141  std::list<AdaptationSet*> adaptation_sets_;
+
142  ::STLElementDeleter<std::list<AdaptationSet*> > adaptation_sets_deleter_;
+
143 
+
144  std::list<std::string> base_urls_;
+
145  std::string availability_start_time_;
+
146 
+
147  base::Lock lock_;
+
148  base::AtomicSequenceNumber adaptation_set_counter_;
+
149  base::AtomicSequenceNumber representation_counter_;
+
150 
+
151  DISALLOW_COPY_AND_ASSIGN(MpdBuilder);
+
152 };
+
153 
+ +
157  public:
+
158  // The role for this AdaptationSet. These values are used to add a Role
+
159  // element to the AdaptationSet with schemeIdUri=urn:mpeg:dash:role:2011.
+
160  // See ISO/IEC 23009-1:2012 section 5.8.5.5.
+
161  enum Role {
+
162  kRoleCaption,
+
163  kRoleSubtitle,
+
164  kRoleMain,
+
165  kRoleAlternate,
+
166  kRoleSupplementary,
+
167  kRoleCommentary,
+
168  kRoleDub
+
169  };
+
170 
+
171  virtual ~AdaptationSet();
+
172 
+
178  virtual Representation* AddRepresentation(const MediaInfo& media_info);
+
179 
+
189  virtual void AddContentProtectionElement(
+
190  const ContentProtectionElement& element);
+
191 
+
203  virtual void UpdateContentProtectionPssh(const std::string& drm_uuid,
+
204  const std::string& pssh);
+
205 
+
210  virtual void AddRole(Role role);
+
211 
+
216  xml::ScopedXmlPtr<xmlNode>::type GetXml();
+
217 
+
223  void ForceSetSegmentAlignment(bool segment_alignment);
+
224 
+
230  virtual void SetGroup(int group_number);
+
231 
+
233  virtual int Group() const;
+
234 
+
235  // Must be unique in the Period.
+
236  uint32_t id() const { return id_; }
+
237 
+
249  void OnNewSegmentForRepresentation(uint32_t representation_id,
+
250  uint64_t start_time,
+
251  uint64_t duration);
+
252 
+
265  void OnSetFrameRateForRepresentation(uint32_t representation_id,
+
266  uint32_t frame_duration,
+
267  uint32_t timescale);
+
268 
+
269  protected:
+
277  AdaptationSet(uint32_t adaptation_set_id,
+
278  const std::string& lang,
+
279  const MpdOptions& mpd_options,
+
280  MpdBuilder::MpdType mpd_type,
+
281  base::AtomicSequenceNumber* representation_counter);
+
282 
+
283  private:
+
284  // kSegmentAlignmentUnknown means that it is uncertain if the
+
285  // (sub)segments are aligned or not.
+
286  // kSegmentAlignmentTrue means that it is certain that the all the (current)
+
287  // segments added to the adaptation set are aligned.
+
288  // kSegmentAlignmentFalse means that it is it is certain that some segments
+
289  // are not aligned. This is useful to disable the computation for
+
290  // segment alignment, once it is certain that some segments are not aligned.
+
291  enum SegmentAligmentStatus {
+
292  kSegmentAlignmentUnknown,
+
293  kSegmentAlignmentTrue,
+
294  kSegmentAlignmentFalse
+
295  };
+
296 
+
297  // This maps Representations (IDs) to a list of start times of the segments.
+
298  // e.g.
+
299  // If Representation 1 has start time 0, 100, 200 and Representation 2 has
+
300  // start times 0, 200, 400, then the map contains:
+
301  // 1 -> [0, 100, 200]
+
302  // 2 -> [0, 200, 400]
+
303  typedef std::map<uint32_t, std::list<uint64_t> > RepresentationTimeline;
+
304 
+
305  friend class MpdBuilder;
+
306 
+
307  FRIEND_TEST_ALL_PREFIXES(CommonMpdBuilderTest, CheckAdaptationSetId);
+
308  FRIEND_TEST_ALL_PREFIXES(CommonMpdBuilderTest,
+
309  CheckAdaptationSetVideoContentType);
+
310  FRIEND_TEST_ALL_PREFIXES(CommonMpdBuilderTest,
+
311  CheckAdaptationSetAudioContentType);
+
312  FRIEND_TEST_ALL_PREFIXES(CommonMpdBuilderTest,
+
313  CheckAdaptationSetTextContentType);
+
314  FRIEND_TEST_ALL_PREFIXES(CommonMpdBuilderTest, SetAdaptationSetGroup);
+
315  FRIEND_TEST_ALL_PREFIXES(StaticMpdBuilderTest, SubSegmentAlignment);
+
316  FRIEND_TEST_ALL_PREFIXES(StaticMpdBuilderTest, ForceSetSubSegmentAlignment);
+
317  FRIEND_TEST_ALL_PREFIXES(DynamicMpdBuilderTest, SegmentAlignment);
+
318  FRIEND_TEST_ALL_PREFIXES(
+
319  CommonMpdBuilderTest,
+
320  SetAdaptationFrameRateUsingRepresentationSetSampleDuration);
+
321 
+
322  // Gets the earliest, normalized segment timestamp. Returns true if
+
323  // successful, false otherwise.
+
324  bool GetEarliestTimestamp(double* timestamp_seconds);
+
325 
+
333  void CheckLiveSegmentAlignment(uint32_t representation_id,
+
334  uint64_t start_time,
+
335  uint64_t duration);
+
336 
+
337  // Checks representation_segment_start_times_ and sets segments_aligned_.
+
338  // Use this for VOD, do not use for Live.
+
339  void CheckVodSegmentAlignment();
+
340 
+
341  // Records the framerate of a Representation.
+
342  void RecordFrameRate(uint32_t frame_duration, uint32_t timescale);
+
343 
+
344  std::list<ContentProtectionElement> content_protection_elements_;
+
345  std::list<Representation*> representations_;
+
346  ::STLElementDeleter<std::list<Representation*> > representations_deleter_;
+
347 
+
348  base::Lock lock_;
+
349 
+
350  base::AtomicSequenceNumber* const representation_counter_;
+
351 
+
352  const uint32_t id_;
+
353  const std::string lang_;
+
354  const MpdOptions& mpd_options_;
+
355  const MpdBuilder::MpdType mpd_type_;
+
356 
+
357  // The group attribute for the AdaptationSet. If the value is negative,
+
358  // no group number is specified.
+
359  // Note that group 0 is a special group number.
+
360  int group_;
+
361 
+
362  // Video widths and heights of Representations. Note that this is a set; if
+
363  // there is only 1 resolution, then @width & @height should be set, otherwise
+
364  // @maxWidth & @maxHeight should be set for DASH IOP.
+
365  std::set<uint32_t> video_widths_;
+
366  std::set<uint32_t> video_heights_;
+
367 
+
368  // Video representations' frame rates.
+
369  // The frame rate notation for MPD is <integer>/<integer> (where the
+
370  // denominator is optional). This means the frame rate could be non-whole
+
371  // rational value, therefore the key is of type double.
+
372  // Value is <integer>/<integer> in string form.
+
373  // So, key == CalculatedValue(value)
+
374  std::map<double, std::string> video_frame_rates_;
+
375 
+
376  // contentType attribute of AdaptationSet.
+
377  // Determined by examining the MediaInfo passed to AddRepresentation().
+
378  std::string content_type_;
+
379 
+
380  // This does not have to be a set, it could be a list or vector because all we
+
381  // really care is whether there is more than one entry.
+
382  // Contains one entry if all the Representations have the same picture aspect
+
383  // ratio (@par attribute for AdaptationSet).
+
384  // There will be more than one entry if there are multiple picture aspect
+
385  // ratios.
+
386  // The @par attribute should only be set if there is exactly one entry
+
387  // in this set.
+
388  std::set<std::string> picture_aspect_ratio_;
+
389 
+
390  // The roles of this AdaptationSet.
+
391  std::set<Role> roles_;
+
392 
+
393  // True iff all the segments are aligned.
+
394  SegmentAligmentStatus segments_aligned_;
+
395  bool force_set_segment_alignment_;
+
396 
+
397  // Keeps track of segment start times of Representations.
+
398  // For VOD, this will not be cleared, all the segment start times are
+
399  // stored in this. This should not out-of-memory for a reasonable length
+
400  // video and reasonable subsegment length.
+
401  // For Live, the entries are deleted (see CheckLiveSegmentAlignment()
+
402  // implementation comment) because storing the entire timeline is not
+
403  // reasonable and may cause an out-of-memory problem.
+
404  RepresentationTimeline representation_segment_start_times_;
+
405 
+
406  DISALLOW_COPY_AND_ASSIGN(AdaptationSet);
+
407 };
+
408 
+ +
410  public:
+ + +
413 
+
418  virtual void OnNewSegmentForRepresentation(uint64_t start_time,
+
419  uint64_t duration) = 0;
+
420 
+
425  virtual void OnSetFrameRateForRepresentation(uint32_t frame_duration,
+
426  uint32_t timescale) = 0;
+
427 };
+
428 
+ +
432  public:
+
433  virtual ~Representation();
+
434 
+
438  bool Init();
+
439 
+
450  virtual void AddContentProtectionElement(
+
451  const ContentProtectionElement& element);
+
452 
+
464  virtual void UpdateContentProtectionPssh(const std::string& drm_uuid,
+
465  const std::string& pssh);
+
466 
+
475  virtual void AddNewSegment(uint64_t start_time,
+
476  uint64_t duration,
+
477  uint64_t size);
+
478 
+
484  virtual void SetSampleDuration(uint32_t sample_duration);
+
485 
+
487  xml::ScopedXmlPtr<xmlNode>::type GetXml();
+
488 
+
490  uint32_t id() const { return id_; }
+
491 
+
492  protected:
+ +
502  const MediaInfo& media_info,
+
503  const MpdOptions& mpd_options,
+
504  uint32_t representation_id,
+
505  scoped_ptr<RepresentationStateChangeListener> state_change_listener);
+
506 
+
507  private:
+
508  friend class AdaptationSet;
+
509 
+
510  // TODO(rkuroiwa): Consider defining a public factory method that constructs
+
511  // and Init()s, at least for testing.
+
512  FRIEND_TEST_ALL_PREFIXES(CommonMpdBuilderTest, ValidMediaInfo);
+
513  FRIEND_TEST_ALL_PREFIXES(CommonMpdBuilderTest, InvalidMediaInfo);
+
514  FRIEND_TEST_ALL_PREFIXES(CommonMpdBuilderTest, CheckVideoInfoReflectedInXml);
+
515  FRIEND_TEST_ALL_PREFIXES(CommonMpdBuilderTest, CheckRepresentationId);
+
516  FRIEND_TEST_ALL_PREFIXES(CommonMpdBuilderTest, SetSampleDuration);
+
517  FRIEND_TEST_ALL_PREFIXES(
+
518  CommonMpdBuilderTest,
+
519  RepresentationStateChangeListenerOnNewSegmentForRepresentation);
+
520  FRIEND_TEST_ALL_PREFIXES(
+
521  CommonMpdBuilderTest,
+
522  RepresentationStateChangeListenerOnSetFrameRateForRepresentation);
+
523 
+
524  bool AddLiveInfo(xml::RepresentationXmlNode* representation);
+
525 
+
526  // Returns true if |media_info_| has required fields to generate a valid
+
527  // Representation. Otherwise returns false.
+
528  bool HasRequiredMediaInfoFields();
+
529 
+
530  // Return false if the segment should be considered a new segment. True if the
+
531  // segment is contiguous.
+
532  bool IsContiguous(uint64_t start_time,
+
533  uint64_t duration,
+
534  uint64_t size) const;
+
535 
+
536  // Remove elements from |segment_infos_| if
+
537  // mpd_options_.time_shift_buffer_depth is specified. Increments
+
538  // |start_number_| by the number of segments removed.
+
539  void SlideWindow();
+
540 
+
541  // Note: Because 'mimeType' is a required field for a valid MPD, these return
+
542  // strings.
+
543  std::string GetVideoMimeType() const;
+
544  std::string GetAudioMimeType() const;
+
545 
+
546  // Gets the earliest, normalized segment timestamp. Returns true if
+
547  // successful, false otherwise.
+
548  bool GetEarliestTimestamp(double* timestamp_seconds);
+
549 
+
550  MediaInfo media_info_;
+
551  std::list<ContentProtectionElement> content_protection_elements_;
+
552  std::list<SegmentInfo> segment_infos_;
+
553 
+
554  base::Lock lock_;
+
555 
+
556  const uint32_t id_;
+
557  std::string mime_type_;
+
558  std::string codecs_;
+
559  BandwidthEstimator bandwidth_estimator_;
+
560  const MpdOptions& mpd_options_;
+
561 
+
562  // startNumber attribute for SegmentTemplate.
+
563  // Starts from 1.
+
564  uint32_t start_number_;
+
565 
+
566  // If this is not null, then Representation is responsible for calling the
+
567  // right methods at right timings.
+
568  scoped_ptr<RepresentationStateChangeListener> state_change_listener_;
+
569 
+
570  DISALLOW_COPY_AND_ASSIGN(Representation);
+
571 };
+
572 
+
573 } // namespace edash_packager
+
574 
+
575 #endif // MPD_BASE_MPD_BUILDER_H_
+
MpdType type() const
Definition: mpd_builder.h:91
+
virtual void AddNewSegment(uint64_t start_time, uint64_t duration, uint64_t size)
+
AdaptationSet(uint32_t adaptation_set_id, const std::string &lang, const MpdOptions &mpd_options, MpdBuilder::MpdType mpd_type, base::AtomicSequenceNumber *representation_counter)
Definition: mpd_builder.cc:636
+ +
Defines Mpd Options.
Definition: mpd_options.h:13
+ +
virtual int Group() const
Definition: mpd_builder.cc:793
+
virtual AdaptationSet * AddAdaptationSet(const std::string &lang)
Definition: mpd_builder.cc:392
+
Define an abstract file interface.
Definition: file.h:22
+
xml::ScopedXmlPtr< xmlNode >::type GetXml()
+
static void MakePathsRelativeToMpd(const std::string &mpd_path, MediaInfo *media_info)
Definition: mpd_builder.cc:608
+ +
This class generates DASH MPDs (Media Presentation Descriptions).
Definition: mpd_builder.h:56
+
void ForceSetSegmentAlignment(bool segment_alignment)
Definition: mpd_builder.cc:783
+
virtual void SetSampleDuration(uint32_t sample_duration)
+
void AddBaseUrl(const std::string &base_url)
Definition: mpd_builder.cc:387
+
virtual void UpdateContentProtectionPssh(const std::string &drm_uuid, const std::string &pssh)
+
Representation(const MediaInfo &media_info, const MpdOptions &mpd_options, uint32_t representation_id, scoped_ptr< RepresentationStateChangeListener > state_change_listener)
Definition: mpd_builder.cc:986
+
virtual void SetGroup(int group_number)
Definition: mpd_builder.cc:789
+
virtual void OnNewSegmentForRepresentation(uint64_t start_time, uint64_t duration)=0
+
xml::ScopedXmlPtr< xmlNode >::type GetXml()
Definition: mpd_builder.cc:713
+
virtual void AddContentProtectionElement(const ContentProtectionElement &element)
+
virtual void OnSetFrameRateForRepresentation(uint32_t frame_duration, uint32_t timescale)=0
+
RepresentationType in MPD.
Definition: xml_node.h:128
+
bool WriteMpdToFile(media::File *output_file)
Definition: mpd_builder.cc:404
+
void OnSetFrameRateForRepresentation(uint32_t representation_id, uint32_t frame_duration, uint32_t timescale)
Definition: mpd_builder.cc:817
+
virtual Representation * AddRepresentation(const MediaInfo &media_info)
Definition: mpd_builder.cc:655
+ + + +
virtual void UpdateContentProtectionPssh(const std::string &drm_uuid, const std::string &pssh)
Definition: mpd_builder.cc:700
+
virtual bool ToString(std::string *output)
Definition: mpd_builder.cc:410
+
virtual void AddRole(Role role)
Definition: mpd_builder.cc:707
+
MpdBuilder(MpdType type, const MpdOptions &mpd_options)
Definition: mpd_builder.cc:380
+
virtual void AddContentProtectionElement(const ContentProtectionElement &element)
Definition: mpd_builder.cc:693
+ + +
void OnNewSegmentForRepresentation(uint32_t representation_id, uint64_t start_time, uint64_t duration)
Definition: mpd_builder.cc:804
+
+ + + + diff --git a/sdk/d6/dba/classedash__packager_1_1media_1_1ThreadedIoFile-members.html b/sdk/d6/dba/classedash__packager_1_1media_1_1ThreadedIoFile-members.html new file mode 100644 index 0000000000..ac7860c8d5 --- /dev/null +++ b/sdk/d6/dba/classedash__packager_1_1media_1_1ThreadedIoFile-members.html @@ -0,0 +1,127 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::ThreadedIoFile Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + + +
Close() OVERRIDEedash_packager::media::ThreadedIoFilevirtual
Delete(const char *file_name)edash_packager::media::Filestatic
File(const std::string &file_name) (defined in edash_packager::media::File)edash_packager::media::Fileinlineexplicitprotected
file_name() const edash_packager::media::Fileinline
Flush() OVERRIDEedash_packager::media::ThreadedIoFilevirtual
GetFileSize(const char *file_name)edash_packager::media::Filestatic
kInputMode enum value (defined in edash_packager::media::ThreadedIoFile)edash_packager::media::ThreadedIoFile
kOutputMode enum value (defined in edash_packager::media::ThreadedIoFile)edash_packager::media::ThreadedIoFile
Mode enum name (defined in edash_packager::media::ThreadedIoFile)edash_packager::media::ThreadedIoFile
Open() OVERRIDEedash_packager::media::ThreadedIoFileprotectedvirtual
edash_packager::media::File::Open(const char *file_name, const char *mode)edash_packager::media::Filestatic
OpenWithNoBuffering(const char *file_name, const char *mode)edash_packager::media::Filestatic
Read(void *buffer, uint64_t length) OVERRIDEedash_packager::media::ThreadedIoFilevirtual
ReadFileToString(const char *file_name, std::string *contents)edash_packager::media::Filestatic
RunInInputMode() (defined in edash_packager::media::ThreadedIoFile)edash_packager::media::ThreadedIoFileprotected
RunInOutputMode() (defined in edash_packager::media::ThreadedIoFile)edash_packager::media::ThreadedIoFileprotected
Seek(uint64_t position) OVERRIDEedash_packager::media::ThreadedIoFilevirtual
Size() OVERRIDEedash_packager::media::ThreadedIoFilevirtual
Tell(uint64_t *position) OVERRIDEedash_packager::media::ThreadedIoFilevirtual
ThreadedIoFile(scoped_ptr< File, FileCloser > internal_file, Mode mode, uint64_t io_cache_size, uint64_t io_block_size) (defined in edash_packager::media::ThreadedIoFile)edash_packager::media::ThreadedIoFile
Write(const void *buffer, uint64_t length) OVERRIDEedash_packager::media::ThreadedIoFilevirtual
~File()edash_packager::media::Fileinlineprotectedvirtual
~ThreadedIoFile() (defined in edash_packager::media::ThreadedIoFile)edash_packager::media::ThreadedIoFileprotectedvirtual
+ + + + diff --git a/sdk/d6/dbb/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset-members.html b/sdk/d6/dbb/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset-members.html new file mode 100644 index 0000000000..e28ff91c53 --- /dev/null +++ b/sdk/d6/dbb/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset-members.html @@ -0,0 +1,106 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::CompositionOffset Member List
+
+
+ +

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

+ + + +
sample_count (defined in edash_packager::media::mp4::CompositionOffset)edash_packager::media::mp4::CompositionOffset
sample_offset (defined in edash_packager::media::mp4::CompositionOffset)edash_packager::media::mp4::CompositionOffset
+ + + + diff --git a/sdk/d6/dc4/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor.html b/sdk/d6/dc4/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor.html new file mode 100644 index 0000000000..b205ad2dc7 --- /dev/null +++ b/sdk/d6/dc4/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor.html @@ -0,0 +1,216 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::AesCbcPkcs5Encryptor Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::AesCbcPkcs5Encryptor Class Reference
+
+
+ + + + + + + + + + +

+Public Member Functions

bool InitializeWithIv (const std::vector< uint8_t > &key, const std::vector< uint8_t > &iv)
 
void Encrypt (const std::string &plaintext, std::string *ciphertext)
 
bool SetIv (const std::vector< uint8_t > &iv)
 
+const std::vector< uint8_t > & iv () const
 
+

Detailed Description

+
+

Definition at line 115 of file aes_encryptor.h.

+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void edash_packager::media::AesCbcPkcs5Encryptor::Encrypt (const std::string & plaintext,
std::string * ciphertext 
)
+
+
Parameters
+ + + +
plaintextwill be PKCS5 padded before being encrypted.
ciphertextshould not be NULL.
+
+
+ +

Definition at line 166 of file aes_encryptor.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::AesCbcPkcs5Encryptor::InitializeWithIv (const std::vector< uint8_t > & key,
const std::vector< uint8_t > & iv 
)
+
+

Initialize the encryptor with specified key and IV.

+
Parameters
+ + + +
keyshould be 128 bits or 192 bits or 256 bits in size as defined in AES spec.
ivshould be 16 bytes in size.
+
+
+
Returns
true on successful initialization, false otherwise.
+ +

Definition at line 148 of file aes_encryptor.cc.

+ +
+
+ +
+
+ + + + + + + + +
bool edash_packager::media::AesCbcPkcs5Encryptor::SetIv (const std::vector< uint8_t > & iv)
+
+
Returns
true if successful, false if the input is invalid.
+ +

Definition at line 187 of file aes_encryptor.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d6/de6/classedash__packager_1_1media_1_1KeyFetcher-members.html b/sdk/d6/de6/classedash__packager_1_1media_1_1KeyFetcher-members.html new file mode 100644 index 0000000000..c4adc2c87f --- /dev/null +++ b/sdk/d6/de6/classedash__packager_1_1media_1_1KeyFetcher-members.html @@ -0,0 +1,107 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::KeyFetcher Member List
+
+
+ +

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

+ + + + +
FetchKeys(const std::string &service_address, const std::string &request, std::string *response)=0edash_packager::media::KeyFetcherpure virtual
KeyFetcher() (defined in edash_packager::media::KeyFetcher)edash_packager::media::KeyFetcher
~KeyFetcher() (defined in edash_packager::media::KeyFetcher)edash_packager::media::KeyFetchervirtual
+ + + + diff --git a/sdk/d6/de7/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor-members.html b/sdk/d6/de7/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor-members.html new file mode 100644 index 0000000000..eace77978d --- /dev/null +++ b/sdk/d6/de7/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor-members.html @@ -0,0 +1,110 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::AesCbcPkcs5Encryptor Member List
+
+
+ +

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

+ + + + + + + +
AesCbcPkcs5Encryptor() (defined in edash_packager::media::AesCbcPkcs5Encryptor)edash_packager::media::AesCbcPkcs5Encryptor
Encrypt(const std::string &plaintext, std::string *ciphertext)edash_packager::media::AesCbcPkcs5Encryptor
InitializeWithIv(const std::vector< uint8_t > &key, const std::vector< uint8_t > &iv)edash_packager::media::AesCbcPkcs5Encryptor
iv() const (defined in edash_packager::media::AesCbcPkcs5Encryptor)edash_packager::media::AesCbcPkcs5Encryptorinline
SetIv(const std::vector< uint8_t > &iv)edash_packager::media::AesCbcPkcs5Encryptor
~AesCbcPkcs5Encryptor() (defined in edash_packager::media::AesCbcPkcs5Encryptor)edash_packager::media::AesCbcPkcs5Encryptor
+ + + + diff --git a/sdk/d6/de8/local__file_8cc_source.html b/sdk/d6/de8/local__file_8cc_source.html new file mode 100644 index 0000000000..adc123953e --- /dev/null +++ b/sdk/d6/de8/local__file_8cc_source.html @@ -0,0 +1,199 @@ + + + + + + +DASH Media Packaging SDK: media/file/local_file.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
local_file.cc
+
+
+
1 // Copyright 2014 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/file/local_file.h"
+
8 
+
9 #include <stdio.h>
+
10 
+
11 #include "packager/base/file_util.h"
+
12 #include "packager/base/logging.h"
+
13 
+
14 namespace edash_packager {
+
15 namespace media {
+
16 
+
17 LocalFile::LocalFile(const char* file_name, const char* mode)
+
18  : File(file_name), file_mode_(mode), internal_file_(NULL) {}
+
19 
+ +
21  bool result = true;
+
22  if (internal_file_) {
+
23  result = base::CloseFile(internal_file_);
+
24  internal_file_ = NULL;
+
25  }
+
26  delete this;
+
27  return result;
+
28 }
+
29 
+
30 int64_t LocalFile::Read(void* buffer, uint64_t length) {
+
31  DCHECK(buffer != NULL);
+
32  DCHECK(internal_file_ != NULL);
+
33  return fread(buffer, sizeof(char), length, internal_file_);
+
34 }
+
35 
+
36 int64_t LocalFile::Write(const void* buffer, uint64_t length) {
+
37  DCHECK(buffer != NULL);
+
38  DCHECK(internal_file_ != NULL);
+
39  return fwrite(buffer, sizeof(char), length, internal_file_);
+
40 }
+
41 
+
42 int64_t LocalFile::Size() {
+
43  DCHECK(internal_file_ != NULL);
+
44 
+
45  // Flush any buffered data, so we get the true file size.
+
46  if (!Flush()) {
+
47  LOG(ERROR) << "Cannot flush file.";
+
48  return -1;
+
49  }
+
50 
+
51  int64_t file_size;
+
52  if (!base::GetFileSize(base::FilePath(file_name()), &file_size)) {
+
53  LOG(ERROR) << "Cannot get file size.";
+
54  return -1;
+
55  }
+
56  return file_size;
+
57 }
+
58 
+ +
60  DCHECK(internal_file_ != NULL);
+
61  return ((fflush(internal_file_) == 0) && !ferror(internal_file_));
+
62 }
+
63 
+
64 bool LocalFile::Seek(uint64_t position) {
+
65  return fseeko(internal_file_, position, SEEK_SET) >= 0;
+
66 }
+
67 
+
68 bool LocalFile::Tell(uint64_t* position) {
+
69  off_t offset = ftello(internal_file_);
+
70  if (offset < 0)
+
71  return false;
+
72  *position = offset;
+
73  return true;
+
74 }
+
75 
+
76 LocalFile::~LocalFile() {}
+
77 
+ +
79  internal_file_ =
+
80  base::OpenFile(base::FilePath(file_name()), file_mode_.c_str());
+
81  return (internal_file_ != NULL);
+
82 }
+
83 
+
84 bool LocalFile::Delete(const char* file_name) {
+
85  return base::DeleteFile(base::FilePath(file_name), false);
+
86 }
+
87 
+
88 } // namespace media
+
89 } // namespace edash_packager
+
virtual int64_t Read(void *buffer, uint64_t length) OVERRIDE
Definition: local_file.cc:30
+
virtual bool Tell(uint64_t *position) OVERRIDE
Definition: local_file.cc:68
+
Define an abstract file interface.
Definition: file.h:22
+
LocalFile(const char *file_name, const char *mode)
Definition: local_file.cc:17
+
virtual bool Close() OVERRIDE
Definition: local_file.cc:20
+
virtual bool Flush() OVERRIDE
Definition: local_file.cc:59
+
const std::string & file_name() const
Definition: file.h:89
+
virtual int64_t Size() OVERRIDE
Definition: local_file.cc:42
+
virtual bool Open() OVERRIDE
Internal open. Should not be used directly.
Definition: local_file.cc:78
+
static bool Delete(const char *file_name)
Definition: local_file.cc:84
+
virtual bool Seek(uint64_t position) OVERRIDE
Definition: local_file.cc:64
+
virtual int64_t Write(const void *buffer, uint64_t length) OVERRIDE
Definition: local_file.cc:36
+
+ + + + diff --git a/sdk/d6/de8/network__util_8h_source.html b/sdk/d6/de8/network__util_8h_source.html new file mode 100644 index 0000000000..6aab25f422 --- /dev/null +++ b/sdk/d6/de8/network__util_8h_source.html @@ -0,0 +1,118 @@ + + + + + + +DASH Media Packaging SDK: media/base/network_util.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
network_util.h
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_BASE_NETWORK_UTIL_H_
+
6 #define MEDIA_BASE_NETWORK_UTIL_H_
+
7 
+
8 #include <stdint.h>
+
9 
+
10 namespace edash_packager {
+
11 namespace media {
+
12 
+
13 uint32_t ntohlFromBuffer(const unsigned char* buf);
+
14 uint16_t ntohsFromBuffer(const unsigned char* buf);
+
15 uint64_t ntohllFromBuffer(const unsigned char* buf);
+
16 
+
17 } // namespace media
+
18 } // namespace edash_packager
+
19 
+
20 #endif // MEDIA_BASE_NETWORK_UTIL_H_
+
+ + + + diff --git a/sdk/d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html b/sdk/d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html new file mode 100644 index 0000000000..44e46cffb2 --- /dev/null +++ b/sdk/d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html @@ -0,0 +1,190 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::Movie Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::Movie Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::Movie:
+
+
+ + +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + +

+Public Attributes

+MovieHeader header
 
+MovieExtends extends
 
+std::vector< Tracktracks
 
+std::vector
+< ProtectionSystemSpecificHeader
pssh
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 426 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::Movie::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1452 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.png b/sdk/d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.png new file mode 100644 index 0000000000..11610ef095 Binary files /dev/null and b/sdk/d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.png differ diff --git a/sdk/d6/ded/ts__packet_8h_source.html b/sdk/d6/ded/ts__packet_8h_source.html new file mode 100644 index 0000000000..584ea87e86 --- /dev/null +++ b/sdk/d6/ded/ts__packet_8h_source.html @@ -0,0 +1,177 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp2t/ts_packet.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ts_packet.h
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_FORMATS_MP2T_TS_PACKET_H_
+
6 #define MEDIA_FORMATS_MP2T_TS_PACKET_H_
+
7 
+
8 #include <stdint.h>
+
9 
+
10 #include "packager/base/macros.h"
+
11 
+
12 namespace edash_packager {
+
13 namespace media {
+
14 
+
15 class BitReader;
+
16 
+
17 namespace mp2t {
+
18 
+
19 class TsPacket {
+
20  public:
+
21  static const int kPacketSize = 188;
+
22 
+
23  // Return the number of bytes to discard
+
24  // to be synchronized on a TS syncword.
+
25  static int Sync(const uint8_t* buf, int size);
+
26 
+
27  // Parse a TS packet.
+
28  // Return a TsPacket only when parsing was successful.
+
29  // Return NULL otherwise.
+
30  static TsPacket* Parse(const uint8_t* buf, int size);
+
31 
+
32  ~TsPacket();
+
33 
+
34  // TS header accessors.
+
35  bool payload_unit_start_indicator() const {
+
36  return payload_unit_start_indicator_;
+
37  }
+
38  int pid() const { return pid_; }
+
39  int continuity_counter() const { return continuity_counter_; }
+
40  bool discontinuity_indicator() const { return discontinuity_indicator_; }
+
41  bool random_access_indicator() const { return random_access_indicator_; }
+
42 
+
43  // Return the offset and the size of the payload.
+
44  const uint8_t* payload() const { return payload_; }
+
45  int payload_size() const { return payload_size_; }
+
46 
+
47  private:
+
48  TsPacket();
+
49 
+
50  // Parse an Mpeg2 TS header.
+
51  // The buffer size should be at least |kPacketSize|
+
52  bool ParseHeader(const uint8_t* buf);
+
53  bool ParseAdaptationField(BitReader* bit_reader,
+
54  int adaptation_field_length);
+
55 
+
56  // Size of the payload.
+
57  const uint8_t* payload_;
+
58  int payload_size_;
+
59 
+
60  // TS header.
+
61  bool payload_unit_start_indicator_;
+
62  int pid_;
+
63  int continuity_counter_;
+
64 
+
65  // Params from the adaptation field.
+
66  bool discontinuity_indicator_;
+
67  bool random_access_indicator_;
+
68 
+
69  DISALLOW_COPY_AND_ASSIGN(TsPacket);
+
70 };
+
71 
+
72 } // namespace mp2t
+
73 } // namespace media
+
74 } // namespace edash_packager
+
75 
+
76 #endif
+
77 
+
A class to read bit streams.
Definition: bit_reader.h:17
+ +
+ + + + diff --git a/sdk/d6/def/sync__sample__iterator_8cc_source.html b/sdk/d6/def/sync__sample__iterator_8cc_source.html new file mode 100644 index 0000000000..0f6c50d3f0 --- /dev/null +++ b/sdk/d6/def/sync__sample__iterator_8cc_source.html @@ -0,0 +1,148 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/sync_sample_iterator.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sync_sample_iterator.cc
+
+
+
1 // Copyright 2014 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/formats/mp4/sync_sample_iterator.h"
+
8 
+
9 #include <algorithm>
+
10 
+
11 namespace edash_packager {
+
12 namespace media {
+
13 namespace mp4 {
+
14 
+ +
16  : sample_number_(1),
+
17  sync_sample_vector_(sync_sample.sample_number),
+
18  iterator_(sync_sample_vector_.begin()),
+
19  is_empty_(iterator_ == sync_sample_vector_.end()) {}
+
20 SyncSampleIterator::~SyncSampleIterator() {}
+
21 
+ +
23  if (iterator_ != sync_sample_vector_.end() && sample_number_ == *iterator_)
+
24  ++iterator_;
+
25  ++sample_number_;
+
26  return true;
+
27 }
+
28 
+ +
30  // If the sync sample box is not present, every sample is a sync sample.
+
31  if (is_empty_)
+
32  return true;
+
33  return iterator_ != sync_sample_vector_.end() && sample_number_ == *iterator_;
+
34 }
+
35 
+
36 bool SyncSampleIterator::IsSyncSample(uint32_t sample) const {
+
37  // If the sync sample box is not present, every sample is a sync sample.
+
38  if (is_empty_)
+
39  return true;
+
40  return std::binary_search(
+
41  sync_sample_vector_.begin(), sync_sample_vector_.end(), sample);
+
42 }
+
43 
+
44 } // namespace mp4
+
45 } // namespace media
+
46 } // namespace edash_packager
+
SyncSampleIterator(const SyncSample &sync_sample)
Create a new SyncSampleIterator from sync sample box.
+ + + +
+ + + + diff --git a/sdk/d6/df9/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser-members.html b/sdk/d6/df9/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser-members.html new file mode 100644 index 0000000000..f0b4f28f10 --- /dev/null +++ b/sdk/d6/df9/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser-members.html @@ -0,0 +1,114 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::MP4MediaParser Member List
+
+
+ +

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

+ + + + + + + + + + + +
Flush() OVERRIDEedash_packager::media::mp4::MP4MediaParservirtual
Init(const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source) OVERRIDEedash_packager::media::mp4::MP4MediaParservirtual
InitCB typedefedash_packager::media::MediaParser
LoadMoov(const std::string &file_path)edash_packager::media::mp4::MP4MediaParser
MediaParser() (defined in edash_packager::media::MediaParser)edash_packager::media::MediaParserinline
MP4MediaParser() (defined in edash_packager::media::mp4::MP4MediaParser)edash_packager::media::mp4::MP4MediaParser
NewSampleCB typedefedash_packager::media::MediaParser
Parse(const uint8_t *buf, int size) OVERRIDEedash_packager::media::mp4::MP4MediaParservirtual
~MediaParser() (defined in edash_packager::media::MediaParser)edash_packager::media::MediaParserinlinevirtual
~MP4MediaParser() (defined in edash_packager::media::mp4::MP4MediaParser)edash_packager::media::mp4::MP4MediaParservirtual
+ + + + diff --git a/sdk/d7/d0b/muxer__listener__test__helper_8h_source.html b/sdk/d7/d0b/muxer__listener__test__helper_8h_source.html new file mode 100644 index 0000000000..9885810ac5 --- /dev/null +++ b/sdk/d7/d0b/muxer__listener__test__helper_8h_source.html @@ -0,0 +1,204 @@ + + + + + + +DASH Media Packaging SDK: media/event/muxer_listener_test_helper.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
muxer_listener_test_helper.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_EVENT_MUXER_LISTENER_TEST_HELPER_H_
+
8 #define MEDIA_EVENT_MUXER_LISTENER_TEST_HELPER_H_
+
9 
+
10 #include <stdint.h>
+
11 #include <vector>
+
12 
+
13 #include "packager/base/memory/ref_counted.h"
+
14 #include "packager/media/base/muxer_options.h"
+
15 #include "packager/media/base/stream_info.h"
+
16 #include "packager/media/base/video_stream_info.h"
+
17 #include "packager/mpd/base/media_info.pb.h"
+
18 
+
19 namespace edash_packager {
+
20 
+
21 namespace media {
+
22 
+
23 const char kExpectedDefaultMediaInfo[] =
+
24  "bandwidth: 7620\n"
+
25  "video_info {\n"
+
26  " codec: 'avc1.010101'\n"
+
27  " width: 720\n"
+
28  " height: 480\n"
+
29  " time_scale: 10\n"
+
30  " pixel_width: 1\n"
+
31  " pixel_height: 1\n"
+
32  "}\n"
+
33  "init_range {\n"
+
34  " begin: 0\n"
+
35  " end: 120\n"
+
36  "}\n"
+
37  "index_range {\n"
+
38  " begin: 121\n"
+
39  " end: 221\n"
+
40  "}\n"
+
41  "reference_time_scale: 1000\n"
+
42  "container_type: 1\n"
+
43  "media_file_name: 'test_output_file_name.mp4'\n"
+
44  "media_duration_seconds: 10.5\n";
+
45 const uint32_t kDefaultReferenceTimeScale = 1000u;
+
46 
+
47 // Struct that gets passed for to CreateVideoStreamInfo() to create a
+
48 // StreamInfo instance. Useful for generating multiple VideoStreamInfo with
+
49 // slightly different parameters.
+ + + +
53  int track_id;
+
54  uint32_t time_scale;
+
55  uint64_t duration;
+
56  VideoCodec codec;
+
57  std::string codec_string;
+
58  std::string language;
+
59  uint16_t width;
+
60  uint16_t height;
+
61  uint32_t pixel_width;
+
62  uint32_t pixel_height;
+
63  uint8_t nalu_length_size;
+
64  std::vector<uint8_t> extra_data;
+
65  bool is_encrypted;
+
66 };
+
67 
+
68 // Note that this does not have vector of StreamInfo pointer.
+ +
70  bool has_init_range;
+
71  uint64_t init_range_start;
+
72  uint64_t init_range_end;
+
73  bool has_index_range;
+
74  uint64_t index_range_start;
+
75  uint64_t index_range_end;
+
76  float duration_seconds;
+
77  uint64_t file_size;
+
78 };
+
79 
+
80 // Creates StreamInfo instance from VideoStreamInfoParameters.
+
81 scoped_refptr<StreamInfo> CreateVideoStreamInfo(
+
82  const VideoStreamInfoParameters& param);
+
83 
+
84 // Returns the "default" VideoStreamInfoParameters for testing.
+
85 VideoStreamInfoParameters GetDefaultVideoStreamInfoParams();
+
86 
+
87 // Returns the "default" values for OnMediaEnd().
+
88 OnMediaEndParameters GetDefaultOnMediaEndParams();
+
89 
+
90 // Sets "default" values for muxer_options for testing.
+
91 void SetDefaultMuxerOptionsValues(MuxerOptions* muxer_options);
+
92 
+
93 // Expect that expect and actual are equal.
+
94 void ExpectMediaInfoEqual(const MediaInfo& expect, const MediaInfo& actual);
+
95 
+
96 // Returns true if expect and actual are equal.
+
97 bool MediaInfoEqual(const MediaInfo& expect, const MediaInfo& actual);
+
98 
+
99 } // namespace media
+
100 
+
101 } // namespace edash_packager
+
102 
+
103 #endif // MEDIA_EVENT_MUXER_LISTENER_TEST_HELPER_H_
+ + +
This structure contains the list of configuration options for Muxer.
Definition: muxer_options.h:18
+
+ + + + diff --git a/sdk/d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html b/sdk/d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html new file mode 100644 index 0000000000..07b956b652 --- /dev/null +++ b/sdk/d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html @@ -0,0 +1,188 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::DataReference Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::DataReference Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::DataReference:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + +

+Public Attributes

+std::vector< DataEntryUrldata_entry
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 364 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::DataReference::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1252 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.png b/sdk/d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.png new file mode 100644 index 0000000000..570a4357a5 Binary files /dev/null and b/sdk/d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.png differ diff --git a/sdk/d7/d12/media__parser_8h_source.html b/sdk/d7/d12/media__parser_8h_source.html new file mode 100644 index 0000000000..f1fdd1bbe9 --- /dev/null +++ b/sdk/d7/d12/media__parser_8h_source.html @@ -0,0 +1,157 @@ + + + + + + +DASH Media Packaging SDK: media/base/media_parser.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
media_parser.h
+
+
+
1 // Copyright 2014 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_BASE_MEDIA_PARSER_H_
+
8 #define MEDIA_BASE_MEDIA_PARSER_H_
+
9 
+
10 #include <string>
+
11 #include <vector>
+
12 
+
13 #include "packager/base/callback.h"
+
14 #include "packager/base/memory/ref_counted.h"
+
15 #include "packager/base/memory/scoped_ptr.h"
+
16 #include "packager/media/base/container_names.h"
+
17 
+
18 namespace edash_packager {
+
19 namespace media {
+
20 
+
21 class KeySource;
+
22 class MediaSample;
+
23 class StreamInfo;
+
24 
+
25 class MediaParser {
+
26  public:
+
27  MediaParser() {}
+
28  virtual ~MediaParser() {}
+
29 
+
33  typedef base::Callback<
+
34  void(const std::vector<scoped_refptr<StreamInfo> >& stream_info)> InitCB;
+
35 
+
41  typedef base::Callback<bool(uint32_t track_id,
+
42  const scoped_refptr<MediaSample>& media_sample)>
+ +
44 
+
52  virtual void Init(const InitCB& init_cb,
+
53  const NewSampleCB& new_sample_cb,
+
54  KeySource* decryption_key_source) = 0;
+
55 
+
58  virtual void Flush() = 0;
+
59 
+
62  virtual bool Parse(const uint8_t* buf, int size) = 0;
+
63 
+
64  private:
+
65  DISALLOW_COPY_AND_ASSIGN(MediaParser);
+
66 };
+
67 
+
68 } // namespace media
+
69 } // namespace edash_packager
+
70 
+
71 #endif // MEDIA_BASE_MEDIA_PARSER_H_
+
virtual bool Parse(const uint8_t *buf, int size)=0
+ +
base::Callback< bool(uint32_t track_id, const scoped_refptr< MediaSample > &media_sample)> NewSampleCB
Definition: media_parser.h:43
+
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:29
+
base::Callback< void(const std::vector< scoped_refptr< StreamInfo > > &stream_info)> InitCB
Definition: media_parser.h:34
+
virtual void Init(const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source)=0
+ +
+ + + + diff --git a/sdk/d7/d15/classedash__packager_1_1Representation.html b/sdk/d7/d15/classedash__packager_1_1Representation.html new file mode 100644 index 0000000000..d5768adcaa --- /dev/null +++ b/sdk/d7/d15/classedash__packager_1_1Representation.html @@ -0,0 +1,430 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::Representation Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::Representation Class Reference
+
+
+ +

#include <mpd_builder.h>

+
+Inheritance diagram for edash_packager::Representation:
+
+
+ + +edash_packager::MockRepresentation + +
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool Init ()
 
virtual void AddContentProtectionElement (const ContentProtectionElement &element)
 
virtual void UpdateContentProtectionPssh (const std::string &drm_uuid, const std::string &pssh)
 
+class AdaptationSet
 
virtual void AddNewSegment (uint64_t start_time, uint64_t duration, uint64_t size)
 
virtual void SetSampleDuration (uint32_t sample_duration)
 
xml::ScopedXmlPtr< xmlNode >::type GetXml ()
 
uint32_t id () const
 
 Representation (const MediaInfo &media_info, const MpdOptions &mpd_options, uint32_t representation_id, scoped_ptr< RepresentationStateChangeListener > state_change_listener)
 
+

Detailed Description

+

Representation class contains references to a single media stream, as well as optional ContentProtection elements for that stream.

+ +

Definition at line 431 of file mpd_builder.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
edash_packager::Representation::Representation (const MediaInfo & media_info,
const MpdOptionsmpd_options,
uint32_t representation_id,
scoped_ptr< RepresentationStateChangeListenerstate_change_listener 
)
+
+protected
+
+
Parameters
+ + + + + +
media_infois a MediaInfo containing information on the media. media_info.bandwidth is required for 'static' profile. If media_info.bandwidth is not present in 'dynamic' profile, this tries to estimate it using the info passed to AddNewSegment().
mpd_optionsis options for the entire MPD.
representation_idis the numeric ID for the <Representation>.
state_change_listeneris an event handler for state changes to the representation. If null, no event handler registered.
+
+
+ +

Definition at line 986 of file mpd_builder.cc.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
void edash_packager::Representation::AddContentProtectionElement (const ContentProtectionElementelement)
+
+virtual
+
+

Add a ContenProtection element to the representation. Representation does not add <ContentProtection> elements automatically to itself even if media_info passed to AdaptationSet::AddRepresentation() has media_info.protected_content populated. This is because some MPDs should have the elements at AdaptationSet level and some at Representation level.

+
Parameters
+ + +
elementcontains the ContentProtection element contents. If element has {value, schemeIdUri} set and has {“value”, “schemeIdUri”} as key for additional_attributes, then the former is used.
+
+
+ +

Definition at line 1038 of file mpd_builder.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void edash_packager::Representation::AddNewSegment (uint64_t start_time,
uint64_t duration,
uint64_t size 
)
+
+virtual
+
+

Add a media (sub)segment to the representation. AdaptationSetsubSegmentAlignment,segmentAlignment} cannot be set if this is not called for all Representations.

+
Parameters
+ + + + +
start_timeis the start time for the (sub)segment, in units of the stream's time scale.
durationis the duration of the segment, in units of the stream's time scale.
sizeof the segment in bytes.
+
+
+ +

Definition at line 1052 of file mpd_builder.cc.

+ +
+
+ +
+
+ + + + + + + +
xml::ScopedXmlPtr< xmlNode >::type edash_packager::Representation::GetXml ()
+
+
Returns
Copy of <Representation>.
+ +

Definition at line 1095 of file mpd_builder.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::Representation::id () const
+
+inline
+
+
Returns
ID number for <Representation>.
+ +

Definition at line 490 of file mpd_builder.h.

+ +
+
+ +
+
+ + + + + + + +
bool edash_packager::Representation::Init ()
+
+

Tries to initialize the instance. If this does not succeed, the instance should not be used.

+
Returns
true on success, false otherwise.
+ +

Definition at line 1000 of file mpd_builder.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void edash_packager::Representation::SetSampleDuration (uint32_t sample_duration)
+
+virtual
+
+

Set the sample duration of this Representation. Sample duration is not available right away especially for live. This allows setting the sample duration after the Representation has been initialized.

+
Parameters
+ + +
sample_durationis the duration of a sample.
+
+
+ +

Definition at line 1077 of file mpd_builder.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void edash_packager::Representation::UpdateContentProtectionPssh (const std::string & drm_uuid,
const std::string & pssh 
)
+
+virtual
+
+

Update the 'cenc:pssh' element for drm_uuid ContentProtection element. If the element does not exist, this will add one.

+
Parameters
+ + + +
drm_uuidis the UUID of the DRM for encryption.
psshis the content of <cenc:pssh> element. Note that DASH IF IOP mentions that this should be base64 encoded string of the whole pssh box.
+
+
+
Attention
This might get removed once DASH IF IOP specification makes a a clear guideline on how to handle key rotation. Also to get this working with shaka-player, this method DOES NOT update the PSSH element. Instead, it removes the element regardless of the content of pssh.
+ +

Definition at line 1045 of file mpd_builder.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d7/d15/classedash__packager_1_1Representation.png b/sdk/d7/d15/classedash__packager_1_1Representation.png new file mode 100644 index 0000000000..789a1ff32a Binary files /dev/null and b/sdk/d7/d15/classedash__packager_1_1Representation.png differ diff --git a/sdk/d7/d15/mpd__notifier_8h_source.html b/sdk/d7/d15/mpd__notifier_8h_source.html new file mode 100644 index 0000000000..c716190918 --- /dev/null +++ b/sdk/d7/d15/mpd__notifier_8h_source.html @@ -0,0 +1,177 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/mpd_notifier.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mpd_notifier.h
+
+
+
1 // Copyright 2014 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 // MpdNotifier is responsible for notifying the MpdBuilder class to generate an
+
8 // MPD file.
+
9 
+
10 #ifndef MPD_BASE_MPD_NOTIFIER_H_
+
11 #define MPD_BASE_MPD_NOTIFIER_H_
+
12 
+
13 #include <stdint.h>
+
14 #include <string>
+
15 #include <vector>
+
16 
+
17 #include "packager/base/macros.h"
+
18 
+
19 namespace edash_packager {
+
20 
+
21 class MediaInfo;
+
22 struct ContentProtectionElement;
+
23 
+
24 enum DashProfile {
+
25  kUnknownProfile,
+
26  kOnDemandProfile,
+
27  kLiveProfile,
+
28 };
+
29 
+
32 class MpdNotifier {
+
33  public:
+
34  MpdNotifier(DashProfile dash_profile) : dash_profile_(dash_profile) {};
+
35  virtual ~MpdNotifier() {};
+
36 
+
40  virtual bool Init() = 0;
+
41 
+
50  virtual bool NotifyNewContainer(const MediaInfo& media_info,
+
51  uint32_t* container_id) = 0;
+
52 
+
60  virtual bool NotifySampleDuration(uint32_t container_id,
+
61  uint32_t sample_duration) = 0;
+
62 
+
73  virtual bool NotifyNewSegment(uint32_t container_id,
+
74  uint64_t start_time,
+
75  uint64_t duration,
+
76  uint64_t size) = 0;
+
77 
+
87  virtual bool NotifyEncryptionUpdate(uint32_t container_id,
+
88  const std::string& drm_uuid,
+
89  const std::vector<uint8_t>& new_key_id,
+
90  const std::vector<uint8_t>& new_pssh) = 0;
+
91 
+
98  virtual bool AddContentProtectionElement(
+
99  uint32_t container_id,
+
100  const ContentProtectionElement& content_protection_element) = 0;
+
101 
+
105  virtual bool Flush() = 0;
+
106 
+
108  DashProfile dash_profile() const { return dash_profile_; }
+
109 
+
110  private:
+
111  const DashProfile dash_profile_;
+
112 
+
113  DISALLOW_COPY_AND_ASSIGN(MpdNotifier);
+
114 };
+
115 
+
116 } // namespace edash_packager
+
117 
+
118 #endif // MPD_BASE_MPD_NOTIFIER_H_
+
virtual bool AddContentProtectionElement(uint32_t container_id, const ContentProtectionElement &content_protection_element)=0
+
DashProfile dash_profile() const
Definition: mpd_notifier.h:108
+
virtual bool NotifyNewContainer(const MediaInfo &media_info, uint32_t *container_id)=0
+ + + +
virtual bool NotifySampleDuration(uint32_t container_id, uint32_t sample_duration)=0
+
virtual bool NotifyNewSegment(uint32_t container_id, uint64_t start_time, uint64_t duration, uint64_t size)=0
+
virtual bool NotifyEncryptionUpdate(uint32_t container_id, const std::string &drm_uuid, const std::vector< uint8_t > &new_key_id, const std::vector< uint8_t > &new_pssh)=0
+ +
+ + + + diff --git a/sdk/d7/d1c/structedash__packager_1_1media_1_1mp4_1_1DecodingTime.html b/sdk/d7/d1c/structedash__packager_1_1media_1_1mp4_1_1DecodingTime.html new file mode 100644 index 0000000000..6d42338ce4 --- /dev/null +++ b/sdk/d7/d1c/structedash__packager_1_1media_1_1mp4_1_1DecodingTime.html @@ -0,0 +1,120 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::DecodingTime Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::DecodingTime Struct Reference
+
+
+ + + + + + +

+Public Attributes

+uint32_t sample_count
 
+uint32_t sample_delta
 
+

Detailed Description

+
+

Definition at line 241 of file box_definitions.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/sdk/d7/d22/libcrypto__threading_8h_source.html b/sdk/d7/d22/libcrypto__threading_8h_source.html new file mode 100644 index 0000000000..683b2d26d2 --- /dev/null +++ b/sdk/d7/d22/libcrypto__threading_8h_source.html @@ -0,0 +1,126 @@ + + + + + + +DASH Media Packaging SDK: app/libcrypto_threading.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
libcrypto_threading.h
+
+
+
1 // Copyright 2014 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 APP_LIBCRYPTO_THREADING_H_
+
8 #define APP_LIBCRYPTO_THREADING_H_
+
9 
+
10 #include "packager/base/macros.h"
+
11 
+
12 namespace edash_packager {
+
13 namespace media {
+
14 
+ +
17  public:
+ + +
20 
+
21  private:
+
22  DISALLOW_COPY_AND_ASSIGN(LibcryptoThreading);
+
23 };
+
24 
+
25 } // namespace media
+
26 } // namespace edash_packager
+
27 
+
28 #endif // APP_LIBCRYPTO_THREADING_H_
+
Convenience class which initializes and terminates libcrypto threading.
+
+ + + + diff --git a/sdk/d7/d2a/classedash__packager_1_1media_1_1DecryptorSource-members.html b/sdk/d7/d2a/classedash__packager_1_1media_1_1DecryptorSource-members.html new file mode 100644 index 0000000000..5f51fbec0c --- /dev/null +++ b/sdk/d7/d2a/classedash__packager_1_1media_1_1DecryptorSource-members.html @@ -0,0 +1,107 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::DecryptorSource Member List
+
+
+ +

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

+ + + + +
DecryptorSource() (defined in edash_packager::media::DecryptorSource)edash_packager::media::DecryptorSourceinline
OnNeedKey(MediaContainerName container, const std::string &init_data)=0edash_packager::media::DecryptorSourcepure virtual
~DecryptorSource() (defined in edash_packager::media::DecryptorSource)edash_packager::media::DecryptorSourceinlinevirtual
+ + + + diff --git a/sdk/d7/d39/structedash__packager_1_1media_1_1mp4_1_1Movie-members.html b/sdk/d7/d39/structedash__packager_1_1media_1_1mp4_1_1Movie-members.html new file mode 100644 index 0000000000..ecc21e2873 --- /dev/null +++ b/sdk/d7/d39/structedash__packager_1_1media_1_1mp4_1_1Movie-members.html @@ -0,0 +1,118 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::Movie Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::Movie)edash_packager::media::mp4::Movievirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::Movievirtual
extends (defined in edash_packager::media::mp4::Movie)edash_packager::media::mp4::Movie
header (defined in edash_packager::media::mp4::Movie)edash_packager::media::mp4::Movie
Movie() (defined in edash_packager::media::mp4::Movie)edash_packager::media::mp4::Movie
Parse(BoxReader *reader)edash_packager::media::mp4::Box
pssh (defined in edash_packager::media::mp4::Movie)edash_packager::media::mp4::Movie
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::Movievirtual
tracks (defined in edash_packager::media::mp4::Movie)edash_packager::media::mp4::Movie
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~Movie() (defined in edash_packager::media::mp4::Movie)edash_packager::media::mp4::Movievirtual
+ + + + diff --git a/sdk/d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html b/sdk/d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html new file mode 100644 index 0000000000..7101eb8b7d --- /dev/null +++ b/sdk/d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html @@ -0,0 +1,495 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::VideoStreamInfo Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::VideoStreamInfo Class Reference
+
+
+ +

Holds video stream information. + More...

+ +

#include <video_stream_info.h>

+
+Inheritance diagram for edash_packager::media::VideoStreamInfo:
+
+
+ + +edash_packager::media::StreamInfo + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 VideoStreamInfo (int track_id, uint32_t time_scale, uint64_t duration, VideoCodec codec, const std::string &codec_string, const std::string &language, uint16_t width, uint16_t height, uint32_t pixel_width, uint32_t pixel_height, int16_t trick_play_rate, uint8_t nalu_length_size, const uint8_t *extra_data, size_t extra_data_size, bool is_encrypted)
 
+VideoCodec codec () const
 
+uint16_t width () const
 
+uint16_t height () const
 
uint32_t pixel_width () const
 
uint32_t pixel_height () const
 
+uint8_t nalu_length_size () const
 
+int16_t trick_play_rate () const
 
+void set_width (uint32_t width)
 
+void set_height (uint32_t height)
 
+void set_pixel_width (uint32_t pixel_width)
 
+void set_pixel_height (uint32_t pixel_height)
 
StreamInfo implementation overrides.
virtual bool IsValidConfig () const OVERRIDE
 
virtual std::string ToString () const OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::StreamInfo
StreamInfo (StreamType stream_type, int track_id, uint32_t time_scale, uint64_t duration, const std::string &codec_string, const std::string &language, const uint8_t *extra_data, size_t extra_data_size, bool is_encrypted)
 
+StreamType stream_type () const
 
+uint32_t track_id () const
 
+uint32_t time_scale () const
 
+uint64_t duration () const
 
+const std::string & codec_string () const
 
+const std::string & language () const
 
+bool is_encrypted () const
 
+const std::vector< uint8_t > & extra_data () const
 
+void set_duration (int duration)
 
+void set_extra_data (const std::vector< uint8_t > &data)
 
+void set_codec_string (const std::string &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.

+ +

Definition at line 28 of file video_stream_info.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
edash_packager::media::VideoStreamInfo::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 
)
+
+

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.

+
Parameters
+ + + +
pixel_widthis the width of the pixel. 0 if unknown.
pixel_heightis the height of the pixels. 0 if unknown.
+
+
+ +

Definition at line 44 of file video_stream_info.cc.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
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.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool edash_packager::media::VideoStreamInfo::IsValidConfig () const
+
+virtual
+
+
Returns
true if this object has appropriate configuration values, false otherwise.
+ +

Implements edash_packager::media::StreamInfo.

+ +

Definition at line 79 of file video_stream_info.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::VideoStreamInfo::pixel_height () const
+
+inline
+
+

Returns the pixel height.

+
Returns
0 if unknown.
+ +

Definition at line 66 of file video_stream_info.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::VideoStreamInfo::pixel_width () const
+
+inline
+
+

Returns the pixel width.

+
Returns
0 if unknown.
+ +

Definition at line 63 of file video_stream_info.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
std::string edash_packager::media::VideoStreamInfo::ToString () const
+
+virtual
+
+
Returns
A human-readable string describing the stream info.
+ +

Reimplemented from edash_packager::media::StreamInfo.

+ +

Definition at line 86 of file video_stream_info.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.png b/sdk/d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.png new file mode 100644 index 0000000000..3a1dac9b8b Binary files /dev/null and b/sdk/d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.png differ diff --git a/sdk/d7/d44/classedash__packager_1_1MockMpdNotifier.html b/sdk/d7/d44/classedash__packager_1_1MockMpdNotifier.html new file mode 100644 index 0000000000..04ebcddd45 --- /dev/null +++ b/sdk/d7/d44/classedash__packager_1_1MockMpdNotifier.html @@ -0,0 +1,168 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::MockMpdNotifier Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::MockMpdNotifier Class Reference
+
+
+
+Inheritance diagram for edash_packager::MockMpdNotifier:
+
+
+ + +edash_packager::MpdNotifier + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

MockMpdNotifier (DashProfile profile)
 
MOCK_METHOD0 (Init, bool())
 
MOCK_METHOD2 (NotifyNewContainer, bool(const MediaInfo &media_info, uint32_t *container_id))
 
MOCK_METHOD2 (NotifySampleDuration, bool(uint32_t container_id, uint32_t sample_duration))
 
MOCK_METHOD4 (NotifyNewSegment, bool(uint32_t container_id, uint64_t start_time, uint64_t duration, uint64_t size))
 
MOCK_METHOD4 (NotifyEncryptionUpdate, bool(uint32_t container_id, const std::string &drm_uuid, const std::vector< uint8_t > &new_key_id, const std::vector< uint8_t > &new_pssh))
 
MOCK_METHOD2 (AddContentProtectionElement, bool(uint32_t container_id, const ContentProtectionElement &content_protection_element))
 
MOCK_METHOD0 (Flush, bool())
 
- Public Member Functions inherited from edash_packager::MpdNotifier
MpdNotifier (DashProfile dash_profile)
 
virtual bool Init ()=0
 
virtual bool NotifyNewContainer (const MediaInfo &media_info, uint32_t *container_id)=0
 
virtual bool NotifySampleDuration (uint32_t container_id, uint32_t sample_duration)=0
 
virtual bool NotifyNewSegment (uint32_t container_id, uint64_t start_time, uint64_t duration, uint64_t size)=0
 
virtual bool NotifyEncryptionUpdate (uint32_t container_id, const std::string &drm_uuid, const std::vector< uint8_t > &new_key_id, const std::vector< uint8_t > &new_pssh)=0
 
virtual bool AddContentProtectionElement (uint32_t container_id, const ContentProtectionElement &content_protection_element)=0
 
virtual bool Flush ()=0
 
DashProfile dash_profile () const
 
+

Detailed Description

+
+

Definition at line 19 of file mock_mpd_notifier.h.

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d7/d44/classedash__packager_1_1MockMpdNotifier.png b/sdk/d7/d44/classedash__packager_1_1MockMpdNotifier.png new file mode 100644 index 0000000000..0cb34c227f Binary files /dev/null and b/sdk/d7/d44/classedash__packager_1_1MockMpdNotifier.png differ diff --git a/sdk/d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html b/sdk/d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html new file mode 100644 index 0000000000..4afd28c71e --- /dev/null +++ b/sdk/d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html @@ -0,0 +1,180 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::Edit Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::Edit Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::Edit:
+
+
+ + +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + +

+Public Attributes

+EditList list
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 156 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::Edit::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 821 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.png b/sdk/d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.png new file mode 100644 index 0000000000..0dcd2cc5cc Binary files /dev/null and b/sdk/d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.png differ diff --git a/sdk/d7/d50/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter-members.html b/sdk/d7/d50/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter-members.html new file mode 100644 index 0000000000..122d20aa75 --- /dev/null +++ b/sdk/d7/d50/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter-members.html @@ -0,0 +1,127 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::EncryptingFragmenter Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + + +
AddSample(scoped_refptr< MediaSample > sample) OVERRIDEedash_packager::media::mp4::EncryptingFragmentervirtual
aux_data() (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinline
CreateEncryptor()edash_packager::media::mp4::EncryptingFragmenterprotected
data() (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinline
earliest_presentation_time() const (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinline
EncryptingFragmenter(TrackFragment *traf, scoped_ptr< EncryptionKey > encryption_key, int64_t clear_time, uint8_t nalu_length_size)edash_packager::media::mp4::EncryptingFragmenter
encryption_key() (defined in edash_packager::media::mp4::EncryptingFragmenter)edash_packager::media::mp4::EncryptingFragmenterinlineprotected
encryptor() (defined in edash_packager::media::mp4::EncryptingFragmenter)edash_packager::media::mp4::EncryptingFragmenterinlineprotected
FinalizeFragment() OVERRIDEedash_packager::media::mp4::EncryptingFragmentervirtual
FinalizeFragmentForEncryption()edash_packager::media::mp4::EncryptingFragmenterprotectedvirtual
first_sap_time() const (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinline
fragment_duration() const (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinline
fragment_finalized() const (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinline
fragment_initialized() const (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinline
Fragmenter(TrackFragment *traf)edash_packager::media::mp4::Fragmenter
GenerateSegmentReference(SegmentReference *reference)edash_packager::media::mp4::Fragmenter
InitializeFragment(int64_t first_sample_dts) OVERRIDEedash_packager::media::mp4::EncryptingFragmentervirtual
OptimizeSampleEntries(std::vector< T > *entries, T *default_value)edash_packager::media::mp4::Fragmenterprotected
PrepareFragmentForEncryption(bool enable_encryption)edash_packager::media::mp4::EncryptingFragmenterprotectedvirtual
set_encryption_key(scoped_ptr< EncryptionKey > encryption_key) (defined in edash_packager::media::mp4::EncryptingFragmenter)edash_packager::media::mp4::EncryptingFragmenterinlineprotected
traf() (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinlineprotected
~EncryptingFragmenter() (defined in edash_packager::media::mp4::EncryptingFragmenter)edash_packager::media::mp4::EncryptingFragmentervirtual
~Fragmenter() (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmentervirtual
+ + + + diff --git a/sdk/d7/d51/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord-members.html b/sdk/d7/d51/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord-members.html new file mode 100644 index 0000000000..6d3a739719 --- /dev/null +++ b/sdk/d7/d51/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord-members.html @@ -0,0 +1,125 @@ + + + + + + +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() (defined in edash_packager::media::mp4::AVCDecoderConfigurationRecord)edash_packager::media::mp4::AVCDecoderConfigurationRecordvirtual
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
+ + + + diff --git a/sdk/d7/d55/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry.html b/sdk/d7/d55/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry.html new file mode 100644 index 0000000000..6c495486bb --- /dev/null +++ b/sdk/d7/d55/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry.html @@ -0,0 +1,124 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::CencSampleEncryptionInfoEntry Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::CencSampleEncryptionInfoEntry Struct Reference
+
+
+ + + + + + + + +

+Public Attributes

+bool is_encrypted
 
+uint8_t iv_size
 
+std::vector< uint8_t > key_id
 
+

Detailed Description

+
+

Definition at line 515 of file box_definitions.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d7/d79/structedash__packager_1_1media_1_1mp4_1_1MediaData-members.html b/sdk/d7/d79/structedash__packager_1_1media_1_1mp4_1_1MediaData-members.html new file mode 100644 index 0000000000..5a22ba9552 --- /dev/null +++ b/sdk/d7/d79/structedash__packager_1_1media_1_1mp4_1_1MediaData-members.html @@ -0,0 +1,110 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::MediaData Member List
+
+
+ +

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

+ + + + + + + +
BoxType() const (defined in edash_packager::media::mp4::MediaData)edash_packager::media::mp4::MediaData
ComputeSize() (defined in edash_packager::media::mp4::MediaData)edash_packager::media::mp4::MediaData
data_size (defined in edash_packager::media::mp4::MediaData)edash_packager::media::mp4::MediaData
MediaData() (defined in edash_packager::media::mp4::MediaData)edash_packager::media::mp4::MediaData
Write(BufferWriter *buffer_writer) (defined in edash_packager::media::mp4::MediaData)edash_packager::media::mp4::MediaData
~MediaData() (defined in edash_packager::media::mp4::MediaData)edash_packager::media::mp4::MediaData
+ + + + diff --git a/sdk/d7/d7b/structedash__packager_1_1media_1_1mp4_1_1DecodingTime-members.html b/sdk/d7/d7b/structedash__packager_1_1media_1_1mp4_1_1DecodingTime-members.html new file mode 100644 index 0000000000..07640fbd9a --- /dev/null +++ b/sdk/d7/d7b/structedash__packager_1_1media_1_1mp4_1_1DecodingTime-members.html @@ -0,0 +1,106 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::DecodingTime Member List
+
+
+ +

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

+ + + +
sample_count (defined in edash_packager::media::mp4::DecodingTime)edash_packager::media::mp4::DecodingTime
sample_delta (defined in edash_packager::media::mp4::DecodingTime)edash_packager::media::mp4::DecodingTime
+ + + + diff --git a/sdk/d7/d82/classedash__packager_1_1MpdBuilder-members.html b/sdk/d7/d82/classedash__packager_1_1MpdBuilder-members.html new file mode 100644 index 0000000000..0b6d5f7c54 --- /dev/null +++ b/sdk/d7/d82/classedash__packager_1_1MpdBuilder-members.html @@ -0,0 +1,116 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::MpdBuilder Member List
+
+
+ +

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

+ + + + + + + + + + + + + +
AddAdaptationSet(const std::string &lang)edash_packager::MpdBuildervirtual
AddBaseUrl(const std::string &base_url)edash_packager::MpdBuilder
DynamicMpdBuilderTest (defined in edash_packager::MpdBuilder)edash_packager::MpdBuilderfriend
kDynamic enum value (defined in edash_packager::MpdBuilder)edash_packager::MpdBuilder
kStatic enum value (defined in edash_packager::MpdBuilder)edash_packager::MpdBuilder
MakePathsRelativeToMpd(const std::string &mpd_path, MediaInfo *media_info)edash_packager::MpdBuilderstatic
MpdBuilder(MpdType type, const MpdOptions &mpd_options)edash_packager::MpdBuilder
MpdType enum name (defined in edash_packager::MpdBuilder)edash_packager::MpdBuilder
ToString(std::string *output)edash_packager::MpdBuildervirtual
type() const edash_packager::MpdBuilderinline
WriteMpdToFile(media::File *output_file)edash_packager::MpdBuilder
~MpdBuilder() (defined in edash_packager::MpdBuilder)edash_packager::MpdBuildervirtual
+ + + + diff --git a/sdk/d7/d87/video__stream__info_8h_source.html b/sdk/d7/d87/video__stream__info_8h_source.html new file mode 100644 index 0000000000..8845160c21 --- /dev/null +++ b/sdk/d7/d87/video__stream__info_8h_source.html @@ -0,0 +1,198 @@ + + + + + + +DASH Media Packaging SDK: media/base/video_stream_info.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
video_stream_info.h
+
+
+
1 // Copyright 2014 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_BASE_VIDEO_STREAM_INFO_H_
+
8 #define MEDIA_BASE_VIDEO_STREAM_INFO_H_
+
9 
+
10 #include "packager/media/base/stream_info.h"
+
11 
+
12 namespace edash_packager {
+
13 namespace media {
+
14 
+
15 enum VideoCodec {
+
16  kUnknownVideoCodec = 0,
+
17  kCodecH264,
+
18  kCodecVC1,
+
19  kCodecMPEG2,
+
20  kCodecMPEG4,
+
21  kCodecTheora,
+
22  kCodecVP8,
+
23  kCodecVP9,
+
24  kNumVideoCodec
+
25 };
+
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  virtual bool IsValidConfig() const OVERRIDE;
+
55  virtual 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; }
+
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  virtual ~VideoStreamInfo();
+
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.
+
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_
+
virtual bool IsValidConfig() const OVERRIDE
+ +
virtual std::string ToString() const OVERRIDE
+
Abstract class holds stream information.
Definition: stream_info.h:25
+
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/sdk/d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html b/sdk/d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html new file mode 100644 index 0000000000..77abde35e8 --- /dev/null +++ b/sdk/d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html @@ -0,0 +1,276 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::Box Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::Box Struct Referenceabstract
+
+
+ +

#include <box.h>

+
+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 + +
+ + + + + + + + + + +

+Public Member Functions

bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
virtual uint32_t ComputeSize ()=0
 
+virtual FourCC BoxType () const =0
 
+ + + + +

+Protected Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer)
 Read/write the mp4 box from/to BoxBuffer.
 
+ + + +

+Protected Attributes

uint32_t atom_size
 
+ + + +

+Friends

+class BoxBuffer
 
+

Detailed Description

+

Defines the base ISO BMFF box objects as defined in ISO 14496-12:2012 ISO BMFF section 4.2. All ISO BMFF compatible boxes inherit from either Box or FullBox.

+ +

Definition at line 28 of file box.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t edash_packager::media::mp4::Box::ComputeSize ()
+
+pure virtual
+
+

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.

+ +
+
+ +
+
+ + + + + + + + +
bool edash_packager::media::mp4::Box::Parse (BoxReaderreader)
+
+

Parse the mp4 box.

+
Parameters
+ + +
readerpoints to a BoxReader object which parses the box.
+
+
+ +

Definition at line 19 of file box.cc.

+ +
+
+ +
+
+ + + + + + + + +
void edash_packager::media::mp4::Box::Write (BufferWriterwriter)
+
+

Write the box to buffer. This function calls ComputeSize internally to compute box size.

+
Parameters
+ + +
writerpoints to a BufferWriter object which wraps the buffer for writing.
+
+
+ +

Definition at line 25 of file box.cc.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
uint32_t edash_packager::media::mp4::Box::atom_size
+
+protected
+
+

We don't support 64-bit atom sizes. 32-bit should be large enough for our current needs.

+ +

Definition at line 52 of file box.h.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.png b/sdk/d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.png new file mode 100644 index 0000000000..f386d4e99b Binary files /dev/null and b/sdk/d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.png differ diff --git a/sdk/d7/d9d/progress__listener_8h_source.html b/sdk/d7/d9d/progress__listener_8h_source.html new file mode 100644 index 0000000000..f91aeac1aa --- /dev/null +++ b/sdk/d7/d9d/progress__listener_8h_source.html @@ -0,0 +1,135 @@ + + + + + + +DASH Media Packaging SDK: media/event/progress_listener.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
progress_listener.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 // Event handler for progress updates.
+
8 
+
9 #ifndef MEDIA_EVENT_PROGRESS_LISTENER_H_
+
10 #define MEDIA_EVENT_PROGRESS_LISTENER_H_
+
11 
+
12 #include <stdint.h>
+
13 
+
14 #include "packager/base/macros.h"
+
15 
+
16 namespace edash_packager {
+
17 namespace media {
+
18 
+ +
21  public:
+
22  virtual ~ProgressListener() {}
+
23 
+
26  virtual void OnProgress(double progress) = 0;
+
27 
+
28  protected:
+
29  ProgressListener() {}
+
30 
+
31  private:
+
32  DISALLOW_COPY_AND_ASSIGN(ProgressListener);
+
33 };
+
34 
+
35 } // namespace media
+
36 } // namespace edash_packager
+
37 
+
38 #endif // MEDIA_EVENT_PROGRESS_LISTENER_H_
+
This class listens to progress updates events.
+
virtual void OnProgress(double progress)=0
+
+ + + + diff --git a/sdk/d7/da4/track__run__iterator_8h_source.html b/sdk/d7/da4/track__run__iterator_8h_source.html new file mode 100644 index 0000000000..dc4486355f --- /dev/null +++ b/sdk/d7/da4/track__run__iterator_8h_source.html @@ -0,0 +1,205 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/track_run_iterator.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
track_run_iterator.h
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_FORMATS_MP4_TRACK_RUN_ITERATOR_H_
+
6 #define MEDIA_FORMATS_MP4_TRACK_RUN_ITERATOR_H_
+
7 
+
8 #include <vector>
+
9 
+
10 #include "packager/base/memory/scoped_ptr.h"
+
11 #include "packager/media/formats/mp4/box_definitions.h"
+
12 #include "packager/media/formats/mp4/cenc.h"
+
13 
+
14 namespace edash_packager {
+
15 namespace media {
+
16 
+
17 class DecryptConfig;
+
18 
+
19 namespace mp4 {
+
20 
+
21 struct SampleInfo;
+
22 struct TrackRunInfo;
+
23 
+ +
25  public:
+
28  explicit TrackRunIterator(const Movie* moov);
+ +
30 
+
37  bool Init();
+
38 
+
41  bool Init(const MovieFragment& moof);
+
42 
+
45  bool IsRunValid() const;
+
48  bool IsSampleValid() const;
+
49 
+
52  void AdvanceRun();
+
55  void AdvanceSample();
+
56 
+ +
60 
+
65  bool CacheAuxInfo(const uint8_t* buf, int size);
+
66 
+
73  int64_t GetMaxClearOffset();
+
74 
+
77  uint32_t track_id() const;
+
78  int64_t aux_info_offset() const;
+
79  int aux_info_size() const;
+
80  bool is_encrypted() const;
+
81  bool is_audio() const;
+
82  bool is_video() const;
+
84 
+
86  const AudioSampleEntry& audio_description() const;
+
88  const VideoSampleEntry& video_description() const;
+
89 
+
92  int64_t sample_offset() const;
+
93  int sample_size() const;
+
94  int64_t dts() const;
+
95  int64_t cts() const;
+
96  int64_t duration() const;
+
97  bool is_keyframe() const;
+
99 
+
102  scoped_ptr<DecryptConfig> GetDecryptConfig();
+
103 
+
104  private:
+
105  void ResetRun();
+
106  const TrackEncryption& track_encryption() const;
+
107 
+
108  const Movie* moov_;
+
109 
+
110  std::vector<TrackRunInfo> runs_;
+
111  std::vector<TrackRunInfo>::const_iterator run_itr_;
+
112  std::vector<SampleInfo>::const_iterator sample_itr_;
+
113 
+
114  std::vector<FrameCENCInfo> cenc_info_;
+
115  // Track the start dts of the next segment, only useful if decode_time box is
+
116  // absent.
+
117  std::vector<int64_t> next_fragment_start_dts_;
+
118 
+
119  int64_t sample_dts_;
+
120  int64_t sample_offset_;
+
121 
+
122  DISALLOW_COPY_AND_ASSIGN(TrackRunIterator);
+
123 };
+
124 
+
125 } // namespace mp4
+
126 } // namespace media
+
127 } // namespace edash_packager
+
128 
+
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/sdk/d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html b/sdk/d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html new file mode 100644 index 0000000000..988e840a6c --- /dev/null +++ b/sdk/d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html @@ -0,0 +1,194 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::SampleSize Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::SampleSize Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::SampleSize:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + + + +

+Public Attributes

+uint32_t sample_size
 
+uint32_t sample_count
 
+std::vector< uint32_t > sizes
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 282 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::SampleSize::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 575 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.png b/sdk/d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.png new file mode 100644 index 0000000000..40c6553274 Binary files /dev/null and b/sdk/d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.png differ diff --git a/sdk/d7/db0/mpd__writer_8h_source.html b/sdk/d7/db0/mpd__writer_8h_source.html new file mode 100644 index 0000000000..4049945580 --- /dev/null +++ b/sdk/d7/db0/mpd__writer_8h_source.html @@ -0,0 +1,192 @@ + + + + + + +DASH Media Packaging SDK: mpd/util/mpd_writer.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mpd_writer.h
+
+
+
1 // Copyright 2014 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 // Class for reading in MediaInfo from files and writing out an MPD.
+
8 
+
9 #ifndef MPD_UTIL_MPD_WRITER_H_
+
10 #define MPD_UTIL_MPD_WRITER_H_
+
11 
+
12 #include <list>
+
13 #include <string>
+
14 #include <vector>
+
15 
+
16 #include "packager/base/macros.h"
+
17 #include "packager/base/memory/scoped_ptr.h"
+
18 #include "packager/mpd/base/mpd_notifier.h"
+
19 #include "packager/mpd/base/mpd_options.h"
+
20 
+
21 namespace edash_packager {
+
22 namespace media {
+
23 class File;
+
24 } // namespace media
+
25 } // namespace edash_packager
+
26 
+
27 namespace edash_packager {
+
28 
+
29 class MediaInfo;
+
30 
+ +
35  public:
+ +
37  virtual ~MpdNotifierFactory() {}
+
38 
+
39  virtual scoped_ptr<MpdNotifier> Create(
+
40  DashProfile dash_profile,
+
41  const MpdOptions& mpd_options,
+
42  const std::vector<std::string>& base_urls,
+
43  const std::string& output_path) = 0;
+
44 };
+
45 
+
46 // An instance of this class takes a set of MediaInfo files and generates an
+
47 // MPD when one of WriteMpd* methods are called. This generates an MPD with one
+
48 // <Period> element and at most three <AdaptationSet> elements, each for video,
+
49 // audio, and text. Information in MediaInfo will be put into one of the
+
50 // AdaptationSets by checking the video_info, audio_info, and text_info fields.
+
51 // Therefore, this cannot handle an instance of MediaInfo with video, audio, and
+
52 // text combination.
+
53 class MpdWriter {
+
54  public:
+
55  MpdWriter();
+
56  ~MpdWriter();
+
57 
+
58  // Add |media_info_path| for MPD generation.
+
59  // The content of |media_info_path| should be a string representation of
+
60  // MediaInfo, i.e. the content should be a result of using
+
61  // google::protobuf::TestFormat::Print*() methods.
+
62  // If necessary, this method can be called after WriteMpd*() methods.
+
63  bool AddFile(const std::string& media_info_path,
+
64  const std::string& mpd_path);
+
65 
+
66  // |base_url| will be used for <BaseURL> element for the MPD. The BaseURL
+
67  // element will be a direct child element of the <MPD> element.
+
68  void AddBaseUrl(const std::string& base_url);
+
69 
+
70  // Write the MPD to |file_name|. |file_name| should not be NULL.
+
71  // This opens the file in write mode, IOW if the
+
72  // file exists this will over write whatever is in the file.
+
73  // AddFile() should be called before calling this function to generate an MPD.
+
74  // On success, the MPD gets written to |file| and returns true, otherwise
+
75  // returns false.
+
76  // This method can be called multiple times, if necessary.
+
77  bool WriteMpdToFile(const char* file_name);
+
78 
+
79  private:
+
80  friend class MpdWriterTest;
+
81 
+
82  void SetMpdNotifierFactoryForTest(scoped_ptr<MpdNotifierFactory> factory);
+
83 
+
84  std::list<MediaInfo> media_infos_;
+
85  std::vector<std::string> base_urls_;
+
86 
+
87  scoped_ptr<MpdNotifierFactory> notifier_factory_;
+
88 
+
89  DISALLOW_COPY_AND_ASSIGN(MpdWriter);
+
90 };
+
91 
+
92 } // namespace edash_packager
+
93 
+
94 #endif // MPD_UTIL_MPD_WRITER_H_
+
Defines Mpd Options.
Definition: mpd_options.h:13
+ + +
+ + + + diff --git a/sdk/d7/db3/structedash__packager_1_1Element-members.html b/sdk/d7/db3/structedash__packager_1_1Element-members.html new file mode 100644 index 0000000000..098701659e --- /dev/null +++ b/sdk/d7/db3/structedash__packager_1_1Element-members.html @@ -0,0 +1,110 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::Element Member List
+
+
+ +

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

+ + + + + + + +
attributes (defined in edash_packager::Element)edash_packager::Element
content (defined in edash_packager::Element)edash_packager::Element
Element() (defined in edash_packager::Element)edash_packager::Element
name (defined in edash_packager::Element)edash_packager::Element
subelements (defined in edash_packager::Element)edash_packager::Element
~Element() (defined in edash_packager::Element)edash_packager::Element
+ + + + diff --git a/sdk/d7/dc6/byte__queue_8h_source.html b/sdk/d7/dc6/byte__queue_8h_source.html new file mode 100644 index 0000000000..57b60bc4d5 --- /dev/null +++ b/sdk/d7/dc6/byte__queue_8h_source.html @@ -0,0 +1,152 @@ + + + + + + +DASH Media Packaging SDK: media/base/byte_queue.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
byte_queue.h
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_BASE_BYTE_QUEUE_H_
+
6 #define MEDIA_BASE_BYTE_QUEUE_H_
+
7 
+
8 #include <stdint.h>
+
9 
+
10 #include "packager/base/memory/scoped_ptr.h"
+
11 
+
12 namespace edash_packager {
+
13 namespace media {
+
14 
+
20 class ByteQueue {
+
21  public:
+
22  ByteQueue();
+
23  ~ByteQueue();
+
24 
+
26  void Reset();
+
27 
+
29  void Push(const uint8_t* data, int size);
+
30 
+
33  void Peek(const uint8_t** data, int* size) const;
+
34 
+
37  void Pop(int count);
+
38 
+
39  private:
+
40  // Returns a pointer to the front of the queue.
+
41  uint8_t* front() const;
+
42 
+
43  scoped_ptr<uint8_t[]> buffer_;
+
44 
+
45  // Size of |buffer_|.
+
46  size_t size_;
+
47 
+
48  // Offset from the start of |buffer_| that marks the front of the queue.
+
49  size_t offset_;
+
50 
+
51  // Number of bytes stored in the queue.
+
52  int used_;
+
53 
+
54  DISALLOW_COPY_AND_ASSIGN(ByteQueue);
+
55 };
+
56 
+
57 } // namespace media
+
58 } // namespace edash_packager
+
59 
+
60 #endif // MEDIA_BASE_BYTE_QUEUE_H_
+
void Push(const uint8_t *data, int size)
Append new bytes to the end of the queue.
Definition: byte_queue.cc:29
+ + +
void Reset()
Reset the queue to the empty state.
Definition: byte_queue.cc:24
+
void Peek(const uint8_t **data, int *size) const
Definition: byte_queue.cc:63
+
+ + + + diff --git a/sdk/d7/dd0/mpd__notifier__util_8h_source.html b/sdk/d7/dd0/mpd__notifier__util_8h_source.html new file mode 100644 index 0000000000..aec3aa2755 --- /dev/null +++ b/sdk/d7/dd0/mpd__notifier__util_8h_source.html @@ -0,0 +1,136 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/mpd_notifier_util.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mpd_notifier_util.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 
+
9 
+
10 #ifndef MPD_BASE_MPD_NOTIFIER_UTIL_H_
+
11 #define MPD_BASE_MPD_NOTIFIER_UTIL_H_
+
12 
+
13 #include <string>
+
14 #include <vector>
+
15 
+
16 #include "packager/base/base64.h"
+
17 #include "packager/mpd/base/media_info.pb.h"
+
18 #include "packager/mpd/base/mpd_builder.h"
+
19 
+
20 namespace edash_packager{
+
21 
+
22 enum ContentType {
+
23  kContentTypeUnknown,
+
24  kContentTypeVideo,
+
25  kContentTypeAudio,
+
26  kContentTypeText
+
27 };
+
28 
+
32 bool WriteMpdToFile(const std::string& output_path, MpdBuilder* mpd_builder);
+
33 
+
37 ContentType GetContentType(const MediaInfo& media_info);
+
38 
+
40 std::string Uint8VectorToBase64(const std::vector<uint8_t>& input);
+
41 
+
42 } // namespace edash_packager
+
43 
+
44 #endif // MPD_BASE_MPD_NOTIFIER_UTIL_H_
+
std::string Uint8VectorToBase64(const std::vector< uint8_t > &input)
Converts uint8 vector into base64 encoded string.
+
bool WriteMpdToFile(const std::string &output_path, MpdBuilder *mpd_builder)
+
ContentType GetContentType(const MediaInfo &media_info)
+
+ + + + diff --git a/sdk/d7/dd4/request__signer_8h_source.html b/sdk/d7/dd4/request__signer_8h_source.html new file mode 100644 index 0000000000..6fd9048f8c --- /dev/null +++ b/sdk/d7/dd4/request__signer_8h_source.html @@ -0,0 +1,186 @@ + + + + + + +DASH Media Packaging SDK: media/base/request_signer.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
request_signer.h
+
+
+
1 // Copyright 2014 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_BASE_REQUEST_SIGNER_H_
+
8 #define MEDIA_BASE_REQUEST_SIGNER_H_
+
9 
+
10 #include <string>
+
11 
+
12 #include "packager/base/memory/scoped_ptr.h"
+
13 
+
14 namespace edash_packager {
+
15 namespace media {
+
16 
+
17 class AesCbcPkcs5Encryptor;
+
18 class RsaPrivateKey;
+
19 
+ +
22  public:
+
23  virtual ~RequestSigner();
+
24 
+
28  virtual bool GenerateSignature(const std::string& message,
+
29  std::string* signature) = 0;
+
30 
+
31  const std::string& signer_name() const { return signer_name_; }
+
32 
+
33  protected:
+
34  explicit RequestSigner(const std::string& signer_name);
+
35 
+
36  private:
+
37  std::string signer_name_;
+
38 
+
39  DISALLOW_COPY_AND_ASSIGN(RequestSigner);
+
40 };
+
41 
+ +
44  public:
+
45  virtual ~AesRequestSigner();
+
46 
+
49  static AesRequestSigner* CreateSigner(const std::string& signer_name,
+
50  const std::string& aes_key_hex,
+
51  const std::string& iv_hex);
+
52 
+
54  virtual bool GenerateSignature(const std::string& message,
+
55  std::string* signature) OVERRIDE;
+
56 
+
57  private:
+
58  AesRequestSigner(const std::string& signer_name,
+
59  scoped_ptr<AesCbcPkcs5Encryptor> encryptor);
+
60 
+
61  scoped_ptr<AesCbcPkcs5Encryptor> aes_cbc_encryptor_;
+
62 
+
63  DISALLOW_COPY_AND_ASSIGN(AesRequestSigner);
+
64 };
+
65 
+ +
68  public:
+
69  virtual ~RsaRequestSigner();
+
70 
+
73  static RsaRequestSigner* CreateSigner(const std::string& signer_name,
+
74  const std::string& pkcs1_rsa_key);
+
75 
+
77  virtual bool GenerateSignature(const std::string& message,
+
78  std::string* signature) OVERRIDE;
+
79 
+
80  private:
+
81  RsaRequestSigner(const std::string& signer_name,
+
82  scoped_ptr<RsaPrivateKey> rsa_private_key);
+
83 
+
84  scoped_ptr<RsaPrivateKey> rsa_private_key_;
+
85 
+
86  DISALLOW_COPY_AND_ASSIGN(RsaRequestSigner);
+
87 };
+
88 
+
89 } // namespace media
+
90 } // namespace edash_packager
+
91 
+
92 #endif // MEDIA_BASE_REQUEST_SIGNER_H_
+
virtual bool GenerateSignature(const std::string &message, std::string *signature) OVERRIDE
RequestSigner implementation override.
+
virtual bool GenerateSignature(const std::string &message, std::string *signature) OVERRIDE
RequestSigner implementation override.
+
static AesRequestSigner * CreateSigner(const std::string &signer_name, const std::string &aes_key_hex, const std::string &iv_hex)
+
virtual bool GenerateSignature(const std::string &message, std::string *signature)=0
+
AesRequestSigner uses AES-CBC signing.
+
static RsaRequestSigner * CreateSigner(const std::string &signer_name, const std::string &pkcs1_rsa_key)
+
RsaRequestSigner uses RSA-PSS signing.
+
Abstract class used for signature generation.
+
+ + + + diff --git a/sdk/d7/dd6/key__source_8cc_source.html b/sdk/d7/dd6/key__source_8cc_source.html new file mode 100644 index 0000000000..897e079e93 --- /dev/null +++ b/sdk/d7/dd6/key__source_8cc_source.html @@ -0,0 +1,304 @@ + + + + + + +DASH Media Packaging SDK: media/base/key_source.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
key_source.cc
+
+
+
1 // Copyright 2014 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/base/key_source.h"
+
8 
+
9 #include "packager/base/strings/string_number_conversions.h"
+
10 #include "packager/media/base/aes_encryptor.h"
+
11 #include "packager/media/base/buffer_writer.h"
+
12 
+
13 namespace {
+
14 const uint8_t kWidevineSystemId[] = {0xed, 0xef, 0x8b, 0xa9, 0x79, 0xd6,
+
15  0x4a, 0xce, 0xa3, 0xc8, 0x27, 0xdc,
+
16  0xd5, 0x1d, 0x21, 0xed};
+
17 // TODO(kqyang): Consider making it configurable.
+
18 const char kDefaultUUID[] = "edef8ba9-79d6-4ace-a3c8-27dcd51d21ed";
+
19 const char kDefaultSystemName[] = "";
+
20 } // namespace
+
21 
+
22 namespace edash_packager {
+
23 namespace media {
+
24 
+
25 EncryptionKey::EncryptionKey() {}
+
26 EncryptionKey::~EncryptionKey() {}
+
27 
+
28 KeySource::~KeySource() {}
+
29 
+
30 Status KeySource::FetchKeys(const std::vector<uint8_t>& content_id,
+
31  const std::string& policy) {
+
32  // Do nothing for fixed key encryption/decryption.
+
33  return Status::OK;
+
34 }
+
35 
+
36 Status KeySource::FetchKeys(const std::vector<uint8_t>& pssh_data) {
+
37  // Do nothing for fixed key encryption/decryption.
+
38  return Status::OK;
+
39 }
+
40 
+
41 Status KeySource::FetchKeys(uint32_t asset_id) {
+
42  // Do nothing for fixed key encryption/decryption.
+
43  return Status::OK;
+
44 }
+
45 
+
46 Status KeySource::GetKey(TrackType track_type, EncryptionKey* key) {
+
47  DCHECK(key);
+
48  DCHECK(encryption_key_);
+
49  *key = *encryption_key_;
+
50  return Status::OK;
+
51 }
+
52 
+
53 Status KeySource::GetKey(const std::vector<uint8_t>& key_id,
+
54  EncryptionKey* key) {
+
55  DCHECK(key);
+
56  DCHECK(encryption_key_);
+
57  if (key_id != encryption_key_->key_id) {
+
58  return Status(error::NOT_FOUND, std::string("Key for key ID ") +
+
59  base::HexEncode(&key_id[0], key_id.size()) +
+
60  " was not found.");
+
61  }
+
62  *key = *encryption_key_;
+
63  return Status::OK;
+
64 }
+
65 
+
66 Status KeySource::GetCryptoPeriodKey(uint32_t crypto_period_index,
+
67  TrackType track_type,
+
68  EncryptionKey* key) {
+
69  *key = *encryption_key_;
+
70  // A naive key rotation algorithm is implemented here by left rotating the
+
71  // key, key_id and pssh. Note that this implementation is only intended for
+
72  // testing purpose. The actual key rotation algorithm can be much more
+
73  // complicated.
+
74  LOG(WARNING)
+
75  << "This naive key rotation algorithm should not be used in production.";
+
76  std::rotate(key->key_id.begin(),
+
77  key->key_id.begin() + (crypto_period_index % key->key_id.size()),
+
78  key->key_id.end());
+
79  std::rotate(key->key.begin(),
+
80  key->key.begin() + (crypto_period_index % key->key.size()),
+
81  key->key.end());
+
82  const size_t kPsshHeaderSize = 32u;
+
83  std::vector<uint8_t> pssh_data(key->pssh.begin() + kPsshHeaderSize,
+
84  key->pssh.end());
+
85  std::rotate(pssh_data.begin(),
+
86  pssh_data.begin() + (crypto_period_index % pssh_data.size()),
+
87  pssh_data.end());
+
88  key->pssh = PsshBoxFromPsshData(pssh_data);
+
89  return Status::OK;
+
90 }
+
91 
+
92 std::string KeySource::UUID() {
+
93  return kDefaultUUID;
+
94 }
+
95 
+
96 std::string KeySource::SystemName() {
+
97  return kDefaultSystemName;
+
98 }
+
99 
+
100 scoped_ptr<KeySource> KeySource::CreateFromHexStrings(
+
101  const std::string& key_id_hex,
+
102  const std::string& key_hex,
+
103  const std::string& pssh_data_hex,
+
104  const std::string& iv_hex) {
+
105  scoped_ptr<EncryptionKey> encryption_key(new EncryptionKey());
+
106 
+
107  if (!base::HexStringToBytes(key_id_hex, &encryption_key->key_id)) {
+
108  LOG(ERROR) << "Cannot parse key_id_hex " << key_id_hex;
+
109  return scoped_ptr<KeySource>();
+
110  }
+
111 
+
112  if (!base::HexStringToBytes(key_hex, &encryption_key->key)) {
+
113  LOG(ERROR) << "Cannot parse key_hex " << key_hex;
+
114  return scoped_ptr<KeySource>();
+
115  }
+
116 
+
117  std::vector<uint8_t> pssh_data;
+
118  if (!pssh_data_hex.empty() &&
+
119  !base::HexStringToBytes(pssh_data_hex, &pssh_data)) {
+
120  LOG(ERROR) << "Cannot parse pssh_hex " << pssh_data_hex;
+
121  return scoped_ptr<KeySource>();
+
122  }
+
123 
+
124  if (!iv_hex.empty()) {
+
125  if (!base::HexStringToBytes(iv_hex, &encryption_key->iv)) {
+
126  LOG(ERROR) << "Cannot parse iv_hex " << iv_hex;
+
127  return scoped_ptr<KeySource>();
+
128  }
+
129  }
+
130 
+
131  encryption_key->pssh = PsshBoxFromPsshData(pssh_data);
+
132  return scoped_ptr<KeySource>(
+
133  new KeySource(encryption_key.Pass()));
+
134 }
+
135 
+ +
137  const std::string& track_type_string) {
+
138  if (track_type_string == "SD")
+
139  return TRACK_TYPE_SD;
+
140  if (track_type_string == "HD")
+
141  return TRACK_TYPE_HD;
+
142  if (track_type_string == "AUDIO")
+
143  return TRACK_TYPE_AUDIO;
+
144  if (track_type_string == "UNSPECIFIED")
+
145  return TRACK_TYPE_UNSPECIFIED;
+
146  LOG(WARNING) << "Unexpected track type: " << track_type_string;
+
147  return TRACK_TYPE_UNKNOWN;
+
148 }
+
149 
+
150 std::string KeySource::TrackTypeToString(TrackType track_type) {
+
151  switch (track_type) {
+
152  case TRACK_TYPE_SD:
+
153  return "SD";
+
154  case TRACK_TYPE_HD:
+
155  return "HD";
+
156  case TRACK_TYPE_AUDIO:
+
157  return "AUDIO";
+
158  default:
+
159  NOTIMPLEMENTED() << "Unknown track type: " << track_type;
+
160  return "UNKNOWN";
+
161  }
+
162 }
+
163 
+
164 std::vector<uint8_t> KeySource::PsshBoxFromPsshData(
+
165  const std::vector<uint8_t>& pssh_data) {
+
166  const uint8_t kPsshFourCC[] = {'p', 's', 's', 'h'};
+
167  const uint32_t kVersionAndFlags = 0;
+
168 
+
169  const uint32_t pssh_data_size = pssh_data.size();
+
170  const uint32_t total_size =
+
171  sizeof(total_size) + sizeof(kPsshFourCC) + sizeof(kVersionAndFlags) +
+
172  sizeof(kWidevineSystemId) + sizeof(pssh_data_size) + pssh_data_size;
+
173 
+
174  BufferWriter writer;
+
175  writer.AppendInt(total_size);
+
176  writer.AppendArray(kPsshFourCC, sizeof(kPsshFourCC));
+
177  writer.AppendInt(kVersionAndFlags);
+
178  writer.AppendArray(kWidevineSystemId, sizeof(kWidevineSystemId));
+
179  writer.AppendInt(pssh_data_size);
+
180  writer.AppendVector(pssh_data);
+
181  return std::vector<uint8_t>(writer.Buffer(), writer.Buffer() + writer.Size());
+
182 }
+
183 
+
184 KeySource::KeySource() {}
+
185 KeySource::KeySource(scoped_ptr<EncryptionKey> encryption_key)
+
186  : encryption_key_(encryption_key.Pass()) {
+
187  DCHECK(encryption_key_);
+
188 }
+
189 
+
190 } // namespace media
+
191 } // namespace edash_packager
+
virtual Status GetKey(TrackType track_type, EncryptionKey *key)
Definition: key_source.cc:46
+
virtual Status GetCryptoPeriodKey(uint32_t crypto_period_index, TrackType track_type, EncryptionKey *key)
Definition: key_source.cc:66
+ + +
virtual Status FetchKeys(const std::vector< uint8_t > &content_id, const std::string &policy)
Definition: key_source.cc:30
+
virtual std::string UUID()
Definition: key_source.cc:92
+
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:29
+ +
static scoped_ptr< KeySource > CreateFromHexStrings(const std::string &key_id_hex, const std::string &key_hex, const std::string &pssh_data_hex, const std::string &iv_hex)
Definition: key_source.cc:100
+
const uint8_t * Buffer() const
Definition: buffer_writer.h:59
+
static std::vector< uint8_t > PsshBoxFromPsshData(const std::vector< uint8_t > &pssh_data)
Definition: key_source.cc:164
+
virtual std::string SystemName()
Definition: key_source.cc:96
+
static TrackType GetTrackTypeFromString(const std::string &track_type_string)
Convert string representation of track type to enum representation.
Definition: key_source.cc:136
+
static std::string TrackTypeToString(TrackType track_type)
Convert TrackType to string.
Definition: key_source.cc:150
+ +
+ + + + diff --git a/sdk/d7/de3/structedash__packager_1_1xml_1_1XmlDeleter.html b/sdk/d7/de3/structedash__packager_1_1xml_1_1XmlDeleter.html new file mode 100644 index 0000000000..30e05f2ef8 --- /dev/null +++ b/sdk/d7/de3/structedash__packager_1_1xml_1_1XmlDeleter.html @@ -0,0 +1,135 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::xml::XmlDeleter Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::xml::XmlDeleter Struct Reference
+
+
+ +

#include <scoped_xml_ptr.h>

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

+Public Member Functions

+void operator() (xmlSchemaParserCtxtPtr ptr) const
 
+void operator() (xmlSchemaValidCtxtPtr ptr) const
 
+void operator() (xmlSchemaPtr ptr) const
 
+void operator() (xmlNodePtr ptr) const
 
+void operator() (xmlDocPtr ptr) const
 
+void operator() (xmlChar *ptr) const
 
+

Detailed Description

+

Deleter functor for deleting libxml2 pointers. This is used with ScopedXmlPtr.

+ +

Definition at line 23 of file scoped_xml_ptr.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/sdk/d7/dec/h264__byte__to__unit__stream__converter_8h_source.html b/sdk/d7/dec/h264__byte__to__unit__stream__converter_8h_source.html new file mode 100644 index 0000000000..c856ec01ed --- /dev/null +++ b/sdk/d7/dec/h264__byte__to__unit__stream__converter_8h_source.html @@ -0,0 +1,147 @@ + + + + + + +DASH Media Packaging SDK: media/filters/h264_byte_to_unit_stream_converter.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
h264_byte_to_unit_stream_converter.h
+
+
+
1 // Copyright 2014 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_H264_BYTE_TO_UNIT_STREAM_CONVERTER_H_
+
8 #define MEDIA_FILTERS_H264_BYTE_TO_UNIT_STREAM_CONVERTER_H_
+
9 
+
10 #include <stddef.h>
+
11 #include <stdint.h>
+
12 
+
13 #include <vector>
+
14 
+
15 namespace edash_packager {
+
16 namespace media {
+
17 
+
18 class BufferWriter;
+
19 
+ +
23  public:
+
24  static const size_t kUnitStreamNaluLengthSize = 4;
+
25 
+ + +
28 
+
37  bool ConvertByteStreamToNalUnitStream(const uint8_t* input_frame,
+
38  size_t input_frame_size,
+
39  std::vector<uint8_t>* output_frame);
+
40 
+
46  bool GetAVCDecoderConfigurationRecord(std::vector<uint8_t>* decoder_config);
+
47 
+
48  private:
+
49  void ProcessNalu(const uint8_t* nalu_ptr,
+
50  size_t nalu_size,
+
51  BufferWriter* output_buffer);
+
52 
+
53  std::vector<uint8_t> last_sps_;
+
54  std::vector<uint8_t> last_pps_;
+
55 };
+
56 
+
57 } // namespace media
+
58 } // namespace edash_packager
+
59 
+
60 #endif // MEDIA_FILTERS_H264_BYTE_TO_UNIT_STREAM_CONVERTER_H_
+ +
bool ConvertByteStreamToNalUnitStream(const uint8_t *input_frame, size_t input_frame_size, std::vector< uint8_t > *output_frame)
+
bool GetAVCDecoderConfigurationRecord(std::vector< uint8_t > *decoder_config)
+ +
+ + + + diff --git a/sdk/d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html b/sdk/d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html new file mode 100644 index 0000000000..7054a5262e --- /dev/null +++ b/sdk/d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html @@ -0,0 +1,200 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::MediaHeader Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::MediaHeader Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::MediaHeader:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + + + + + + + +

+Public Attributes

+uint64_t creation_time
 
+uint64_t modification_time
 
+uint32_t timescale
 
+uint64_t duration
 
+char language [4]
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 332 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::MediaHeader::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1169 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.png b/sdk/d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.png new file mode 100644 index 0000000000..eb3e4aa47b Binary files /dev/null and b/sdk/d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.png differ diff --git a/sdk/d7/dee/mpd__generator_8cc_source.html b/sdk/d7/dee/mpd__generator_8cc_source.html new file mode 100644 index 0000000000..3eb31c53af --- /dev/null +++ b/sdk/d7/dee/mpd__generator_8cc_source.html @@ -0,0 +1,196 @@ + + + + + + +DASH Media Packaging SDK: app/mpd_generator.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mpd_generator.cc
+
+
+
1 // Copyright 2014 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/app/mpd_generator_flags.h"
+
8 #include "packager/base/logging.h"
+
9 #include "packager/base/strings/string_split.h"
+
10 #include "packager/base/strings/stringprintf.h"
+
11 #include "packager/mpd/util/mpd_writer.h"
+
12 
+
13 namespace edash_packager {
+
14 namespace {
+
15 const char kUsage[] =
+
16  "MPD generation driver program.\n"
+
17  "This program accepts MediaInfo files in human readable text "
+
18  "format and outputs an MPD.\n"
+
19  "The main use case for this is to output MPD for VOD.\n"
+
20  "Limitations:\n"
+
21  " Each MediaInfo can only have one of VideoInfo, AudioInfo, or TextInfo.\n"
+
22  " There will be at most 3 AdaptationSets in the MPD, i.e. 1 video, 1 "
+
23  "audio, and 1 text.\n"
+
24  "Sample Usage:\n"
+
25  "%s --input=\"video1.media_info,video2.media_info,audio1.media_info\" "
+
26  "--output=\"video_audio.mpd\"";
+
27 
+
28 enum ExitStatus {
+
29  kSuccess = 0,
+
30  kEmptyInputError,
+
31  kEmptyOutputError,
+
32  kFailedToWriteMpdToFileError
+
33 };
+
34 
+
35 ExitStatus CheckRequiredFlags() {
+
36  if (FLAGS_input.empty()) {
+
37  LOG(ERROR) << "--input is required.";
+
38  return kEmptyInputError;
+
39  }
+
40 
+
41  if (FLAGS_output.empty()) {
+
42  LOG(ERROR) << "--output is required.";
+
43  return kEmptyOutputError;
+
44  }
+
45 
+
46  return kSuccess;
+
47 }
+
48 
+
49 ExitStatus RunMpdGenerator() {
+
50  DCHECK_EQ(CheckRequiredFlags(), kSuccess);
+
51  std::vector<std::string> base_urls;
+
52  std::vector<std::string> input_files;
+
53  typedef std::vector<std::string>::const_iterator Iterator;
+
54 
+
55  base::SplitString(FLAGS_input, ',', &input_files);
+
56 
+
57  if (!FLAGS_base_urls.empty()) {
+
58  base::SplitString(FLAGS_base_urls, ',', &base_urls);
+
59  }
+
60 
+
61  edash_packager::MpdWriter mpd_writer;
+
62  for (Iterator it = base_urls.begin(); it != base_urls.end(); ++it)
+
63  mpd_writer.AddBaseUrl(*it);
+
64 
+
65  for (Iterator it = input_files.begin(); it != input_files.end(); ++it) {
+
66  if (!mpd_writer.AddFile(it->c_str(), FLAGS_output)) {
+
67  LOG(WARNING) << "MpdWriter failed to read " << *it << ", skipping.";
+
68  }
+
69  }
+
70 
+
71  if (!mpd_writer.WriteMpdToFile(FLAGS_output.c_str())) {
+
72  LOG(ERROR) << "Failed to write MPD to " << FLAGS_output;
+
73  return kFailedToWriteMpdToFileError;
+
74  }
+
75 
+
76  return kSuccess;
+
77 }
+
78 
+
79 int MpdMain(int argc, char** argv) {
+
80  google::SetUsageMessage(base::StringPrintf(kUsage, argv[0]));
+
81  google::ParseCommandLineFlags(&argc, &argv, true);
+
82 
+
83  ExitStatus status = CheckRequiredFlags();
+
84  if (status != kSuccess) {
+
85  google::ShowUsageWithFlags(argv[0]);
+
86  return status;
+
87  }
+
88 
+
89  return RunMpdGenerator();
+
90 }
+
91 
+
92 } // namespace
+
93 } // namespace edash_packager
+
94 
+
95 int main(int argc, char** argv) {
+
96  return edash_packager::MpdMain(argc, argv);
+
97 }
+ +
+ + + + diff --git a/sdk/d7/def/mp4__media__parser_8cc_source.html b/sdk/d7/def/mp4__media__parser_8cc_source.html new file mode 100644 index 0000000000..44da144d14 --- /dev/null +++ b/sdk/d7/def/mp4__media__parser_8cc_source.html @@ -0,0 +1,782 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/mp4_media_parser.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mp4_media_parser.cc
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/formats/mp4/mp4_media_parser.h"
+
6 
+
7 #include <limits>
+
8 
+
9 #include "packager/base/callback.h"
+
10 #include "packager/base/callback_helpers.h"
+
11 #include "packager/base/logging.h"
+
12 #include "packager/base/memory/ref_counted.h"
+
13 #include "packager/base/strings/string_number_conversions.h"
+
14 #include "packager/media/base/aes_encryptor.h"
+
15 #include "packager/media/base/audio_stream_info.h"
+
16 #include "packager/media/base/buffer_reader.h"
+
17 #include "packager/media/base/decrypt_config.h"
+
18 #include "packager/media/base/key_source.h"
+
19 #include "packager/media/base/media_sample.h"
+
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"
+
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"
+
27 #include "packager/media/formats/mp4/rcheck.h"
+
28 #include "packager/media/formats/mp4/track_run_iterator.h"
+
29 
+
30 namespace {
+
31 
+
32 uint64_t Rescale(uint64_t time_in_old_scale,
+
33  uint32_t old_scale,
+
34  uint32_t new_scale) {
+
35  return (static_cast<double>(time_in_old_scale) / old_scale) * new_scale;
+
36 }
+
37 
+
38 
+
39 const char kWidevineKeySystemId[] = "edef8ba979d64acea3c827dcd51d21ed";
+
40 
+
41 } // namespace
+
42 
+
43 namespace edash_packager {
+
44 namespace media {
+
45 namespace mp4 {
+
46 
+
47 MP4MediaParser::MP4MediaParser()
+
48  : state_(kWaitingForInit), moof_head_(0), mdat_tail_(0) {}
+
49 
+
50 MP4MediaParser::~MP4MediaParser() {
+
51  STLDeleteValues(&decryptor_map_);
+
52 }
+
53 
+
54 void MP4MediaParser::Init(const InitCB& init_cb,
+
55  const NewSampleCB& new_sample_cb,
+
56  KeySource* decryption_key_source) {
+
57  DCHECK_EQ(state_, kWaitingForInit);
+
58  DCHECK(init_cb_.is_null());
+
59  DCHECK(!init_cb.is_null());
+
60  DCHECK(!new_sample_cb.is_null());
+
61 
+
62  ChangeState(kParsingBoxes);
+
63  init_cb_ = init_cb;
+
64  new_sample_cb_ = new_sample_cb;
+
65  decryption_key_source_ = decryption_key_source;
+
66 }
+
67 
+
68 void MP4MediaParser::Reset() {
+
69  queue_.Reset();
+
70  runs_.reset();
+
71  moof_head_ = 0;
+
72  mdat_tail_ = 0;
+
73 }
+
74 
+ +
76  DCHECK_NE(state_, kWaitingForInit);
+
77  Reset();
+
78  ChangeState(kParsingBoxes);
+
79 }
+
80 
+
81 bool MP4MediaParser::Parse(const uint8_t* buf, int size) {
+
82  DCHECK_NE(state_, kWaitingForInit);
+
83 
+
84  if (state_ == kError)
+
85  return false;
+
86 
+
87  queue_.Push(buf, size);
+
88 
+
89  bool result, err = false;
+
90 
+
91  do {
+
92  if (state_ == kParsingBoxes) {
+
93  result = ParseBox(&err);
+
94  } else {
+
95  DCHECK_EQ(kEmittingSamples, state_);
+
96  result = EnqueueSample(&err);
+
97  if (result) {
+
98  int64_t max_clear = runs_->GetMaxClearOffset() + moof_head_;
+
99  err = !ReadAndDiscardMDATsUntil(max_clear);
+
100  }
+
101  }
+
102  } while (result && !err);
+
103 
+
104  if (err) {
+
105  DLOG(ERROR) << "Error while parsing MP4";
+
106  moov_.reset();
+
107  Reset();
+
108  ChangeState(kError);
+
109  return false;
+
110  }
+
111 
+
112  return true;
+
113 }
+
114 
+
115 bool MP4MediaParser::LoadMoov(const std::string& file_path) {
+
116  scoped_ptr<File, FileCloser> file(
+
117  File::OpenWithNoBuffering(file_path.c_str(), "r"));
+
118  if (!file) {
+
119  LOG(ERROR) << "Unable to open media file '" << file_path << "'";
+
120  return false;
+
121  }
+
122  if (!file->Seek(0)) {
+
123  LOG(WARNING) << "Filesystem does not support seeking on file '" << file_path
+
124  << "'";
+
125  return false;
+
126  }
+
127 
+
128  uint64_t file_position(0);
+
129  bool mdat_seen(false);
+
130  while (true) {
+
131  const uint32_t kBoxHeaderReadSize(16);
+
132  std::vector<uint8_t> buffer(kBoxHeaderReadSize);
+
133  int64_t bytes_read = file->Read(&buffer[0], kBoxHeaderReadSize);
+
134  if (bytes_read == 0) {
+
135  LOG(ERROR) << "Could not find 'moov' box in file '" << file_path << "'";
+
136  return false;
+
137  }
+
138  if (bytes_read < kBoxHeaderReadSize) {
+
139  LOG(ERROR) << "Error reading media file '" << file_path << "'";
+
140  return false;
+
141  }
+
142  uint64_t box_size;
+
143  FourCC box_type;
+
144  bool err;
+
145  if (!BoxReader::StartTopLevelBox(&buffer[0], kBoxHeaderReadSize, &box_type,
+
146  &box_size, &err)) {
+
147  LOG(ERROR) << "Could not start top level box from file '" << file_path
+
148  << "'";
+
149  return false;
+
150  }
+
151  if (box_type == FOURCC_MDAT) {
+
152  mdat_seen = true;
+
153  } else if (box_type == FOURCC_MOOV) {
+
154  if (!mdat_seen) {
+
155  // 'moov' is before 'mdat'. Nothing to do.
+
156  break;
+
157  }
+
158  // 'mdat' before 'moov'. Read and parse 'moov'.
+
159  if (!Parse(&buffer[0], bytes_read)) {
+
160  LOG(ERROR) << "Error parsing mp4 file '" << file_path << "'";
+
161  return false;
+
162  }
+
163  uint64_t bytes_to_read = box_size - bytes_read;
+
164  buffer.resize(bytes_to_read);
+
165  while (bytes_to_read > 0) {
+
166  bytes_read = file->Read(&buffer[0], bytes_to_read);
+
167  if (bytes_read <= 0) {
+
168  LOG(ERROR) << "Error reading 'moov' contents from file '" << file_path
+
169  << "'";
+
170  return false;
+
171  }
+
172  if (!Parse(&buffer[0], bytes_read)) {
+
173  LOG(ERROR) << "Error parsing mp4 file '" << file_path << "'";
+
174  return false;
+
175  }
+
176  bytes_to_read -= bytes_read;
+
177  }
+
178  queue_.Reset(); // So that we don't need to adjust data offsets.
+
179  mdat_tail_ = 0; // So it will skip boxes until mdat.
+
180  break; // Done.
+
181  }
+
182  file_position += box_size;
+
183  if (!file->Seek(file_position)) {
+
184  LOG(ERROR) << "Error skipping box in mp4 file '" << file_path << "'";
+
185  return false;
+
186  }
+
187  }
+
188  return true;
+
189 }
+
190 
+
191 bool MP4MediaParser::ParseBox(bool* err) {
+
192  const uint8_t* buf;
+
193  int size;
+
194  queue_.Peek(&buf, &size);
+
195  if (!size)
+
196  return false;
+
197 
+
198  scoped_ptr<BoxReader> reader(BoxReader::ReadTopLevelBox(buf, size, err));
+
199  if (reader.get() == NULL)
+
200  return false;
+
201 
+
202  if (reader->type() == FOURCC_MDAT) {
+
203  // The code ends up here only if a MOOV box is not yet seen.
+
204  DCHECK(!moov_);
+
205 
+
206  NOTIMPLEMENTED() << " Files with MDAT before MOOV is not supported yet.";
+
207  *err = true;
+
208  return false;
+
209  }
+
210 
+
211  // Set up mdat offset for ReadMDATsUntil().
+
212  mdat_tail_ = queue_.head() + reader->size();
+
213 
+
214  if (reader->type() == FOURCC_MOOV) {
+
215  *err = !ParseMoov(reader.get());
+
216  } else if (reader->type() == FOURCC_MOOF) {
+
217  moof_head_ = queue_.head();
+
218  *err = !ParseMoof(reader.get());
+
219 
+
220  // Return early to avoid evicting 'moof' data from queue. Auxiliary info may
+
221  // be located anywhere in the file, including inside the 'moof' itself.
+
222  // (Since 'default-base-is-moof' is mandated, no data references can come
+
223  // before the head of the 'moof', so keeping this box around is sufficient.)
+
224  return !(*err);
+
225  } else {
+
226  VLOG(2) << "Skipping top-level box: " << FourCCToString(reader->type());
+
227  }
+
228 
+
229  queue_.Pop(reader->size());
+
230  return !(*err);
+
231 }
+
232 
+
233 bool MP4MediaParser::ParseMoov(BoxReader* reader) {
+
234  if (moov_)
+
235  return true; // Already parsed the 'moov' box.
+
236 
+
237  moov_.reset(new Movie);
+
238  RCHECK(moov_->Parse(reader));
+
239  runs_.reset();
+
240 
+
241  std::vector<scoped_refptr<StreamInfo> > streams;
+
242 
+
243  for (std::vector<Track>::const_iterator track = moov_->tracks.begin();
+
244  track != moov_->tracks.end(); ++track) {
+
245  const uint32_t timescale = track->media.header.timescale;
+
246 
+
247  // Calculate duration (based on timescale).
+
248  uint64_t duration = 0;
+
249  if (track->media.header.duration > 0) {
+
250  duration = track->media.header.duration;
+
251  } else if (moov_->extends.header.fragment_duration > 0) {
+
252  DCHECK(moov_->header.timescale != 0);
+
253  duration = Rescale(moov_->extends.header.fragment_duration,
+
254  moov_->header.timescale,
+
255  timescale);
+
256  } else if (moov_->header.duration > 0 &&
+
257  moov_->header.duration != std::numeric_limits<uint64_t>::max()) {
+
258  DCHECK(moov_->header.timescale != 0);
+
259  duration =
+
260  Rescale(moov_->header.duration, moov_->header.timescale, timescale);
+
261  }
+
262 
+
263  const SampleDescription& samp_descr =
+
264  track->media.information.sample_table.description;
+
265 
+
266  size_t desc_idx = 0;
+
267 
+
268  // Read sample description index from mvex if it exists otherwise read
+
269  // from the first entry in Sample To Chunk box.
+
270  if (moov_->extends.tracks.size() > 0) {
+
271  for (size_t t = 0; t < moov_->extends.tracks.size(); t++) {
+
272  const TrackExtends& trex = moov_->extends.tracks[t];
+
273  if (trex.track_id == track->header.track_id) {
+
274  desc_idx = trex.default_sample_description_index;
+
275  break;
+
276  }
+
277  }
+
278  } else {
+
279  const std::vector<ChunkInfo>& chunk_info =
+
280  track->media.information.sample_table.sample_to_chunk.chunk_info;
+
281  RCHECK(chunk_info.size() > 0);
+
282  desc_idx = chunk_info[0].sample_description_index;
+
283  }
+
284  RCHECK(desc_idx > 0);
+
285  desc_idx -= 1; // BMFF descriptor index is one-based
+
286 
+
287  if (track->media.handler.type == kAudio) {
+
288  RCHECK(!samp_descr.audio_entries.empty());
+
289 
+
290  // It is not uncommon to find otherwise-valid files with incorrect sample
+
291  // description indices, so we fail gracefully in that case.
+
292  if (desc_idx >= samp_descr.audio_entries.size())
+
293  desc_idx = 0;
+
294  const AudioSampleEntry& entry = samp_descr.audio_entries[desc_idx];
+
295 
+
296  if (!(entry.format == FOURCC_MP4A || entry.format == FOURCC_EAC3 ||
+
297  (entry.format == FOURCC_ENCA &&
+
298  entry.sinf.format.format == FOURCC_MP4A))) {
+
299  LOG(ERROR) << "Unsupported audio format 0x"
+
300  << std::hex << entry.format << " in stsd box.";
+
301  return false;
+
302  }
+
303 
+
304  ObjectType audio_type = entry.esds.es_descriptor.object_type();
+
305  DVLOG(1) << "audio_type " << std::hex << audio_type;
+
306  if (audio_type == kForbidden && entry.format == FOURCC_EAC3) {
+
307  audio_type = kEAC3;
+
308  }
+
309 
+
310  AudioCodec codec = kUnknownAudioCodec;
+
311  uint8_t num_channels = 0;
+
312  uint32_t sampling_frequency = 0;
+
313  uint8_t audio_object_type = 0;
+
314  std::vector<uint8_t> extra_data;
+
315  // Check if it is MPEG4 AAC defined in ISO 14496 Part 3 or
+
316  // supported MPEG2 AAC variants.
+
317  if (entry.esds.es_descriptor.IsAAC()) {
+
318  codec = kCodecAAC;
+
319  const AACAudioSpecificConfig& aac_audio_specific_config =
+
320  entry.esds.aac_audio_specific_config;
+
321  num_channels = aac_audio_specific_config.num_channels();
+
322  sampling_frequency = aac_audio_specific_config.frequency();
+
323  audio_object_type = aac_audio_specific_config.audio_object_type();
+
324  extra_data = entry.esds.es_descriptor.decoder_specific_info();
+
325  } else if (audio_type == kEAC3) {
+
326  codec = kCodecEAC3;
+
327  num_channels = entry.channelcount;
+
328  sampling_frequency = entry.samplerate;
+
329  } else {
+
330  LOG(ERROR) << "Unsupported audio object type 0x"
+
331  << std::hex << audio_type << " in esds.";
+
332  return false;
+
333  }
+
334 
+
335  bool is_encrypted = entry.sinf.info.track_encryption.is_encrypted;
+
336  DVLOG(1) << "is_audio_track_encrypted_: " << is_encrypted;
+
337  streams.push_back(new AudioStreamInfo(
+
338  track->header.track_id,
+
339  timescale,
+
340  duration,
+
341  codec,
+
342  AudioStreamInfo::GetCodecString(codec, audio_object_type),
+
343  track->media.header.language,
+
344  entry.samplesize,
+
345  num_channels,
+
346  sampling_frequency,
+
347  extra_data.size() ? &extra_data[0] : NULL,
+
348  extra_data.size(),
+
349  is_encrypted));
+
350  }
+
351 
+
352  if (track->media.handler.type == kVideo) {
+
353  RCHECK(!samp_descr.video_entries.empty());
+
354  if (desc_idx >= samp_descr.video_entries.size())
+
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
+ +
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
+
static scoped_refptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
Definition: media_sample.cc:47
+
void PeekAt(int64_t offset, const uint8_t **buf, int *size)
+
virtual bool Parse(const uint8_t *buf, int size) OVERRIDE
+
bool LoadMoov(const std::string &file_path)
+
virtual Status FetchKeys(const std::vector< uint8_t > &content_id, const std::string &policy)
Definition: key_source.cc:30
+
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
+
static std::string GetCodecString(VideoCodec codec, uint8_t profile, uint8_t compatible_profiles, uint8_t level)
+
virtual void Init(const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source) OVERRIDE
+ +
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/sdk/d7/df1/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex-members.html b/sdk/d7/df1/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex-members.html new file mode 100644 index 0000000000..bc051e5b5d --- /dev/null +++ b/sdk/d7/df1/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex-members.html @@ -0,0 +1,123 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::SegmentIndex Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::SegmentIndex)edash_packager::media::mp4::SegmentIndexvirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::SegmentIndexvirtual
earliest_presentation_time (defined in edash_packager::media::mp4::SegmentIndex)edash_packager::media::mp4::SegmentIndex
first_offset (defined in edash_packager::media::mp4::SegmentIndex)edash_packager::media::mp4::SegmentIndex
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::SegmentIndexvirtual
reference_id (defined in edash_packager::media::mp4::SegmentIndex)edash_packager::media::mp4::SegmentIndex
references (defined in edash_packager::media::mp4::SegmentIndex)edash_packager::media::mp4::SegmentIndex
SegmentIndex() (defined in edash_packager::media::mp4::SegmentIndex)edash_packager::media::mp4::SegmentIndex
timescale (defined in edash_packager::media::mp4::SegmentIndex)edash_packager::media::mp4::SegmentIndex
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~SegmentIndex() (defined in edash_packager::media::mp4::SegmentIndex)edash_packager::media::mp4::SegmentIndexvirtual
+ + + + diff --git a/sdk/d7/df3/classedash__packager_1_1media_1_1File-members.html b/sdk/d7/df3/classedash__packager_1_1media_1_1File-members.html new file mode 100644 index 0000000000..9c0c0e88f9 --- /dev/null +++ b/sdk/d7/df3/classedash__packager_1_1media_1_1File-members.html @@ -0,0 +1,121 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::File Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + +
Close()=0edash_packager::media::Filepure virtual
Delete(const char *file_name)edash_packager::media::Filestatic
File(const std::string &file_name) (defined in edash_packager::media::File)edash_packager::media::Fileinlineexplicitprotected
file_name() const edash_packager::media::Fileinline
Flush()=0edash_packager::media::Filepure virtual
GetFileSize(const char *file_name)edash_packager::media::Filestatic
Open(const char *file_name, const char *mode)edash_packager::media::Filestatic
Open()=0edash_packager::media::Fileprotectedpure virtual
OpenWithNoBuffering(const char *file_name, const char *mode)edash_packager::media::Filestatic
Read(void *buffer, uint64_t length)=0edash_packager::media::Filepure virtual
ReadFileToString(const char *file_name, std::string *contents)edash_packager::media::Filestatic
Seek(uint64_t position)=0edash_packager::media::Filepure virtual
Size()=0edash_packager::media::Filepure virtual
Tell(uint64_t *position)=0edash_packager::media::Filepure virtual
ThreadedIoFile (defined in edash_packager::media::File)edash_packager::media::Filefriend
Write(const void *buffer, uint64_t length)=0edash_packager::media::Filepure virtual
~File()edash_packager::media::Fileinlineprotectedvirtual
+ + + + diff --git a/sdk/d7/df9/byte__queue_8cc_source.html b/sdk/d7/df9/byte__queue_8cc_source.html new file mode 100644 index 0000000000..9bf16f4e34 --- /dev/null +++ b/sdk/d7/df9/byte__queue_8cc_source.html @@ -0,0 +1,190 @@ + + + + + + +DASH Media Packaging SDK: media/base/byte_queue.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
byte_queue.cc
+
+
+
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/base/byte_queue.h"
+
6 
+
7 #include "packager/base/logging.h"
+
8 
+
9 namespace edash_packager {
+
10 namespace media {
+
11 
+
12 // Default starting size for the queue.
+
13 enum { kDefaultQueueSize = 1024 };
+
14 
+
15 ByteQueue::ByteQueue()
+
16  : buffer_(new uint8_t[kDefaultQueueSize]),
+
17  size_(kDefaultQueueSize),
+
18  offset_(0),
+
19  used_(0) {
+
20 }
+
21 
+
22 ByteQueue::~ByteQueue() {}
+
23 
+ +
25  offset_ = 0;
+
26  used_ = 0;
+
27 }
+
28 
+
29 void ByteQueue::Push(const uint8_t* data, int size) {
+
30  DCHECK(data);
+
31  DCHECK_GT(size, 0);
+
32 
+
33  size_t size_needed = used_ + size;
+
34 
+
35  // Check to see if we need a bigger buffer.
+
36  if (size_needed > size_) {
+
37  size_t new_size = 2 * size_;
+
38  while (size_needed > new_size && new_size > size_)
+
39  new_size *= 2;
+
40 
+
41  // Sanity check to make sure we didn't overflow.
+
42  CHECK_GT(new_size, size_);
+
43 
+
44  scoped_ptr<uint8_t[]> new_buffer(new uint8_t[new_size]);
+
45 
+
46  // Copy the data from the old buffer to the start of the new one.
+
47  if (used_ > 0)
+
48  memcpy(new_buffer.get(), front(), used_);
+
49 
+
50  buffer_.reset(new_buffer.release());
+
51  size_ = new_size;
+
52  offset_ = 0;
+
53  } else if ((offset_ + used_ + size) > size_) {
+
54  // The buffer is big enough, but we need to move the data in the queue.
+
55  memmove(buffer_.get(), front(), used_);
+
56  offset_ = 0;
+
57  }
+
58 
+
59  memcpy(front() + used_, data, size);
+
60  used_ += size;
+
61 }
+
62 
+
63 void ByteQueue::Peek(const uint8_t** data, int* size) const {
+
64  DCHECK(data);
+
65  DCHECK(size);
+
66  *data = front();
+
67  *size = used_;
+
68 }
+
69 
+
70 void ByteQueue::Pop(int count) {
+
71  DCHECK_LE(count, used_);
+
72 
+
73  offset_ += count;
+
74  used_ -= count;
+
75 
+
76  // Move the offset back to 0 if we have reached the end of the buffer.
+
77  if (offset_ == size_) {
+
78  DCHECK_EQ(used_, 0);
+
79  offset_ = 0;
+
80  }
+
81 }
+
82 
+
83 uint8_t* ByteQueue::front() const {
+
84  return buffer_.get() + offset_;
+
85 }
+
86 
+
87 } // namespace media
+
88 } // namespace edash_packager
+
void Push(const uint8_t *data, int size)
Append new bytes to the end of the queue.
Definition: byte_queue.cc:29
+ +
void Reset()
Reset the queue to the empty state.
Definition: byte_queue.cc:24
+
void Peek(const uint8_t **data, int *size) const
Definition: byte_queue.cc:63
+
+ + + + diff --git a/sdk/d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.html b/sdk/d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.html new file mode 100644 index 0000000000..9f25e356ed --- /dev/null +++ b/sdk/d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.html @@ -0,0 +1,292 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::MP4MediaParser Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::MP4MediaParser Class Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::MP4MediaParser:
+
+
+ + +edash_packager::media::MediaParser + +
+ + + + + + + + + + + +

+Public Member Functions

bool LoadMoov (const std::string &file_path)
 
MediaParser implementation overrides.
virtual void Init (const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source) OVERRIDE
 
virtual void Flush () OVERRIDE
 
virtual bool Parse (const uint8_t *buf, int size) OVERRIDE
 
+ + + + + + +

+Additional Inherited Members

- Public Types inherited from edash_packager::media::MediaParser
typedef base::Callback< void(const
+std::vector< scoped_refptr
+< StreamInfo > > &stream_info)> 
InitCB
 
typedef base::Callback< bool(uint32_t
+track_id, const scoped_refptr
+< MediaSample > &media_sample)> 
NewSampleCB
 
+

Detailed Description

+
+

Definition at line 36 of file mp4_media_parser.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
void edash_packager::media::mp4::MP4MediaParser::Flush ()
+
+virtual
+
+

Flush data currently in the parser and put the parser in a state where it can receive data for a new seek point.

+ +

Implements edash_packager::media::MediaParser.

+ +

Definition at line 75 of file mp4_media_parser.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void edash_packager::media::mp4::MP4MediaParser::Init (const InitCBinit_cb,
const NewSampleCBnew_sample_cb,
KeySourcedecryption_key_source 
)
+
+virtual
+
+

Initialize the parser with necessary callbacks. Must be called before any data is passed to Parse().

+
Parameters
+ + + +
init_cbwill be called once enough data has been parsed to determine the initial stream configurations.
new_sample_cbwill be called each time a new media sample is available from the parser. May be NULL, and caller retains ownership.
+
+
+ +

Implements edash_packager::media::MediaParser.

+ +

Definition at line 54 of file mp4_media_parser.cc.

+ +
+
+ +
+
+ + + + + + + + +
bool edash_packager::media::mp4::MP4MediaParser::LoadMoov (const std::string & file_path)
+
+

Handles ISO-BMFF containers which have the 'moov' box trailing the movie data ('mdat'). It does this by doing a sparse parse of the file to locate the 'moov' box, and parsing its contents if it is found to be located after the 'mdat' box(es).

+
Parameters
+ + +
file_pathis the path to the media file to be parsed.
+
+
+
Returns
true if successful, false otherwise.
+ +

Definition at line 115 of file mp4_media_parser.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::mp4::MP4MediaParser::Parse (const uint8_t * buf,
int size 
)
+
+virtual
+
+

Should be called when there is new data to parse.

+
Returns
true if successful.
+ +

Implements edash_packager::media::MediaParser.

+ +

Definition at line 81 of file mp4_media_parser.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.png b/sdk/d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.png new file mode 100644 index 0000000000..1fb1a54f78 Binary files /dev/null and b/sdk/d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.png differ diff --git a/sdk/d8/d0d/media__sample_8cc_source.html b/sdk/d8/d0d/media__sample_8cc_source.html new file mode 100644 index 0000000000..31c2ea438f --- /dev/null +++ b/sdk/d8/d0d/media__sample_8cc_source.html @@ -0,0 +1,197 @@ + + + + + + +DASH Media Packaging SDK: media/base/media_sample.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
media_sample.cc
+
+
+
1 // Copyright 2014 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/base/media_sample.h"
+
8 
+
9 #include <inttypes.h>
+
10 
+
11 #include "packager/base/logging.h"
+
12 #include "packager/base/strings/stringprintf.h"
+
13 
+
14 namespace edash_packager {
+
15 namespace media {
+
16 
+
17 MediaSample::MediaSample(const uint8_t* data,
+
18  size_t size,
+
19  const uint8_t* side_data,
+
20  size_t side_data_size,
+
21  bool is_key_frame)
+
22  : dts_(0),
+
23  pts_(0),
+
24  duration_(0),
+
25  is_key_frame_(is_key_frame),
+
26  is_encrypted_(false) {
+
27  if (!data) {
+
28  CHECK_EQ(size, 0u);
+
29  CHECK(!side_data);
+
30  return;
+
31  }
+
32 
+
33  data_.assign(data, data + size);
+
34  if (side_data)
+
35  side_data_.assign(side_data, side_data + side_data_size);
+
36 }
+
37 
+
38 MediaSample::MediaSample() : dts_(0),
+
39  pts_(0),
+
40  duration_(0),
+
41  is_key_frame_(false),
+
42  is_encrypted_(false) {}
+
43 
+
44 MediaSample::~MediaSample() {}
+
45 
+
46 // static
+
47 scoped_refptr<MediaSample> MediaSample::CopyFrom(const uint8_t* data,
+
48  size_t data_size,
+
49  bool is_key_frame) {
+
50  // If you hit this CHECK you likely have a bug in a demuxer. Go fix it.
+
51  CHECK(data);
+
52  return make_scoped_refptr(
+
53  new MediaSample(data, data_size, NULL, 0u, is_key_frame));
+
54 }
+
55 
+
56 // static
+
57 scoped_refptr<MediaSample> MediaSample::CopyFrom(const uint8_t* data,
+
58  size_t data_size,
+
59  const uint8_t* side_data,
+
60  size_t side_data_size,
+
61  bool is_key_frame) {
+
62  // If you hit this CHECK you likely have a bug in a demuxer. Go fix it.
+
63  CHECK(data);
+
64  return make_scoped_refptr(new MediaSample(
+
65  data, data_size, side_data, side_data_size, is_key_frame));
+
66 }
+
67 
+
68 // static
+
69 scoped_refptr<MediaSample> MediaSample::CreateEmptyMediaSample() {
+
70  MediaSample* media_sample = new MediaSample();
+
71  return make_scoped_refptr(media_sample);
+
72 }
+
73 
+
74 // static
+
75 scoped_refptr<MediaSample> MediaSample::CreateEOSBuffer() {
+
76  return make_scoped_refptr(new MediaSample(NULL, 0, NULL, 0, false));
+
77 }
+
78 
+
79 std::string MediaSample::ToString() const {
+
80  if (end_of_stream())
+
81  return "End of stream sample\n";
+
82  return base::StringPrintf(
+
83  "dts: %" PRId64 "\n pts: %" PRId64 "\n duration: %" PRId64 "\n "
+
84  "is_key_frame: %s\n size: %zu\n side_data_size: %zu\n",
+
85  dts_,
+
86  pts_,
+
87  duration_,
+
88  is_key_frame_ ? "true" : "false",
+
89  data_.size(),
+
90  side_data_.size());
+
91 }
+
92 
+
93 } // namespace media
+
94 } // 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 scoped_refptr< MediaSample > CreateEOSBuffer()
Definition: media_sample.cc:75
+
static scoped_refptr< MediaSample > CreateEmptyMediaSample()
Create a MediaSample object with default members.
Definition: media_sample.cc:69
+
Class to hold a media sample.
Definition: media_sample.h:22
+ +
+ + + + diff --git a/sdk/d8/d19/bandwidth__estimator_8h_source.html b/sdk/d8/d19/bandwidth__estimator_8h_source.html new file mode 100644 index 0000000000..113f64a632 --- /dev/null +++ b/sdk/d8/d19/bandwidth__estimator_8h_source.html @@ -0,0 +1,141 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/bandwidth_estimator.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
bandwidth_estimator.h
+
+
+
1 // Copyright 2014 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 MPD_BASE_BANDWIDTH_ESTIMATOR_H_
+
8 #define MPD_BASE_BANDWIDTH_ESTIMATOR_H_
+
9 
+
10 #include <stddef.h>
+
11 #include <stdint.h>
+
12 
+
13 #include <list>
+
14 
+ +
16  public:
+
19  explicit BandwidthEstimator(int num_blocks);
+ +
21 
+
22  // @param size is the size of the block in bytes. Should be positive.
+
23  // @param duration is the length in seconds. Should be positive.
+
24  void AddBlock(uint64_t size, double duration);
+
25 
+
26  // @return The estimate bandwidth, in bits per second, from the harmonic mean
+
27  // of the number of blocks specified in the constructor. The value is
+
28  // rounded up to the nearest integer.
+
29  uint64_t Estimate() const;
+
30 
+
31  static const int kUseAllBlocks;
+
32 
+
33  private:
+
34  const int num_blocks_for_estimation_;
+
35  double harmonic_mean_denominator_;
+
36 
+
37  // This is not used when num_blocks_for_estimation_ != 0. Therefore it should
+
38  // always be 0 if num_blocks_for_estimation_ != 0.
+
39  size_t num_blocks_added_;
+
40  std::list<double> history_;
+
41 };
+
42 
+
43 #endif // MPD_BASE_BANDWIDTH_ESTIMATOR_H_
+
BandwidthEstimator(int num_blocks)
+ +
+ + + + diff --git a/sdk/d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html b/sdk/d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html new file mode 100644 index 0000000000..b894e0d31f --- /dev/null +++ b/sdk/d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html @@ -0,0 +1,378 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::EncryptingFragmenter Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::EncryptingFragmenter Class Reference
+
+
+ +

EncryptingFragmenter generates MP4 fragments with sample encrypted. + More...

+ +

#include <encrypting_fragmenter.h>

+
+Inheritance diagram for edash_packager::media::mp4::EncryptingFragmenter:
+
+
+ + +edash_packager::media::mp4::Fragmenter +edash_packager::media::mp4::KeyRotationFragmenter + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 EncryptingFragmenter (TrackFragment *traf, scoped_ptr< EncryptionKey > encryption_key, int64_t clear_time, uint8_t nalu_length_size)
 
Fragmenter implementation overrides.
virtual Status AddSample (scoped_refptr< MediaSample > sample) OVERRIDE
 
virtual Status InitializeFragment (int64_t first_sample_dts) OVERRIDE
 
+virtual void FinalizeFragment () OVERRIDE
 Finalize and optimize the fragment.
 
- Public Member Functions inherited from edash_packager::media::mp4::Fragmenter
 Fragmenter (TrackFragment *traf)
 
+void GenerateSegmentReference (SegmentReference *reference)
 Fill reference with current fragment information.
 
+uint64_t fragment_duration () const
 
+uint64_t first_sap_time () const
 
+uint64_t earliest_presentation_time () const
 
+bool fragment_initialized () const
 
+bool fragment_finalized () const
 
+BufferWriterdata ()
 
+BufferWriteraux_data ()
 
+ + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

virtual Status PrepareFragmentForEncryption (bool enable_encryption)
 
+virtual void FinalizeFragmentForEncryption ()
 Finalize current fragment for encryption.
 
Status CreateEncryptor ()
 
+EncryptionKeyencryption_key ()
 
+AesCtrEncryptorencryptor ()
 
+void set_encryption_key (scoped_ptr< EncryptionKey > encryption_key)
 
- Protected Member Functions inherited from edash_packager::media::mp4::Fragmenter
+TrackFragmenttraf ()
 
template<typename T >
bool OptimizeSampleEntries (std::vector< T > *entries, T *default_value)
 
+

Detailed Description

+

EncryptingFragmenter generates MP4 fragments with sample encrypted.

+ +

Definition at line 21 of file encrypting_fragmenter.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
edash_packager::media::mp4::EncryptingFragmenter::EncryptingFragmenter (TrackFragmenttraf,
scoped_ptr< EncryptionKeyencryption_key,
int64_t clear_time,
uint8_t nalu_length_size 
)
+
+
Parameters
+ + + + + +
trafpoints to a TrackFragment box.
encryption_keycontains the encryption parameters.
clear_timespecifies clear lead duration in units of the current track's timescale.
nalu_length_sizespecifies the size of NAL unit length, in bytes, for subsample encryption.
+
+
+ +

Definition at line 25 of file encrypting_fragmenter.cc.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
Status edash_packager::media::mp4::EncryptingFragmenter::AddSample (scoped_refptr< MediaSamplesample)
+
+virtual
+
+

Add a sample to the fragmenter.

+
Parameters
+ + +
samplepoints to the sample to be added.
+
+
+
Returns
OK on success, an error status otherwise.
+ +

Reimplemented from edash_packager::media::mp4::Fragmenter.

+ +

Definition at line 39 of file encrypting_fragmenter.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Status edash_packager::media::mp4::EncryptingFragmenter::CreateEncryptor ()
+
+protected
+
+

Create the encryptor for the internal encryption key. The existing encryptor will be reset if it is not NULL.

+
Returns
OK on success, an error status otherwise.
+ +

Definition at line 112 of file encrypting_fragmenter.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Status edash_packager::media::mp4::EncryptingFragmenter::InitializeFragment (int64_t first_sample_dts)
+
+virtual
+
+

Initialize the fragment with default data.

+
Parameters
+ + +
first_sample_dtsspecifies the decoding timestamp for the first sample for this fragment.
+
+
+
Returns
OK on success, an error status otherwise.
+ +

Reimplemented from edash_packager::media::mp4::Fragmenter.

+ +

Definition at line 54 of file encrypting_fragmenter.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Status edash_packager::media::mp4::EncryptingFragmenter::PrepareFragmentForEncryption (bool enable_encryption)
+
+protectedvirtual
+
+

Prepare current fragment for encryption.

+
Returns
OK on success, an error status otherwise.
+ +

Reimplemented in edash_packager::media::mp4::KeyRotationFragmenter.

+ +

Definition at line 87 of file encrypting_fragmenter.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.png b/sdk/d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.png new file mode 100644 index 0000000000..8d295f9e9e Binary files /dev/null and b/sdk/d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.png differ diff --git a/sdk/d8/d21/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo.html b/sdk/d8/d21/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo.html new file mode 100644 index 0000000000..2eee6b4b1a --- /dev/null +++ b/sdk/d8/d21/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo.html @@ -0,0 +1,123 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::ChunkInfo Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::ChunkInfo Struct Reference
+
+
+ + + + + + + + +

+Public Attributes

+uint32_t first_chunk
 
+uint32_t samples_per_chunk
 
+uint32_t sample_description_index
 
+

Detailed Description

+
+

Definition at line 268 of file box_definitions.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/sdk/d8/d22/classedash__packager_1_1media_1_1HttpKeyFetcher-members.html b/sdk/d8/d22/classedash__packager_1_1media_1_1HttpKeyFetcher-members.html new file mode 100644 index 0000000000..1385a2803b --- /dev/null +++ b/sdk/d8/d22/classedash__packager_1_1media_1_1HttpKeyFetcher-members.html @@ -0,0 +1,112 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::HttpKeyFetcher Member List
+
+
+ +

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

+ + + + + + + + + +
FetchKeys(const std::string &url, const std::string &request, std::string *response) OVERRIDEedash_packager::media::HttpKeyFetchervirtual
Get(const std::string &url, std::string *response)edash_packager::media::HttpKeyFetchervirtual
HttpKeyFetcher()edash_packager::media::HttpKeyFetcher
HttpKeyFetcher(uint32_t timeout_in_seconds)edash_packager::media::HttpKeyFetcher
KeyFetcher() (defined in edash_packager::media::KeyFetcher)edash_packager::media::KeyFetcher
Post(const std::string &url, const std::string &data, std::string *response)edash_packager::media::HttpKeyFetchervirtual
~HttpKeyFetcher() (defined in edash_packager::media::HttpKeyFetcher)edash_packager::media::HttpKeyFetchervirtual
~KeyFetcher() (defined in edash_packager::media::KeyFetcher)edash_packager::media::KeyFetchervirtual
+ + + + diff --git a/sdk/d8/d25/classedash__packager_1_1media_1_1ProducerConsumerQueue-members.html b/sdk/d8/d25/classedash__packager_1_1media_1_1ProducerConsumerQueue-members.html new file mode 100644 index 0000000000..b228fcc2fc --- /dev/null +++ b/sdk/d8/d25/classedash__packager_1_1media_1_1ProducerConsumerQueue-members.html @@ -0,0 +1,116 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::ProducerConsumerQueue< T > Member List
+
+
+ +

This is the complete list of members for edash_packager::media::ProducerConsumerQueue< T >, including all inherited members.

+ + + + + + + + + + + + + +
Empty() const edash_packager::media::ProducerConsumerQueue< T >inline
HeadPos() const edash_packager::media::ProducerConsumerQueue< T >inline
Peek(size_t pos, T *element, int64_t timeout_ms)edash_packager::media::ProducerConsumerQueue< T >
Pop(T *element, int64_t timeout_ms)edash_packager::media::ProducerConsumerQueue< T >
ProducerConsumerQueue(size_t capacity)edash_packager::media::ProducerConsumerQueue< T >explicit
ProducerConsumerQueue(size_t capacity, size_t starting_pos)edash_packager::media::ProducerConsumerQueue< T >
Push(const T &element, int64_t timeout_ms)edash_packager::media::ProducerConsumerQueue< T >
Size() const edash_packager::media::ProducerConsumerQueue< T >inline
Stop()edash_packager::media::ProducerConsumerQueue< T >inline
Stopped() const edash_packager::media::ProducerConsumerQueue< T >inline
TailPos() const edash_packager::media::ProducerConsumerQueue< T >inline
~ProducerConsumerQueue() (defined in edash_packager::media::ProducerConsumerQueue< T >)edash_packager::media::ProducerConsumerQueue< T >
+ + + + diff --git a/sdk/d8/d26/structedash__packager_1_1media_1_1mp4_1_1SegmentType-members.html b/sdk/d8/d26/structedash__packager_1_1media_1_1mp4_1_1SegmentType-members.html new file mode 100644 index 0000000000..0192a6893e --- /dev/null +++ b/sdk/d8/d26/structedash__packager_1_1media_1_1mp4_1_1SegmentType-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::SegmentType Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::SegmentType)edash_packager::media::mp4::SegmentTypevirtual
compatible_brands (defined in edash_packager::media::mp4::FileType)edash_packager::media::mp4::FileType
ComputeSize() OVERRIDEedash_packager::media::mp4::SegmentTypevirtual
FileType() (defined in edash_packager::media::mp4::FileType)edash_packager::media::mp4::FileType
major_brand (defined in edash_packager::media::mp4::FileType)edash_packager::media::mp4::FileType
minor_version (defined in edash_packager::media::mp4::FileType)edash_packager::media::mp4::FileType
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::SegmentTypevirtual
SegmentType() (defined in edash_packager::media::mp4::SegmentType)edash_packager::media::mp4::SegmentType
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FileType() (defined in edash_packager::media::mp4::FileType)edash_packager::media::mp4::FileTypevirtual
~SegmentType() (defined in edash_packager::media::mp4::SegmentType)edash_packager::media::mp4::SegmentTypevirtual
+ + + + diff --git a/sdk/d8/d2e/classedash__packager_1_1media_1_1ByteQueue.html b/sdk/d8/d2e/classedash__packager_1_1media_1_1ByteQueue.html new file mode 100644 index 0000000000..310631ede1 --- /dev/null +++ b/sdk/d8/d2e/classedash__packager_1_1media_1_1ByteQueue.html @@ -0,0 +1,185 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::ByteQueue Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::ByteQueue Class Reference
+
+
+ +

#include <byte_queue.h>

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

+Public Member Functions

+void Reset ()
 Reset the queue to the empty state.
 
+void Push (const uint8_t *data, int size)
 Append new bytes to the end of the queue.
 
void Peek (const uint8_t **data, int *size) const
 
void Pop (int count)
 
+

Detailed Description

+

Represents a queue of bytes. Data is added to the end of the queue via an Push() and removed via Pop(). The contents of the queue can be observed via the Peek() method. This class manages the underlying storage of the queue and tries to minimize the number of buffer copies when data is appended and removed.

+ +

Definition at line 20 of file byte_queue.h.

+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void edash_packager::media::ByteQueue::Peek (const uint8_t ** data,
int * size 
) const
+
+

Get a pointer to the front of the queue and the queue size. These values are only valid until the next Push() or Pop() call.

+ +

Definition at line 63 of file byte_queue.cc.

+ +
+
+ +
+
+ + + + + + + + +
void edash_packager::media::ByteQueue::Pop (int count)
+
+

Remove a number of bytes from the front of the queue.

+
Parameters
+ + +
countspecifies number of bytes to be popped.
+
+
+ +

Definition at line 70 of file byte_queue.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d8/d32/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize-members.html b/sdk/d8/d32/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize-members.html new file mode 100644 index 0000000000..3901a84bd5 --- /dev/null +++ b/sdk/d8/d32/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize-members.html @@ -0,0 +1,120 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::CompactSampleSize Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::CompactSampleSize)edash_packager::media::mp4::CompactSampleSizevirtual
CompactSampleSize() (defined in edash_packager::media::mp4::CompactSampleSize)edash_packager::media::mp4::CompactSampleSize
ComputeSize() OVERRIDEedash_packager::media::mp4::CompactSampleSizevirtual
field_size (defined in edash_packager::media::mp4::CompactSampleSize)edash_packager::media::mp4::CompactSampleSize
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::CompactSampleSizevirtual
sizes (defined in edash_packager::media::mp4::CompactSampleSize)edash_packager::media::mp4::CompactSampleSize
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~CompactSampleSize() (defined in edash_packager::media::mp4::CompactSampleSize)edash_packager::media::mp4::CompactSampleSizevirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
+ + + + diff --git a/sdk/d8/d34/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor-members.html b/sdk/d8/d34/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor-members.html new file mode 100644 index 0000000000..5c4b53cf8c --- /dev/null +++ b/sdk/d8/d34/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor-members.html @@ -0,0 +1,120 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::ElementaryStreamDescriptor Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + +
aac_audio_specific_config (defined in edash_packager::media::mp4::ElementaryStreamDescriptor)edash_packager::media::mp4::ElementaryStreamDescriptor
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::ElementaryStreamDescriptor)edash_packager::media::mp4::ElementaryStreamDescriptorvirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::ElementaryStreamDescriptorvirtual
ElementaryStreamDescriptor() (defined in edash_packager::media::mp4::ElementaryStreamDescriptor)edash_packager::media::mp4::ElementaryStreamDescriptor
es_descriptor (defined in edash_packager::media::mp4::ElementaryStreamDescriptor)edash_packager::media::mp4::ElementaryStreamDescriptor
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::ElementaryStreamDescriptorvirtual
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~ElementaryStreamDescriptor() (defined in edash_packager::media::mp4::ElementaryStreamDescriptor)edash_packager::media::mp4::ElementaryStreamDescriptorvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
+ + + + diff --git a/sdk/d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html b/sdk/d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html new file mode 100644 index 0000000000..d2dcbb44d9 --- /dev/null +++ b/sdk/d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html @@ -0,0 +1,188 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::EditList Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::EditList Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::EditList:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + +

+Public Attributes

+std::vector< EditListEntryedits
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 150 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::EditList::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 792 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.png b/sdk/d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.png new file mode 100644 index 0000000000..76223aa510 Binary files /dev/null and b/sdk/d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.png differ diff --git a/sdk/d8/d6a/classedash__packager_1_1media_1_1AudioStreamInfo-members.html b/sdk/d8/d6a/classedash__packager_1_1media_1_1AudioStreamInfo-members.html new file mode 100644 index 0000000000..6ba6f12f52 --- /dev/null +++ b/sdk/d8/d6a/classedash__packager_1_1media_1_1AudioStreamInfo-members.html @@ -0,0 +1,129 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::AudioStreamInfo Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
AudioStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, AudioCodec codec, const std::string &codec_string, const std::string &language, uint8_t sample_bits, uint8_t num_channels, uint32_t sampling_frequency, const uint8_t *extra_data, size_t extra_data_size, bool is_encrypted)edash_packager::media::AudioStreamInfo
bytes_per_frame() const (defined in edash_packager::media::AudioStreamInfo)edash_packager::media::AudioStreamInfoinline
codec() const (defined in edash_packager::media::AudioStreamInfo)edash_packager::media::AudioStreamInfoinline
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(AudioCodec codec, uint8_t audio_object_type)edash_packager::media::AudioStreamInfostatic
is_encrypted() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline
IsValidConfig() const OVERRIDEedash_packager::media::AudioStreamInfovirtual
language() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline
num_channels() const (defined in edash_packager::media::AudioStreamInfo)edash_packager::media::AudioStreamInfoinline
sample_bits() const (defined in edash_packager::media::AudioStreamInfo)edash_packager::media::AudioStreamInfoinline
sample_bytes() const (defined in edash_packager::media::AudioStreamInfo)edash_packager::media::AudioStreamInfoinline
sampling_frequency() const (defined in edash_packager::media::AudioStreamInfo)edash_packager::media::AudioStreamInfoinline
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_language(const std::string &language) (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline
set_sampling_frequency(const uint32_t sampling_frequency) (defined in edash_packager::media::AudioStreamInfo)edash_packager::media::AudioStreamInfoinline
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::AudioStreamInfovirtual
track_id() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline
~StreamInfo() (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoprotectedvirtual
+ + + + diff --git a/sdk/d8/d6c/classedash__packager_1_1media_1_1MediaSample.html b/sdk/d8/d6c/classedash__packager_1_1media_1_1MediaSample.html new file mode 100644 index 0000000000..dbe0536be2 --- /dev/null +++ b/sdk/d8/d6c/classedash__packager_1_1media_1_1MediaSample.html @@ -0,0 +1,364 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::MediaSample Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::MediaSample Class Reference
+
+
+ +

Class to hold a media sample. + More...

+ +

#include <media_sample.h>

+
+Inheritance diagram for edash_packager::media::MediaSample:
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+int64_t dts () const
 
+void set_dts (int64_t dts)
 
+int64_t pts () const
 
+void set_pts (int64_t pts)
 
+int64_t duration () const
 
+void set_duration (int64_t duration)
 
+bool is_key_frame () const
 
+bool is_encrypted () const
 
+const uint8_t * data () const
 
+uint8_t * writable_data ()
 
+size_t data_size () const
 
+const uint8_t * side_data () const
 
+size_t side_data_size () const
 
+void set_data (const uint8_t *data, const size_t data_size)
 
+void set_is_key_frame (bool value)
 
+void set_is_encrypted (bool value)
 
+bool end_of_stream () const
 
std::string ToString () const
 
+ + + + + + + + + + +

+Static Public Member Functions

static scoped_refptr< MediaSampleCopyFrom (const uint8_t *data, size_t size, bool is_key_frame)
 
static scoped_refptr< MediaSampleCopyFrom (const uint8_t *data, size_t size, const uint8_t *side_data, size_t side_data_size, bool is_key_frame)
 
+static scoped_refptr< MediaSampleCreateEmptyMediaSample ()
 Create a MediaSample object with default members.
 
static scoped_refptr< MediaSampleCreateEOSBuffer ()
 
+ + + +

+Friends

+class base::RefCountedThreadSafe< MediaSample >
 
+

Detailed Description

+

Class to hold a media sample.

+ +

Definition at line 22 of file media_sample.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
scoped_refptr< MediaSample > edash_packager::media::MediaSample::CopyFrom (const uint8_t * data,
size_t size,
bool is_key_frame 
)
+
+static
+
+

Create a MediaSample object from input.

+
Parameters
+ + + + +
datapoints to the buffer containing the sample data. Must not be NULL.
sizeindicates sample size in bytes. Must not be negative.
is_key_frameindicates whether the sample is a key frame.
+
+
+ +

Definition at line 47 of file media_sample.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
scoped_refptr< MediaSample > edash_packager::media::MediaSample::CopyFrom (const uint8_t * data,
size_t size,
const uint8_t * side_data,
size_t side_data_size,
bool is_key_frame 
)
+
+static
+
+

Create a MediaSample object from input.

+
Parameters
+ + + + + + +
datapoints to the buffer containing the sample data. Must not be NULL.
side_datapoints to the buffer containing the additional data. Some containers allow additional data to be specified. Must not be NULL.
sizeindicates sample size in bytes. Must not be negative.
side_data_sizeindicates additional sample data size in bytes. Must not be negative.
is_key_frameindicates whether the sample is a key frame.
+
+
+ +

Definition at line 57 of file media_sample.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
scoped_refptr< MediaSample > edash_packager::media::MediaSample::CreateEOSBuffer ()
+
+static
+
+

Create a MediaSample indicating we've reached end of stream. Calling any method other than end_of_stream() on the resulting buffer is disallowed.

+ +

Definition at line 75 of file media_sample.cc.

+ +
+
+ +
+
+ + + + + + + +
std::string edash_packager::media::MediaSample::ToString () const
+
+
Returns
a human-readable string describing |*this|.
+ +

Definition at line 79 of file media_sample.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d8/d6c/classedash__packager_1_1media_1_1MediaSample.png b/sdk/d8/d6c/classedash__packager_1_1media_1_1MediaSample.png new file mode 100644 index 0000000000..af1db79df2 Binary files /dev/null and b/sdk/d8/d6c/classedash__packager_1_1media_1_1MediaSample.png differ diff --git a/sdk/d8/d6f/classedash__packager_1_1MockAdaptationSet-members.html b/sdk/d8/d6f/classedash__packager_1_1MockAdaptationSet-members.html new file mode 100644 index 0000000000..373510ed91 --- /dev/null +++ b/sdk/d8/d6f/classedash__packager_1_1MockAdaptationSet-members.html @@ -0,0 +1,133 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::MockAdaptationSet Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AdaptationSet(uint32_t adaptation_set_id, const std::string &lang, const MpdOptions &mpd_options, MpdBuilder::MpdType mpd_type, base::AtomicSequenceNumber *representation_counter)edash_packager::AdaptationSetprotected
AddContentProtectionElement(const ContentProtectionElement &element)edash_packager::AdaptationSetvirtual
AddRepresentation(const MediaInfo &media_info)edash_packager::AdaptationSetvirtual
AddRole(Role role)edash_packager::AdaptationSetvirtual
ForceSetSegmentAlignment(bool segment_alignment)edash_packager::AdaptationSet
GetXml()edash_packager::AdaptationSet
Group() const edash_packager::AdaptationSetvirtual
id() const (defined in edash_packager::AdaptationSet)edash_packager::AdaptationSetinline
kRoleAlternate enum value (defined in edash_packager::AdaptationSet)edash_packager::AdaptationSet
kRoleCaption enum value (defined in edash_packager::AdaptationSet)edash_packager::AdaptationSet
kRoleCommentary enum value (defined in edash_packager::AdaptationSet)edash_packager::AdaptationSet
kRoleDub enum value (defined in edash_packager::AdaptationSet)edash_packager::AdaptationSet
kRoleMain enum value (defined in edash_packager::AdaptationSet)edash_packager::AdaptationSet
kRoleSubtitle enum value (defined in edash_packager::AdaptationSet)edash_packager::AdaptationSet
kRoleSupplementary enum value (defined in edash_packager::AdaptationSet)edash_packager::AdaptationSet
MOCK_CONST_METHOD0(Group, int()) (defined in edash_packager::MockAdaptationSet)edash_packager::MockAdaptationSet
MOCK_METHOD1(AddRepresentation, Representation *(const MediaInfo &media_info)) (defined in edash_packager::MockAdaptationSet)edash_packager::MockAdaptationSet
MOCK_METHOD1(AddContentProtectionElement, void(const ContentProtectionElement &element)) (defined in edash_packager::MockAdaptationSet)edash_packager::MockAdaptationSet
MOCK_METHOD1(AddRole, void(AdaptationSet::Role role)) (defined in edash_packager::MockAdaptationSet)edash_packager::MockAdaptationSet
MOCK_METHOD1(SetGroup, void(int group_number)) (defined in edash_packager::MockAdaptationSet)edash_packager::MockAdaptationSet
MOCK_METHOD2(UpdateContentProtectionPssh, void(const std::string &drm_uuid, const std::string &pssh)) (defined in edash_packager::MockAdaptationSet)edash_packager::MockAdaptationSet
MockAdaptationSet(uint32_t adaptation_set_id) (defined in edash_packager::MockAdaptationSet)edash_packager::MockAdaptationSetexplicit
OnNewSegmentForRepresentation(uint32_t representation_id, uint64_t start_time, uint64_t duration)edash_packager::AdaptationSet
OnSetFrameRateForRepresentation(uint32_t representation_id, uint32_t frame_duration, uint32_t timescale)edash_packager::AdaptationSet
Role enum name (defined in edash_packager::AdaptationSet)edash_packager::AdaptationSet
SetGroup(int group_number)edash_packager::AdaptationSetvirtual
UpdateContentProtectionPssh(const std::string &drm_uuid, const std::string &pssh)edash_packager::AdaptationSetvirtual
~AdaptationSet() (defined in edash_packager::AdaptationSet)edash_packager::AdaptationSetvirtual
~MockAdaptationSet() OVERRIDE (defined in edash_packager::MockAdaptationSet)edash_packager::MockAdaptationSetvirtual
+ + + + diff --git a/sdk/d8/d6f/structedash__packager_1_1media_1_1mp4_1_1TrackFragment-members.html b/sdk/d8/d6f/structedash__packager_1_1media_1_1mp4_1_1TrackFragment-members.html new file mode 100644 index 0000000000..ea35373676 --- /dev/null +++ b/sdk/d8/d6f/structedash__packager_1_1media_1_1mp4_1_1TrackFragment-members.html @@ -0,0 +1,122 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::TrackFragment Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
auxiliary_offset (defined in edash_packager::media::mp4::TrackFragment)edash_packager::media::mp4::TrackFragment
auxiliary_size (defined in edash_packager::media::mp4::TrackFragment)edash_packager::media::mp4::TrackFragment
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::TrackFragment)edash_packager::media::mp4::TrackFragmentvirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::TrackFragmentvirtual
decode_time (defined in edash_packager::media::mp4::TrackFragment)edash_packager::media::mp4::TrackFragment
decode_time_absent (defined in edash_packager::media::mp4::TrackFragment)edash_packager::media::mp4::TrackFragment
header (defined in edash_packager::media::mp4::TrackFragment)edash_packager::media::mp4::TrackFragment
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::TrackFragmentvirtual
runs (defined in edash_packager::media::mp4::TrackFragment)edash_packager::media::mp4::TrackFragment
sample_group_description (defined in edash_packager::media::mp4::TrackFragment)edash_packager::media::mp4::TrackFragment
sample_to_group (defined in edash_packager::media::mp4::TrackFragment)edash_packager::media::mp4::TrackFragment
TrackFragment() (defined in edash_packager::media::mp4::TrackFragment)edash_packager::media::mp4::TrackFragment
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~TrackFragment() (defined in edash_packager::media::mp4::TrackFragment)edash_packager::media::mp4::TrackFragmentvirtual
+ + + + diff --git a/sdk/d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html b/sdk/d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html new file mode 100644 index 0000000000..4a58311684 --- /dev/null +++ b/sdk/d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html @@ -0,0 +1,328 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::ChunkInfoIterator Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::ChunkInfoIterator Class Reference
+
+
+ +

#include <chunk_info_iterator.h>

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

+Public Member Functions

ChunkInfoIterator (const SampleToChunk &sample_to_chunk)
 Create ChunkInfoIterator from sample to chunk box.
 
bool AdvanceChunk ()
 
bool AdvanceSample ()
 
bool IsValid () const
 
uint32_t current_chunk () const
 
uint32_t samples_per_chunk () const
 
uint32_t sample_description_index () const
 
uint32_t NumSamples (uint32_t start_chunk, uint32_t end_chunk) const
 
uint32_t LastFirstChunk () const
 
+

Detailed Description

+

Sample to chunk box (STSC) iterator used to iterate through the compressed table by sample/chunk. This class also provides a convenient function to query total number of samples from start_chunk to end_chunk.

+ +

Definition at line 24 of file chunk_info_iterator.h.

+

Member Function Documentation

+ +
+
+ + + + + + + +
bool edash_packager::media::mp4::ChunkInfoIterator::AdvanceChunk ()
+
+

Advance to the next chunk.

+
Returns
true if not past the last chunk, false otherwise.
+ +

Definition at line 28 of file chunk_info_iterator.cc.

+ +
+
+ +
+
+ + + + + + + +
bool edash_packager::media::mp4::ChunkInfoIterator::AdvanceSample ()
+
+

Advance to the next sample.

+
Returns
true if not past the last sample, false otherwise.
+ +

Definition at line 38 of file chunk_info_iterator.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::ChunkInfoIterator::current_chunk () const
+
+inline
+
+
Returns
Current chunk.
+ +

Definition at line 42 of file chunk_info_iterator.h.

+ +
+
+ +
+
+ + + + + + + +
bool edash_packager::media::mp4::ChunkInfoIterator::IsValid () const
+
+
Returns
true if not past the last chunk/sample, false otherwise.
+ +

Definition at line 45 of file chunk_info_iterator.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::ChunkInfoIterator::LastFirstChunk () const
+
+inline
+
+
Returns
The last first_chunk in chunk_info_table.
+ +

Definition at line 57 of file chunk_info_iterator.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
uint32_t edash_packager::media::mp4::ChunkInfoIterator::NumSamples (uint32_t start_chunk,
uint32_t end_chunk 
) const
+
+
Returns
Number of samples from start_chunk to end_chunk, both 1-based, inclusive.
+ +

Definition at line 50 of file chunk_info_iterator.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::ChunkInfoIterator::sample_description_index () const
+
+inline
+
+
Returns
Sample description index for current chunk.
+ +

Definition at line 48 of file chunk_info_iterator.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::ChunkInfoIterator::samples_per_chunk () const
+
+inline
+
+
Returns
Samples per chunk for current chunk.
+ +

Definition at line 45 of file chunk_info_iterator.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d8/d74/classedash__packager_1_1Representation-members.html b/sdk/d8/d74/classedash__packager_1_1Representation-members.html new file mode 100644 index 0000000000..692f106610 --- /dev/null +++ b/sdk/d8/d74/classedash__packager_1_1Representation-members.html @@ -0,0 +1,114 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::Representation Member List
+
+
+ +

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

+ + + + + + + + + + + +
AdaptationSet (defined in edash_packager::Representation)edash_packager::Representationfriend
AddContentProtectionElement(const ContentProtectionElement &element)edash_packager::Representationvirtual
AddNewSegment(uint64_t start_time, uint64_t duration, uint64_t size)edash_packager::Representationvirtual
GetXml()edash_packager::Representation
id() const edash_packager::Representationinline
Init()edash_packager::Representation
Representation(const MediaInfo &media_info, const MpdOptions &mpd_options, uint32_t representation_id, scoped_ptr< RepresentationStateChangeListener > state_change_listener)edash_packager::Representationprotected
SetSampleDuration(uint32_t sample_duration)edash_packager::Representationvirtual
UpdateContentProtectionPssh(const std::string &drm_uuid, const std::string &pssh)edash_packager::Representationvirtual
~Representation() (defined in edash_packager::Representation)edash_packager::Representationvirtual
+ + + + diff --git a/sdk/d8/d75/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo-members.html b/sdk/d8/d75/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo-members.html new file mode 100644 index 0000000000..c36d10a1dd --- /dev/null +++ b/sdk/d8/d75/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo-members.html @@ -0,0 +1,117 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::ProtectionSchemeInfo Member List
+
+
+ +

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

+ + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::ProtectionSchemeInfo)edash_packager::media::mp4::ProtectionSchemeInfovirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::ProtectionSchemeInfovirtual
format (defined in edash_packager::media::mp4::ProtectionSchemeInfo)edash_packager::media::mp4::ProtectionSchemeInfo
info (defined in edash_packager::media::mp4::ProtectionSchemeInfo)edash_packager::media::mp4::ProtectionSchemeInfo
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ProtectionSchemeInfo() (defined in edash_packager::media::mp4::ProtectionSchemeInfo)edash_packager::media::mp4::ProtectionSchemeInfo
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::ProtectionSchemeInfovirtual
type (defined in edash_packager::media::mp4::ProtectionSchemeInfo)edash_packager::media::mp4::ProtectionSchemeInfo
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~ProtectionSchemeInfo() (defined in edash_packager::media::mp4::ProtectionSchemeInfo)edash_packager::media::mp4::ProtectionSchemeInfovirtual
+ + + + diff --git a/sdk/d8/d78/classedash__packager_1_1MockAdaptationSet.html b/sdk/d8/d78/classedash__packager_1_1MockAdaptationSet.html new file mode 100644 index 0000000000..38d9cf3131 --- /dev/null +++ b/sdk/d8/d78/classedash__packager_1_1MockAdaptationSet.html @@ -0,0 +1,188 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::MockAdaptationSet Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::MockAdaptationSet Class Reference
+
+
+
+Inheritance diagram for edash_packager::MockAdaptationSet:
+
+
+ + +edash_packager::AdaptationSet + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

MockAdaptationSet (uint32_t adaptation_set_id)
 
MOCK_METHOD1 (AddRepresentation, Representation *(const MediaInfo &media_info))
 
MOCK_METHOD1 (AddContentProtectionElement, void(const ContentProtectionElement &element))
 
MOCK_METHOD2 (UpdateContentProtectionPssh, void(const std::string &drm_uuid, const std::string &pssh))
 
MOCK_METHOD1 (AddRole, void(AdaptationSet::Role role))
 
MOCK_METHOD1 (SetGroup, void(int group_number))
 
MOCK_CONST_METHOD0 (Group, int())
 
- Public Member Functions inherited from edash_packager::AdaptationSet
virtual RepresentationAddRepresentation (const MediaInfo &media_info)
 
virtual void AddContentProtectionElement (const ContentProtectionElement &element)
 
virtual void UpdateContentProtectionPssh (const std::string &drm_uuid, const std::string &pssh)
 
virtual void AddRole (Role role)
 
xml::ScopedXmlPtr< xmlNode >::type GetXml ()
 
void ForceSetSegmentAlignment (bool segment_alignment)
 
virtual void SetGroup (int group_number)
 
virtual int Group () const
 
+uint32_t id () const
 
void OnNewSegmentForRepresentation (uint32_t representation_id, uint64_t start_time, uint64_t duration)
 
void OnSetFrameRateForRepresentation (uint32_t representation_id, uint32_t frame_duration, uint32_t timescale)
 
+ + + + + + + +

+Additional Inherited Members

- Public Types inherited from edash_packager::AdaptationSet
enum  Role {
+  kRoleCaption, +kRoleSubtitle, +kRoleMain, +kRoleAlternate, +
+  kRoleSupplementary, +kRoleCommentary, +kRoleDub +
+ }
 
- Protected Member Functions inherited from edash_packager::AdaptationSet
 AdaptationSet (uint32_t adaptation_set_id, const std::string &lang, const MpdOptions &mpd_options, MpdBuilder::MpdType mpd_type, base::AtomicSequenceNumber *representation_counter)
 
+

Detailed Description

+
+

Definition at line 29 of file mock_mpd_builder.h.

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d8/d78/classedash__packager_1_1MockAdaptationSet.png b/sdk/d8/d78/classedash__packager_1_1MockAdaptationSet.png new file mode 100644 index 0000000000..5307b35e9e Binary files /dev/null and b/sdk/d8/d78/classedash__packager_1_1MockAdaptationSet.png differ diff --git a/sdk/d8/d82/classedash__packager_1_1media_1_1MpdNotifyMuxerListener-members.html b/sdk/d8/d82/classedash__packager_1_1media_1_1MpdNotifyMuxerListener-members.html new file mode 100644 index 0000000000..143401d6ee --- /dev/null +++ b/sdk/d8/d82/classedash__packager_1_1media_1_1MpdNotifyMuxerListener-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::MpdNotifyMuxerListener Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
ContainerType enum name (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListener
kContainerMp4 enum value (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListener
kContainerMpeg2ts enum value (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListener
kContainerUnknown enum value (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListener
kContainerWebM enum value (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListener
MpdNotifyMuxerListener(MpdNotifier *mpd_notifier)edash_packager::media::MpdNotifyMuxerListenerexplicit
MuxerListener() (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListenerinlineprotected
OnEncryptionInfoReady(bool is_initial_encryption_info, const std::string &content_protection_uuid, const std::string &content_protection_name_version, const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &pssh) OVERRIDE (defined in edash_packager::media::MpdNotifyMuxerListener)edash_packager::media::MpdNotifyMuxerListenervirtual
OnMediaEnd(bool has_init_range, uint64_t init_range_start, uint64_t init_range_end, bool has_index_range, uint64_t index_range_start, uint64_t index_range_end, float duration_seconds, uint64_t file_size) OVERRIDE (defined in edash_packager::media::MpdNotifyMuxerListener)edash_packager::media::MpdNotifyMuxerListenervirtual
OnMediaStart(const MuxerOptions &muxer_options, const StreamInfo &stream_info, uint32_t time_scale, ContainerType container_type) OVERRIDE (defined in edash_packager::media::MpdNotifyMuxerListener)edash_packager::media::MpdNotifyMuxerListenervirtual
OnNewSegment(uint64_t start_time, uint64_t duration, uint64_t segment_file_size) OVERRIDE (defined in edash_packager::media::MpdNotifyMuxerListener)edash_packager::media::MpdNotifyMuxerListenervirtual
OnSampleDurationReady(uint32_t sample_duration) OVERRIDEedash_packager::media::MpdNotifyMuxerListenervirtual
SetContentProtectionSchemeIdUri(const std::string &scheme_id_uri)edash_packager::media::MpdNotifyMuxerListener
~MpdNotifyMuxerListener() (defined in edash_packager::media::MpdNotifyMuxerListener)edash_packager::media::MpdNotifyMuxerListenervirtual
~MuxerListener() (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListenerinlinevirtual
+ + + + diff --git a/sdk/d8/d8e/classedash__packager_1_1media_1_1mp2t_1_1TsSection.html b/sdk/d8/d8e/classedash__packager_1_1media_1_1mp2t_1_1TsSection.html new file mode 100644 index 0000000000..9ec25200f4 --- /dev/null +++ b/sdk/d8/d8e/classedash__packager_1_1media_1_1mp2t_1_1TsSection.html @@ -0,0 +1,149 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp2t::TsSection Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp2t::TsSection Class Referenceabstract
+
+
+
+Inheritance diagram for edash_packager::media::mp2t::TsSection:
+
+
+ + +edash_packager::media::mp2t::TsSectionPes +edash_packager::media::mp2t::TsSectionPsi +edash_packager::media::mp2t::TsSectionPat +edash_packager::media::mp2t::TsSectionPmt + +
+ + + + +

+Public Types

enum  SpecialPid {
+  kPidPat = 0x0, +kPidCat = 0x1, +kPidTsdt = 0x2, +kPidNullPacket = 0x1fff, +
+  kPidMax = 0x1fff +
+ }
 
+ + + + + + + +

+Public Member Functions

+virtual bool Parse (bool payload_unit_start_indicator, const uint8_t *buf, int size)=0
 
+virtual void Flush ()=0
 
+virtual void Reset ()=0
 
+

Detailed Description

+
+

Definition at line 12 of file ts_section.h.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/sdk/d8/d8e/classedash__packager_1_1media_1_1mp2t_1_1TsSection.png b/sdk/d8/d8e/classedash__packager_1_1media_1_1mp2t_1_1TsSection.png new file mode 100644 index 0000000000..2cdae43a6d Binary files /dev/null and b/sdk/d8/d8e/classedash__packager_1_1media_1_1mp2t_1_1TsSection.png differ diff --git a/sdk/d8/d94/adts__constants_8cc_source.html b/sdk/d8/d94/adts__constants_8cc_source.html new file mode 100644 index 0000000000..d87db2b009 --- /dev/null +++ b/sdk/d8/d94/adts__constants_8cc_source.html @@ -0,0 +1,124 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mpeg/adts_constants.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
adts_constants.cc
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/formats/mpeg/adts_constants.h"
+
6 
+
7 #include "packager/base/macros.h"
+
8 
+
9 namespace edash_packager {
+
10 namespace media {
+
11 
+
12 // The following conversion table is extracted from ISO 14496 Part 3 -
+
13 // Table 1.16 - Sampling Frequency Index.
+
14 const int kAdtsFrequencyTable[] = {96000, 88200, 64000, 48000, 44100,
+
15  32000, 24000, 22050, 16000, 12000,
+
16  11025, 8000, 7350};
+
17 const size_t kAdtsFrequencyTableSize = arraysize(kAdtsFrequencyTable);
+
18 
+
19 // The following conversion table is extracted from ISO 14496 Part 3 -
+
20 // Table 1.17 - Channel Configuration.
+
21 const int kAdtsNumChannelsTable[] = {
+
22  0, 1, 2, 2, 4, 5, 6, 8 };
+
23 const size_t kAdtsNumChannelsTableSize = arraysize(kAdtsNumChannelsTable);
+
24 
+
25 } // namespace media
+
26 } // namespace edash_packager
+
+ + + + diff --git a/sdk/d8/d97/structedash__packager_1_1ContentProtectionElement-members.html b/sdk/d8/d97/structedash__packager_1_1ContentProtectionElement-members.html new file mode 100644 index 0000000000..93e857fa2b --- /dev/null +++ b/sdk/d8/d97/structedash__packager_1_1ContentProtectionElement-members.html @@ -0,0 +1,110 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::ContentProtectionElement Member List
+
+
+ +

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

+ + + + + + + +
additional_attributes (defined in edash_packager::ContentProtectionElement)edash_packager::ContentProtectionElement
ContentProtectionElement() (defined in edash_packager::ContentProtectionElement)edash_packager::ContentProtectionElement
scheme_id_uri (defined in edash_packager::ContentProtectionElement)edash_packager::ContentProtectionElement
subelements (defined in edash_packager::ContentProtectionElement)edash_packager::ContentProtectionElement
value (defined in edash_packager::ContentProtectionElement)edash_packager::ContentProtectionElement
~ContentProtectionElement() (defined in edash_packager::ContentProtectionElement)edash_packager::ContentProtectionElement
+ + + + diff --git a/sdk/d8/d9a/fragmenter_8cc_source.html b/sdk/d8/d9a/fragmenter_8cc_source.html new file mode 100644 index 0000000000..df8291a441 --- /dev/null +++ b/sdk/d8/d9a/fragmenter_8cc_source.html @@ -0,0 +1,257 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/fragmenter.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
fragmenter.cc
+
+
+
1 // Copyright 2014 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/formats/mp4/fragmenter.h"
+
8 
+
9 #include <limits>
+
10 
+
11 #include "packager/media/base/buffer_writer.h"
+
12 #include "packager/media/base/media_sample.h"
+
13 #include "packager/media/formats/mp4/box_definitions.h"
+
14 
+
15 namespace edash_packager {
+
16 namespace media {
+
17 namespace mp4 {
+
18 
+
19 namespace {
+
20 const int64_t kInvalidTime = std::numeric_limits<int64_t>::max();
+
21 } // namespace
+
22 
+ +
24  : traf_(traf),
+
25  fragment_initialized_(false),
+
26  fragment_finalized_(false),
+
27  fragment_duration_(0),
+
28  presentation_start_time_(kInvalidTime),
+
29  earliest_presentation_time_(kInvalidTime),
+
30  first_sap_time_(kInvalidTime) {
+
31  DCHECK(traf);
+
32 }
+
33 
+
34 Fragmenter::~Fragmenter() {}
+
35 
+
36 Status Fragmenter::AddSample(scoped_refptr<MediaSample> sample) {
+
37  DCHECK(sample);
+
38  CHECK_GT(sample->duration(), 0);
+
39 
+
40  if (!fragment_initialized_) {
+
41  Status status = InitializeFragment(sample->dts());
+
42  if (!status.ok())
+
43  return status;
+
44  }
+
45 
+
46  // Fill in sample parameters. It will be optimized later.
+
47  traf_->runs[0].sample_sizes.push_back(sample->data_size());
+
48  traf_->runs[0].sample_durations.push_back(sample->duration());
+
49  traf_->runs[0].sample_flags.push_back(
+
50  sample->is_key_frame() ? 0 : TrackFragmentHeader::kNonKeySampleMask);
+
51 
+
52  data_->AppendArray(sample->data(), sample->data_size());
+
53  fragment_duration_ += sample->duration();
+
54 
+
55  int64_t pts = sample->pts();
+
56 
+
57  // Set |earliest_presentation_time_| to |pts| if |pts| is smaller or if it is
+
58  // not yet initialized (kInvalidTime > pts is always true).
+
59  if (earliest_presentation_time_ > pts)
+
60  earliest_presentation_time_ = pts;
+
61 
+
62  traf_->runs[0].sample_composition_time_offsets.push_back(pts - sample->dts());
+
63  if (pts != sample->dts())
+
64  traf_->runs[0].flags |= TrackFragmentRun::kSampleCompTimeOffsetsPresentMask;
+
65 
+
66  if (sample->is_key_frame()) {
+
67  if (first_sap_time_ == kInvalidTime)
+
68  first_sap_time_ = pts;
+
69  }
+
70  return Status::OK;
+
71 }
+
72 
+
73 Status Fragmenter::InitializeFragment(int64_t first_sample_dts) {
+
74  fragment_initialized_ = true;
+
75  fragment_finalized_ = false;
+
76  traf_->decode_time.decode_time = first_sample_dts;
+
77  traf_->runs.clear();
+
78  traf_->runs.resize(1);
+
79  traf_->runs[0].flags = TrackFragmentRun::kDataOffsetPresentMask;
+
80  traf_->header.sample_description_index = 1; // 1-based.
+
81  traf_->header.flags = TrackFragmentHeader::kDefaultBaseIsMoofMask |
+
82  TrackFragmentHeader::kSampleDescriptionIndexPresentMask;
+
83  fragment_duration_ = 0;
+
84  earliest_presentation_time_ = kInvalidTime;
+
85  first_sap_time_ = kInvalidTime;
+
86  data_.reset(new BufferWriter());
+
87  aux_data_.reset(new BufferWriter());
+
88  return Status::OK;
+
89 }
+
90 
+ +
92  // Optimize trun box.
+
93  traf_->runs[0].sample_count = traf_->runs[0].sample_sizes.size();
+
94  if (OptimizeSampleEntries(&traf_->runs[0].sample_durations,
+
95  &traf_->header.default_sample_duration)) {
+
96  traf_->header.flags |=
+
97  TrackFragmentHeader::kDefaultSampleDurationPresentMask;
+
98  } else {
+
99  traf_->runs[0].flags |= TrackFragmentRun::kSampleDurationPresentMask;
+
100  }
+
101  if (OptimizeSampleEntries(&traf_->runs[0].sample_sizes,
+
102  &traf_->header.default_sample_size)) {
+
103  traf_->header.flags |= TrackFragmentHeader::kDefaultSampleSizePresentMask;
+
104  } else {
+
105  traf_->runs[0].flags |= TrackFragmentRun::kSampleSizePresentMask;
+
106  }
+
107  if (OptimizeSampleEntries(&traf_->runs[0].sample_flags,
+
108  &traf_->header.default_sample_flags)) {
+
109  traf_->header.flags |= TrackFragmentHeader::kDefaultSampleFlagsPresentMask;
+
110  } else {
+
111  traf_->runs[0].flags |= TrackFragmentRun::kSampleFlagsPresentMask;
+
112  }
+
113 
+
114  fragment_finalized_ = true;
+
115  fragment_initialized_ = false;
+
116 }
+
117 
+ +
119  // NOTE: Daisy chain is not supported currently.
+
120  reference->reference_type = false;
+
121  reference->subsegment_duration = fragment_duration_;
+
122  reference->starts_with_sap = StartsWithSAP();
+
123  if (kInvalidTime == first_sap_time_) {
+
124  reference->sap_type = SegmentReference::TypeUnknown;
+
125  reference->sap_delta_time = 0;
+
126  } else {
+
127  reference->sap_type = SegmentReference::Type1;
+
128  reference->sap_delta_time = first_sap_time_ - earliest_presentation_time_;
+
129  }
+
130  reference->earliest_presentation_time = earliest_presentation_time_;
+
131 }
+
132 
+
133 bool Fragmenter::StartsWithSAP() {
+
134  DCHECK(!traf_->runs.empty());
+
135  uint32_t start_sample_flag;
+
136  if (traf_->runs[0].flags & TrackFragmentRun::kSampleFlagsPresentMask) {
+
137  DCHECK(!traf_->runs[0].sample_flags.empty());
+
138  start_sample_flag = traf_->runs[0].sample_flags[0];
+
139  } else {
+
140  DCHECK(traf_->header.flags &
+
141  TrackFragmentHeader::kDefaultSampleFlagsPresentMask);
+
142  start_sample_flag = traf_->header.default_sample_flags;
+
143  }
+
144  return (start_sample_flag & TrackFragmentHeader::kNonKeySampleMask) == 0;
+
145 }
+
146 
+
147 } // namespace mp4
+
148 } // namespace media
+
149 } // namespace edash_packager
+ +
void GenerateSegmentReference(SegmentReference *reference)
Fill reference with current fragment information.
Definition: fragmenter.cc:118
+ +
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/sdk/d8/d9f/udp__file_8h_source.html b/sdk/d8/d9f/udp__file_8h_source.html new file mode 100644 index 0000000000..f5cbbbb7c9 --- /dev/null +++ b/sdk/d8/d9f/udp__file_8h_source.html @@ -0,0 +1,155 @@ + + + + + + +DASH Media Packaging SDK: media/file/udp_file.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
udp_file.h
+
+
+
1 // Copyright 2014 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_FILE_UDP_FILE_H_
+
8 #define MEDIA_FILE_UDP_FILE_H_
+
9 
+
10 #include <stdint.h>
+
11 
+
12 #include <string>
+
13 
+
14 #include "packager/base/compiler_specific.h"
+
15 #include "packager/media/file/file.h"
+
16 
+
17 namespace edash_packager {
+
18 namespace media {
+
19 
+
21 class UdpFile : public File {
+
22  public:
+
25  explicit UdpFile(const char* address_and_port);
+
26 
+
29  virtual bool Close() OVERRIDE;
+
30  virtual int64_t Read(void* buffer, uint64_t length) OVERRIDE;
+
31  virtual int64_t Write(const void* buffer, uint64_t length) OVERRIDE;
+
32  virtual int64_t Size() OVERRIDE;
+
33  virtual bool Flush() OVERRIDE;
+
34  virtual bool Seek(uint64_t position) OVERRIDE;
+
35  virtual bool Tell(uint64_t* position) OVERRIDE;
+
37 
+
38  protected:
+
39  virtual ~UdpFile();
+
40 
+
41  virtual bool Open() OVERRIDE;
+
42 
+
43  private:
+
44  int socket_;
+
45 
+
46  DISALLOW_COPY_AND_ASSIGN(UdpFile);
+
47 };
+
48 
+
49 } // namespace media
+
50 } // namespace edash_packager
+
51 
+
52 #endif // MEDIA_FILE_UDP_FILE_H_
+
UdpFile(const char *address_and_port)
+
Implements UdpFile, which receives UDP unicast and multicast streams.
Definition: udp_file.h:21
+
Define an abstract file interface.
Definition: file.h:22
+
virtual bool Flush() OVERRIDE
+
virtual bool Open() OVERRIDE
Internal open. Should not be used directly.
+
virtual bool Tell(uint64_t *position) OVERRIDE
+
virtual int64_t Write(const void *buffer, uint64_t length) OVERRIDE
+
virtual int64_t Read(void *buffer, uint64_t length) OVERRIDE
+
virtual int64_t Size() OVERRIDE
+
virtual bool Close() OVERRIDE
+
virtual bool Seek(uint64_t position) OVERRIDE
+
+ + + + diff --git a/sdk/d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.html b/sdk/d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.html new file mode 100644 index 0000000000..a3f529b9fc --- /dev/null +++ b/sdk/d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.html @@ -0,0 +1,263 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::wvm::WvmMediaParser Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::wvm::WvmMediaParser Class Reference
+
+
+
+Inheritance diagram for edash_packager::media::wvm::WvmMediaParser:
+
+
+ + +edash_packager::media::MediaParser + +
+ + + + + + + + +

+Public Member Functions

virtual void Init (const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source) OVERRIDE
 
virtual void Flush () OVERRIDE
 
virtual bool Parse (const uint8_t *buf, int size) OVERRIDE
 
+ + + + + + +

+Additional Inherited Members

- Public Types inherited from edash_packager::media::MediaParser
typedef base::Callback< void(const
+std::vector< scoped_refptr
+< StreamInfo > > &stream_info)> 
InitCB
 
typedef base::Callback< bool(uint32_t
+track_id, const scoped_refptr
+< MediaSample > &media_sample)> 
NewSampleCB
 
+

Detailed Description

+
+

Definition at line 50 of file wvm_media_parser.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
void edash_packager::media::wvm::WvmMediaParser::Flush ()
+
+virtual
+
+

Flush data currently in the parser and put the parser in a state where it can receive data for a new seek point.

+ +

Implements edash_packager::media::MediaParser.

+ +

Definition at line 519 of file wvm_media_parser.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void edash_packager::media::wvm::WvmMediaParser::Init (const InitCBinit_cb,
const NewSampleCBnew_sample_cb,
KeySourcedecryption_key_source 
)
+
+virtual
+
+

Initialize the parser with necessary callbacks. Must be called before any data is passed to Parse().

+
Parameters
+ + + +
init_cbwill be called once enough data has been parsed to determine the initial stream configurations.
new_sample_cbwill be called each time a new media sample is available from the parser. May be NULL, and caller retains ownership.
+
+
+ +

Implements edash_packager::media::MediaParser.

+ +

Definition at line 118 of file wvm_media_parser.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::wvm::WvmMediaParser::Parse (const uint8_t * buf,
int size 
)
+
+virtual
+
+

Should be called when there is new data to parse.

+
Returns
true if successful.
+ +

Implements edash_packager::media::MediaParser.

+ +

Definition at line 129 of file wvm_media_parser.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.png b/sdk/d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.png new file mode 100644 index 0000000000..00a3e0bd9b Binary files /dev/null and b/sdk/d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.png differ diff --git a/sdk/d8/da1/classedash__packager_1_1media_1_1WidevineKeySource-members.html b/sdk/d8/da1/classedash__packager_1_1media_1_1WidevineKeySource-members.html new file mode 100644 index 0000000000..df98ff5611 --- /dev/null +++ b/sdk/d8/da1/classedash__packager_1_1media_1_1WidevineKeySource-members.html @@ -0,0 +1,130 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::WidevineKeySource Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
CreateFromHexStrings(const std::string &key_id_hex, const std::string &key_hex, const std::string &pssh_data_hex, const std::string &iv_hex)edash_packager::media::KeySourcestatic
FetchKeys(const std::vector< uint8_t > &content_id, const std::string &policy) OVERRIDEedash_packager::media::WidevineKeySourcevirtual
FetchKeys(const std::vector< uint8_t > &pssh_data) OVERRIDEedash_packager::media::WidevineKeySourcevirtual
FetchKeys(uint32_t asset_id) OVERRIDEedash_packager::media::WidevineKeySourcevirtual
GetCryptoPeriodKey(uint32_t crypto_period_index, TrackType track_type, EncryptionKey *key) OVERRIDEedash_packager::media::WidevineKeySourcevirtual
GetKey(TrackType track_type, EncryptionKey *key) OVERRIDEedash_packager::media::WidevineKeySourcevirtual
GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key) OVERRIDEedash_packager::media::WidevineKeySourcevirtual
GetTrackTypeFromString(const std::string &track_type_string)edash_packager::media::KeySourcestatic
key_production_thread_ (defined in edash_packager::media::WidevineKeySource)edash_packager::media::WidevineKeySourceprotected
KeySource() (defined in edash_packager::media::KeySource)edash_packager::media::KeySourceprotected
NUM_VALID_TRACK_TYPES enum value (defined in edash_packager::media::KeySource)edash_packager::media::KeySource
PsshBoxFromPsshData(const std::vector< uint8_t > &pssh_data)edash_packager::media::KeySourceprotectedstatic
set_key_fetcher(scoped_ptr< KeyFetcher > key_fetcher)edash_packager::media::WidevineKeySource
set_signer(scoped_ptr< RequestSigner > signer)edash_packager::media::WidevineKeySource
SystemName()edash_packager::media::KeySourcevirtual
TRACK_TYPE_AUDIO enum value (defined in edash_packager::media::KeySource)edash_packager::media::KeySource
TRACK_TYPE_HD enum value (defined in edash_packager::media::KeySource)edash_packager::media::KeySource
TRACK_TYPE_SD enum value (defined in edash_packager::media::KeySource)edash_packager::media::KeySource
TRACK_TYPE_UNKNOWN enum value (defined in edash_packager::media::KeySource)edash_packager::media::KeySource
TRACK_TYPE_UNSPECIFIED enum value (defined in edash_packager::media::KeySource)edash_packager::media::KeySource
TrackType enum name (defined in edash_packager::media::KeySource)edash_packager::media::KeySource
TrackTypeToString(TrackType track_type)edash_packager::media::KeySourcestatic
UUID() OVERRIDEedash_packager::media::WidevineKeySourcevirtual
WidevineKeySource(const std::string &server_url)edash_packager::media::WidevineKeySourceexplicit
~KeySource() (defined in edash_packager::media::KeySource)edash_packager::media::KeySourcevirtual
~WidevineKeySource() (defined in edash_packager::media::WidevineKeySource)edash_packager::media::WidevineKeySourcevirtual
+ + + + diff --git a/sdk/d8/da6/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader-members.html b/sdk/d8/da6/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader-members.html new file mode 100644 index 0000000000..d9f76f881d --- /dev/null +++ b/sdk/d8/da6/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::SoundMediaHeader Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
balance (defined in edash_packager::media::mp4::SoundMediaHeader)edash_packager::media::mp4::SoundMediaHeader
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::SoundMediaHeader)edash_packager::media::mp4::SoundMediaHeadervirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::SoundMediaHeadervirtual
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::SoundMediaHeadervirtual
SoundMediaHeader() (defined in edash_packager::media::mp4::SoundMediaHeader)edash_packager::media::mp4::SoundMediaHeader
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~SoundMediaHeader() (defined in edash_packager::media::mp4::SoundMediaHeader)edash_packager::media::mp4::SoundMediaHeadervirtual
+ + + + diff --git a/sdk/d8/daa/stream__info_8h_source.html b/sdk/d8/daa/stream__info_8h_source.html new file mode 100644 index 0000000000..4e49a57ef8 --- /dev/null +++ b/sdk/d8/daa/stream__info_8h_source.html @@ -0,0 +1,192 @@ + + + + + + +DASH Media Packaging SDK: media/base/stream_info.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
stream_info.h
+
+
+
1 // Copyright 2014 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_BASE_STREAM_INFO_H_
+
8 #define MEDIA_BASE_STREAM_INFO_H_
+
9 
+
10 #include <string>
+
11 #include <vector>
+
12 
+
13 #include "packager/base/memory/ref_counted.h"
+
14 
+
15 namespace edash_packager {
+
16 namespace media {
+
17 
+
18 enum StreamType {
+
19  kStreamUnknown = 0,
+
20  kStreamAudio,
+
21  kStreamVideo,
+
22 };
+
23 
+
25 class StreamInfo : public base::RefCountedThreadSafe<StreamInfo> {
+
26  public:
+
27  StreamInfo(StreamType stream_type,
+
28  int track_id,
+
29  uint32_t time_scale,
+
30  uint64_t duration,
+
31  const std::string& codec_string,
+
32  const std::string& language,
+
33  const uint8_t* extra_data,
+
34  size_t extra_data_size,
+
35  bool is_encrypted);
+
36 
+
39  virtual bool IsValidConfig() const = 0;
+
40 
+
42  virtual std::string ToString() const;
+
43 
+
44  StreamType stream_type() const { return stream_type_; }
+
45  uint32_t track_id() const { return track_id_; }
+
46  uint32_t time_scale() const { return time_scale_; }
+
47  uint64_t duration() const { return duration_; }
+
48  const std::string& codec_string() const { return codec_string_; }
+
49  const std::string& language() const { return language_; }
+
50 
+
51  bool is_encrypted() const { return is_encrypted_; }
+
52 
+
53  const std::vector<uint8_t>& extra_data() const { return extra_data_; }
+
54 
+
55  void set_duration(int duration) { duration_ = duration; }
+
56 
+
57  void set_extra_data(const std::vector<uint8_t>& data) { extra_data_ = data; }
+
58 
+
59  void set_codec_string(const std::string& codec_string) {
+
60  codec_string_ = codec_string;
+
61  }
+
62 
+
63  void set_language(const std::string& language) { language_ = language; }
+
64 
+
65  protected:
+
66  friend class base::RefCountedThreadSafe<StreamInfo>;
+
67  virtual ~StreamInfo();
+
68 
+
69  private:
+
70  // Whether the stream is Audio or Video.
+
71  StreamType stream_type_;
+
72  uint32_t track_id_;
+
73  // The actual time is calculated as time / time_scale_ in seconds.
+
74  uint32_t time_scale_;
+
75  // Duration base on time_scale.
+
76  uint64_t duration_;
+
77  std::string codec_string_;
+
78  std::string language_;
+
79  // Whether the stream is potentially encrypted.
+
80  // Note that in a potentially encrypted stream, individual buffers
+
81  // can be encrypted or not encrypted.
+
82  bool is_encrypted_;
+
83  // Optional byte data required for some audio/video decoders such as Vorbis
+
84  // codebooks.
+
85  std::vector<uint8_t> extra_data_;
+
86 
+
87  // Not using DISALLOW_COPY_AND_ASSIGN here intentionally to allow the compiler
+
88  // generated copy constructor and assignment operator. Since the extra data is
+
89  // typically small, the performance impact is minimal.
+
90 };
+
91 
+
92 } // namespace media
+
93 } // namespace edash_packager
+
94 
+
95 #endif // MEDIA_BASE_STREAM_INFO_H_
+
Abstract class holds stream information.
Definition: stream_info.h:25
+
virtual bool IsValidConfig() const =0
+
virtual std::string ToString() const
Definition: stream_info.cc:40
+
+ + + + diff --git a/sdk/d8/db0/structedash__packager_1_1media_1_1H264SPS.html b/sdk/d8/db0/structedash__packager_1_1media_1_1H264SPS.html new file mode 100644 index 0000000000..7b53d04791 --- /dev/null +++ b/sdk/d8/db0/structedash__packager_1_1media_1_1H264SPS.html @@ -0,0 +1,250 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::H264SPS Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::H264SPS Struct Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+int profile_idc
 
+bool constraint_set0_flag
 
+bool constraint_set1_flag
 
+bool constraint_set2_flag
 
+bool constraint_set3_flag
 
+bool constraint_set4_flag
 
+bool constraint_set5_flag
 
+int level_idc
 
+int seq_parameter_set_id
 
+int chroma_format_idc
 
+bool separate_colour_plane_flag
 
+int bit_depth_luma_minus8
 
+int bit_depth_chroma_minus8
 
+bool qpprime_y_zero_transform_bypass_flag
 
+bool seq_scaling_matrix_present_flag
 
+int scaling_list4x4 [6][kH264ScalingList4x4Length]
 
+int scaling_list8x8 [6][kH264ScalingList8x8Length]
 
+int log2_max_frame_num_minus4
 
+int pic_order_cnt_type
 
+int log2_max_pic_order_cnt_lsb_minus4
 
+bool delta_pic_order_always_zero_flag
 
+int offset_for_non_ref_pic
 
+int offset_for_top_to_bottom_field
 
+int num_ref_frames_in_pic_order_cnt_cycle
 
+int expected_delta_per_pic_order_cnt_cycle
 
+int offset_for_ref_frame [255]
 
+int max_num_ref_frames
 
+bool gaps_in_frame_num_value_allowed_flag
 
+int pic_width_in_mbs_minus1
 
+int pic_height_in_map_units_minus1
 
+bool frame_mbs_only_flag
 
+bool mb_adaptive_frame_field_flag
 
+bool direct_8x8_inference_flag
 
+bool frame_cropping_flag
 
+int frame_crop_left_offset
 
+int frame_crop_right_offset
 
+int frame_crop_top_offset
 
+int frame_crop_bottom_offset
 
+bool vui_parameters_present_flag
 
+int sar_width
 
+int sar_height
 
+bool bitstream_restriction_flag
 
+int max_num_reorder_frames
 
+int max_dec_frame_buffering
 
+int chroma_array_type
 
+

Detailed Description

+
+

Definition at line 81 of file h264_parser.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d8/dbb/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord.html b/sdk/d8/dbb/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord.html new file mode 100644 index 0000000000..25987c6349 --- /dev/null +++ b/sdk/d8/dbb/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord.html @@ -0,0 +1,214 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::AVCDecoderConfigurationRecord Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::AVCDecoderConfigurationRecord Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::AVCDecoderConfigurationRecord:
+
+
+ + +edash_packager::media::mp4::Box + +
+ + + + + + +

+Public Types

+typedef std::vector< uint8_t > SPS
 
+typedef std::vector< uint8_t > PPS
 
+ + + + + + + + + + + + + + + +

+Public Member Functions

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

+Public Attributes

+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
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 168 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::AVCDecoderConfigurationRecord::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 933 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d8/dbb/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord.png b/sdk/d8/dbb/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord.png new file mode 100644 index 0000000000..c1d5399e89 Binary files /dev/null and b/sdk/d8/dbb/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord.png differ diff --git a/sdk/d8/dbb/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData-members.html b/sdk/d8/dbb/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData-members.html new file mode 100644 index 0000000000..ab0c4e4d8a --- /dev/null +++ b/sdk/d8/dbb/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData-members.html @@ -0,0 +1,113 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::wvm::PrevSampleData Member List
+
+
+ +

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

+ + + + + + + + + + +
audio_sample (defined in edash_packager::media::wvm::PrevSampleData)edash_packager::media::wvm::PrevSampleData
audio_sample_duration (defined in edash_packager::media::wvm::PrevSampleData)edash_packager::media::wvm::PrevSampleData
audio_stream_id (defined in edash_packager::media::wvm::PrevSampleData)edash_packager::media::wvm::PrevSampleData
PrevSampleData() (defined in edash_packager::media::wvm::PrevSampleData)edash_packager::media::wvm::PrevSampleData
Reset() (defined in edash_packager::media::wvm::PrevSampleData)edash_packager::media::wvm::PrevSampleData
video_sample (defined in edash_packager::media::wvm::PrevSampleData)edash_packager::media::wvm::PrevSampleData
video_sample_duration (defined in edash_packager::media::wvm::PrevSampleData)edash_packager::media::wvm::PrevSampleData
video_stream_id (defined in edash_packager::media::wvm::PrevSampleData)edash_packager::media::wvm::PrevSampleData
~PrevSampleData() (defined in edash_packager::media::wvm::PrevSampleData)edash_packager::media::wvm::PrevSampleData
+ + + + diff --git a/sdk/d8/dc7/classedash__packager_1_1media_1_1UdpFile.html b/sdk/d8/dc7/classedash__packager_1_1media_1_1UdpFile.html new file mode 100644 index 0000000000..80f173ac40 --- /dev/null +++ b/sdk/d8/dc7/classedash__packager_1_1media_1_1UdpFile.html @@ -0,0 +1,465 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::UdpFile Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::UdpFile Class Reference
+
+
+ +

Implements UdpFile, which receives UDP unicast and multicast streams. + More...

+ +

#include <udp_file.h>

+
+Inheritance diagram for edash_packager::media::UdpFile:
+
+
+ + +edash_packager::media::File + +
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 UdpFile (const char *address_and_port)
 
File implementation overrides.
virtual bool Close () OVERRIDE
 
virtual int64_t Read (void *buffer, uint64_t length) OVERRIDE
 
virtual int64_t Write (const void *buffer, uint64_t length) OVERRIDE
 
virtual int64_t Size () OVERRIDE
 
virtual bool Flush () OVERRIDE
 
virtual bool Seek (uint64_t position) OVERRIDE
 
virtual bool Tell (uint64_t *position) OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::File
const std::string & file_name () const
 
+ + + + + + + + + +

+Protected Member Functions

+virtual bool Open () OVERRIDE
 Internal open. Should not be used directly.
 
- Protected Member Functions inherited from edash_packager::media::File
File (const std::string &file_name)
 
virtual ~File ()
 
+ + + + + + + + + + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from edash_packager::media::File
static FileOpen (const char *file_name, const char *mode)
 
static FileOpenWithNoBuffering (const char *file_name, const char *mode)
 
static bool Delete (const char *file_name)
 
static int64_t GetFileSize (const char *file_name)
 
static bool ReadFileToString (const char *file_name, std::string *contents)
 
+

Detailed Description

+

Implements UdpFile, which receives UDP unicast and multicast streams.

+ +

Definition at line 21 of file udp_file.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
edash_packager::media::UdpFile::UdpFile (const char * address_and_port)
+
+explicit
+
+
Parameters
+ + +
file_nameC string containing the address of the stream to receive. It should be of the form "<ip_address>:<port>".
+
+
+ +

Definition at line 84 of file udp_file_posix.cc.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool edash_packager::media::UdpFile::Close ()
+
+virtual
+
+

Flush() and de-allocate resources associated with this file, and delete this File object. THIS IS THE ONE TRUE WAY TO DEALLOCATE THIS OBJECT.

+
Returns
true on success. For writable files, returning false MAY INDICATE DATA LOSS.
+ +

Implements edash_packager::media::File.

+ +

Definition at line 90 of file udp_file_posix.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool edash_packager::media::UdpFile::Flush ()
+
+virtual
+
+

Flush the file so that recently written data will survive an application crash (but not necessarily an OS crash). For instance, in LocalFile the data is flushed into the OS but not necessarily to disk.

+
Returns
true on success, false otherwise.
+ +

Implements edash_packager::media::File.

+ +

Definition at line 127 of file udp_file_posix.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int64_t edash_packager::media::UdpFile::Read (void * buffer,
uint64_t length 
)
+
+virtual
+
+

Read data and return it in buffer.

+
Parameters
+ + + +
[out]bufferpoints to a block of memory with a size of at least length bytes.
lengthindicates number of bytes to be read.
+
+
+
Returns
Number of bytes read, or a value < 0 on error. Zero on end-of-file, or if 'length' is zero.
+ +

Implements edash_packager::media::File.

+ +

Definition at line 99 of file udp_file_posix.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool edash_packager::media::UdpFile::Seek (uint64_t position)
+
+virtual
+
+

Seek to the specifield position in the file.

+
Parameters
+ + +
positionis the position to seek to.
+
+
+
Returns
true on success, false otherwise.
+ +

Implements edash_packager::media::File.

+ +

Definition at line 132 of file udp_file_posix.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int64_t edash_packager::media::UdpFile::Size ()
+
+virtual
+
+
Returns
Size of the file in bytes. A return value less than zero indicates a problem getting the size.
+ +

Implements edash_packager::media::File.

+ +

Definition at line 120 of file udp_file_posix.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool edash_packager::media::UdpFile::Tell (uint64_t * position)
+
+virtual
+
+

Get the current file position.

+
Parameters
+ + +
positionis a pointer to contain the current file position upon successful return.
+
+
+
Returns
true on succcess, false otherwise.
+ +

Implements edash_packager::media::File.

+ +

Definition at line 137 of file udp_file_posix.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int64_t edash_packager::media::UdpFile::Write (const void * buffer,
uint64_t length 
)
+
+virtual
+
+

Write block of data.

+
Parameters
+ + + +
bufferpoints to a block of memory with at least length bytes.
lengthindicates number of bytes to write.
+
+
+
Returns
Number of bytes written, or a value < 0 on error.
+ +

Implements edash_packager::media::File.

+ +

Definition at line 115 of file udp_file_posix.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d8/dc7/classedash__packager_1_1media_1_1UdpFile.png b/sdk/d8/dc7/classedash__packager_1_1media_1_1UdpFile.png new file mode 100644 index 0000000000..9a05e256ab Binary files /dev/null and b/sdk/d8/dc7/classedash__packager_1_1media_1_1UdpFile.png differ diff --git a/sdk/d8/dca/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor-members.html b/sdk/d8/dca/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor-members.html new file mode 100644 index 0000000000..70adb44cf0 --- /dev/null +++ b/sdk/d8/dca/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor-members.html @@ -0,0 +1,110 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::AesCbcPkcs5Decryptor Member List
+
+
+ +

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

+ + + + + + + +
AesCbcPkcs5Decryptor() (defined in edash_packager::media::AesCbcPkcs5Decryptor)edash_packager::media::AesCbcPkcs5Decryptor
Decrypt(const std::string &ciphertext, std::string *plaintext)edash_packager::media::AesCbcPkcs5Decryptor
InitializeWithIv(const std::vector< uint8_t > &key, const std::vector< uint8_t > &iv)edash_packager::media::AesCbcPkcs5Decryptor
iv() const (defined in edash_packager::media::AesCbcPkcs5Decryptor)edash_packager::media::AesCbcPkcs5Decryptorinline
SetIv(const std::vector< uint8_t > &iv)edash_packager::media::AesCbcPkcs5Decryptor
~AesCbcPkcs5Decryptor() (defined in edash_packager::media::AesCbcPkcs5Decryptor)edash_packager::media::AesCbcPkcs5Decryptor
+ + + + diff --git a/sdk/d8/dcc/classedash__packager_1_1media_1_1AesRequestSigner.html b/sdk/d8/dcc/classedash__packager_1_1media_1_1AesRequestSigner.html new file mode 100644 index 0000000000..d8932b4021 --- /dev/null +++ b/sdk/d8/dcc/classedash__packager_1_1media_1_1AesRequestSigner.html @@ -0,0 +1,196 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::AesRequestSigner Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::AesRequestSigner Class Reference
+
+
+ +

AesRequestSigner uses AES-CBC signing. + More...

+ +

#include <request_signer.h>

+
+Inheritance diagram for edash_packager::media::AesRequestSigner:
+
+
+ + +edash_packager::media::RequestSigner + +
+ + + + + + + + +

+Public Member Functions

+virtual bool GenerateSignature (const std::string &message, std::string *signature) OVERRIDE
 RequestSigner implementation override.
 
- Public Member Functions inherited from edash_packager::media::RequestSigner
+const std::string & signer_name () const
 
+ + + +

+Static Public Member Functions

static AesRequestSignerCreateSigner (const std::string &signer_name, const std::string &aes_key_hex, const std::string &iv_hex)
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from edash_packager::media::RequestSigner
RequestSigner (const std::string &signer_name)
 
+

Detailed Description

+

AesRequestSigner uses AES-CBC signing.

+ +

Definition at line 43 of file request_signer.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
AesRequestSigner * edash_packager::media::AesRequestSigner::CreateSigner (const std::string & signer_name,
const std::string & aes_key_hex,
const std::string & iv_hex 
)
+
+static
+
+

Create an AesSigner object from key and iv in hex.

+
Returns
The created AesRequestSigner object on success, NULL otherwise.
+ +

Definition at line 28 of file request_signer.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d8/dcc/classedash__packager_1_1media_1_1AesRequestSigner.png b/sdk/d8/dcc/classedash__packager_1_1media_1_1AesRequestSigner.png new file mode 100644 index 0000000000..fedc018f69 Binary files /dev/null and b/sdk/d8/dcc/classedash__packager_1_1media_1_1AesRequestSigner.png differ diff --git a/sdk/d8/dcf/classedash__packager_1_1media_1_1RsaRequestSigner-members.html b/sdk/d8/dcf/classedash__packager_1_1media_1_1RsaRequestSigner-members.html new file mode 100644 index 0000000000..18c820e9d9 --- /dev/null +++ b/sdk/d8/dcf/classedash__packager_1_1media_1_1RsaRequestSigner-members.html @@ -0,0 +1,110 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::RsaRequestSigner Member List
+
+
+ +

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

+ + + + + + + +
CreateSigner(const std::string &signer_name, const std::string &pkcs1_rsa_key)edash_packager::media::RsaRequestSignerstatic
GenerateSignature(const std::string &message, std::string *signature) OVERRIDEedash_packager::media::RsaRequestSignervirtual
RequestSigner(const std::string &signer_name) (defined in edash_packager::media::RequestSigner)edash_packager::media::RequestSignerexplicitprotected
signer_name() const (defined in edash_packager::media::RequestSigner)edash_packager::media::RequestSignerinline
~RequestSigner() (defined in edash_packager::media::RequestSigner)edash_packager::media::RequestSignervirtual
~RsaRequestSigner() (defined in edash_packager::media::RsaRequestSigner)edash_packager::media::RsaRequestSignervirtual
+ + + + diff --git a/sdk/d8/df1/classedash__packager_1_1MpdWriter-members.html b/sdk/d8/df1/classedash__packager_1_1MpdWriter-members.html new file mode 100644 index 0000000000..57c9349e7f --- /dev/null +++ b/sdk/d8/df1/classedash__packager_1_1MpdWriter-members.html @@ -0,0 +1,110 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::MpdWriter Member List
+
+
+ +

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

+ + + + + + + +
AddBaseUrl(const std::string &base_url) (defined in edash_packager::MpdWriter)edash_packager::MpdWriter
AddFile(const std::string &media_info_path, const std::string &mpd_path) (defined in edash_packager::MpdWriter)edash_packager::MpdWriter
MpdWriter() (defined in edash_packager::MpdWriter)edash_packager::MpdWriter
MpdWriterTest (defined in edash_packager::MpdWriter)edash_packager::MpdWriterfriend
WriteMpdToFile(const char *file_name) (defined in edash_packager::MpdWriter)edash_packager::MpdWriter
~MpdWriter() (defined in edash_packager::MpdWriter)edash_packager::MpdWriter
+ + + + diff --git a/sdk/d8/df3/structedash__packager_1_1xml_1_1ScopedXmlPtr.html b/sdk/d8/df3/structedash__packager_1_1xml_1_1ScopedXmlPtr.html new file mode 100644 index 0000000000..c82a6efa1d --- /dev/null +++ b/sdk/d8/df3/structedash__packager_1_1xml_1_1ScopedXmlPtr.html @@ -0,0 +1,127 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::xml::ScopedXmlPtr< XmlType > Struct Template Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::xml::ScopedXmlPtr< XmlType > Struct Template Reference
+
+
+ +

scoped_ptr for libxml2 resources. + More...

+ +

#include <scoped_xml_ptr.h>

+ + + + +

+Public Types

+typedef scoped_ptr< XmlType,
+XmlDeleter
type
 
+

Detailed Description

+

template<typename XmlType>
+struct edash_packager::xml::ScopedXmlPtr< XmlType >

+ +

scoped_ptr for libxml2 resources.

+ +

Definition at line 41 of file scoped_xml_ptr.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/sdk/d9/d08/mock__mpd__builder_8h_source.html b/sdk/d9/d08/mock__mpd__builder_8h_source.html new file mode 100644 index 0000000000..83783da650 --- /dev/null +++ b/sdk/d9/d08/mock__mpd__builder_8h_source.html @@ -0,0 +1,185 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/mock_mpd_builder.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mock_mpd_builder.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 MPD_BASE_MOCK_MPD_BUILDER_H_
+
8 #define MPD_BASE_MOCK_MPD_BUILDER_H_
+
9 
+
10 #include <gmock/gmock.h>
+
11 
+
12 #include "packager/base/compiler_specific.h"
+
13 #include "packager/mpd/base/content_protection_element.h"
+
14 #include "packager/mpd/base/mpd_builder.h"
+
15 
+
16 namespace edash_packager {
+
17 
+
18 class MockMpdBuilder : public MpdBuilder {
+
19  public:
+
20  // |type| indicates whether the MPD should be for VOD or live content (kStatic
+
21  // for VOD profile, or kDynamic for live profile).
+
22  explicit MockMpdBuilder(MpdType type);
+
23  virtual ~MockMpdBuilder() OVERRIDE;
+
24 
+
25  MOCK_METHOD1(AddAdaptationSet, AdaptationSet*(const std::string& lang));
+
26  MOCK_METHOD1(ToString, bool(std::string* output));
+
27 };
+
28 
+ +
30  public:
+
31  // |adaptation_set_id| is the id for the AdaptationSet.
+
32  explicit MockAdaptationSet(uint32_t adaptation_set_id);
+
33  virtual ~MockAdaptationSet() OVERRIDE;
+
34 
+
35  MOCK_METHOD1(AddRepresentation, Representation*(const MediaInfo& media_info));
+
36  MOCK_METHOD1(AddContentProtectionElement,
+
37  void(const ContentProtectionElement& element));
+
38  MOCK_METHOD2(UpdateContentProtectionPssh,
+
39  void(const std::string& drm_uuid, const std::string& pssh));
+
40  MOCK_METHOD1(AddRole, void(AdaptationSet::Role role));
+
41 
+
42  MOCK_METHOD1(SetGroup, void(int group_number));
+
43  MOCK_CONST_METHOD0(Group, int());
+
44 
+
45  private:
+
46  // Only for constructing the super class. Not used for testing.
+
47  base::AtomicSequenceNumber sequence_counter_;
+
48 };
+
49 
+ +
51  public:
+
52  // |representation_id| is the numeric ID for the <Representation>.
+
53  explicit MockRepresentation(uint32_t representation_id);
+
54  virtual ~MockRepresentation() OVERRIDE;
+
55 
+
56  MOCK_METHOD1(AddContentProtectionElement,
+
57  void(const ContentProtectionElement& element));
+
58  MOCK_METHOD2(UpdateContentProtectionPssh,
+
59  void(const std::string& drm_uuid, const std::string& pssh));
+
60  MOCK_METHOD3(AddNewSegment,
+
61  void(uint64_t start_time, uint64_t duration, uint64_t size));
+
62  MOCK_METHOD1(SetSampleDuration, void(uint32_t sample_duration));
+
63 };
+
64 
+
65 } // namespace edash_packager
+
66 
+
67 #endif // MPD_BASE_MOCK_MPD_BUILDER_H_
+
MpdType type() const
Definition: mpd_builder.h:91
+
virtual void AddNewSegment(uint64_t start_time, uint64_t duration, uint64_t size)
+ +
virtual int Group() const
Definition: mpd_builder.cc:793
+
virtual AdaptationSet * AddAdaptationSet(const std::string &lang)
Definition: mpd_builder.cc:392
+
This class generates DASH MPDs (Media Presentation Descriptions).
Definition: mpd_builder.h:56
+ +
virtual void SetSampleDuration(uint32_t sample_duration)
+
virtual void UpdateContentProtectionPssh(const std::string &drm_uuid, const std::string &pssh)
+
virtual void SetGroup(int group_number)
Definition: mpd_builder.cc:789
+
virtual void AddContentProtectionElement(const ContentProtectionElement &element)
+ +
virtual Representation * AddRepresentation(const MediaInfo &media_info)
Definition: mpd_builder.cc:655
+ + + +
virtual void UpdateContentProtectionPssh(const std::string &drm_uuid, const std::string &pssh)
Definition: mpd_builder.cc:700
+
virtual bool ToString(std::string *output)
Definition: mpd_builder.cc:410
+
virtual void AddRole(Role role)
Definition: mpd_builder.cc:707
+
virtual void AddContentProtectionElement(const ContentProtectionElement &element)
Definition: mpd_builder.cc:693
+
+ + + + diff --git a/sdk/d9/d15/key__rotation__fragmenter_8cc_source.html b/sdk/d9/d15/key__rotation__fragmenter_8cc_source.html new file mode 100644 index 0000000000..e19c6496a0 --- /dev/null +++ b/sdk/d9/d15/key__rotation__fragmenter_8cc_source.html @@ -0,0 +1,236 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/key_rotation_fragmenter.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
key_rotation_fragmenter.cc
+
+
+
1 // Copyright 2014 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/formats/mp4/key_rotation_fragmenter.h"
+
8 
+
9 #include "packager/media/base/aes_encryptor.h"
+
10 #include "packager/media/formats/mp4/box_definitions.h"
+
11 
+
12 namespace edash_packager {
+
13 namespace media {
+
14 namespace mp4 {
+
15 
+
16 namespace {
+
17 const bool kInitialEncryptionInfo = false;
+
18 } // namespace
+
19 
+ +
21  TrackFragment* traf,
+
22  KeySource* encryption_key_source,
+
23  KeySource::TrackType track_type,
+
24  int64_t crypto_period_duration,
+
25  int64_t clear_time,
+
26  uint8_t nalu_length_size,
+
27  MuxerListener* muxer_listener)
+
28  : EncryptingFragmenter(traf,
+
29  scoped_ptr<EncryptionKey>(new EncryptionKey()),
+
30  clear_time,
+
31  nalu_length_size),
+
32  moof_(moof),
+
33  encryption_key_source_(encryption_key_source),
+
34  track_type_(track_type),
+
35  crypto_period_duration_(crypto_period_duration),
+
36  prev_crypto_period_index_(-1),
+
37  muxer_listener_(muxer_listener) {
+
38  DCHECK(moof);
+
39  DCHECK(encryption_key_source);
+
40 }
+
41 
+
42 KeyRotationFragmenter::~KeyRotationFragmenter() {}
+
43 
+ +
45  bool enable_encryption) {
+
46  bool need_to_refresh_encryptor = !encryptor();
+
47 
+
48  size_t current_crypto_period_index =
+
49  traf()->decode_time.decode_time / crypto_period_duration_;
+
50  if (current_crypto_period_index != prev_crypto_period_index_) {
+
51  scoped_ptr<EncryptionKey> encryption_key(new EncryptionKey());
+
52  Status status = encryption_key_source_->GetCryptoPeriodKey(
+
53  current_crypto_period_index, track_type_, encryption_key.get());
+
54  if (!status.ok())
+
55  return status;
+
56  set_encryption_key(encryption_key.Pass());
+
57  prev_crypto_period_index_ = current_crypto_period_index;
+
58  need_to_refresh_encryptor = true;
+
59  }
+
60 
+
61  // One and only one 'pssh' box is needed.
+
62  if (moof_->pssh.empty())
+
63  moof_->pssh.resize(1);
+
64  DCHECK(encryption_key());
+
65  moof_->pssh[0].raw_box = encryption_key()->pssh;
+
66 
+
67  if (muxer_listener_) {
+
68  muxer_listener_->OnEncryptionInfoReady(
+
69  !kInitialEncryptionInfo,
+
70  encryption_key_source_->UUID(), encryption_key_source_->SystemName(),
+
71  encryption_key()->key_id, encryption_key()->pssh);
+
72  }
+
73 
+
74  // Skip the following steps if the current fragment is not going to be
+
75  // encrypted. 'pssh' box needs to be included in the fragment, which is
+
76  // performed above, regardless of whether the fragment is encrypted. This is
+
77  // necessary for two reasons: 1) Requesting keys before reaching encrypted
+
78  // content avoids playback delay due to license requests; 2) In Chrome, CDM
+
79  // must be initialized before starting the playback and CDM can only be
+
80  // initialized with a valid 'pssh'.
+
81  if (!enable_encryption) {
+
82  DCHECK(!encryptor());
+
83  return Status::OK;
+
84  }
+
85 
+
86  if (need_to_refresh_encryptor) {
+
87  Status status = CreateEncryptor();
+
88  if (!status.ok())
+
89  return status;
+
90  }
+
91  DCHECK(encryptor());
+
92 
+
93  // Key rotation happens in fragment boundary only in this implementation,
+
94  // i.e. there is at most one key for the fragment. So there should be only
+
95  // one entry in SampleGroupDescription box and one entry in SampleToGroup box.
+
96  // Fill in SampleGroupDescription box information.
+
97  traf()->sample_group_description.grouping_type = FOURCC_SEIG;
+
98  traf()->sample_group_description.entries.resize(1);
+
99  traf()->sample_group_description.entries[0].is_encrypted = true;
+
100  traf()->sample_group_description.entries[0].iv_size =
+
101  encryptor()->iv().size();
+
102  traf()->sample_group_description.entries[0].key_id = encryption_key()->key_id;
+
103 
+
104  // Fill in SampleToGroup box information.
+
105  traf()->sample_to_group.grouping_type = FOURCC_SEIG;
+
106  traf()->sample_to_group.entries.resize(1);
+
107  // sample_count is adjusted in |FinalizeFragment| later.
+
108  traf()->sample_to_group.entries[0].group_description_index =
+
109  SampleToGroupEntry::kTrackFragmentGroupDescriptionIndexBase + 1;
+
110 
+
111  return Status::OK;
+
112 }
+
113 
+ + +
116  DCHECK_EQ(1u, traf()->sample_to_group.entries.size());
+
117  traf()->sample_to_group.entries[0].sample_count =
+
118  traf()->auxiliary_size.sample_count;
+
119 }
+
120 
+
121 } // namespace mp4
+
122 } // namespace media
+
123 } // namespace edash_packager
+
virtual Status PrepareFragmentForEncryption(bool enable_encryption) OVERRIDE
+
KeyRotationFragmenter(MovieFragment *moof, TrackFragment *traf, KeySource *encryption_key_source, KeySource::TrackType track_type, int64_t crypto_period_duration, int64_t clear_time, uint8_t nalu_length_size, MuxerListener *muxer_listener)
+
virtual Status GetCryptoPeriodKey(uint32_t crypto_period_index, TrackType track_type, EncryptionKey *key)
Definition: key_source.cc:66
+ + +
EncryptingFragmenter generates MP4 fragments with sample encrypted.
+ +
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.
+
virtual void FinalizeFragmentForEncryption() OVERRIDE
Finalize current fragment for encryption.
+
+ + + + diff --git a/sdk/d9/d17/classedash__packager_1_1DashIopMpdNotifier-members.html b/sdk/d9/d17/classedash__packager_1_1DashIopMpdNotifier-members.html new file mode 100644 index 0000000000..a332e9cca8 --- /dev/null +++ b/sdk/d9/d17/classedash__packager_1_1DashIopMpdNotifier-members.html @@ -0,0 +1,117 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::DashIopMpdNotifier Member List
+
+
+ +

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

+ + + + + + + + + + + + + + +
AddContentProtectionElement(uint32_t id, const ContentProtectionElement &content_protection_element) OVERRIDEedash_packager::DashIopMpdNotifiervirtual
dash_profile() const edash_packager::MpdNotifierinline
DashIopMpdNotifier(DashProfile dash_profile, const MpdOptions &mpd_options, const std::vector< std::string > &base_urls, const std::string &output_path) (defined in edash_packager::DashIopMpdNotifier)edash_packager::DashIopMpdNotifier
DashIopMpdNotifierTest (defined in edash_packager::DashIopMpdNotifier)edash_packager::DashIopMpdNotifierfriend
Flush() OVERRIDEedash_packager::DashIopMpdNotifiervirtual
Init() OVERRIDEedash_packager::DashIopMpdNotifiervirtual
MpdNotifier(DashProfile dash_profile) (defined in edash_packager::MpdNotifier)edash_packager::MpdNotifierinline
NotifyEncryptionUpdate(uint32_t container_id, const std::string &drm_uuid, const std::vector< uint8_t > &new_key_id, const std::vector< uint8_t > &new_pssh) OVERRIDEedash_packager::DashIopMpdNotifiervirtual
NotifyNewContainer(const MediaInfo &media_info, uint32_t *id) OVERRIDEedash_packager::DashIopMpdNotifiervirtual
NotifyNewSegment(uint32_t id, uint64_t start_time, uint64_t duration, uint64_t size) OVERRIDEedash_packager::DashIopMpdNotifiervirtual
NotifySampleDuration(uint32_t container_id, uint32_t sample_duration) OVERRIDEedash_packager::DashIopMpdNotifiervirtual
~DashIopMpdNotifier() OVERRIDE (defined in edash_packager::DashIopMpdNotifier)edash_packager::DashIopMpdNotifiervirtual
~MpdNotifier() (defined in edash_packager::MpdNotifier)edash_packager::MpdNotifierinlinevirtual
+ + + + diff --git a/sdk/d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html b/sdk/d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html new file mode 100644 index 0000000000..e0cbe2d4ce --- /dev/null +++ b/sdk/d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html @@ -0,0 +1,188 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::SyncSample Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::SyncSample Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::SyncSample:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + +

+Public Attributes

+std::vector< uint32_t > sample_number
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 311 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::SyncSample::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 710 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.png b/sdk/d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.png new file mode 100644 index 0000000000..90ba959d7a Binary files /dev/null and b/sdk/d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.png differ diff --git a/sdk/d9/d2c/classedash__packager_1_1media_1_1ProgressListener.html b/sdk/d9/d2c/classedash__packager_1_1media_1_1ProgressListener.html new file mode 100644 index 0000000000..2ab48d3ce3 --- /dev/null +++ b/sdk/d9/d2c/classedash__packager_1_1media_1_1ProgressListener.html @@ -0,0 +1,154 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::ProgressListener Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::ProgressListener Class Referenceabstract
+
+
+ +

This class listens to progress updates events. + More...

+ +

#include <progress_listener.h>

+ + + + +

+Public Member Functions

virtual void OnProgress (double progress)=0
 
+

Detailed Description

+

This class listens to progress updates events.

+ +

Definition at line 20 of file progress_listener.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void edash_packager::media::ProgressListener::OnProgress (double progress)
+
+pure virtual
+
+

Called when there is a progress update.

+
Parameters
+ + +
progressis the current progress metric, ranges from 0 to 1.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/sdk/d9/d46/classedash__packager_1_1media_1_1BufferReader.html b/sdk/d9/d46/classedash__packager_1_1media_1_1BufferReader.html new file mode 100644 index 0000000000..32c4d9d146 --- /dev/null +++ b/sdk/d9/d46/classedash__packager_1_1media_1_1BufferReader.html @@ -0,0 +1,281 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::BufferReader Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::BufferReader Class Reference
+
+
+ +

#include <buffer_reader.h>

+
+Inheritance diagram for edash_packager::media::BufferReader:
+
+
+ + +edash_packager::media::mp4::BoxReader + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

BufferReader (const uint8_t *buf, size_t size)
 Create a BufferReader from a raw buffer.
 
bool HasBytes (size_t count)
 
+bool ReadToVector (std::vector< uint8_t > *t, size_t count) WARN_UNUSED_RESULT
 
bool SkipBytes (size_t num_bytes) WARN_UNUSED_RESULT
 
+const uint8_t * data () const
 
+size_t size () const
 
+void set_size (size_t size)
 
+size_t pos () const
 
bool Read1 (uint8_t *v) WARN_UNUSED_RESULT
 
+bool Read2 (uint16_t *v) WARN_UNUSED_RESULT
 
+bool Read2s (int16_t *v) WARN_UNUSED_RESULT
 
+bool Read4 (uint32_t *v) WARN_UNUSED_RESULT
 
+bool Read4s (int32_t *v) WARN_UNUSED_RESULT
 
+bool Read8 (uint64_t *v) WARN_UNUSED_RESULT
 
+bool Read8s (int64_t *v) WARN_UNUSED_RESULT
 
bool ReadNBytesInto8 (uint64_t *v, size_t num_bytes) WARN_UNUSED_RESULT
 
+bool ReadNBytesInto8s (int64_t *v, size_t num_bytes) WARN_UNUSED_RESULT
 
+

Detailed Description

+

A simple buffer reader implementation, which reads data of various types from a fixed byte array.

+ +

Definition at line 22 of file buffer_reader.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
bool edash_packager::media::BufferReader::HasBytes (size_t count)
+
+inline
+
+
Returns
true if there are more than count bytes in the stream, false otherwise.
+ +

Definition at line 31 of file buffer_reader.h.

+ +
+
+ +
+
+ + + + + + + + +
bool edash_packager::media::BufferReader::Read1 (uint8_t * v)
+
+

Read a value from the stream, performing endian correction, and advance the stream pointer.

+
Returns
false if there are not enough bytes in the buffer.
+ +

Definition at line 14 of file buffer_reader.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::BufferReader::ReadNBytesInto8 (uint64_t * v,
size_t num_bytes 
)
+
+

Read N-byte integer of the corresponding signedness and store it in the 8-byte return type.

+
Parameters
+ + +
num_bytesshould not be larger than 8 bytes.
+
+
+
Returns
false if there are not enough bytes in the buffer, true otherwise.
+ +

Definition at line 40 of file buffer_reader.cc.

+ +
+
+ +
+
+ + + + + + + + +
bool edash_packager::media::BufferReader::SkipBytes (size_t num_bytes)
+
+

Advance the stream by this many bytes.

+
Returns
false if there are not enough bytes in the buffer, true otherwise.
+ +

Definition at line 56 of file buffer_reader.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d9/d46/classedash__packager_1_1media_1_1BufferReader.png b/sdk/d9/d46/classedash__packager_1_1media_1_1BufferReader.png new file mode 100644 index 0000000000..b2b35893c3 Binary files /dev/null and b/sdk/d9/d46/classedash__packager_1_1media_1_1BufferReader.png differ diff --git a/sdk/d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html b/sdk/d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html new file mode 100644 index 0000000000..71ca04bd58 --- /dev/null +++ b/sdk/d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html @@ -0,0 +1,228 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::TrackFragmentHeader Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::TrackFragmentHeader Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::TrackFragmentHeader:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + +

+Public Types

enum  TrackFragmentFlagsMasks {
+  kBaseDataOffsetPresentMask = 0x000001, +kSampleDescriptionIndexPresentMask = 0x000002, +kDefaultSampleDurationPresentMask = 0x000008, +kDefaultSampleSizePresentMask = 0x000010, +
+  kDefaultSampleFlagsPresentMask = 0x000020, +kDurationIsEmptyMask = 0x010000, +kDefaultBaseIsMoofMask = 0x020000 +
+ }
 
enum  SampleFlagsMasks {
+  kReservedMask = 0xFC000000, +kSampleDependsOnMask = 0x03000000, +kSampleIsDependedOnMask = 0x00C00000, +kSampleHasRedundancyMask = 0x00300000, +
+  kSamplePaddingValueMask = 0x000E0000, +kNonKeySampleMask = 0x00010000, +kSampleDegradationPriorityMask = 0x0000FFFF +
+ }
 
+ + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + + + + + + + +

+Public Attributes

+uint32_t track_id
 
+uint32_t sample_description_index
 
+uint32_t default_sample_duration
 
+uint32_t default_sample_size
 
+uint32_t default_sample_flags
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 447 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::TrackFragmentHeader::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1540 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.png b/sdk/d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.png new file mode 100644 index 0000000000..9367abb1aa Binary files /dev/null and b/sdk/d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.png differ diff --git a/sdk/d9/d5b/structedash__packager_1_1SegmentInfo-members.html b/sdk/d9/d5b/structedash__packager_1_1SegmentInfo-members.html new file mode 100644 index 0000000000..c1b64e12c4 --- /dev/null +++ b/sdk/d9/d5b/structedash__packager_1_1SegmentInfo-members.html @@ -0,0 +1,107 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::SegmentInfo Member List
+
+
+ +

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

+ + + + +
duration (defined in edash_packager::SegmentInfo)edash_packager::SegmentInfo
repeat (defined in edash_packager::SegmentInfo)edash_packager::SegmentInfo
start_time (defined in edash_packager::SegmentInfo)edash_packager::SegmentInfo
+ + + + diff --git a/sdk/d9/d65/classedash__packager_1_1media_1_1TextTrack-members.html b/sdk/d9/d65/classedash__packager_1_1media_1_1TextTrack-members.html new file mode 100644 index 0000000000..cc94b1ac54 --- /dev/null +++ b/sdk/d9/d65/classedash__packager_1_1media_1_1TextTrack-members.html @@ -0,0 +1,106 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::TextTrack Member List
+
+
+ +

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

+ + + +
addWebVTTCue(const base::TimeDelta &start, const base::TimeDelta &end, const std::string &id, const std::string &content, const std::string &settings)=0 (defined in edash_packager::media::TextTrack)edash_packager::media::TextTrackpure virtual
~TextTrack() (defined in edash_packager::media::TextTrack)edash_packager::media::TextTrackinlinevirtual
+ + + + diff --git a/sdk/d9/d76/structedash__packager_1_1media_1_1H264ModificationOfPicNum.html b/sdk/d9/d76/structedash__packager_1_1media_1_1H264ModificationOfPicNum.html new file mode 100644 index 0000000000..98dc586c3d --- /dev/null +++ b/sdk/d9/d76/structedash__packager_1_1media_1_1H264ModificationOfPicNum.html @@ -0,0 +1,127 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::H264ModificationOfPicNum Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::H264ModificationOfPicNum Struct Reference
+
+
+ + + + + + + + + + + +

+Public Attributes

+int modification_of_pic_nums_idc
 
+union {
+   int   abs_diff_pic_num_minus1
 
+   int   long_term_pic_num
 
}; 
 
+

Detailed Description

+
+

Definition at line 163 of file h264_parser.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/sdk/d9/d7b/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData.html b/sdk/d9/d7b/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData.html new file mode 100644 index 0000000000..454c577090 --- /dev/null +++ b/sdk/d9/d7b/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData.html @@ -0,0 +1,140 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::wvm::PrevSampleData Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::wvm::PrevSampleData Struct Reference
+
+
+ + + + +

+Public Member Functions

+void Reset ()
 
+ + + + + + + + + + + + + +

+Public Attributes

+scoped_refptr< MediaSampleaudio_sample
 
+scoped_refptr< MediaSamplevideo_sample
 
+uint32_t audio_stream_id
 
+uint32_t video_stream_id
 
+int64_t audio_sample_duration
 
+int64_t video_sample_duration
 
+

Detailed Description

+
+

Definition at line 37 of file wvm_media_parser.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d9/d86/limits_8h_source.html b/sdk/d9/d86/limits_8h_source.html new file mode 100644 index 0000000000..93c93aee4e --- /dev/null +++ b/sdk/d9/d86/limits_8h_source.html @@ -0,0 +1,149 @@ + + + + + + +DASH Media Packaging SDK: media/base/limits.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
limits.h
+
+
+
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 // Contains limit definition constants for the media subsystem.
+
6 
+
7 #ifndef MEDIA_BASE_LIMITS_H_
+
8 #define MEDIA_BASE_LIMITS_H_
+
9 
+
10 namespace edash_packager {
+
11 namespace media {
+
12 
+
13 namespace limits {
+
14 
+
15 enum {
+
16  // Maximum possible dimension (width or height) for any video.
+
17  kMaxDimension = (1 << 15) - 1, // 32767
+
18 
+
19  // Maximum possible canvas size (width multiplied by height) for any video.
+
20  kMaxCanvas = (1 << (14 * 2)), // 16384 x 16384
+
21 
+
22  // Total number of video frames which are populating in the pipeline.
+
23  kMaxVideoFrames = 4,
+
24 
+
25  // The following limits are used by AudioParameters::IsValid().
+
26  //
+
27  // A few notes on sample rates of common formats:
+
28  // - AAC files are limited to 96 kHz.
+
29  // - MP3 files are limited to 48 kHz.
+
30  // - Vorbis used to be limited to 96 KHz, but no longer has that
+
31  // restriction.
+
32  // - Most PC audio hardware is limited to 192 KHz.
+
33  kMaxSampleRate = 192000,
+
34  kMinSampleRate = 3000,
+
35  kMaxChannels = 32,
+
36  kMaxBytesPerSample = 4,
+
37  kMaxBitsPerSample = kMaxBytesPerSample * 8,
+
38  kMaxSamplesPerPacket = kMaxSampleRate,
+
39  kMaxPacketSizeInBytes =
+
40  kMaxBytesPerSample * kMaxChannels * kMaxSamplesPerPacket,
+
41 
+
42  // This limit is used by ParamTraits<VideoCaptureParams>.
+
43  kMaxFramesPerSecond = 1000,
+
44 };
+
45 
+
46 } // namespace limits
+
47 
+
48 } // namespace media
+
49 } // namespace edash_packager
+
50 
+
51 #endif // MEDIA_BASE_LIMITS_H_
+
+ + + + diff --git a/sdk/d9/d8b/classedash__packager_1_1media_1_1KeySource.html b/sdk/d9/d8b/classedash__packager_1_1media_1_1KeySource.html new file mode 100644 index 0000000000..ca2cbeaf29 --- /dev/null +++ b/sdk/d9/d8b/classedash__packager_1_1media_1_1KeySource.html @@ -0,0 +1,590 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::KeySource Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::KeySource Class Reference
+
+
+ +

KeySource is responsible for encryption key acquisition. + More...

+ +

#include <key_source.h>

+
+Inheritance diagram for edash_packager::media::KeySource:
+
+
+ + +edash_packager::media::WidevineKeySource + +
+ + + + +

+Public Types

enum  TrackType {
+  TRACK_TYPE_UNKNOWN = 0, +TRACK_TYPE_SD = 1, +TRACK_TYPE_HD = 2, +TRACK_TYPE_AUDIO = 3, +
+  TRACK_TYPE_UNSPECIFIED = 4, +NUM_VALID_TRACK_TYPES = 4 +
+ }
 
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual Status FetchKeys (const std::vector< uint8_t > &content_id, const std::string &policy)
 
virtual Status FetchKeys (const std::vector< uint8_t > &pssh_data)
 
virtual Status FetchKeys (uint32_t asset_id)
 
virtual Status GetKey (TrackType track_type, EncryptionKey *key)
 
virtual Status GetKey (const std::vector< uint8_t > &key_id, EncryptionKey *key)
 
virtual Status GetCryptoPeriodKey (uint32_t crypto_period_index, TrackType track_type, EncryptionKey *key)
 
virtual std::string UUID ()
 
virtual std::string SystemName ()
 
+ + + + + + + + + +

+Static Public Member Functions

static scoped_ptr< KeySourceCreateFromHexStrings (const std::string &key_id_hex, const std::string &key_hex, const std::string &pssh_data_hex, const std::string &iv_hex)
 
+static TrackType GetTrackTypeFromString (const std::string &track_type_string)
 Convert string representation of track type to enum representation.
 
+static std::string TrackTypeToString (TrackType track_type)
 Convert TrackType to string.
 
+ + + +

+Static Protected Member Functions

static std::vector< uint8_t > PsshBoxFromPsshData (const std::vector< uint8_t > &pssh_data)
 
+

Detailed Description

+

KeySource is responsible for encryption key acquisition.

+ +

Definition at line 29 of file key_source.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
scoped_ptr< KeySource > edash_packager::media::KeySource::CreateFromHexStrings (const std::string & key_id_hex,
const std::string & key_hex,
const std::string & pssh_data_hex,
const std::string & iv_hex 
)
+
+static
+
+

Create KeySource object from hex strings.

+
Parameters
+ + + + + +
key_id_hexis the key id in hex string.
key_hexis the key in hex string.
pssh_data_hexis the pssh_data in hex string.
iv_hexis the IV in hex string. If not specified, a randomly generated IV with the default length will be used. Note: GetKey on the created key source will always return the same key for all track types.
+
+
+ +

Definition at line 100 of file key_source.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Status edash_packager::media::KeySource::FetchKeys (const std::vector< uint8_t > & content_id,
const std::string & policy 
)
+
+virtual
+
+

Fetch keys for CENC from the key server.

+
Parameters
+ + + +
content_idthe unique id identify the content.
policyspecifies the DRM content rights.
+
+
+
Returns
OK on success, an error status otherwise.
+ +

Reimplemented in edash_packager::media::WidevineKeySource.

+ +

Definition at line 30 of file key_source.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Status edash_packager::media::KeySource::FetchKeys (const std::vector< uint8_t > & pssh_data)
+
+virtual
+
+

Fetch keys for CENC from the key server.

+
Parameters
+ + +
pssh_datais the Data portion of the PSSH box for the content to be decrypted.
+
+
+
Returns
OK on success, an error status otherwise.
+ +

Reimplemented in edash_packager::media::WidevineKeySource.

+ +

Definition at line 36 of file key_source.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Status edash_packager::media::KeySource::FetchKeys (uint32_t asset_id)
+
+virtual
+
+

Fetch keys for WVM decryption from the key server.

+
Parameters
+ + +
asset_idis the Widevine Classic asset ID for the content to be decrypted.
+
+
+
Returns
OK on success, an error status otherwise.
+ +

Reimplemented in edash_packager::media::WidevineKeySource.

+ +

Definition at line 41 of file key_source.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Status edash_packager::media::KeySource::GetCryptoPeriodKey (uint32_t crypto_period_index,
TrackType track_type,
EncryptionKeykey 
)
+
+virtual
+
+

Get encryption key of the specified track type at the specified index.

+
Parameters
+ + + + +
crypto_period_indexis the sequence number of the key rotation period for which the key is being retrieved.
track_typeis the type of track for which retrieving the key.
keyis a pointer to the EncryptionKey which will hold the retrieved key. Owner retains ownership, and may not be NULL.
+
+
+
Returns
OK on success, an error status otherwise.
+ +

Reimplemented in edash_packager::media::WidevineKeySource.

+ +

Definition at line 66 of file key_source.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Status edash_packager::media::KeySource::GetKey (TrackType track_type,
EncryptionKeykey 
)
+
+virtual
+
+

Get encryption key of the specified track type.

+
Parameters
+ + + +
track_typeis the type of track for which retrieving the key.
keyis a pointer to the EncryptionKey which will hold the retrieved key. Owner retains ownership, and may not be NULL.
+
+
+
Returns
OK on success, an error status otherwise.
+ +

Reimplemented in edash_packager::media::WidevineKeySource.

+ +

Definition at line 46 of file key_source.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Status edash_packager::media::KeySource::GetKey (const std::vector< uint8_t > & key_id,
EncryptionKeykey 
)
+
+virtual
+
+

Get the encryption key specified by the CENC key ID.

+
Parameters
+ + + +
key_idis the unique identifier for the key being retreived.
keyis a pointer to the EncryptionKey which will hold the retrieved key. Owner retains ownership, and may not be NULL.
+
+
+
Returns
OK on success, or an error status otherwise.
+ +

Reimplemented in edash_packager::media::WidevineKeySource.

+ +

Definition at line 53 of file key_source.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
std::vector< uint8_t > edash_packager::media::KeySource::PsshBoxFromPsshData (const std::vector< uint8_t > & pssh_data)
+
+staticprotected
+
+
Returns
the raw bytes of the pssh box with system ID and box header included.
+ +

Definition at line 164 of file key_source.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
std::string edash_packager::media::KeySource::SystemName ()
+
+virtual
+
+

Returns the name, and possibly with a version number, of the key source. (This would be the ContentProtection attribute in the MPD. DASH-IF- IOP v3.0 recommends this to be the DRM system and version name in human readable from.)

+
Returns
the name of the key source, empty string if not specified.
+ +

Definition at line 96 of file key_source.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
std::string edash_packager::media::KeySource::UUID ()
+
+virtual
+
+

Returns the UUID of the key source in human readable form. UUIDs are listed here: http://dashif.org/identifiers/protection/

+
Returns
UUID of the key source, empty string if not specified.
+ +

Reimplemented in edash_packager::media::WidevineKeySource.

+ +

Definition at line 92 of file key_source.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d9/d8b/classedash__packager_1_1media_1_1KeySource.png b/sdk/d9/d8b/classedash__packager_1_1media_1_1KeySource.png new file mode 100644 index 0000000000..c7a2f5465b Binary files /dev/null and b/sdk/d9/d8b/classedash__packager_1_1media_1_1KeySource.png differ diff --git a/sdk/d9/d90/text__track_8h_source.html b/sdk/d9/d90/text__track_8h_source.html new file mode 100644 index 0000000000..d83555ddb2 --- /dev/null +++ b/sdk/d9/d90/text__track_8h_source.html @@ -0,0 +1,142 @@ + + + + + + +DASH Media Packaging SDK: media/base/text_track.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
text_track.h
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_BASE_TEXT_TRACK_H_
+
6 #define MEDIA_BASE_TEXT_TRACK_H_
+
7 
+
8 #include <string>
+
9 
+
10 #include "packager/base/callback.h"
+
11 #include "packager/base/memory/scoped_ptr.h"
+
12 #include "packager/base/time/time.h"
+
13 
+
14 namespace edash_packager {
+
15 namespace media {
+
16 
+
18 enum TextKind {
+
19  kTextSubtitles,
+
20  kTextCaptions,
+
21  kTextDescriptions,
+
22  kTextMetadata,
+
23  kTextNone
+
24 };
+
25 
+
26 class TextTrack {
+
27  public:
+
28  virtual ~TextTrack() {}
+
29  virtual void addWebVTTCue(const base::TimeDelta& start,
+
30  const base::TimeDelta& end,
+
31  const std::string& id,
+
32  const std::string& content,
+
33  const std::string& settings) = 0;
+
34 };
+
35 
+
36 typedef base::Callback<scoped_ptr<TextTrack>
+
37  (TextKind kind,
+
38  const std::string& label,
+
39  const std::string& language)> AddTextTrackCB;
+
40 
+
41 } // namespace media
+
42 } // namespace edash_packager
+
43 
+
44 #endif // MEDIA_BASE_TEXT_TRACK_H_
+ +
+ + + + diff --git a/sdk/d9/d91/h264__bit__reader_8h_source.html b/sdk/d9/d91/h264__bit__reader_8h_source.html new file mode 100644 index 0000000000..64a326ab78 --- /dev/null +++ b/sdk/d9/d91/h264__bit__reader_8h_source.html @@ -0,0 +1,178 @@ + + + + + + +DASH Media Packaging SDK: media/filters/h264_bit_reader.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
h264_bit_reader.h
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 //
+
5 // This file contains an implementation of an H264 Annex-B video stream parser.
+
6 
+
7 #ifndef MEDIA_FILTERS_H264_BIT_READER_H_
+
8 #define MEDIA_FILTERS_H264_BIT_READER_H_
+
9 
+
10 #include <stdint.h>
+
11 #include <sys/types.h>
+
12 
+
13 #include "packager/base/macros.h"
+
14 
+
15 namespace edash_packager {
+
16 namespace media {
+
17 
+
18 // A class to provide bit-granularity reading of H.264 streams.
+
19 // This is not a generic bit reader class, as it takes into account
+
20 // H.264 stream-specific constraints, such as skipping emulation-prevention
+
21 // bytes and stop bits. See spec for more details.
+ +
23  public:
+
24  H264BitReader();
+
25  ~H264BitReader();
+
26 
+
27  // Initialize the reader to start reading at |data|, |size| being size
+
28  // of |data| in bytes.
+
29  // Return false on insufficient size of stream..
+
30  bool Initialize(const uint8_t* data, off_t size);
+
31 
+
32  // Read |num_bits| next bits from stream and return in |*out|, first bit
+
33  // from the stream starting at |num_bits| position in |*out|.
+
34  // |num_bits| may be 1-32, inclusive.
+
35  // Return false if the given number of bits cannot be read (not enough
+
36  // bits in the stream), true otherwise.
+
37  bool ReadBits(int num_bits, int* out);
+
38 
+
39  // Return the number of bits left in the stream.
+
40  off_t NumBitsLeft();
+
41 
+
42  // See the definition of more_rbsp_data() in spec.
+
43  bool HasMoreRBSPData();
+
44 
+
45  // Return the number of emulation prevention bytes already read.
+
46  size_t NumEmulationPreventionBytesRead();
+
47 
+
48  private:
+
49  // Advance to the next byte, loading it into curr_byte_.
+
50  // Return false on end of stream.
+
51  bool UpdateCurrByte();
+
52 
+
53  // Pointer to the next unread (not in curr_byte_) byte in the stream.
+
54  const uint8_t* data_;
+
55 
+
56  // Bytes left in the stream (without the curr_byte_).
+
57  off_t bytes_left_;
+
58 
+
59  // Contents of the current byte; first unread bit starting at position
+
60  // 8 - num_remaining_bits_in_curr_byte_ from MSB.
+
61  int curr_byte_;
+
62 
+
63  // Number of bits remaining in curr_byte_
+
64  int num_remaining_bits_in_curr_byte_;
+
65 
+
66  // Used in emulation prevention three byte detection (see spec).
+
67  // Initially set to 0xffff to accept all initial two-byte sequences.
+
68  int prev_two_bytes_;
+
69 
+
70  // Number of emulation preventation bytes (0x000003) we met.
+
71  size_t emulation_prevention_bytes_;
+
72 
+
73  DISALLOW_COPY_AND_ASSIGN(H264BitReader);
+
74 };
+
75 
+
76 } // namespace media
+
77 } // namespace edash_packager
+
78 
+
79 #endif // MEDIA_FILTERS_H264_BIT_READER_H_
+ +
+ + + + diff --git a/sdk/d9/d93/media__stream_8h_source.html b/sdk/d9/d93/media__stream_8h_source.html new file mode 100644 index 0000000000..3ad5a7906e --- /dev/null +++ b/sdk/d9/d93/media__stream_8h_source.html @@ -0,0 +1,178 @@ + + + + + + +DASH Media Packaging SDK: media/base/media_stream.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
media_stream.h
+
+
+
1 // Copyright 2014 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_BASE_MEDIA_STREAM_H_
+
8 #define MEDIA_BASE_MEDIA_STREAM_H_
+
9 
+
10 #include <deque>
+
11 
+
12 #include "packager/base/memory/ref_counted.h"
+
13 #include "packager/base/memory/scoped_ptr.h"
+
14 #include "packager/media/base/status.h"
+
15 
+
16 namespace edash_packager {
+
17 namespace media {
+
18 
+
19 class Demuxer;
+
20 class Muxer;
+
21 class MediaSample;
+
22 class StreamInfo;
+
23 
+
26 class MediaStream {
+
27  public:
+
28  enum MediaStreamOperation {
+
29  kPush,
+
30  kPull,
+
31  };
+
34  MediaStream(scoped_refptr<StreamInfo> info, Demuxer* demuxer);
+
35  ~MediaStream();
+
36 
+
39  void Connect(Muxer* muxer);
+
40 
+
42  Status Start(MediaStreamOperation operation);
+
43 
+
45  Status PushSample(const scoped_refptr<MediaSample>& sample);
+
46 
+
48  Status PullSample(scoped_refptr<MediaSample>* sample);
+
49 
+
50  Demuxer* demuxer() { return demuxer_; }
+
51  Muxer* muxer() { return muxer_; }
+
52  const scoped_refptr<StreamInfo> info() const;
+
53 
+
55  std::string ToString() const;
+
56 
+
57  private:
+
58  // State transition diagram available @ http://goo.gl/ThJQbl.
+
59  enum State {
+
60  kIdle,
+
61  kConnected,
+
62  kDisconnected,
+
63  kPushing,
+
64  kPulling,
+
65  };
+
66 
+
67  scoped_refptr<StreamInfo> info_;
+
68  Demuxer* demuxer_;
+
69  Muxer* muxer_;
+
70  State state_;
+
71  // An internal buffer to store samples temporarily.
+
72  std::deque<scoped_refptr<MediaSample> > samples_;
+
73 
+
74  DISALLOW_COPY_AND_ASSIGN(MediaStream);
+
75 };
+
76 
+
77 } // namespace media
+
78 } // namespace edash_packager
+
79 
+
80 #endif // MEDIA_BASE_MEDIA_STREAM_H_
+
Status PullSample(scoped_refptr< MediaSample > *sample)
Pull sample from Demuxer (triggered by Muxer).
Definition: media_stream.cc:24
+
MediaStream(scoped_refptr< StreamInfo > info, Demuxer *demuxer)
Definition: media_stream.cc:19
+
Status Start(MediaStreamOperation operation)
Start the stream for pushing or pulling.
Definition: media_stream.cc:62
+ +
Status PushSample(const scoped_refptr< MediaSample > &sample)
Push sample to Muxer (triggered by Demuxer).
Definition: media_stream.cc:39
+ + + + + +
+ + + + diff --git a/sdk/d9/d95/classedash__packager_1_1media_1_1MediaStream-members.html b/sdk/d9/d95/classedash__packager_1_1media_1_1MediaStream-members.html new file mode 100644 index 0000000000..fbf9a1e01a --- /dev/null +++ b/sdk/d9/d95/classedash__packager_1_1media_1_1MediaStream-members.html @@ -0,0 +1,117 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::MediaStream Member List
+
+
+ +

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

+ + + + + + + + + + + + + + +
Connect(Muxer *muxer)edash_packager::media::MediaStream
demuxer() (defined in edash_packager::media::MediaStream)edash_packager::media::MediaStreaminline
info() const (defined in edash_packager::media::MediaStream)edash_packager::media::MediaStream
kPull enum value (defined in edash_packager::media::MediaStream)edash_packager::media::MediaStream
kPush enum value (defined in edash_packager::media::MediaStream)edash_packager::media::MediaStream
MediaStream(scoped_refptr< StreamInfo > info, Demuxer *demuxer)edash_packager::media::MediaStream
MediaStreamOperation enum name (defined in edash_packager::media::MediaStream)edash_packager::media::MediaStream
muxer() (defined in edash_packager::media::MediaStream)edash_packager::media::MediaStreaminline
PullSample(scoped_refptr< MediaSample > *sample)edash_packager::media::MediaStream
PushSample(const scoped_refptr< MediaSample > &sample)edash_packager::media::MediaStream
Start(MediaStreamOperation operation)edash_packager::media::MediaStream
ToString() const edash_packager::media::MediaStream
~MediaStream() (defined in edash_packager::media::MediaStream)edash_packager::media::MediaStream
+ + + + diff --git a/sdk/d9/d99/classedash__packager_1_1media_1_1DecryptConfig-members.html b/sdk/d9/d99/classedash__packager_1_1media_1_1DecryptConfig-members.html new file mode 100644 index 0000000000..9419005253 --- /dev/null +++ b/sdk/d9/d99/classedash__packager_1_1media_1_1DecryptConfig-members.html @@ -0,0 +1,111 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::DecryptConfig Member List
+
+
+ +

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

+ + + + + + + + +
data_offset() const (defined in edash_packager::media::DecryptConfig)edash_packager::media::DecryptConfiginline
DecryptConfig(const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &iv, const int data_offset, const std::vector< SubsampleEntry > &subsamples)edash_packager::media::DecryptConfig
iv() const (defined in edash_packager::media::DecryptConfig)edash_packager::media::DecryptConfiginline
kDecryptionKeySizeedash_packager::media::DecryptConfigstatic
key_id() const (defined in edash_packager::media::DecryptConfig)edash_packager::media::DecryptConfiginline
subsamples() const (defined in edash_packager::media::DecryptConfig)edash_packager::media::DecryptConfiginline
~DecryptConfig() (defined in edash_packager::media::DecryptConfig)edash_packager::media::DecryptConfig
+ + + + diff --git a/sdk/d9/d9b/structedash__packager_1_1SegmentInfo.html b/sdk/d9/d9b/structedash__packager_1_1SegmentInfo.html new file mode 100644 index 0000000000..833b979af0 --- /dev/null +++ b/sdk/d9/d9b/structedash__packager_1_1SegmentInfo.html @@ -0,0 +1,126 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::SegmentInfo Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::SegmentInfo Struct Reference
+
+
+ +

#include <segment_info.h>

+ + + + + + + + +

+Public Attributes

+uint64_t start_time
 
+uint64_t duration
 
+uint64_t repeat
 
+

Detailed Description

+

Container for keeping track of information about a segment. Used for keeping track of all the segments used for generating MPD with dynamic profile.

+ +

Definition at line 14 of file segment_info.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/sdk/d9/da4/stream__descriptor_8h_source.html b/sdk/d9/da4/stream__descriptor_8h_source.html new file mode 100644 index 0000000000..aa18d5ab3c --- /dev/null +++ b/sdk/d9/da4/stream__descriptor_8h_source.html @@ -0,0 +1,146 @@ + + + + + + +DASH Media Packaging SDK: app/stream_descriptor.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
stream_descriptor.h
+
+
+
1 // Copyright 2014 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 APP_STREAM_DESCRIPTOR_H_
+
8 #define APP_STREAM_DESCRIPTOR_H_
+
9 
+
10 #include <stdint.h>
+
11 
+
12 #include <set>
+
13 #include <string>
+
14 
+
15 namespace edash_packager {
+
16 namespace media {
+
17 
+ + + +
23 
+
24  std::string stream_selector;
+
25  std::string input;
+
26  std::string output;
+
27  std::string segment_template;
+
28  uint32_t bandwidth;
+
29  std::string language;
+
30 };
+
31 
+ +
33  public:
+
34  bool operator()(const StreamDescriptor& a, const StreamDescriptor& b) {
+
35  return a.input < b.input;
+
36  }
+
37 };
+
38 
+
40 typedef std::multiset<StreamDescriptor, StreamDescriptorCompareFn>
+
41  StreamDescriptorList;
+
42 
+
50 bool InsertStreamDescriptor(const std::string& descriptor_string,
+
51  StreamDescriptorList* descriptor_list);
+
52 
+
53 } // namespace media
+
54 } // namespace edash_packager
+
55 
+
56 #endif // APP_STREAM_DESCRIPTOR_H_
+ + +
+ + + + diff --git a/sdk/d9/db4/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener.html b/sdk/d9/db4/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener.html new file mode 100644 index 0000000000..1019c998a3 --- /dev/null +++ b/sdk/d9/db4/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener.html @@ -0,0 +1,209 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::VodMediaInfoDumpMuxerListener Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::VodMediaInfoDumpMuxerListener Class Reference
+
+
+
+Inheritance diagram for edash_packager::media::VodMediaInfoDumpMuxerListener:
+
+
+ + +edash_packager::media::MuxerListener + +
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

VodMediaInfoDumpMuxerListener (const std::string &output_file_name)
 
void SetContentProtectionSchemeIdUri (const std::string &scheme_id_uri)
 
MuxerListener implementation overrides.
+virtual void OnEncryptionInfoReady (bool is_initial_encryption_info, const std::string &content_protection_uuid, const std::string &content_protection_name_version, const std::vector< uint8_t > &default_key_id, const std::vector< uint8_t > &pssh) OVERRIDE
 
+virtual void OnMediaStart (const MuxerOptions &muxer_options, const StreamInfo &stream_info, uint32_t time_scale, ContainerType container_type) OVERRIDE
 
virtual void OnSampleDurationReady (uint32_t sample_duration) OVERRIDE
 
+virtual void OnMediaEnd (bool has_init_range, uint64_t init_range_start, uint64_t init_range_end, bool has_index_range, uint64_t index_range_start, uint64_t index_range_end, float duration_seconds, uint64_t file_size) OVERRIDE
 
+virtual void OnNewSegment (uint64_t start_time, uint64_t duration, uint64_t segment_file_size) OVERRIDE
 
+ + + + +

+Additional Inherited Members

- Public Types inherited from edash_packager::media::MuxerListener
enum  ContainerType { kContainerUnknown = 0, +kContainerMp4, +kContainerMpeg2ts, +kContainerWebM + }
 
+

Detailed Description

+
+

Definition at line 28 of file vod_media_info_dump_muxer_listener.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
void edash_packager::media::VodMediaInfoDumpMuxerListener::OnSampleDurationReady (uint32_t sample_duration)
+
+virtual
+
+

Called when the average sample duration of the media is determined.

+
Parameters
+ + +
sample_durationin timescale of the media.
+
+
+ +

Implements edash_packager::media::MuxerListener.

+ +

Definition at line 71 of file vod_media_info_dump_muxer_listener.cc.

+ +
+
+ +
+
+ + + + + + + + +
void edash_packager::media::VodMediaInfoDumpMuxerListener::SetContentProtectionSchemeIdUri (const std::string & scheme_id_uri)
+
+

If the stream is encrypted use this as 'schemeIdUri' attribute for ContentProtection element.

+ +

Definition at line 27 of file vod_media_info_dump_muxer_listener.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/d9/db4/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener.png b/sdk/d9/db4/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener.png new file mode 100644 index 0000000000..81d8eb6893 Binary files /dev/null and b/sdk/d9/db4/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener.png differ diff --git a/sdk/d9/db9/content__protection__element_8cc_source.html b/sdk/d9/db9/content__protection__element_8cc_source.html new file mode 100644 index 0000000000..07ae6dec0c --- /dev/null +++ b/sdk/d9/db9/content__protection__element_8cc_source.html @@ -0,0 +1,112 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/content_protection_element.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
content_protection_element.cc
+
+
+
1 // Copyright 2014 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/mpd/base/content_protection_element.h"
+
8 
+
9 namespace edash_packager {
+
10 Element::Element() {}
+
11 Element::~Element() {}
+
12 ContentProtectionElement::ContentProtectionElement() {}
+
13 ContentProtectionElement::~ContentProtectionElement() {}
+
14 } // namespace edash_packager
+
+ + + + diff --git a/sdk/d9/db9/muxer_8cc_source.html b/sdk/d9/db9/muxer_8cc_source.html new file mode 100644 index 0000000000..c171369c80 --- /dev/null +++ b/sdk/d9/db9/muxer_8cc_source.html @@ -0,0 +1,222 @@ + + + + + + +DASH Media Packaging SDK: media/base/muxer.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
muxer.cc
+
+
+
1 // Copyright 2014 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/base/muxer.h"
+
8 
+
9 #include "packager/media/base/media_sample.h"
+
10 #include "packager/media/base/media_stream.h"
+
11 
+
12 namespace edash_packager {
+
13 namespace media {
+
14 
+
15 Muxer::Muxer(const MuxerOptions& options)
+
16  : options_(options),
+
17  initialized_(false),
+
18  encryption_key_source_(NULL),
+
19  max_sd_pixels_(0),
+
20  clear_lead_in_seconds_(0),
+
21  crypto_period_duration_in_seconds_(0),
+
22  cancelled_(false),
+
23  clock_(NULL) {}
+
24 
+
25 Muxer::~Muxer() {}
+
26 
+
27 void Muxer::SetKeySource(KeySource* encryption_key_source,
+
28  uint32_t max_sd_pixels,
+
29  double clear_lead_in_seconds,
+
30  double crypto_period_duration_in_seconds) {
+
31  DCHECK(encryption_key_source);
+
32  encryption_key_source_ = encryption_key_source;
+
33  max_sd_pixels_ = max_sd_pixels;
+
34  clear_lead_in_seconds_ = clear_lead_in_seconds;
+
35  crypto_period_duration_in_seconds_ = crypto_period_duration_in_seconds;
+
36 }
+
37 
+ +
39  DCHECK(stream);
+
40  stream->Connect(this);
+
41  streams_.push_back(stream);
+
42 }
+
43 
+ +
45  DCHECK(!streams_.empty());
+
46 
+
47  Status status;
+
48  // Start the streams.
+
49  for (std::vector<MediaStream*>::iterator it = streams_.begin();
+
50  it != streams_.end();
+
51  ++it) {
+
52  status = (*it)->Start(MediaStream::kPull);
+
53  if (!status.ok())
+
54  return status;
+
55  }
+
56 
+
57  uint32_t current_stream_id = 0;
+
58  while (status.ok()) {
+
59  if (cancelled_)
+
60  return Status(error::CANCELLED, "muxer run cancelled");
+
61 
+
62  scoped_refptr<MediaSample> sample;
+
63  status = streams_[current_stream_id]->PullSample(&sample);
+
64  if (!status.ok())
+
65  break;
+
66  status = AddSample(streams_[current_stream_id], sample);
+
67 
+
68  // Switch to next stream if the current stream is ready for fragmentation.
+
69  if (status.error_code() == error::FRAGMENT_FINALIZED) {
+
70  current_stream_id = (current_stream_id + 1) % streams_.size();
+
71  status.Clear();
+
72  }
+
73  }
+
74  // Finalize the muxer after reaching end of stream.
+
75  return status.error_code() == error::END_OF_STREAM ? Finalize() : status;
+
76 }
+
77 
+
78 void Muxer::Cancel() {
+
79  cancelled_ = true;
+
80 }
+
81 
+
82 void Muxer::SetMuxerListener(scoped_ptr<MuxerListener> muxer_listener) {
+
83  muxer_listener_ = muxer_listener.Pass();
+
84 }
+
85 
+ +
87  scoped_ptr<ProgressListener> progress_listener) {
+
88  progress_listener_ = progress_listener.Pass();
+
89 }
+
90 
+
91 Status Muxer::AddSample(const MediaStream* stream,
+
92  scoped_refptr<MediaSample> sample) {
+
93  DCHECK(std::find(streams_.begin(), streams_.end(), stream) != streams_.end());
+
94 
+
95  if (!initialized_) {
+
96  Status status = Initialize();
+
97  if (!status.ok())
+
98  return status;
+
99  initialized_ = true;
+
100  }
+
101  if (sample->end_of_stream()) {
+
102  // EOS sample should be sent only when the sample was pushed from Demuxer
+
103  // to Muxer. In this case, there should be only one stream in Muxer.
+
104  DCHECK_EQ(1u, streams_.size());
+
105  return Finalize();
+
106  } else if (sample->is_encrypted()) {
+
107  LOG(ERROR) << "Unable to multiplex encrypted media sample";
+
108  return Status(error::INTERNAL_ERROR, "Encrypted media sample.");
+
109  }
+
110  return DoAddSample(stream, sample);
+
111 }
+
112 
+
113 } // namespace media
+
114 } // namespace edash_packager
+
void SetMuxerListener(scoped_ptr< MuxerListener > muxer_listener)
Definition: muxer.cc:82
+ +
void SetProgressListener(scoped_ptr< ProgressListener > progress_listener)
Definition: muxer.cc:86
+
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:29
+
Status Run()
Drive the remuxing from muxer side (pull).
Definition: muxer.cc:44
+
void AddStream(MediaStream *stream)
Add video/audio stream.
Definition: muxer.cc:38
+ + +
void SetKeySource(KeySource *encryption_key_source, uint32_t max_sd_pixels, double clear_lead_in_seconds, double crypto_period_duration_in_seconds)
Definition: muxer.cc:27
+ +
+ + + + diff --git a/sdk/d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html b/sdk/d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html new file mode 100644 index 0000000000..999ad12058 --- /dev/null +++ b/sdk/d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html @@ -0,0 +1,191 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::ElementaryStreamDescriptor Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::ElementaryStreamDescriptor Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::ElementaryStreamDescriptor:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + +

+Public Attributes

+AACAudioSpecificConfig aac_audio_specific_config
 
+ESDescriptor es_descriptor
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 213 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::ElementaryStreamDescriptor::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1052 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.png b/sdk/d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.png new file mode 100644 index 0000000000..f4b18a5df1 Binary files /dev/null and b/sdk/d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.png differ diff --git a/sdk/d9/de3/muxer__listener__internal_8cc_source.html b/sdk/d9/de3/muxer__listener__internal_8cc_source.html new file mode 100644 index 0000000000..b465f03fe8 --- /dev/null +++ b/sdk/d9/de3/muxer__listener__internal_8cc_source.html @@ -0,0 +1,334 @@ + + + + + + +DASH Media Packaging SDK: media/event/muxer_listener_internal.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
muxer_listener_internal.cc
+
+
+
1 // Copyright 2014 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/event/muxer_listener_internal.h"
+
8 
+
9 #include <math.h>
+
10 
+
11 #include "packager/base/logging.h"
+
12 #include "packager/media/base/audio_stream_info.h"
+
13 #include "packager/media/base/muxer_options.h"
+
14 #include "packager/media/base/video_stream_info.h"
+
15 #include "packager/mpd/base/media_info.pb.h"
+
16 
+
17 namespace edash_packager {
+
18 namespace media {
+
19 namespace internal {
+
20 
+
21 namespace {
+
22 
+
23 // This will return a positive value, given that |file_size| and
+
24 // |duration_seconds| are positive.
+
25 uint32_t EstimateRequiredBandwidth(uint64_t file_size, float duration_seconds) {
+
26  const uint64_t file_size_bits = file_size * 8;
+
27  const float bits_per_second = file_size_bits / duration_seconds;
+
28 
+
29  // Note that casting |bits_per_second| to an integer might make it 0. Take the
+
30  // ceiling and make sure that it returns a positive value.
+
31  return static_cast<uint32_t>(ceil(bits_per_second));
+
32 }
+
33 
+
34 void SetRange(uint64_t begin, uint64_t end, Range* range) {
+
35  DCHECK(range);
+
36  range->set_begin(begin);
+
37  range->set_end(end);
+
38 }
+
39 
+
40 void SetMediaInfoRanges(bool has_init_range,
+
41  uint64_t init_range_start,
+
42  uint64_t init_range_end,
+
43  bool has_index_range,
+
44  uint64_t index_range_start,
+
45  uint64_t index_range_end,
+
46  MediaInfo* media_info) {
+
47  if (has_init_range) {
+
48  SetRange(
+
49  init_range_start, init_range_end, media_info->mutable_init_range());
+
50  }
+
51 
+
52  if (has_index_range) {
+
53  SetRange(
+
54  index_range_start, index_range_end, media_info->mutable_index_range());
+
55  }
+
56 }
+
57 
+
58 void SetMediaInfoContainerType(MuxerListener::ContainerType container_type,
+
59  MediaInfo* media_info) {
+
60  DCHECK(media_info);
+
61  switch (container_type) {
+
62  case MuxerListener::kContainerUnknown:
+
63  media_info->set_container_type(MediaInfo::CONTAINER_UNKNOWN);
+
64  break;
+
65  case MuxerListener::kContainerMp4:
+
66  media_info->set_container_type(MediaInfo::CONTAINER_MP4);
+
67  break;
+
68  case MuxerListener::kContainerMpeg2ts:
+
69  media_info->set_container_type(MediaInfo::CONTAINER_MPEG2_TS);
+
70  break;
+
71  case MuxerListener::kContainerWebM:
+
72  media_info->set_container_type(MediaInfo::CONTAINER_WEBM);
+
73  break;
+
74  default:
+
75  NOTREACHED() << "Unknown container type " << container_type;
+
76  }
+
77 }
+
78 
+
79 void AddVideoInfo(const VideoStreamInfo* video_stream_info,
+
80  MediaInfo* media_info) {
+
81  DCHECK(video_stream_info);
+
82  DCHECK(media_info);
+
83  MediaInfo_VideoInfo* video_info = media_info->mutable_video_info();
+
84  video_info->set_codec(video_stream_info->codec_string());
+
85  video_info->set_width(video_stream_info->width());
+
86  video_info->set_height(video_stream_info->height());
+
87  video_info->set_time_scale(video_stream_info->time_scale());
+
88 
+
89  if (video_stream_info->pixel_width() > 0)
+
90  video_info->set_pixel_width(video_stream_info->pixel_width());
+
91 
+
92  if (video_stream_info->pixel_height() > 0)
+
93  video_info->set_pixel_height(video_stream_info->pixel_height());
+
94 
+
95  const std::vector<uint8_t>& extra_data = video_stream_info->extra_data();
+
96  if (!extra_data.empty()) {
+
97  video_info->set_decoder_config(&extra_data[0], extra_data.size());
+
98  }
+
99 }
+
100 
+
101 void AddAudioInfo(const AudioStreamInfo* audio_stream_info,
+
102  MediaInfo* media_info) {
+
103  DCHECK(audio_stream_info);
+
104  DCHECK(media_info);
+
105  MediaInfo_AudioInfo* audio_info = media_info->mutable_audio_info();
+
106  audio_info->set_codec(audio_stream_info->codec_string());
+
107  audio_info->set_sampling_frequency(audio_stream_info->sampling_frequency());
+
108  audio_info->set_time_scale(audio_stream_info->time_scale());
+
109  audio_info->set_num_channels(audio_stream_info->num_channels());
+
110 
+
111  const std::string& language = audio_stream_info->language();
+
112  // ISO-639-2/T defines language "und" which we also want to ignore.
+
113  if (!language.empty() && language != "und") {
+
114  audio_info->set_language(language);
+
115  }
+
116 
+
117  const std::vector<uint8_t>& extra_data = audio_stream_info->extra_data();
+
118  if (!extra_data.empty()) {
+
119  audio_info->set_decoder_config(&extra_data[0], extra_data.size());
+
120  }
+
121 }
+
122 
+
123 void SetMediaInfoStreamInfo(const StreamInfo& stream_info,
+
124  MediaInfo* media_info) {
+
125  if (stream_info.stream_type() == kStreamAudio) {
+
126  AddAudioInfo(static_cast<const AudioStreamInfo*>(&stream_info),
+
127  media_info);
+
128  } else {
+
129  DCHECK_EQ(stream_info.stream_type(), kStreamVideo);
+
130  AddVideoInfo(static_cast<const VideoStreamInfo*>(&stream_info),
+
131  media_info);
+
132  }
+
133 }
+
134 
+
135 void SetMediaInfoMuxerOptions(const MuxerOptions& muxer_options,
+
136  MediaInfo* media_info) {
+
137  DCHECK(media_info);
+
138  if (muxer_options.single_segment) {
+
139  media_info->set_media_file_name(muxer_options.output_file_name);
+
140  DCHECK(muxer_options.segment_template.empty());
+
141  } else {
+
142  media_info->set_init_segment_name(muxer_options.output_file_name);
+
143  media_info->set_segment_template(muxer_options.segment_template);
+
144  }
+
145 }
+
146 
+
147 } // namespace
+
148 
+
149 bool GenerateMediaInfo(const MuxerOptions& muxer_options,
+
150  const StreamInfo& stream_info,
+
151  uint32_t reference_time_scale,
+
152  MuxerListener::ContainerType container_type,
+
153  MediaInfo* media_info) {
+
154  DCHECK(media_info);
+
155 
+
156  SetMediaInfoMuxerOptions(muxer_options, media_info);
+
157  SetMediaInfoStreamInfo(stream_info, media_info);
+
158  media_info->set_reference_time_scale(reference_time_scale);
+
159  SetMediaInfoContainerType(container_type, media_info);
+
160  if (muxer_options.bandwidth > 0)
+
161  media_info->set_bandwidth(muxer_options.bandwidth);
+
162 
+
163  return true;
+
164 }
+
165 
+
166 bool SetVodInformation(bool has_init_range,
+
167  uint64_t init_range_start,
+
168  uint64_t init_range_end,
+
169  bool has_index_range,
+
170  uint64_t index_range_start,
+
171  uint64_t index_range_end,
+
172  float duration_seconds,
+
173  uint64_t file_size,
+
174  MediaInfo* media_info) {
+
175  DCHECK(media_info);
+
176  if (file_size == 0) {
+
177  LOG(ERROR) << "File size not specified.";
+
178  return false;
+
179  }
+
180 
+
181  if (duration_seconds <= 0.0f) {
+
182  // Non positive second media must be invalid media.
+
183  LOG(ERROR) << "Duration is not positive: " << duration_seconds;
+
184  return false;
+
185  }
+
186 
+
187  SetMediaInfoRanges(has_init_range,
+
188  init_range_start,
+
189  init_range_end,
+
190  has_index_range,
+
191  index_range_start,
+
192  index_range_end,
+
193  media_info);
+
194 
+
195  media_info->set_media_duration_seconds(duration_seconds);
+
196 
+
197  if (!media_info->has_bandwidth()) {
+
198  media_info->set_bandwidth(
+
199  EstimateRequiredBandwidth(file_size, duration_seconds));
+
200  }
+
201  return true;
+
202 }
+
203 
+
204 void SetContentProtectionFields(
+
205  const std::string& content_protection_uuid,
+
206  const std::string& content_protection_name_version,
+
207  const std::string& default_key_id,
+
208  const std::string& pssh,
+
209  MediaInfo* media_info) {
+
210  DCHECK(media_info);
+
211  MediaInfo::ProtectedContent* protected_content =
+
212  media_info->mutable_protected_content();
+
213 
+
214  if (!default_key_id.empty())
+
215  protected_content->set_default_key_id(default_key_id);
+
216 
+
217  if (content_protection_uuid.empty() &&
+
218  content_protection_name_version.empty() && pssh.empty()) {
+
219  return;
+
220  }
+
221 
+
222  MediaInfo::ProtectedContent::ContentProtectionEntry* entry =
+
223  protected_content->add_content_protection_entry();
+
224  if (!content_protection_uuid.empty())
+
225  entry->set_uuid(content_protection_uuid);
+
226 
+
227  if (!content_protection_name_version.empty())
+
228  entry->set_name_version(content_protection_name_version);
+
229 
+
230  if (!pssh.empty())
+
231  entry->set_pssh(pssh);
+
232 }
+
233 
+
234 } // namespace internal
+
235 } // namespace media
+
236 } // namespace edash_packager
+
+ + + + diff --git a/sdk/d9/dec/classedash__packager_1_1media_1_1RequestSigner-members.html b/sdk/d9/dec/classedash__packager_1_1media_1_1RequestSigner-members.html new file mode 100644 index 0000000000..ff823db04a --- /dev/null +++ b/sdk/d9/dec/classedash__packager_1_1media_1_1RequestSigner-members.html @@ -0,0 +1,108 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::RequestSigner Member List
+
+
+ +

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

+ + + + + +
GenerateSignature(const std::string &message, std::string *signature)=0edash_packager::media::RequestSignerpure virtual
RequestSigner(const std::string &signer_name) (defined in edash_packager::media::RequestSigner)edash_packager::media::RequestSignerexplicitprotected
signer_name() const (defined in edash_packager::media::RequestSigner)edash_packager::media::RequestSignerinline
~RequestSigner() (defined in edash_packager::media::RequestSigner)edash_packager::media::RequestSignervirtual
+ + + + diff --git a/sdk/d9/ded/aac__audio__specific__config_8cc_source.html b/sdk/d9/ded/aac__audio__specific__config_8cc_source.html new file mode 100644 index 0000000000..c55f993205 --- /dev/null +++ b/sdk/d9/ded/aac__audio__specific__config_8cc_source.html @@ -0,0 +1,365 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/aac_audio_specific_config.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
aac_audio_specific_config.cc
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/formats/mp4/aac_audio_specific_config.h"
+
6 
+
7 #include <algorithm>
+
8 
+
9 #include "packager/base/logging.h"
+
10 #include "packager/media/base/bit_reader.h"
+
11 #include "packager/media/formats/mp4/rcheck.h"
+
12 
+
13 namespace {
+
14 
+
15 // Sampling Frequency Index table, from ISO 14496-3 Table 1.16
+
16 static const uint32_t kSampleRates[] = {96000, 88200, 64000, 48000, 44100,
+
17  32000, 24000, 22050, 16000, 12000,
+
18  11025, 8000, 7350};
+
19 
+
20 // Channel Configuration table, from ISO 14496-3 Table 1.17
+
21 const uint8_t kChannelConfigs[] = {0, 1, 2, 3, 4, 5, 6, 8};
+
22 
+
23 } // namespace
+
24 
+
25 namespace edash_packager {
+
26 namespace media {
+
27 
+
28 namespace mp4 {
+
29 
+
30 AACAudioSpecificConfig::AACAudioSpecificConfig()
+
31  : audio_object_type_(0),
+
32  frequency_index_(0),
+
33  channel_config_(0),
+
34  ps_present_(false),
+
35  frequency_(0),
+
36  extension_frequency_(0),
+
37  num_channels_(0) {}
+
38 
+
39 AACAudioSpecificConfig::~AACAudioSpecificConfig() {}
+
40 
+
41 bool AACAudioSpecificConfig::Parse(const std::vector<uint8_t>& data) {
+
42  if (data.empty())
+
43  return false;
+
44 
+
45  BitReader reader(&data[0], data.size());
+
46  uint8_t extension_type = 0;
+
47  uint8_t extension_frequency_index = 0xff;
+
48 
+
49  ps_present_ = false;
+
50  frequency_ = 0;
+
51  extension_frequency_ = 0;
+
52 
+
53  // The following code is written according to ISO 14496 Part 3 Table 1.13 -
+
54  // Syntax of AudioSpecificConfig.
+
55 
+
56  // Read base configuration.
+
57  // Audio Object Types specified in ISO 14496-3, Table 1.15.
+
58  RCHECK(reader.ReadBits(5, &audio_object_type_));
+
59  // Audio objects type >=31 is not supported yet.
+
60  RCHECK(audio_object_type_ < 31);
+
61  RCHECK(reader.ReadBits(4, &frequency_index_));
+
62  if (frequency_index_ == 0xf)
+
63  RCHECK(reader.ReadBits(24, &frequency_));
+
64  RCHECK(reader.ReadBits(4, &channel_config_));
+
65 
+
66  // Read extension configuration.
+
67  if (audio_object_type_ == 5 || audio_object_type_ == 29) {
+
68  ps_present_ = (audio_object_type_ == 29);
+
69  extension_type = 5;
+
70  RCHECK(reader.ReadBits(4, &extension_frequency_index));
+
71  if (extension_frequency_index == 0xf)
+
72  RCHECK(reader.ReadBits(24, &extension_frequency_));
+
73  RCHECK(reader.ReadBits(5, &audio_object_type_));
+
74  // Audio objects type >=31 is not supported yet.
+
75  RCHECK(audio_object_type_ < 31);
+
76  }
+
77 
+
78  RCHECK(SkipDecoderGASpecificConfig(&reader));
+
79  RCHECK(SkipErrorSpecificConfig());
+
80 
+
81  // Read extension configuration again
+
82  // Note: The check for 16 available bits comes from the AAC spec.
+
83  if (extension_type != 5 && reader.bits_available() >= 16) {
+
84  uint16_t sync_extension_type;
+
85  uint8_t sbr_present_flag;
+
86  uint8_t ps_present_flag;
+
87 
+
88  if (reader.ReadBits(11, &sync_extension_type) &&
+
89  sync_extension_type == 0x2b7) {
+
90  if (reader.ReadBits(5, &extension_type) && extension_type == 5) {
+
91  RCHECK(reader.ReadBits(1, &sbr_present_flag));
+
92 
+
93  if (sbr_present_flag) {
+
94  RCHECK(reader.ReadBits(4, &extension_frequency_index));
+
95 
+
96  if (extension_frequency_index == 0xf)
+
97  RCHECK(reader.ReadBits(24, &extension_frequency_));
+
98 
+
99  // Note: The check for 12 available bits comes from the AAC spec.
+
100  if (reader.bits_available() >= 12) {
+
101  RCHECK(reader.ReadBits(11, &sync_extension_type));
+
102  if (sync_extension_type == 0x548) {
+
103  RCHECK(reader.ReadBits(1, &ps_present_flag));
+
104  ps_present_ = ps_present_flag != 0;
+
105  }
+
106  }
+
107  }
+
108  }
+
109  }
+
110  }
+
111 
+
112  if (frequency_ == 0) {
+
113  RCHECK(frequency_index_ < arraysize(kSampleRates));
+
114  frequency_ = kSampleRates[frequency_index_];
+
115  }
+
116 
+
117  if (extension_frequency_ == 0 && extension_frequency_index != 0xff) {
+
118  RCHECK(extension_frequency_index < arraysize(kSampleRates));
+
119  extension_frequency_ = kSampleRates[extension_frequency_index];
+
120  }
+
121 
+
122  RCHECK(channel_config_ < arraysize(kChannelConfigs));
+
123  num_channels_ = kChannelConfigs[channel_config_];
+
124 
+
125  return frequency_ != 0 && num_channels_ != 0 && audio_object_type_ >= 1 &&
+
126  audio_object_type_ <= 4 && frequency_index_ != 0xf &&
+
127  channel_config_ <= 7;
+
128 }
+
129 
+
130 uint32_t AACAudioSpecificConfig::GetOutputSamplesPerSecond(
+
131  bool sbr_in_mimetype) const {
+
132  if (extension_frequency_ > 0)
+
133  return extension_frequency_;
+
134 
+
135  if (!sbr_in_mimetype)
+
136  return frequency_;
+
137 
+
138  // The following code is written according to ISO 14496 Part 3 Table 1.11 and
+
139  // Table 1.22. (Table 1.11 refers to the capping to 48000, Table 1.22 refers
+
140  // to SBR doubling the AAC sample rate.)
+
141  DCHECK_GT(frequency_, 0u);
+
142  return std::min(2 * frequency_, 48000u);
+
143 }
+
144 
+
145 uint8_t AACAudioSpecificConfig::GetNumChannels(bool sbr_in_mimetype) const {
+
146  // Check for implicit signalling of HE-AAC and indicate stereo output
+
147  // if the mono channel configuration is signalled.
+
148  // See ISO-14496-3 Section 1.6.6.1.2 for details about this special casing.
+
149  if (sbr_in_mimetype && channel_config_ == 1)
+
150  return 2; // CHANNEL_LAYOUT_STEREO
+
151 
+
152  // When Parametric Stereo is on, mono will be played as stereo.
+
153  if (ps_present_ && channel_config_ == 1)
+
154  return 2; // CHANNEL_LAYOUT_STEREO
+
155 
+
156  return num_channels_;
+
157 }
+
158 
+
159 bool AACAudioSpecificConfig::ConvertToADTS(std::vector<uint8_t>* buffer) const {
+
160  size_t size = buffer->size() + kADTSHeaderSize;
+
161 
+
162  DCHECK(audio_object_type_ >= 1 && audio_object_type_ <= 4 &&
+
163  frequency_index_ != 0xf && channel_config_ <= 7);
+
164 
+
165  // ADTS header uses 13 bits for packet size.
+
166  if (size >= (1 << 13))
+
167  return false;
+
168 
+
169  std::vector<uint8_t>& adts = *buffer;
+
170 
+
171  adts.insert(buffer->begin(), kADTSHeaderSize, 0);
+
172  adts[0] = 0xff;
+
173  adts[1] = 0xf1;
+
174  adts[2] = ((audio_object_type_ - 1) << 6) + (frequency_index_ << 2) +
+
175  (channel_config_ >> 2);
+
176  adts[3] = ((channel_config_ & 0x3) << 6) + (size >> 11);
+
177  adts[4] = (size & 0x7ff) >> 3;
+
178  adts[5] = ((size & 7) << 5) + 0x1f;
+
179  adts[6] = 0xfc;
+
180 
+
181  return true;
+
182 }
+
183 
+
184 // Currently this function only support GASpecificConfig defined in
+
185 // ISO 14496 Part 3 Table 4.1 - Syntax of GASpecificConfig()
+
186 bool AACAudioSpecificConfig::SkipDecoderGASpecificConfig(BitReader* bit_reader) const {
+
187  switch (audio_object_type_) {
+
188  case 1:
+
189  case 2:
+
190  case 3:
+
191  case 4:
+
192  case 6:
+
193  case 7:
+
194  case 17:
+
195  case 19:
+
196  case 20:
+
197  case 21:
+
198  case 22:
+
199  case 23:
+
200  return SkipGASpecificConfig(bit_reader);
+
201  default:
+
202  break;
+
203  }
+
204 
+
205  return false;
+
206 }
+
207 
+
208 bool AACAudioSpecificConfig::SkipErrorSpecificConfig() const {
+
209  switch (audio_object_type_) {
+
210  case 17:
+
211  case 19:
+
212  case 20:
+
213  case 21:
+
214  case 22:
+
215  case 23:
+
216  case 24:
+
217  case 25:
+
218  case 26:
+
219  case 27:
+
220  return false;
+
221  default:
+
222  break;
+
223  }
+
224 
+
225  return true;
+
226 }
+
227 
+
228 // The following code is written according to ISO 14496 part 3 Table 4.1 -
+
229 // GASpecificConfig.
+
230 bool AACAudioSpecificConfig::SkipGASpecificConfig(BitReader* bit_reader) const {
+
231  uint8_t extension_flag = 0;
+
232  uint8_t depends_on_core_coder;
+
233  uint16_t dummy;
+
234 
+
235  RCHECK(bit_reader->ReadBits(1, &dummy)); // frameLengthFlag
+
236  RCHECK(bit_reader->ReadBits(1, &depends_on_core_coder));
+
237  if (depends_on_core_coder == 1)
+
238  RCHECK(bit_reader->ReadBits(14, &dummy)); // coreCoderDelay
+
239 
+
240  RCHECK(bit_reader->ReadBits(1, &extension_flag));
+
241  RCHECK(channel_config_ != 0);
+
242 
+
243  if (audio_object_type_ == 6 || audio_object_type_ == 20)
+
244  RCHECK(bit_reader->ReadBits(3, &dummy)); // layerNr
+
245 
+
246  if (extension_flag) {
+
247  if (audio_object_type_ == 22) {
+
248  RCHECK(bit_reader->ReadBits(5, &dummy)); // numOfSubFrame
+
249  RCHECK(bit_reader->ReadBits(11, &dummy)); // layer_length
+
250  }
+
251 
+
252  if (audio_object_type_ == 17 || audio_object_type_ == 19 ||
+
253  audio_object_type_ == 20 || audio_object_type_ == 23) {
+
254  RCHECK(bit_reader->ReadBits(3, &dummy)); // resilience flags
+
255  }
+
256 
+
257  RCHECK(bit_reader->ReadBits(1, &dummy)); // extensionFlag3
+
258  }
+
259 
+
260  return true;
+
261 }
+
262 
+
263 } // namespace mp4
+
264 
+
265 } // namespace media
+
266 } // namespace edash_packager
+
A class to read bit streams.
Definition: bit_reader.h:17
+
+ + + + diff --git a/sdk/da/d02/structedash__packager_1_1media_1_1H264WeightingFactors-members.html b/sdk/da/d02/structedash__packager_1_1media_1_1H264WeightingFactors-members.html new file mode 100644 index 0000000000..db8ec11fa4 --- /dev/null +++ b/sdk/da/d02/structedash__packager_1_1media_1_1H264WeightingFactors-members.html @@ -0,0 +1,110 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::H264WeightingFactors Member List
+
+
+ +

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

+ + + + + + + +
chroma_offset (defined in edash_packager::media::H264WeightingFactors)edash_packager::media::H264WeightingFactors
chroma_weight (defined in edash_packager::media::H264WeightingFactors)edash_packager::media::H264WeightingFactors
chroma_weight_flag (defined in edash_packager::media::H264WeightingFactors)edash_packager::media::H264WeightingFactors
luma_offset (defined in edash_packager::media::H264WeightingFactors)edash_packager::media::H264WeightingFactors
luma_weight (defined in edash_packager::media::H264WeightingFactors)edash_packager::media::H264WeightingFactors
luma_weight_flag (defined in edash_packager::media::H264WeightingFactors)edash_packager::media::H264WeightingFactors
+ + + + diff --git a/sdk/da/d02/structedash__packager_1_1media_1_1mp4_1_1SyncSample-members.html b/sdk/da/d02/structedash__packager_1_1media_1_1mp4_1_1SyncSample-members.html new file mode 100644 index 0000000000..eb2e702f1d --- /dev/null +++ b/sdk/da/d02/structedash__packager_1_1media_1_1mp4_1_1SyncSample-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::SyncSample Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::SyncSample)edash_packager::media::mp4::SyncSamplevirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::SyncSamplevirtual
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::SyncSamplevirtual
sample_number (defined in edash_packager::media::mp4::SyncSample)edash_packager::media::mp4::SyncSample
SyncSample() (defined in edash_packager::media::mp4::SyncSample)edash_packager::media::mp4::SyncSample
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~SyncSample() (defined in edash_packager::media::mp4::SyncSample)edash_packager::media::mp4::SyncSamplevirtual
+ + + + diff --git a/sdk/da/d04/audio__stream__info_8cc_source.html b/sdk/da/d04/audio__stream__info_8cc_source.html new file mode 100644 index 0000000000..f3cdb171dc --- /dev/null +++ b/sdk/da/d04/audio__stream__info_8cc_source.html @@ -0,0 +1,218 @@ + + + + + + +DASH Media Packaging SDK: media/base/audio_stream_info.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
audio_stream_info.cc
+
+
+
1 // Copyright 2014 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/base/audio_stream_info.h"
+
8 
+
9 #include "packager/base/logging.h"
+
10 #include "packager/base/strings/string_number_conversions.h"
+
11 #include "packager/base/strings/stringprintf.h"
+
12 #include "packager/media/base/limits.h"
+
13 
+
14 namespace edash_packager {
+
15 namespace media {
+
16 
+
17 namespace {
+
18 std::string AudioCodecToString(AudioCodec audio_codec) {
+
19  switch (audio_codec) {
+
20  case kCodecAAC:
+
21  return "AAC";
+
22  case kCodecMP3:
+
23  return "MP3";
+
24  case kCodecPCM:
+
25  return "PCM";
+
26  case kCodecVorbis:
+
27  return "Vorbis";
+
28  case kCodecFLAC:
+
29  return "FLAC";
+
30  case kCodecAMR_NB:
+
31  return "AMR_NB";
+
32  case kCodecAMR_WB:
+
33  return "AMR_WB";
+
34  case kCodecPCM_MULAW:
+
35  return "PCM_MULAW";
+
36  case kCodecGSM_MS:
+
37  return "GSM_MS";
+
38  case kCodecPCM_S16BE:
+
39  return "PCM_S16BE";
+
40  case kCodecPCM_S24BE:
+
41  return "PCM_S24BE";
+
42  case kCodecOpus:
+
43  return "Opus";
+
44  case kCodecEAC3:
+
45  return "EAC3";
+
46  default:
+
47  NOTIMPLEMENTED() << "Unknown Audio Codec: " << audio_codec;
+
48  return "UnknownAudioCodec";
+
49  }
+
50 }
+
51 } // namespace
+
52 
+ +
54  uint32_t time_scale,
+
55  uint64_t duration,
+
56  AudioCodec codec,
+
57  const std::string& codec_string,
+
58  const std::string& language,
+
59  uint8_t sample_bits,
+
60  uint8_t num_channels,
+
61  uint32_t sampling_frequency,
+
62  const uint8_t* extra_data,
+
63  size_t extra_data_size,
+
64  bool is_encrypted)
+
65  : StreamInfo(kStreamAudio,
+
66  track_id,
+
67  time_scale,
+
68  duration,
+
69  codec_string,
+
70  language,
+
71  extra_data,
+
72  extra_data_size,
+
73  is_encrypted),
+
74  codec_(codec),
+
75  sample_bits_(sample_bits),
+
76  num_channels_(num_channels),
+
77  sampling_frequency_(sampling_frequency) {
+
78 }
+
79 
+
80 AudioStreamInfo::~AudioStreamInfo() {}
+
81 
+ +
83  return codec_ != kUnknownAudioCodec && num_channels_ != 0 &&
+
84  num_channels_ <= limits::kMaxChannels && sample_bits_ > 0 &&
+
85  sample_bits_ <= limits::kMaxBitsPerSample &&
+
86  sampling_frequency_ > 0 &&
+
87  sampling_frequency_ <= limits::kMaxSampleRate;
+
88 }
+
89 
+
90 std::string AudioStreamInfo::ToString() const {
+
91  return base::StringPrintf(
+
92  "%s codec: %s\n sample_bits: %d\n num_channels: %d\n "
+
93  "sampling_frequency: %d\n language: %s\n",
+
94  StreamInfo::ToString().c_str(), AudioCodecToString(codec_).c_str(),
+
95  sample_bits_, num_channels_, sampling_frequency_, language().c_str());
+
96 }
+
97 
+
98 std::string AudioStreamInfo::GetCodecString(AudioCodec codec,
+
99  uint8_t audio_object_type) {
+
100  switch (codec) {
+
101  case kCodecVorbis:
+
102  return "vorbis";
+
103  case kCodecOpus:
+
104  return "opus";
+
105  case kCodecAAC:
+
106  return "mp4a.40." + base::UintToString(audio_object_type);
+
107  default:
+
108  NOTIMPLEMENTED() << "Codec: " << codec;
+
109  return "unknown";
+
110  }
+
111 }
+
112 
+
113 } // namespace media
+
114 } // namespace edash_packager
+
Abstract class holds stream information.
Definition: stream_info.h:25
+
AudioStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, AudioCodec codec, const std::string &codec_string, const std::string &language, uint8_t sample_bits, uint8_t num_channels, uint32_t sampling_frequency, const uint8_t *extra_data, size_t extra_data_size, bool is_encrypted)
Construct an initialized audio stream info object.
+
virtual std::string ToString() const
Definition: stream_info.cc:40
+
virtual std::string ToString() const OVERRIDE
+
virtual bool IsValidConfig() const OVERRIDE
+
static std::string GetCodecString(AudioCodec codec, uint8_t audio_object_type)
+
+ + + + diff --git a/sdk/da/d15/structedash__packager_1_1media_1_1mp4_1_1HandlerReference-members.html b/sdk/da/d15/structedash__packager_1_1media_1_1mp4_1_1HandlerReference-members.html new file mode 100644 index 0000000000..e275770db4 --- /dev/null +++ b/sdk/da/d15/structedash__packager_1_1media_1_1mp4_1_1HandlerReference-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::HandlerReference Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::HandlerReference)edash_packager::media::mp4::HandlerReferencevirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::HandlerReferencevirtual
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
HandlerReference() (defined in edash_packager::media::mp4::HandlerReference)edash_packager::media::mp4::HandlerReference
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::HandlerReferencevirtual
type (defined in edash_packager::media::mp4::HandlerReference)edash_packager::media::mp4::HandlerReference
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~HandlerReference() (defined in edash_packager::media::mp4::HandlerReference)edash_packager::media::mp4::HandlerReferencevirtual
+ + + + diff --git a/sdk/da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html b/sdk/da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html new file mode 100644 index 0000000000..000ccd1b79 --- /dev/null +++ b/sdk/da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html @@ -0,0 +1,188 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::MovieExtendsHeader Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::MovieExtendsHeader Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::MovieExtendsHeader:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + +

+Public Attributes

+uint64_t fragment_duration
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 403 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::MovieExtendsHeader::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1363 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.png b/sdk/da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.png new file mode 100644 index 0000000000..300586ff3b Binary files /dev/null and b/sdk/da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.png differ diff --git a/sdk/da/d1e/classedash__packager_1_1media_1_1StreamInfo-members.html b/sdk/da/d1e/classedash__packager_1_1media_1_1StreamInfo-members.html new file mode 100644 index 0000000000..c6c441c4d6 --- /dev/null +++ b/sdk/da/d1e/classedash__packager_1_1media_1_1StreamInfo-members.html @@ -0,0 +1,121 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::StreamInfo Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + +
base::RefCountedThreadSafe< StreamInfo > (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfofriend
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
is_encrypted() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline
IsValidConfig() const =0edash_packager::media::StreamInfopure virtual
language() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline
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_language(const std::string &language) (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline
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 edash_packager::media::StreamInfovirtual
track_id() const (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoinline
~StreamInfo() (defined in edash_packager::media::StreamInfo)edash_packager::media::StreamInfoprotectedvirtual
+ + + + diff --git a/sdk/da/d22/key__rotation__fragmenter_8h_source.html b/sdk/da/d22/key__rotation__fragmenter_8h_source.html new file mode 100644 index 0000000000..7828ebe450 --- /dev/null +++ b/sdk/da/d22/key__rotation__fragmenter_8h_source.html @@ -0,0 +1,162 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/key_rotation_fragmenter.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
key_rotation_fragmenter.h
+
+
+
1 // Copyright 2014 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_FORMATS_MP4_KEY_ROTATION_FRAGMENTER_H_
+
8 #define MEDIA_FORMATS_MP4_KEY_ROTATION_FRAGMENTER_H_
+
9 
+
10 #include "packager/media/base/key_source.h"
+
11 #include "packager/media/event/muxer_listener.h"
+
12 #include "packager/media/formats/mp4/encrypting_fragmenter.h"
+
13 
+
14 namespace edash_packager {
+
15 namespace media {
+
16 namespace mp4 {
+
17 
+
18 struct MovieFragment;
+
19 
+ +
23  public:
+ +
39  TrackFragment* traf,
+
40  KeySource* encryption_key_source,
+
41  KeySource::TrackType track_type,
+
42  int64_t crypto_period_duration,
+
43  int64_t clear_time,
+
44  uint8_t nalu_length_size,
+
45  MuxerListener* muxer_listener);
+
46  virtual ~KeyRotationFragmenter();
+
47 
+
48  protected:
+
51  virtual Status PrepareFragmentForEncryption(bool enable_encryption) OVERRIDE;
+
52  virtual void FinalizeFragmentForEncryption() OVERRIDE;
+
54 
+
55  private:
+
56  MovieFragment* moof_;
+
57 
+
58  KeySource* encryption_key_source_;
+
59  KeySource::TrackType track_type_;
+
60  const int64_t crypto_period_duration_;
+
61  size_t prev_crypto_period_index_;
+
62 
+
63  // For notifying new pssh boxes to the event handler.
+
64  MuxerListener* const muxer_listener_;
+
65 
+
66  DISALLOW_COPY_AND_ASSIGN(KeyRotationFragmenter);
+
67 };
+
68 
+
69 } // namespace mp4
+
70 } // namespace media
+
71 } // namespace edash_packager
+
72 
+
73 #endif // MEDIA_FORMATS_MP4_KEY_ROTATION_FRAGMENTER_H_
+
virtual Status PrepareFragmentForEncryption(bool enable_encryption) OVERRIDE
+
KeyRotationFragmenter(MovieFragment *moof, TrackFragment *traf, KeySource *encryption_key_source, KeySource::TrackType track_type, int64_t crypto_period_duration, int64_t clear_time, uint8_t nalu_length_size, MuxerListener *muxer_listener)
+
EncryptingFragmenter generates MP4 fragments with sample encrypted.
+ + + +
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:29
+ + +
virtual void FinalizeFragmentForEncryption() OVERRIDE
Finalize current fragment for encryption.
+
+ + + + diff --git a/sdk/da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html b/sdk/da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html new file mode 100644 index 0000000000..c7eec396d7 --- /dev/null +++ b/sdk/da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html @@ -0,0 +1,306 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::AudioStreamInfo Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::AudioStreamInfo Class Reference
+
+
+ +

Holds audio stream information. + More...

+ +

#include <audio_stream_info.h>

+
+Inheritance diagram for edash_packager::media::AudioStreamInfo:
+
+
+ + +edash_packager::media::StreamInfo + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

AudioStreamInfo (int track_id, uint32_t time_scale, uint64_t duration, AudioCodec codec, const std::string &codec_string, const std::string &language, uint8_t sample_bits, uint8_t num_channels, uint32_t sampling_frequency, const uint8_t *extra_data, size_t extra_data_size, bool is_encrypted)
 Construct an initialized audio stream info object.
 
+AudioCodec codec () const
 
+uint8_t sample_bits () const
 
+uint8_t sample_bytes () const
 
+uint8_t num_channels () const
 
+uint32_t sampling_frequency () const
 
+uint32_t bytes_per_frame () const
 
+void set_sampling_frequency (const uint32_t sampling_frequency)
 
StreamInfo implementation overrides.
virtual bool IsValidConfig () const OVERRIDE
 
virtual std::string ToString () const OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::StreamInfo
StreamInfo (StreamType stream_type, int track_id, uint32_t time_scale, uint64_t duration, const std::string &codec_string, const std::string &language, const uint8_t *extra_data, size_t extra_data_size, bool is_encrypted)
 
+StreamType stream_type () const
 
+uint32_t track_id () const
 
+uint32_t time_scale () const
 
+uint64_t duration () const
 
+const std::string & codec_string () const
 
+const std::string & language () const
 
+bool is_encrypted () const
 
+const std::vector< uint8_t > & extra_data () const
 
+void set_duration (int duration)
 
+void set_extra_data (const std::vector< uint8_t > &data)
 
+void set_codec_string (const std::string &codec_string)
 
+void set_language (const std::string &language)
 
+ + + +

+Static Public Member Functions

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

Detailed Description

+

Holds audio stream information.

+ +

Definition at line 37 of file audio_stream_info.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::string edash_packager::media::AudioStreamInfo::GetCodecString (AudioCodec codec,
uint8_t audio_object_type 
)
+
+static
+
+
Parameters
+ + +
audio_object_typeis only used by AAC Codec, ignored otherwise.
+
+
+
Returns
The codec string.
+ +

Definition at line 98 of file audio_stream_info.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool edash_packager::media::AudioStreamInfo::IsValidConfig () const
+
+virtual
+
+
Returns
true if this object has appropriate configuration values, false otherwise.
+ +

Implements edash_packager::media::StreamInfo.

+ +

Definition at line 82 of file audio_stream_info.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
std::string edash_packager::media::AudioStreamInfo::ToString () const
+
+virtual
+
+
Returns
A human-readable string describing the stream info.
+ +

Reimplemented from edash_packager::media::StreamInfo.

+ +

Definition at line 90 of file audio_stream_info.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.png b/sdk/da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.png new file mode 100644 index 0000000000..f7294a0497 Binary files /dev/null and b/sdk/da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.png differ diff --git a/sdk/da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html b/sdk/da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html new file mode 100644 index 0000000000..9f5e7eff08 --- /dev/null +++ b/sdk/da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html @@ -0,0 +1,194 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::ProtectionSystemSpecificHeader Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::ProtectionSystemSpecificHeader Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::ProtectionSystemSpecificHeader:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + + + +

+Public Attributes

+std::vector< uint8_t > system_id
 
+std::vector< uint8_t > data
 
+std::vector< uint8_t > raw_box
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 51 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::ProtectionSystemSpecificHeader::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 130 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.png b/sdk/da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.png new file mode 100644 index 0000000000..05a73398e0 Binary files /dev/null and b/sdk/da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.png differ diff --git a/sdk/da/d37/classedash__packager_1_1media_1_1IoCache-members.html b/sdk/da/d37/classedash__packager_1_1media_1_1IoCache-members.html new file mode 100644 index 0000000000..55705bad3b --- /dev/null +++ b/sdk/da/d37/classedash__packager_1_1media_1_1IoCache-members.html @@ -0,0 +1,113 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::IoCache Member List
+
+
+ +

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

+ + + + + + + + + + +
BytesCached()edash_packager::media::IoCache
BytesFree()edash_packager::media::IoCache
Clear()edash_packager::media::IoCache
Close()edash_packager::media::IoCache
IoCache(uint64_t cache_size) (defined in edash_packager::media::IoCache)edash_packager::media::IoCacheexplicit
Read(void *buffer, uint64_t size)edash_packager::media::IoCache
WaitUntilEmptyOrClosed()edash_packager::media::IoCache
Write(const void *buffer, uint64_t size)edash_packager::media::IoCache
~IoCache() (defined in edash_packager::media::IoCache)edash_packager::media::IoCachevirtual
+ + + + diff --git a/sdk/da/d38/classedash__packager_1_1MpdNotifier.html b/sdk/da/d38/classedash__packager_1_1MpdNotifier.html new file mode 100644 index 0000000000..c14f0fa8f2 --- /dev/null +++ b/sdk/da/d38/classedash__packager_1_1MpdNotifier.html @@ -0,0 +1,480 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::MpdNotifier Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::MpdNotifier Class Referenceabstract
+
+
+ +

#include <mpd_notifier.h>

+
+Inheritance diagram for edash_packager::MpdNotifier:
+
+
+ + +edash_packager::DashIopMpdNotifier +edash_packager::MockMpdNotifier +edash_packager::SimpleMpdNotifier + +
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

MpdNotifier (DashProfile dash_profile)
 
virtual bool Init ()=0
 
virtual bool NotifyNewContainer (const MediaInfo &media_info, uint32_t *container_id)=0
 
virtual bool NotifySampleDuration (uint32_t container_id, uint32_t sample_duration)=0
 
virtual bool NotifyNewSegment (uint32_t container_id, uint64_t start_time, uint64_t duration, uint64_t size)=0
 
virtual bool NotifyEncryptionUpdate (uint32_t container_id, const std::string &drm_uuid, const std::vector< uint8_t > &new_key_id, const std::vector< uint8_t > &new_pssh)=0
 
virtual bool AddContentProtectionElement (uint32_t container_id, const ContentProtectionElement &content_protection_element)=0
 
virtual bool Flush ()=0
 
DashProfile dash_profile () const
 
+

Detailed Description

+

Interface for publish/subscribe publisher class which notifies MpdBuilder of media-related events.

+ +

Definition at line 32 of file mpd_notifier.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool edash_packager::MpdNotifier::AddContentProtectionElement (uint32_t container_id,
const ContentProtectionElementcontent_protection_element 
)
+
+pure virtual
+
+

Adds content protection information to the MPD.

+
Parameters
+ + + +
container_idis the nummeric container ID obtained from calling NotifyNewContainer().
content_protection_elementNew ContentProtection element specification.
+
+
+
Returns
true on success, false otherwise.
+ +

Implemented in edash_packager::SimpleMpdNotifier, and edash_packager::DashIopMpdNotifier.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
DashProfile edash_packager::MpdNotifier::dash_profile () const
+
+inline
+
+
Returns
The dash profile for this object.
+ +

Definition at line 108 of file mpd_notifier.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool edash_packager::MpdNotifier::Flush ()
+
+pure virtual
+
+

Call this method to force a flush. Implementations might not write out the MPD to a stream (file, stdout, etc.) when the MPD is updated, this forces a flush.

+ +

Implemented in edash_packager::SimpleMpdNotifier, and edash_packager::DashIopMpdNotifier.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool edash_packager::MpdNotifier::Init ()
+
+pure virtual
+
+

Initializes the notifier. For example, if this notifier uses a network for notification, then this would set up the connection with the remote host.

+
Returns
true on success, false otherwise.
+ +

Implemented in edash_packager::SimpleMpdNotifier, and edash_packager::DashIopMpdNotifier.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual bool edash_packager::MpdNotifier::NotifyEncryptionUpdate (uint32_t container_id,
const std::string & drm_uuid,
const std::vector< uint8_t > & new_key_id,
const std::vector< uint8_t > & new_pssh 
)
+
+pure virtual
+
+

Notifiers MpdBuilder that there is a new PSSH for the container. This may be called whenever the key has to change, e.g. key rotation.

+
Parameters
+ + + + + +
container_idContainer ID obtained from calling NotifyNewContainer().
drm_uuidis the UUID of the DRM for encryption.
new_key_idis the new key ID for the key.
new_psshis the new pssh box (including the header).
+
+
+
Attention
This might change or get removed once DASH IF IOP specification writes a clear guideline on how to handle key rotation.
+ +

Implemented in edash_packager::SimpleMpdNotifier, and edash_packager::DashIopMpdNotifier.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool edash_packager::MpdNotifier::NotifyNewContainer (const MediaInfo & media_info,
uint32_t * container_id 
)
+
+pure virtual
+
+

Notifies the MpdBuilder that there is a new container along with media_info. Live may have multiple files (segments) but those should be notified via NotifyNewSegment().

+
Parameters
+ + + +
media_infois the MediaInfo that will be passed to MpdBuilder.
[out]container_idis the numeric ID of the container, possibly for NotifyNewSegment() and AddContentProtectionElement(). Only populated on success.
+
+
+
Returns
true on success, false otherwise.
+ +

Implemented in edash_packager::SimpleMpdNotifier, and edash_packager::DashIopMpdNotifier.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual bool edash_packager::MpdNotifier::NotifyNewSegment (uint32_t container_id,
uint64_t start_time,
uint64_t duration,
uint64_t size 
)
+
+pure virtual
+
+

Notifies MpdBuilder that there is a new segment ready. For live, this is usually a new segment, for VOD this is usually a subsegment.

+
Parameters
+ + + + + +
container_idContainer ID obtained from calling NotifyNewContainer().
start_timeis the start time of the new segment, in units of the stream's time scale.
durationis the duration of the new segment, in units of the stream's time scale.
sizeis the new segment size in bytes.
+
+
+
Returns
true on success, false otherwise.
+ +

Implemented in edash_packager::SimpleMpdNotifier, and edash_packager::DashIopMpdNotifier.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool edash_packager::MpdNotifier::NotifySampleDuration (uint32_t container_id,
uint32_t sample_duration 
)
+
+pure virtual
+
+

Change the sample duration of container with container_id.

+
Parameters
+ + + +
container_idContainer ID obtained from calling NotifyNewContainer().
sample_durationis the duration of a sample in timescale of the media.
+
+
+
Returns
true on success, false otherwise. This may fail if the container specified by container_id does not exist.
+ +

Implemented in edash_packager::SimpleMpdNotifier, and edash_packager::DashIopMpdNotifier.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/sdk/da/d38/classedash__packager_1_1MpdNotifier.png b/sdk/da/d38/classedash__packager_1_1MpdNotifier.png new file mode 100644 index 0000000000..42463b01bf Binary files /dev/null and b/sdk/da/d38/classedash__packager_1_1MpdNotifier.png differ diff --git a/sdk/da/d40/classedash__packager_1_1media_1_1RsaPrivateKey-members.html b/sdk/da/d40/classedash__packager_1_1media_1_1RsaPrivateKey-members.html new file mode 100644 index 0000000000..abf1c78b17 --- /dev/null +++ b/sdk/da/d40/classedash__packager_1_1media_1_1RsaPrivateKey-members.html @@ -0,0 +1,108 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::RsaPrivateKey Member List
+
+
+ +

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

+ + + + + +
Create(const std::string &serialized_key)edash_packager::media::RsaPrivateKeystatic
Decrypt(const std::string &encrypted_message, std::string *decrypted_message)edash_packager::media::RsaPrivateKey
GenerateSignature(const std::string &message, std::string *signature)edash_packager::media::RsaPrivateKey
~RsaPrivateKey() (defined in edash_packager::media::RsaPrivateKey)edash_packager::media::RsaPrivateKey
+ + + + diff --git a/sdk/da/d47/structedash__packager_1_1media_1_1H264PPS-members.html b/sdk/da/d47/structedash__packager_1_1media_1_1H264PPS-members.html new file mode 100644 index 0000000000..60f1e3bd39 --- /dev/null +++ b/sdk/da/d47/structedash__packager_1_1media_1_1H264PPS-members.html @@ -0,0 +1,125 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::H264PPS Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + +
bottom_field_pic_order_in_frame_present_flag (defined in edash_packager::media::H264PPS)edash_packager::media::H264PPS
chroma_qp_index_offset (defined in edash_packager::media::H264PPS)edash_packager::media::H264PPS
constrained_intra_pred_flag (defined in edash_packager::media::H264PPS)edash_packager::media::H264PPS
deblocking_filter_control_present_flag (defined in edash_packager::media::H264PPS)edash_packager::media::H264PPS
entropy_coding_mode_flag (defined in edash_packager::media::H264PPS)edash_packager::media::H264PPS
H264PPS() (defined in edash_packager::media::H264PPS)edash_packager::media::H264PPS
num_ref_idx_l0_default_active_minus1 (defined in edash_packager::media::H264PPS)edash_packager::media::H264PPS
num_ref_idx_l1_default_active_minus1 (defined in edash_packager::media::H264PPS)edash_packager::media::H264PPS
num_slice_groups_minus1 (defined in edash_packager::media::H264PPS)edash_packager::media::H264PPS
pic_init_qp_minus26 (defined in edash_packager::media::H264PPS)edash_packager::media::H264PPS
pic_init_qs_minus26 (defined in edash_packager::media::H264PPS)edash_packager::media::H264PPS
pic_parameter_set_id (defined in edash_packager::media::H264PPS)edash_packager::media::H264PPS
pic_scaling_matrix_present_flag (defined in edash_packager::media::H264PPS)edash_packager::media::H264PPS
redundant_pic_cnt_present_flag (defined in edash_packager::media::H264PPS)edash_packager::media::H264PPS
scaling_list4x4 (defined in edash_packager::media::H264PPS)edash_packager::media::H264PPS
scaling_list8x8 (defined in edash_packager::media::H264PPS)edash_packager::media::H264PPS
second_chroma_qp_index_offset (defined in edash_packager::media::H264PPS)edash_packager::media::H264PPS
seq_parameter_set_id (defined in edash_packager::media::H264PPS)edash_packager::media::H264PPS
transform_8x8_mode_flag (defined in edash_packager::media::H264PPS)edash_packager::media::H264PPS
weighted_bipred_idc (defined in edash_packager::media::H264PPS)edash_packager::media::H264PPS
weighted_pred_flag (defined in edash_packager::media::H264PPS)edash_packager::media::H264PPS
+ + + + diff --git a/sdk/da/d49/classedash__packager_1_1DashIopMpdNotifier.html b/sdk/da/d49/classedash__packager_1_1DashIopMpdNotifier.html new file mode 100644 index 0000000000..4eddccf1c0 --- /dev/null +++ b/sdk/da/d49/classedash__packager_1_1DashIopMpdNotifier.html @@ -0,0 +1,481 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::DashIopMpdNotifier Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::DashIopMpdNotifier Class Reference
+
+
+ +

#include <dash_iop_mpd_notifier.h>

+
+Inheritance diagram for edash_packager::DashIopMpdNotifier:
+
+
+ + +edash_packager::MpdNotifier + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

DashIopMpdNotifier (DashProfile dash_profile, const MpdOptions &mpd_options, const std::vector< std::string > &base_urls, const std::string &output_path)
 
MpdNotifier implemetation overrides.

None of the methods write out the MPD file until Flush() is called.

+
virtual bool Init () OVERRIDE
 
virtual bool NotifyNewContainer (const MediaInfo &media_info, uint32_t *id) OVERRIDE
 
virtual bool NotifySampleDuration (uint32_t container_id, uint32_t sample_duration) OVERRIDE
 
virtual bool NotifyNewSegment (uint32_t id, uint64_t start_time, uint64_t duration, uint64_t size) OVERRIDE
 
virtual bool NotifyEncryptionUpdate (uint32_t container_id, const std::string &drm_uuid, const std::vector< uint8_t > &new_key_id, const std::vector< uint8_t > &new_pssh) OVERRIDE
 
virtual bool AddContentProtectionElement (uint32_t id, const ContentProtectionElement &content_protection_element) OVERRIDE
 
virtual bool Flush () OVERRIDE
 
- Public Member Functions inherited from edash_packager::MpdNotifier
MpdNotifier (DashProfile dash_profile)
 
DashProfile dash_profile () const
 
+ + + +

+Friends

+class DashIopMpdNotifierTest
 
+

Detailed Description

+

This class is an MpdNotifier which will try its best to generate a DASH IF IOPv3 compliant MPD. e.g. All <ContentProtection> elements must be right under <AdaptationSet> and cannot be under <Representation>. All video Adaptation Sets have Role set to "main".

+ +

Definition at line 29 of file dash_iop_mpd_notifier.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::DashIopMpdNotifier::AddContentProtectionElement (uint32_t container_id,
const ContentProtectionElementcontent_protection_element 
)
+
+virtual
+
+

Adds content protection information to the MPD.

+
Parameters
+ + + +
container_idis the nummeric container ID obtained from calling NotifyNewContainer().
content_protection_elementNew ContentProtection element specification.
+
+
+
Returns
true on success, false otherwise.
+ +

Implements edash_packager::MpdNotifier.

+ +

Definition at line 148 of file dash_iop_mpd_notifier.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool edash_packager::DashIopMpdNotifier::Flush ()
+
+virtual
+
+

Call this method to force a flush. Implementations might not write out the MPD to a stream (file, stdout, etc.) when the MPD is updated, this forces a flush.

+ +

Implements edash_packager::MpdNotifier.

+ +

Definition at line 158 of file dash_iop_mpd_notifier.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool edash_packager::DashIopMpdNotifier::Init ()
+
+virtual
+
+

Initializes the notifier. For example, if this notifier uses a network for notification, then this would set up the connection with the remote host.

+
Returns
true on success, false otherwise.
+ +

Implements edash_packager::MpdNotifier.

+ +

Definition at line 64 of file dash_iop_mpd_notifier.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool edash_packager::DashIopMpdNotifier::NotifyEncryptionUpdate (uint32_t container_id,
const std::string & drm_uuid,
const std::vector< uint8_t > & new_key_id,
const std::vector< uint8_t > & new_pssh 
)
+
+virtual
+
+

Notifiers MpdBuilder that there is a new PSSH for the container. This may be called whenever the key has to change, e.g. key rotation.

+
Parameters
+ + + + + +
container_idContainer ID obtained from calling NotifyNewContainer().
drm_uuidis the UUID of the DRM for encryption.
new_key_idis the new key ID for the key.
new_psshis the new pssh box (including the header).
+
+
+
Attention
This might change or get removed once DASH IF IOP specification writes a clear guideline on how to handle key rotation.
+ +

Implements edash_packager::MpdNotifier.

+ +

Definition at line 129 of file dash_iop_mpd_notifier.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::DashIopMpdNotifier::NotifyNewContainer (const MediaInfo & media_info,
uint32_t * container_id 
)
+
+virtual
+
+

Notifies the MpdBuilder that there is a new container along with media_info. Live may have multiple files (segments) but those should be notified via NotifyNewSegment().

+
Parameters
+ + + +
media_infois the MediaInfo that will be passed to MpdBuilder.
[out]container_idis the numeric ID of the container, possibly for NotifyNewSegment() and AddContentProtectionElement(). Only populated on success.
+
+
+
Returns
true on success, false otherwise.
+ +

Implements edash_packager::MpdNotifier.

+ +

Definition at line 68 of file dash_iop_mpd_notifier.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool edash_packager::DashIopMpdNotifier::NotifyNewSegment (uint32_t container_id,
uint64_t start_time,
uint64_t duration,
uint64_t size 
)
+
+virtual
+
+

Notifies MpdBuilder that there is a new segment ready. For live, this is usually a new segment, for VOD this is usually a subsegment.

+
Parameters
+ + + + + +
container_idContainer ID obtained from calling NotifyNewContainer().
start_timeis the start time of the new segment, in units of the stream's time scale.
durationis the duration of the new segment, in units of the stream's time scale.
sizeis the new segment size in bytes.
+
+
+
Returns
true on success, false otherwise.
+ +

Implements edash_packager::MpdNotifier.

+ +

Definition at line 115 of file dash_iop_mpd_notifier.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::DashIopMpdNotifier::NotifySampleDuration (uint32_t container_id,
uint32_t sample_duration 
)
+
+virtual
+
+

Change the sample duration of container with container_id.

+
Parameters
+ + + +
container_idContainer ID obtained from calling NotifyNewContainer().
sample_durationis the duration of a sample in timescale of the media.
+
+
+
Returns
true on success, false otherwise. This may fail if the container specified by container_id does not exist.
+ +

Implements edash_packager::MpdNotifier.

+ +

Definition at line 103 of file dash_iop_mpd_notifier.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/da/d49/classedash__packager_1_1DashIopMpdNotifier.png b/sdk/da/d49/classedash__packager_1_1DashIopMpdNotifier.png new file mode 100644 index 0000000000..61397a4237 Binary files /dev/null and b/sdk/da/d49/classedash__packager_1_1DashIopMpdNotifier.png differ diff --git a/sdk/da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html b/sdk/da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html new file mode 100644 index 0000000000..341bfbc253 --- /dev/null +++ b/sdk/da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html @@ -0,0 +1,180 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::OriginalFormat Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::OriginalFormat Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::OriginalFormat:
+
+
+ + +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + +

+Public Attributes

+FourCC format
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 73 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::OriginalFormat::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 205 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.png b/sdk/da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.png new file mode 100644 index 0000000000..7c65a4e0e1 Binary files /dev/null and b/sdk/da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.png differ diff --git a/sdk/da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html b/sdk/da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html new file mode 100644 index 0000000000..7885304d43 --- /dev/null +++ b/sdk/da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html @@ -0,0 +1,188 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::CompositionTimeToSample Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::CompositionTimeToSample Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::CompositionTimeToSample:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + +

+Public Attributes

+std::vector< CompositionOffsetcomposition_offset
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 262 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::CompositionTimeToSample::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 514 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.png b/sdk/da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.png new file mode 100644 index 0000000000..fd19c4a953 Binary files /dev/null and b/sdk/da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.png differ diff --git a/sdk/da/d5c/widevine__key__source_8h_source.html b/sdk/da/d5c/widevine__key__source_8h_source.html new file mode 100644 index 0000000000..54ef7642fe --- /dev/null +++ b/sdk/da/d5c/widevine__key__source_8h_source.html @@ -0,0 +1,225 @@ + + + + + + +DASH Media Packaging SDK: media/base/widevine_key_source.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
widevine_key_source.h
+
+
+
1 // Copyright 2014 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_BASE_WIDEVINE_KEY_SOURCE_H_
+
8 #define MEDIA_BASE_WIDEVINE_KEY_SOURCE_H_
+
9 
+
10 #include <map>
+
11 
+
12 #include "packager/base/memory/scoped_ptr.h"
+
13 #include "packager/base/synchronization/waitable_event.h"
+
14 #include "packager/base/values.h"
+
15 #include "packager/media/base/closure_thread.h"
+
16 #include "packager/media/base/key_source.h"
+
17 
+
18 namespace edash_packager {
+
19 namespace media {
+
20 class KeyFetcher;
+
21 class RequestSigner;
+
22 template <class T> class ProducerConsumerQueue;
+
23 
+
26 class WidevineKeySource : public KeySource {
+
27  public:
+
29  explicit WidevineKeySource(const std::string& server_url);
+
30 
+
31  virtual ~WidevineKeySource();
+
32 
+
35  virtual Status FetchKeys(const std::vector<uint8_t>& content_id,
+
36  const std::string& policy) OVERRIDE;
+
37  virtual Status FetchKeys(const std::vector<uint8_t>& pssh_data) OVERRIDE;
+
38  virtual Status FetchKeys(uint32_t asset_id) OVERRIDE;
+
39 
+
40  virtual Status GetKey(TrackType track_type, EncryptionKey* key) OVERRIDE;
+
41  virtual Status GetKey(const std::vector<uint8_t>& key_id,
+
42  EncryptionKey* key) OVERRIDE;
+
43  virtual Status GetCryptoPeriodKey(uint32_t crypto_period_index,
+
44  TrackType track_type,
+
45  EncryptionKey* key) OVERRIDE;
+
46  virtual std::string UUID() OVERRIDE;
+
48 
+
51  void set_signer(scoped_ptr<RequestSigner> signer);
+
52 
+
55  void set_key_fetcher(scoped_ptr<KeyFetcher> key_fetcher);
+
56 
+
57  protected:
+
58  ClosureThread key_production_thread_;
+
59 
+
60  private:
+
61  typedef std::map<TrackType, EncryptionKey*> EncryptionKeyMap;
+
62  class RefCountedEncryptionKeyMap;
+ + +
65 
+
66  // Internal routine for getting keys.
+
67  Status GetKeyInternal(uint32_t crypto_period_index,
+
68  TrackType track_type,
+
69  EncryptionKey* key);
+
70 
+
71  // The closure task to fetch keys repeatedly.
+
72  void FetchKeysTask();
+
73 
+
74  // Fetch keys from server.
+
75  Status FetchKeysInternal(bool enable_key_rotation,
+
76  uint32_t first_crypto_period_index,
+
77  bool widevine_classic);
+
78 
+
79  // Fill |request| with necessary fields for Widevine encryption request.
+
80  // |request| should not be NULL.
+
81  void FillRequest(bool enable_key_rotation,
+
82  uint32_t first_crypto_period_index,
+
83  std::string* request);
+
84  // Base64 escape and format the request. Optionally sign the request if a
+
85  // signer is provided. |message| should not be NULL. Return OK on success.
+
86  Status GenerateKeyMessage(const std::string& request, std::string* message);
+
87  // Decode |response| from JSON formatted |raw_response|.
+
88  // |response| should not be NULL.
+
89  bool DecodeResponse(const std::string& raw_response, std::string* response);
+
90  // Extract encryption key from |response|, which is expected to be properly
+
91  // formatted. |transient_error| will be set to true if it fails and the
+
92  // failure is because of a transient error from the server. |transient_error|
+
93  // should not be NULL.
+
94  bool ExtractEncryptionKey(bool enable_key_rotation,
+
95  bool widevine_classic,
+
96  const std::string& response,
+
97  bool* transient_error);
+
98  // Push the keys to the key pool.
+
99  bool PushToKeyPool(EncryptionKeyMap* encryption_key_map);
+
100 
+
101  // The fetcher object used to fetch keys from the license service.
+
102  // It is initialized to a default fetcher on class initialization.
+
103  // Can be overridden using set_key_fetcher for testing or other purposes.
+
104  scoped_ptr<KeyFetcher> key_fetcher_;
+
105  std::string server_url_;
+
106  scoped_ptr<RequestSigner> signer_;
+
107  base::DictionaryValue request_dict_;
+
108 
+
109  const uint32_t crypto_period_count_;
+
110  base::Lock lock_;
+
111  bool key_production_started_;
+
112  base::WaitableEvent start_key_production_;
+
113  uint32_t first_crypto_period_index_;
+
114  scoped_ptr<EncryptionKeyQueue> key_pool_;
+
115  EncryptionKeyMap encryption_key_map_; // For non key rotation request.
+
116  Status common_encryption_request_status_;
+
117 
+
118  DISALLOW_COPY_AND_ASSIGN(WidevineKeySource);
+
119 };
+
120 
+
121 } // namespace media
+
122 } // namespace edash_packager
+
123 
+
124 #endif // MEDIA_BASE_WIDEVINE_KEY_SOURCE_H_
+
WidevineKeySource(const std::string &server_url)
+ + + + +
void set_signer(scoped_ptr< RequestSigner > signer)
+
virtual Status GetCryptoPeriodKey(uint32_t crypto_period_index, TrackType track_type, EncryptionKey *key) OVERRIDE
+
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:29
+
virtual Status FetchKeys(const std::vector< uint8_t > &content_id, const std::string &policy) OVERRIDE
+
void set_key_fetcher(scoped_ptr< KeyFetcher > key_fetcher)
+ + +
virtual Status GetKey(TrackType track_type, EncryptionKey *key) OVERRIDE
+
+ + + + diff --git a/sdk/da/d60/structedash__packager_1_1media_1_1EncryptionKey-members.html b/sdk/da/d60/structedash__packager_1_1media_1_1EncryptionKey-members.html new file mode 100644 index 0000000000..0a5a3d052a --- /dev/null +++ b/sdk/da/d60/structedash__packager_1_1media_1_1EncryptionKey-members.html @@ -0,0 +1,110 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::EncryptionKey Member List
+
+
+ +

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

+ + + + + + + +
EncryptionKey() (defined in edash_packager::media::EncryptionKey)edash_packager::media::EncryptionKey
iv (defined in edash_packager::media::EncryptionKey)edash_packager::media::EncryptionKey
key (defined in edash_packager::media::EncryptionKey)edash_packager::media::EncryptionKey
key_id (defined in edash_packager::media::EncryptionKey)edash_packager::media::EncryptionKey
pssh (defined in edash_packager::media::EncryptionKey)edash_packager::media::EncryptionKey
~EncryptionKey() (defined in edash_packager::media::EncryptionKey)edash_packager::media::EncryptionKey
+ + + + diff --git a/sdk/da/d72/classedash__packager_1_1media_1_1mp2t_1_1EsParser-members.html b/sdk/da/d72/classedash__packager_1_1media_1_1mp2t_1_1EsParser-members.html new file mode 100644 index 0000000000..7145da8ef6 --- /dev/null +++ b/sdk/da/d72/classedash__packager_1_1media_1_1mp2t_1_1EsParser-members.html @@ -0,0 +1,112 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp2t::EsParser Member List
+
+
+ +

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

+ + + + + + + + + +
EmitSampleCB typedef (defined in edash_packager::media::mp2t::EsParser)edash_packager::media::mp2t::EsParser
EsParser(uint32_t pid) (defined in edash_packager::media::mp2t::EsParser)edash_packager::media::mp2t::EsParserinline
Flush()=0 (defined in edash_packager::media::mp2t::EsParser)edash_packager::media::mp2t::EsParserpure virtual
NewStreamInfoCB typedef (defined in edash_packager::media::mp2t::EsParser)edash_packager::media::mp2t::EsParser
Parse(const uint8_t *buf, int size, int64_t pts, int64_t dts)=0 (defined in edash_packager::media::mp2t::EsParser)edash_packager::media::mp2t::EsParserpure virtual
pid() (defined in edash_packager::media::mp2t::EsParser)edash_packager::media::mp2t::EsParserinline
Reset()=0 (defined in edash_packager::media::mp2t::EsParser)edash_packager::media::mp2t::EsParserpure virtual
~EsParser() (defined in edash_packager::media::mp2t::EsParser)edash_packager::media::mp2t::EsParserinlinevirtual
+ + + + diff --git a/sdk/da/d75/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html b/sdk/da/d75/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html new file mode 100644 index 0000000000..e36cf9712c --- /dev/null +++ b/sdk/da/d75/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html @@ -0,0 +1,267 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::SingleSegmentSegmenter Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::SingleSegmentSegmenter Class Reference
+
+
+ +

#include <single_segment_segmenter.h>

+
+Inheritance diagram for edash_packager::media::mp4::SingleSegmentSegmenter:
+
+
+ + +edash_packager::media::mp4::Segmenter + +
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

SingleSegmentSegmenter (const MuxerOptions &options, scoped_ptr< FileType > ftyp, scoped_ptr< Movie > moov)
 
Segmenter implementation overrides.
virtual bool GetInitRange (size_t *offset, size_t *size) OVERRIDE
 
virtual bool GetIndexRange (size_t *offset, size_t *size) OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Segmenter
Segmenter (const MuxerOptions &options, scoped_ptr< FileType > ftyp, scoped_ptr< Movie > moov)
 
Status Initialize (const std::vector< MediaStream * > &streams, MuxerListener *muxer_listener, ProgressListener *progress_listener, KeySource *encryption_key_source, uint32_t max_sd_pixels, double clear_lead_in_seconds, double crypto_period_duration_in_seconds)
 
Status Finalize ()
 
Status AddSample (const MediaStream *stream, scoped_refptr< MediaSample > sample)
 
+uint32_t GetReferenceTimeScale () const
 
double GetDuration () const
 
uint32_t sample_duration () const
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from edash_packager::media::mp4::Segmenter
+void UpdateProgress (uint64_t progress)
 Update segmentation progress using ProgressListener.
 
+void SetComplete ()
 Set progress to 100%.
 
+const MuxerOptionsoptions () const
 
+FileTypeftyp ()
 
+Moviemoov ()
 
+BufferWriterfragment_buffer ()
 
+SegmentIndexsidx ()
 
+MuxerListenermuxer_listener ()
 
+uint64_t progress_target ()
 
+void set_progress_target (uint64_t progress_target)
 
+

Detailed Description

+

Segmenter for MP4 Dash Video-On-Demand profile. A single MP4 file with a single segment is created, i.e. with only one SIDX box. The generated media file can contain one or many subsegments with subsegment duration defined by MuxerOptions.segment_duration. A subsegment can contain one or many fragments with fragment duration defined by MuxerOptions.fragment_duration. The actual subsegment or fragment duration may not match the requested duration exactly, but will be approximated. That is, the Segmenter tries to end subsegment/fragment at the first sample with overall subsegment/fragment duration not smaller than defined duration and yet meet SAP requirements. SingleSegmentSegmenter ignores MuxerOptions.num_subsegments_per_sidx.

+ +

Definition at line 28 of file single_segment_segmenter.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::mp4::SingleSegmentSegmenter::GetIndexRange (size_t * offset,
size_t * size 
)
+
+virtual
+
+
Returns
true if there is an index byte range, while setting offset and size; or false if index byte range does not apply.
+ +

Implements edash_packager::media::mp4::Segmenter.

+ +

Definition at line 63 of file single_segment_segmenter.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::mp4::SingleSegmentSegmenter::GetInitRange (size_t * offset,
size_t * size 
)
+
+virtual
+
+
Returns
true if there is an initialization range, while setting offset and size; or false if initialization range does not apply.
+ +

Implements edash_packager::media::mp4::Segmenter.

+ +

Definition at line 56 of file single_segment_segmenter.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/da/d75/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter.png b/sdk/da/d75/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter.png new file mode 100644 index 0000000000..46437928da Binary files /dev/null and b/sdk/da/d75/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter.png differ diff --git a/sdk/da/d7a/fixed__key__encryption__flags_8h_source.html b/sdk/da/d7a/fixed__key__encryption__flags_8h_source.html new file mode 100644 index 0000000000..5bcfb784eb --- /dev/null +++ b/sdk/da/d7a/fixed__key__encryption__flags_8h_source.html @@ -0,0 +1,126 @@ + + + + + + +DASH Media Packaging SDK: app/fixed_key_encryption_flags.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
fixed_key_encryption_flags.h
+
+
+
1 // Copyright 2014 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 // Defines command line flags for fixed key encryption.
+
8 
+
9 #ifndef APP_FIXED_KEY_ENCRYPTION_FLAGS_H_
+
10 #define APP_FIXED_KEY_ENCRYPTION_FLAGS_H_
+
11 
+
12 #include <gflags/gflags.h>
+
13 
+
14 DECLARE_bool(enable_fixed_key_encryption);
+
15 DECLARE_bool(enable_fixed_key_decryption);
+
16 DECLARE_string(key_id);
+
17 DECLARE_string(key);
+
18 DECLARE_string(iv);
+
19 DECLARE_string(pssh);
+
20 
+
21 namespace edash_packager {
+
22 
+ +
26 
+
27 } // namespace edash_packager
+
28 
+
29 #endif // APP_FIXED_KEY_ENCRYPTION_FLAGS_H_
+ +
+ + + + diff --git a/sdk/da/d7d/classedash__packager_1_1media_1_1StreamDescriptorCompareFn.html b/sdk/da/d7d/classedash__packager_1_1media_1_1StreamDescriptorCompareFn.html new file mode 100644 index 0000000000..e1b616ddd3 --- /dev/null +++ b/sdk/da/d7d/classedash__packager_1_1media_1_1StreamDescriptorCompareFn.html @@ -0,0 +1,117 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::StreamDescriptorCompareFn Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::StreamDescriptorCompareFn Class Reference
+
+
+ + + + +

+Public Member Functions

+bool operator() (const StreamDescriptor &a, const StreamDescriptor &b)
 
+

Detailed Description

+
+

Definition at line 32 of file stream_descriptor.h.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/sdk/da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html b/sdk/da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html new file mode 100644 index 0000000000..68652bc476 --- /dev/null +++ b/sdk/da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html @@ -0,0 +1,191 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::ChunkLargeOffset Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::ChunkLargeOffset Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::ChunkLargeOffset:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box +edash_packager::media::mp4::ChunkOffset + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + +

+Public Attributes

+std::vector< uint64_t > offsets
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 299 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::ChunkLargeOffset::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

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

+ +

Definition at line 686 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.png b/sdk/da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.png new file mode 100644 index 0000000000..42317a885a Binary files /dev/null and b/sdk/da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.png differ diff --git a/sdk/da/d88/mp4__muxer_8cc_source.html b/sdk/da/d88/mp4__muxer_8cc_source.html new file mode 100644 index 0000000000..58e2f8f569 --- /dev/null +++ b/sdk/da/d88/mp4__muxer_8cc_source.html @@ -0,0 +1,412 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/mp4_muxer.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mp4_muxer.cc
+
+
+
1 // Copyright 2014 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/formats/mp4/mp4_muxer.h"
+
8 
+
9 #include "packager/base/time/clock.h"
+
10 #include "packager/base/time/time.h"
+
11 #include "packager/media/base/aes_encryptor.h"
+
12 #include "packager/media/base/audio_stream_info.h"
+
13 #include "packager/media/base/key_source.h"
+
14 #include "packager/media/base/media_sample.h"
+
15 #include "packager/media/base/media_stream.h"
+
16 #include "packager/media/base/video_stream_info.h"
+
17 #include "packager/media/event/muxer_listener.h"
+
18 #include "packager/media/file/file.h"
+
19 #include "packager/media/formats/mp4/box_definitions.h"
+
20 #include "packager/media/formats/mp4/es_descriptor.h"
+
21 #include "packager/media/formats/mp4/fourccs.h"
+
22 #include "packager/media/formats/mp4/multi_segment_segmenter.h"
+
23 #include "packager/media/formats/mp4/single_segment_segmenter.h"
+
24 
+
25 namespace {
+
26 // Sets the range start and end value from offset and size.
+
27 // |start| and |end| are for byte-range-spec specified in RFC2616.
+
28 void SetStartAndEndFromOffsetAndSize(size_t offset,
+
29  size_t size,
+
30  uint32_t* start,
+
31  uint32_t* end) {
+
32  DCHECK(start && end);
+
33  *start = static_cast<uint32_t>(offset);
+
34  // Note that ranges are inclusive. So we need - 1.
+
35  *end = *start + static_cast<uint32_t>(size) - 1;
+
36 }
+
37 } // namespace
+
38 
+
39 namespace edash_packager {
+
40 namespace media {
+
41 namespace mp4 {
+
42 
+
43 MP4Muxer::MP4Muxer(const MuxerOptions& options) : Muxer(options) {}
+
44 MP4Muxer::~MP4Muxer() {}
+
45 
+
46 Status MP4Muxer::Initialize() {
+
47  DCHECK(!streams().empty());
+
48 
+
49  scoped_ptr<FileType> ftyp(new FileType);
+
50  scoped_ptr<Movie> moov(new Movie);
+
51 
+
52  ftyp->major_brand = FOURCC_DASH;
+
53  ftyp->compatible_brands.push_back(FOURCC_ISO6);
+
54  ftyp->compatible_brands.push_back(FOURCC_MP41);
+
55  if (streams().size() == 1 &&
+
56  streams()[0]->info()->stream_type() == kStreamVideo)
+
57  ftyp->compatible_brands.push_back(FOURCC_AVC1);
+
58 
+
59  moov->header.creation_time = IsoTimeNow();
+
60  moov->header.modification_time = IsoTimeNow();
+
61  moov->header.next_track_id = streams().size() + 1;
+
62 
+
63  moov->tracks.resize(streams().size());
+
64  moov->extends.tracks.resize(streams().size());
+
65 
+
66  // Initialize tracks.
+
67  for (uint32_t i = 0; i < streams().size(); ++i) {
+
68  Track& trak = moov->tracks[i];
+
69  trak.header.track_id = i + 1;
+
70 
+
71  TrackExtends& trex = moov->extends.tracks[i];
+
72  trex.track_id = trak.header.track_id;
+
73  trex.default_sample_description_index = 1;
+
74 
+
75  switch (streams()[i]->info()->stream_type()) {
+
76  case kStreamVideo:
+
77  GenerateVideoTrak(
+
78  static_cast<VideoStreamInfo*>(streams()[i]->info().get()),
+
79  &trak,
+
80  i + 1);
+
81  break;
+
82  case kStreamAudio:
+
83  GenerateAudioTrak(
+
84  static_cast<AudioStreamInfo*>(streams()[i]->info().get()),
+
85  &trak,
+
86  i + 1);
+
87  break;
+
88  default:
+
89  NOTIMPLEMENTED() << "Not implemented for stream type: "
+
90  << streams()[i]->info()->stream_type();
+
91  }
+
92  }
+
93 
+
94  if (options().single_segment) {
+
95  segmenter_.reset(
+
96  new SingleSegmentSegmenter(options(), ftyp.Pass(), moov.Pass()));
+
97  } else {
+
98  segmenter_.reset(
+
99  new MultiSegmentSegmenter(options(), ftyp.Pass(), moov.Pass()));
+
100  }
+
101 
+
102  Status segmenter_initialized =
+
103  segmenter_->Initialize(streams(),
+
104  muxer_listener(),
+
105  progress_listener(),
+
106  encryption_key_source(),
+
107  max_sd_pixels(),
+
108  clear_lead_in_seconds(),
+
109  crypto_period_duration_in_seconds());
+
110 
+
111  if (!segmenter_initialized.ok())
+
112  return segmenter_initialized;
+
113 
+
114  FireOnMediaStartEvent();
+
115  return Status::OK;
+
116 }
+
117 
+
118 Status MP4Muxer::Finalize() {
+
119  DCHECK(segmenter_);
+
120  Status segmenter_finalized = segmenter_->Finalize();
+
121 
+
122  if (!segmenter_finalized.ok())
+
123  return segmenter_finalized;
+
124 
+
125  FireOnMediaEndEvent();
+
126  LOG(INFO) << "MP4 file '" << options().output_file_name << "' finalized.";
+
127  return Status::OK;
+
128 }
+
129 
+
130 Status MP4Muxer::DoAddSample(const MediaStream* stream,
+
131  scoped_refptr<MediaSample> sample) {
+
132  DCHECK(segmenter_);
+
133  return segmenter_->AddSample(stream, sample);
+
134 }
+
135 
+
136 void MP4Muxer::InitializeTrak(const StreamInfo* info, Track* trak) {
+
137  int64_t now = IsoTimeNow();
+
138  trak->header.creation_time = now;
+
139  trak->header.modification_time = now;
+
140  trak->header.duration = 0;
+
141  trak->media.header.creation_time = now;
+
142  trak->media.header.modification_time = now;
+
143  trak->media.header.timescale = info->time_scale();
+
144  trak->media.header.duration = 0;
+
145  if (!info->language().empty()) {
+
146  const size_t language_size = arraysize(trak->media.header.language) - 1;
+
147  if (info->language().size() != language_size) {
+
148  LOG(WARNING) << "'" << info->language() << "' is not a valid ISO-639-2 "
+
149  << "language code, ignoring.";
+
150  } else {
+
151  memcpy(trak->media.header.language, info->language().c_str(),
+
152  language_size + 1);
+
153  }
+
154  }
+
155 }
+
156 
+
157 void MP4Muxer::GenerateVideoTrak(const VideoStreamInfo* video_info,
+
158  Track* trak,
+
159  uint32_t track_id) {
+
160  InitializeTrak(video_info, trak);
+
161 
+
162  // width and height specify the track's visual presentation size as
+
163  // fixed-point 16.16 values.
+
164  uint32_t pixel_width = video_info->pixel_width();
+
165  uint32_t pixel_height = video_info->pixel_height();
+
166  if (pixel_width == 0 || pixel_height == 0) {
+
167  LOG(WARNING) << "pixel width/height are not set. Assuming 1:1.";
+
168  pixel_width = 1;
+
169  pixel_height = 1;
+
170  }
+
171  const double sample_aspect_ratio =
+
172  static_cast<double>(pixel_width) / pixel_height;
+
173  trak->header.width = video_info->width() * sample_aspect_ratio * 0x10000;
+
174  trak->header.height = video_info->height() * 0x10000;
+
175 
+
176  trak->media.handler.type = kVideo;
+
177 
+
178  VideoSampleEntry video;
+
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();
+
183  if (pixel_width != 1 || pixel_height != 1) {
+
184  video.pixel_aspect.h_spacing = pixel_width;
+
185  video.pixel_aspect.v_spacing = pixel_height;
+
186  }
+
187 
+
188  SampleDescription& sample_description =
+
189  trak->media.information.sample_table.description;
+
190  sample_description.type = kVideo;
+
191  sample_description.video_entries.push_back(video);
+
192 }
+
193 
+
194 void MP4Muxer::GenerateAudioTrak(const AudioStreamInfo* audio_info,
+
195  Track* trak,
+
196  uint32_t track_id) {
+
197  InitializeTrak(audio_info, trak);
+
198 
+
199  trak->header.volume = 0x100;
+
200  trak->media.handler.type = kAudio;
+
201 
+
202  AudioSampleEntry audio;
+
203  audio.format = FOURCC_MP4A;
+
204  audio.channelcount = audio_info->num_channels();
+
205  audio.samplesize = audio_info->sample_bits();
+
206  audio.samplerate = audio_info->sampling_frequency();
+
207 
+
208  if (kCodecAAC) {
+
209  audio.esds.es_descriptor.set_object_type(kISO_14496_3); // MPEG4 AAC.
+
210  } else {
+
211  // Do we need to support other types?
+
212  NOTIMPLEMENTED();
+
213  }
+
214  audio.esds.es_descriptor.set_esid(track_id);
+
215  audio.esds.es_descriptor.set_decoder_specific_info(audio_info->extra_data());
+
216 
+
217  SampleDescription& sample_description =
+
218  trak->media.information.sample_table.description;
+
219  sample_description.type = kAudio;
+
220  sample_description.audio_entries.push_back(audio);
+
221 }
+
222 
+
223 bool MP4Muxer::GetInitRangeStartAndEnd(uint32_t* start, uint32_t* end) {
+
224  DCHECK(start && end);
+
225  size_t range_offset = 0;
+
226  size_t range_size = 0;
+
227  const bool has_range = segmenter_->GetInitRange(&range_offset, &range_size);
+
228 
+
229  if (!has_range)
+
230  return false;
+
231 
+
232  SetStartAndEndFromOffsetAndSize(range_offset, range_size, start, end);
+
233  return true;
+
234 }
+
235 
+
236 bool MP4Muxer::GetIndexRangeStartAndEnd(uint32_t* start, uint32_t* end) {
+
237  DCHECK(start && end);
+
238  size_t range_offset = 0;
+
239  size_t range_size = 0;
+
240  const bool has_range = segmenter_->GetIndexRange(&range_offset, &range_size);
+
241 
+
242  if (!has_range)
+
243  return false;
+
244 
+
245  SetStartAndEndFromOffsetAndSize(range_offset, range_size, start, end);
+
246  return true;
+
247 }
+
248 
+
249 void MP4Muxer::FireOnMediaStartEvent() {
+
250  if (!muxer_listener())
+
251  return;
+
252 
+
253  if (streams().size() > 1) {
+
254  LOG(ERROR) << "MuxerListener cannot take more than 1 stream.";
+
255  return;
+
256  }
+
257  DCHECK(!streams().empty()) << "Media started without a stream.";
+
258 
+
259  const uint32_t timescale = segmenter_->GetReferenceTimeScale();
+
260  muxer_listener()->OnMediaStart(options(),
+
261  *streams().front()->info(),
+
262  timescale,
+
263  MuxerListener::kContainerMp4);
+
264 }
+
265 
+
266 void MP4Muxer::FireOnMediaEndEvent() {
+
267  if (!muxer_listener())
+
268  return;
+
269 
+
270  uint32_t init_range_start = 0;
+
271  uint32_t init_range_end = 0;
+
272  const bool has_init_range =
+
273  GetInitRangeStartAndEnd(&init_range_start, &init_range_end);
+
274 
+
275  uint32_t index_range_start = 0;
+
276  uint32_t index_range_end = 0;
+
277  const bool has_index_range =
+
278  GetIndexRangeStartAndEnd(&index_range_start, &index_range_end);
+
279 
+
280  const float duration_seconds = static_cast<float>(segmenter_->GetDuration());
+
281 
+
282  const int64_t file_size =
+
283  File::GetFileSize(options().output_file_name.c_str());
+
284  if (file_size <= 0) {
+
285  LOG(ERROR) << "Invalid file size: " << file_size;
+
286  return;
+
287  }
+
288 
+
289  muxer_listener()->OnMediaEnd(has_init_range,
+
290  init_range_start,
+
291  init_range_end,
+
292  has_index_range,
+
293  index_range_start,
+
294  index_range_end,
+
295  duration_seconds,
+
296  file_size);
+
297 }
+
298 
+
299 uint64_t MP4Muxer::IsoTimeNow() {
+
300  // Time in seconds from Jan. 1, 1904 to epoch time, i.e. Jan. 1, 1970.
+
301  const uint64_t kIsomTimeOffset = 2082844800l;
+
302  return kIsomTimeOffset +
+
303  (clock() ? clock()->Now() : base::Time::Now()).ToDoubleT();
+
304 }
+
305 
+
306 } // namespace mp4
+
307 } // namespace media
+
308 } // namespace edash_packager
+ +
MP4Muxer(const MuxerOptions &options)
Create a MP4Muxer object from MuxerOptions.
Definition: mp4_muxer.cc:43
+ + +
This structure contains the list of configuration options for Muxer.
Definition: muxer_options.h:18
+
static int64_t GetFileSize(const char *file_name)
Definition: file.cc:151
+
+ + + + diff --git a/sdk/da/d8e/container__names_8cc_source.html b/sdk/da/d8e/container__names_8cc_source.html new file mode 100644 index 0000000000..b471a55400 --- /dev/null +++ b/sdk/da/d8e/container__names_8cc_source.html @@ -0,0 +1,1771 @@ + + + + + + +DASH Media Packaging SDK: media/base/container_names.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
container_names.cc
+
+
+
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/base/container_names.h"
+
6 
+
7 #include <stdint.h>
+
8 
+
9 #include <cctype>
+
10 #include <limits>
+
11 
+
12 #include "packager/base/logging.h"
+
13 #include "packager/media/base/bit_reader.h"
+
14 
+
15 namespace edash_packager {
+
16 namespace media {
+
17 
+
18 #define TAG(a, b, c, d) \
+
19  ((static_cast<uint32_t>(static_cast<uint8_t>(a)) << 24) | \
+
20  (static_cast<uint8_t>(b) << 16) | (static_cast<uint8_t>(c) << 8) | \
+
21  (static_cast<uint8_t>(d)))
+
22 
+
23 #define RCHECK(x) \
+
24  do { \
+
25  if (!(x)) \
+
26  return false; \
+
27  } while (0)
+
28 
+
29 #define UTF8_BYTE_ORDER_MARK "\xef\xbb\xbf"
+
30 
+
31 // Helper function to read 2 bytes (16 bits, big endian) from a buffer.
+
32 static int Read16(const uint8_t* p) {
+
33  return p[0] << 8 | p[1];
+
34 }
+
35 
+
36 // Helper function to read 3 bytes (24 bits, big endian) from a buffer.
+
37 static uint32_t Read24(const uint8_t* p) {
+
38  return p[0] << 16 | p[1] << 8 | p[2];
+
39 }
+
40 
+
41 // Helper function to read 4 bytes (32 bits, big endian) from a buffer.
+
42 static uint32_t Read32(const uint8_t* p) {
+
43  return p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3];
+
44 }
+
45 
+
46 // Helper function to read 4 bytes (32 bits, little endian) from a buffer.
+
47 static uint32_t Read32LE(const uint8_t* p) {
+
48  return p[3] << 24 | p[2] << 16 | p[1] << 8 | p[0];
+
49 }
+
50 
+
51 // Helper function to do buffer comparisons with a string without going off the
+
52 // end of the buffer.
+
53 static bool StartsWith(const uint8_t* buffer,
+
54  size_t buffer_size,
+
55  const char* prefix) {
+
56  size_t prefix_size = strlen(prefix);
+
57  return (prefix_size <= buffer_size &&
+
58  memcmp(buffer, prefix, prefix_size) == 0);
+
59 }
+
60 
+
61 // Helper function to do buffer comparisons with another buffer (to allow for
+
62 // embedded \0 in the comparison) without going off the end of the buffer.
+
63 static bool StartsWith(const uint8_t* buffer,
+
64  size_t buffer_size,
+
65  const uint8_t* prefix,
+
66  size_t prefix_size) {
+
67  return (prefix_size <= buffer_size &&
+
68  memcmp(buffer, prefix, prefix_size) == 0);
+
69 }
+
70 
+
71 // Helper function to read up to 64 bits from a bit stream.
+
72 static uint64_t ReadBits(BitReader* reader, int num_bits) {
+
73  DCHECK_GE(reader->bits_available(), num_bits);
+
74  DCHECK((num_bits > 0) && (num_bits <= 64));
+
75  uint64_t value;
+
76  reader->ReadBits(num_bits, &value);
+
77  return value;
+
78 }
+
79 
+
80 const int kAc3FrameSizeTable[38][3] = {
+
81  { 128, 138, 192 }, { 128, 140, 192 }, { 160, 174, 240 }, { 160, 176, 240 },
+
82  { 192, 208, 288 }, { 192, 210, 288 }, { 224, 242, 336 }, { 224, 244, 336 },
+
83  { 256, 278, 384 }, { 256, 280, 384 }, { 320, 348, 480 }, { 320, 350, 480 },
+
84  { 384, 416, 576 }, { 384, 418, 576 }, { 448, 486, 672 }, { 448, 488, 672 },
+
85  { 512, 556, 768 }, { 512, 558, 768 }, { 640, 696, 960 }, { 640, 698, 960 },
+
86  { 768, 834, 1152 }, { 768, 836, 1152 }, { 896, 974, 1344 },
+
87  { 896, 976, 1344 }, { 1024, 1114, 1536 }, { 1024, 1116, 1536 },
+
88  { 1280, 1392, 1920 }, { 1280, 1394, 1920 }, { 1536, 1670, 2304 },
+
89  { 1536, 1672, 2304 }, { 1792, 1950, 2688 }, { 1792, 1952, 2688 },
+
90  { 2048, 2228, 3072 }, { 2048, 2230, 3072 }, { 2304, 2506, 3456 },
+
91  { 2304, 2508, 3456 }, { 2560, 2768, 3840 }, { 2560, 2770, 3840 }
+
92 };
+
93 
+
94 // Checks for an ADTS AAC container.
+
95 static bool CheckAac(const uint8_t* buffer, int buffer_size) {
+
96  // Audio Data Transport Stream (ADTS) header is 7 or 9 bytes
+
97  // (from http://wiki.multimedia.cx/index.php?title=ADTS)
+
98  RCHECK(buffer_size > 6);
+
99 
+
100  int offset = 0;
+
101  while (offset + 6 < buffer_size) {
+
102  BitReader reader(buffer + offset, 6);
+
103 
+
104  // Syncword must be 0xfff.
+
105  RCHECK(ReadBits(&reader, 12) == 0xfff);
+
106 
+
107  // Skip MPEG version.
+
108  reader.SkipBits(1);
+
109 
+
110  // Layer is always 0.
+
111  RCHECK(ReadBits(&reader, 2) == 0);
+
112 
+
113  // Skip protection + profile.
+
114  reader.SkipBits(1 + 2);
+
115 
+
116  // Check sampling frequency index.
+
117  RCHECK(ReadBits(&reader, 4) != 15); // Forbidden.
+
118 
+
119  // Skip private stream, channel configuration, originality, home,
+
120  // copyrighted stream, and copyright_start.
+
121  reader.SkipBits(1 + 3 + 1 + 1 + 1 + 1);
+
122 
+
123  // Get frame length (includes header).
+
124  int size = ReadBits(&reader, 13);
+
125  RCHECK(size > 0);
+
126  offset += size;
+
127  }
+
128  return true;
+
129 }
+
130 
+
131 const uint16_t kAc3SyncWord = 0x0b77;
+
132 
+
133 // Checks for an AC3 container.
+
134 static bool CheckAc3(const uint8_t* buffer, int buffer_size) {
+
135  // Reference: ATSC Standard: Digital Audio Compression (AC-3, E-AC-3)
+
136  // Doc. A/52:2012
+
137  // (http://www.atsc.org/cms/standards/A52-2012(12-17).pdf)
+
138 
+
139  // AC3 container looks like syncinfo | bsi | audblk * 6 | aux | check.
+
140  RCHECK(buffer_size > 6);
+
141 
+
142  int offset = 0;
+
143  while (offset + 6 < buffer_size) {
+
144  BitReader reader(buffer + offset, 6);
+
145 
+
146  // Check syncinfo.
+
147  RCHECK(ReadBits(&reader, 16) == kAc3SyncWord);
+
148 
+
149  // Skip crc1.
+
150  reader.SkipBits(16);
+
151 
+
152  // Verify fscod.
+
153  int sample_rate_code = ReadBits(&reader, 2);
+
154  RCHECK(sample_rate_code != 3); // Reserved.
+
155 
+
156  // Verify frmsizecod.
+
157  int frame_size_code = ReadBits(&reader, 6);
+
158  RCHECK(frame_size_code < 38); // Undefined.
+
159 
+
160  // Verify bsid.
+
161  RCHECK(ReadBits(&reader, 5) < 10); // Normally 8 or 6, 16 used by EAC3.
+
162 
+
163  offset += kAc3FrameSizeTable[frame_size_code][sample_rate_code];
+
164  }
+
165  return true;
+
166 }
+
167 
+
168 // Checks for an EAC3 container (very similar to AC3)
+
169 static bool CheckEac3(const uint8_t* buffer, int buffer_size) {
+
170  // Reference: ATSC Standard: Digital Audio Compression (AC-3, E-AC-3)
+
171  // Doc. A/52:2012
+
172  // (http://www.atsc.org/cms/standards/A52-2012(12-17).pdf)
+
173 
+
174  // EAC3 container looks like syncinfo | bsi | audfrm | audblk* | aux | check.
+
175  RCHECK(buffer_size > 6);
+
176 
+
177  int offset = 0;
+
178  while (offset + 6 < buffer_size) {
+
179  BitReader reader(buffer + offset, 6);
+
180 
+
181  // Check syncinfo.
+
182  RCHECK(ReadBits(&reader, 16) == kAc3SyncWord);
+
183 
+
184  // Verify strmtyp.
+
185  RCHECK(ReadBits(&reader, 2) != 3);
+
186 
+
187  // Skip substreamid.
+
188  reader.SkipBits(3);
+
189 
+
190  // Get frmsize. Include syncinfo size and convert to bytes.
+
191  int frame_size = (ReadBits(&reader, 11) + 1) * 2;
+
192  RCHECK(frame_size >= 7);
+
193 
+
194  // Skip fscod, fscod2, acmod, and lfeon.
+
195  reader.SkipBits(2 + 2 + 3 + 1);
+
196 
+
197  // Verify bsid.
+
198  int bit_stream_id = ReadBits(&reader, 5);
+
199  RCHECK(bit_stream_id >= 11 && bit_stream_id <= 16);
+
200 
+
201  offset += frame_size;
+
202  }
+
203  return true;
+
204 }
+
205 
+
206 // Additional checks for a BINK container.
+
207 static bool CheckBink(const uint8_t* buffer, int buffer_size) {
+
208  // Reference: http://wiki.multimedia.cx/index.php?title=Bink_Container
+
209  RCHECK(buffer_size >= 44);
+
210 
+
211  // Verify number of frames specified.
+
212  RCHECK(Read32LE(buffer + 8) > 0);
+
213 
+
214  // Verify width in range.
+
215  int width = Read32LE(buffer + 20);
+
216  RCHECK(width > 0 && width <= 32767);
+
217 
+
218  // Verify height in range.
+
219  int height = Read32LE(buffer + 24);
+
220  RCHECK(height > 0 && height <= 32767);
+
221 
+
222  // Verify frames per second specified.
+
223  RCHECK(Read32LE(buffer + 28) > 0);
+
224 
+
225  // Verify video frames per second specified.
+
226  RCHECK(Read32LE(buffer + 32) > 0);
+
227 
+
228  // Number of audio tracks must be 256 or less.
+
229  return (Read32LE(buffer + 40) <= 256);
+
230 }
+
231 
+
232 // Additional checks for a CAF container.
+
233 static bool CheckCaf(const uint8_t* buffer, int buffer_size) {
+
234  // Reference: Apple Core Audio Format Specification 1.0
+
235  // (https://developer.apple.com/library/mac/#documentation/MusicAudio/Reference/CAFSpec/CAF_spec/CAF_spec.html)
+
236  RCHECK(buffer_size >= 52);
+
237  BitReader reader(buffer, buffer_size);
+
238 
+
239  // mFileType should be "caff".
+
240  RCHECK(ReadBits(&reader, 32) == TAG('c', 'a', 'f', 'f'));
+
241 
+
242  // mFileVersion should be 1.
+
243  RCHECK(ReadBits(&reader, 16) == 1);
+
244 
+
245  // Skip mFileFlags.
+
246  reader.SkipBits(16);
+
247 
+
248  // First chunk should be Audio Description chunk, size 32l.
+
249  RCHECK(ReadBits(&reader, 32) == TAG('d', 'e', 's', 'c'));
+
250  RCHECK(ReadBits(&reader, 64) == 32);
+
251 
+
252  // CAFAudioFormat.mSampleRate(float64) not 0
+
253  RCHECK(ReadBits(&reader, 64) != 0);
+
254 
+
255  // CAFAudioFormat.mFormatID not 0
+
256  RCHECK(ReadBits(&reader, 32) != 0);
+
257 
+
258  // Skip CAFAudioFormat.mBytesPerPacket and mFramesPerPacket.
+
259  reader.SkipBits(32 + 32);
+
260 
+
261  // CAFAudioFormat.mChannelsPerFrame not 0
+
262  RCHECK(ReadBits(&reader, 32) != 0);
+
263  return true;
+
264 }
+
265 
+
266 static bool kSamplingFrequencyValid[16] = { false, true, true, true, false,
+
267  false, true, true, true, false,
+
268  false, true, true, true, false,
+
269  false };
+
270 static bool kExtAudioIdValid[8] = { true, false, true, false, false, false,
+
271  true, false };
+
272 
+
273 // Additional checks for a DTS container.
+
274 static bool CheckDts(const uint8_t* buffer, int buffer_size) {
+
275  // Reference: ETSI TS 102 114 V1.3.1 (2011-08)
+
276  // (http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.03.01_60/ts_102114v010301p.pdf)
+
277  RCHECK(buffer_size > 11);
+
278 
+
279  int offset = 0;
+
280  while (offset + 11 < buffer_size) {
+
281  BitReader reader(buffer + offset, 11);
+
282 
+
283  // Verify sync word.
+
284  RCHECK(ReadBits(&reader, 32) == 0x7ffe8001);
+
285 
+
286  // Skip frame type and deficit sample count.
+
287  reader.SkipBits(1 + 5);
+
288 
+
289  // Verify CRC present flag.
+
290  RCHECK(ReadBits(&reader, 1) == 0); // CPF must be 0.
+
291 
+
292  // Verify number of PCM sample blocks.
+
293  RCHECK(ReadBits(&reader, 7) >= 5);
+
294 
+
295  // Verify primary frame byte size.
+
296  int frame_size = ReadBits(&reader, 14);
+
297  RCHECK(frame_size >= 95);
+
298 
+
299  // Skip audio channel arrangement.
+
300  reader.SkipBits(6);
+
301 
+
302  // Verify core audio sampling frequency is an allowed value.
+
303  RCHECK(kSamplingFrequencyValid[ReadBits(&reader, 4)]);
+
304 
+
305  // Verify transmission bit rate is valid.
+
306  RCHECK(ReadBits(&reader, 5) <= 25);
+
307 
+
308  // Verify reserved field is 0.
+
309  RCHECK(ReadBits(&reader, 1) == 0);
+
310 
+
311  // Skip dynamic range flag, time stamp flag, auxiliary data flag, and HDCD.
+
312  reader.SkipBits(1 + 1 + 1 + 1);
+
313 
+
314  // Verify extension audio descriptor flag is an allowed value.
+
315  RCHECK(kExtAudioIdValid[ReadBits(&reader, 3)]);
+
316 
+
317  // Skip extended coding flag and audio sync word insertion flag.
+
318  reader.SkipBits(1 + 1);
+
319 
+
320  // Verify low frequency effects flag is an allowed value.
+
321  RCHECK(ReadBits(&reader, 2) != 3);
+
322 
+
323  offset += frame_size + 1;
+
324  }
+
325  return true;
+
326 }
+
327 
+
328 // Checks for a DV container.
+
329 static bool CheckDV(const uint8_t* buffer, int buffer_size) {
+
330  // Reference: SMPTE 314M (Annex A has differences with IEC 61834).
+
331  // (http://standards.smpte.org/content/978-1-61482-454-1/st-314-2005/SEC1.body.pdf)
+
332  RCHECK(buffer_size > 11);
+
333 
+
334  int offset = 0;
+
335  int current_sequence_number = -1;
+
336  int last_block_number[6];
+
337  while (offset + 11 < buffer_size) {
+
338  BitReader reader(buffer + offset, 11);
+
339 
+
340  // Decode ID data. Sections 5, 6, and 7 are reserved.
+
341  int section = ReadBits(&reader, 3);
+
342  RCHECK(section < 5);
+
343 
+
344  // Next bit must be 1.
+
345  RCHECK(ReadBits(&reader, 1) == 1);
+
346 
+
347  // Skip arbitrary bits.
+
348  reader.SkipBits(4);
+
349 
+
350  int sequence_number = ReadBits(&reader, 4);
+
351 
+
352  // Skip FSC.
+
353  reader.SkipBits(1);
+
354 
+
355  // Next 3 bits must be 1.
+
356  RCHECK(ReadBits(&reader, 3) == 7);
+
357 
+
358  int block_number = ReadBits(&reader, 8);
+
359 
+
360  if (section == 0) { // Header.
+
361  // Validate the reserved bits in the next 8 bytes.
+
362  reader.SkipBits(1);
+
363  RCHECK(ReadBits(&reader, 1) == 0);
+
364  RCHECK(ReadBits(&reader, 11) == 0x7ff);
+
365  reader.SkipBits(4);
+
366  RCHECK(ReadBits(&reader, 4) == 0xf);
+
367  reader.SkipBits(4);
+
368  RCHECK(ReadBits(&reader, 4) == 0xf);
+
369  reader.SkipBits(4);
+
370  RCHECK(ReadBits(&reader, 4) == 0xf);
+
371  reader.SkipBits(3);
+
372  RCHECK(ReadBits(&reader, 24) == 0xffffff);
+
373  current_sequence_number = sequence_number;
+
374  for (size_t i = 0; i < arraysize(last_block_number); ++i)
+
375  last_block_number[i] = -1;
+
376  } else {
+
377  // Sequence number must match (this will also fail if no header seen).
+
378  RCHECK(sequence_number == current_sequence_number);
+
379  // Block number should be increasing.
+
380  RCHECK(block_number > last_block_number[section]);
+
381  last_block_number[section] = block_number;
+
382  }
+
383 
+
384  // Move to next block.
+
385  offset += 80;
+
386  }
+
387  return true;
+
388 }
+
389 
+
390 
+
391 // Checks for a GSM container.
+
392 static bool CheckGsm(const uint8_t* buffer, int buffer_size) {
+
393  // Reference: ETSI EN 300 961 V8.1.1
+
394  // (http://www.etsi.org/deliver/etsi_en/300900_300999/300961/08.01.01_60/en_300961v080101p.pdf)
+
395  // also http://tools.ietf.org/html/rfc3551#page-24
+
396  // GSM files have a 33 byte block, only first 4 bits are fixed.
+
397  RCHECK(buffer_size >= 1024); // Need enough data to do a decent check.
+
398 
+
399  int offset = 0;
+
400  while (offset < buffer_size) {
+
401  // First 4 bits of each block are xD.
+
402  RCHECK((buffer[offset] & 0xf0) == 0xd0);
+
403  offset += 33;
+
404  }
+
405  return true;
+
406 }
+
407 
+
408 // Advance to the first set of |num_bits| bits that match |start_code|. |offset|
+
409 // is the current location in the buffer, and is updated. |bytes_needed| is the
+
410 // number of bytes that must remain in the buffer when |start_code| is found.
+
411 // Returns true if start_code found (and enough space in the buffer after it),
+
412 // false otherwise.
+
413 static bool AdvanceToStartCode(const uint8_t* buffer,
+
414  int buffer_size,
+
415  int* offset,
+
416  int bytes_needed,
+
417  int num_bits,
+
418  uint32_t start_code) {
+
419  DCHECK_GE(bytes_needed, 3);
+
420  DCHECK_LE(num_bits, 24); // Only supports up to 24 bits.
+
421 
+
422  // Create a mask to isolate |num_bits| bits, once shifted over.
+
423  uint32_t bits_to_shift = 24 - num_bits;
+
424  uint32_t mask = (1 << num_bits) - 1;
+
425  while (*offset + bytes_needed < buffer_size) {
+
426  uint32_t next = Read24(buffer + *offset);
+
427  if (((next >> bits_to_shift) & mask) == start_code)
+
428  return true;
+
429  ++(*offset);
+
430  }
+
431  return false;
+
432 }
+
433 
+
434 // Checks for an H.261 container.
+
435 static bool CheckH261(const uint8_t* buffer, int buffer_size) {
+
436  // Reference: ITU-T Recommendation H.261 (03/1993)
+
437  // (http://www.itu.int/rec/T-REC-H.261-199303-I/en)
+
438  RCHECK(buffer_size > 16);
+
439 
+
440  int offset = 0;
+
441  bool seen_start_code = false;
+
442  while (true) {
+
443  // Advance to picture_start_code, if there is one.
+
444  if (!AdvanceToStartCode(buffer, buffer_size, &offset, 4, 20, 0x10)) {
+
445  // No start code found (or off end of buffer), so success if
+
446  // there was at least one valid header.
+
447  return seen_start_code;
+
448  }
+
449 
+
450  // Now verify the block. AdvanceToStartCode() made sure that there are
+
451  // at least 4 bytes remaining in the buffer.
+
452  BitReader reader(buffer + offset, buffer_size - offset);
+
453  RCHECK(ReadBits(&reader, 20) == 0x10);
+
454 
+
455  // Skip the temporal reference and PTYPE.
+
456  reader.SkipBits(5 + 6);
+
457 
+
458  // Skip any extra insertion information. Since this is open-ended, if we run
+
459  // out of bits assume that the buffer is correctly formatted.
+
460  int extra = ReadBits(&reader, 1);
+
461  while (extra == 1) {
+
462  if (!reader.SkipBits(8))
+
463  return seen_start_code;
+
464  if (!reader.ReadBits(1, &extra))
+
465  return seen_start_code;
+
466  }
+
467 
+
468  // Next should be a Group of Blocks start code. Again, if we run out of
+
469  // bits, then assume that the buffer up to here is correct, and the buffer
+
470  // just happened to end in the middle of a header.
+
471  int next;
+
472  if (!reader.ReadBits(16, &next))
+
473  return seen_start_code;
+
474  RCHECK(next == 1);
+
475 
+
476  // Move to the next block.
+
477  seen_start_code = true;
+
478  offset += 4;
+
479  }
+
480 }
+
481 
+
482 // Checks for an H.263 container.
+
483 static bool CheckH263(const uint8_t* buffer, int buffer_size) {
+
484  // Reference: ITU-T Recommendation H.263 (01/2005)
+
485  // (http://www.itu.int/rec/T-REC-H.263-200501-I/en)
+
486  // header is PSC(22b) + TR(8b) + PTYPE(8+b).
+
487  RCHECK(buffer_size > 16);
+
488 
+
489  int offset = 0;
+
490  bool seen_start_code = false;
+
491  while (true) {
+
492  // Advance to picture_start_code, if there is one.
+
493  if (!AdvanceToStartCode(buffer, buffer_size, &offset, 9, 22, 0x20)) {
+
494  // No start code found (or off end of buffer), so success if
+
495  // there was at least one valid header.
+
496  return seen_start_code;
+
497  }
+
498 
+
499  // Now verify the block. AdvanceToStartCode() made sure that there are
+
500  // at least 9 bytes remaining in the buffer.
+
501  BitReader reader(buffer + offset, 9);
+
502  RCHECK(ReadBits(&reader, 22) == 0x20);
+
503 
+
504  // Skip the temporal reference.
+
505  reader.SkipBits(8);
+
506 
+
507  // Verify that the first 2 bits of PTYPE are 10b.
+
508  RCHECK(ReadBits(&reader, 2) == 2);
+
509 
+
510  // Skip the split screen indicator, document camera indicator, and full
+
511  // picture freeze release.
+
512  reader.SkipBits(1 + 1 + 1);
+
513 
+
514  // Verify Source Format.
+
515  int format = ReadBits(&reader, 3);
+
516  RCHECK(format != 0 && format != 6); // Forbidden or reserved.
+
517 
+
518  if (format == 7) {
+
519  // Verify full extended PTYPE.
+
520  int ufep = ReadBits(&reader, 3);
+
521  if (ufep == 1) {
+
522  // Verify the optional part of PLUSPTYPE.
+
523  format = ReadBits(&reader, 3);
+
524  RCHECK(format != 0 && format != 7); // Reserved.
+
525  reader.SkipBits(11);
+
526  // Next 4 bits should be b1000.
+
527  RCHECK(ReadBits(&reader, 4) == 8); // Not allowed.
+
528  } else {
+
529  RCHECK(ufep == 0); // Only 0 and 1 allowed.
+
530  }
+
531 
+
532  // Verify picture type code is not a reserved value.
+
533  int picture_type_code = ReadBits(&reader, 3);
+
534  RCHECK(picture_type_code != 6 && picture_type_code != 7); // Reserved.
+
535 
+
536  // Skip picture resampling mode, reduced resolution mode,
+
537  // and rounding type.
+
538  reader.SkipBits(1 + 1 + 1);
+
539 
+
540  // Next 3 bits should be b001.
+
541  RCHECK(ReadBits(&reader, 3) == 1); // Not allowed.
+
542  }
+
543 
+
544  // Move to the next block.
+
545  seen_start_code = true;
+
546  offset += 9;
+
547  }
+
548 }
+
549 
+
550 // Checks for an H.264 container.
+
551 static bool CheckH264(const uint8_t* buffer, int buffer_size) {
+
552  // Reference: ITU-T Recommendation H.264 (01/2012)
+
553  // (http://www.itu.int/rec/T-REC-H.264)
+
554  // Section B.1: Byte stream NAL unit syntax and semantics.
+
555  RCHECK(buffer_size > 4);
+
556 
+
557  int offset = 0;
+
558  int parameter_count = 0;
+
559  while (true) {
+
560  // Advance to picture_start_code, if there is one.
+
561  if (!AdvanceToStartCode(buffer, buffer_size, &offset, 4, 24, 1)) {
+
562  // No start code found (or off end of buffer), so success if
+
563  // there was at least one valid header.
+
564  return parameter_count > 0;
+
565  }
+
566 
+
567  // Now verify the block. AdvanceToStartCode() made sure that there are
+
568  // at least 4 bytes remaining in the buffer.
+
569  BitReader reader(buffer + offset, 4);
+
570  RCHECK(ReadBits(&reader, 24) == 1);
+
571 
+
572  // Verify forbidden_zero_bit.
+
573  RCHECK(ReadBits(&reader, 1) == 0);
+
574 
+
575  // Extract nal_ref_idc and nal_unit_type.
+
576  int nal_ref_idc = ReadBits(&reader, 2);
+
577  int nal_unit_type = ReadBits(&reader, 5);
+
578 
+
579  switch (nal_unit_type) {
+
580  case 5: // Coded slice of an IDR picture.
+
581  RCHECK(nal_ref_idc != 0);
+
582  break;
+
583  case 6: // Supplemental enhancement information (SEI).
+
584  case 9: // Access unit delimiter.
+
585  case 10: // End of sequence.
+
586  case 11: // End of stream.
+
587  case 12: // Filler data.
+
588  RCHECK(nal_ref_idc == 0);
+
589  break;
+
590  case 7: // Sequence parameter set.
+
591  case 8: // Picture parameter set.
+
592  ++parameter_count;
+
593  break;
+
594  }
+
595 
+
596  // Skip the current start_code_prefix and move to the next.
+
597  offset += 4;
+
598  }
+
599 }
+
600 
+
601 static const char kHlsSignature[] = "#EXTM3U";
+
602 static const char kHls1[] = "#EXT-X-STREAM-INF:";
+
603 static const char kHls2[] = "#EXT-X-TARGETDURATION:";
+
604 static const char kHls3[] = "#EXT-X-MEDIA-SEQUENCE:";
+
605 
+
606 // Additional checks for a HLS container.
+
607 static bool CheckHls(const uint8_t* buffer, int buffer_size) {
+
608  // HLS is simply a play list used for Apple HTTP Live Streaming.
+
609  // Reference: Apple HTTP Live Streaming Overview
+
610  // (http://goo.gl/MIwxj)
+
611 
+
612  if (StartsWith(buffer, buffer_size, kHlsSignature)) {
+
613  // Need to find "#EXT-X-STREAM-INF:", "#EXT-X-TARGETDURATION:", or
+
614  // "#EXT-X-MEDIA-SEQUENCE:" somewhere in the buffer. Other playlists (like
+
615  // WinAmp) only have additional lines with #EXTINF
+
616  // (http://en.wikipedia.org/wiki/M3U).
+
617  int offset = strlen(kHlsSignature);
+
618  while (offset < buffer_size) {
+
619  if (buffer[offset] == '#') {
+
620  if (StartsWith(buffer + offset, buffer_size - offset, kHls1) ||
+
621  StartsWith(buffer + offset, buffer_size - offset, kHls2) ||
+
622  StartsWith(buffer + offset, buffer_size - offset, kHls3)) {
+
623  return true;
+
624  }
+
625  }
+
626  ++offset;
+
627  }
+
628  }
+
629  return false;
+
630 }
+
631 
+
632 // Checks for a MJPEG stream.
+
633 static bool CheckMJpeg(const uint8_t* buffer, int buffer_size) {
+
634  // Reference: ISO/IEC 10918-1 : 1993(E), Annex B
+
635  // (http://www.w3.org/Graphics/JPEG/itu-t81.pdf)
+
636  RCHECK(buffer_size >= 16);
+
637 
+
638  int offset = 0;
+
639  int last_restart = -1;
+
640  int num_codes = 0;
+
641  while (offset + 5 < buffer_size) {
+
642  // Marker codes are always a two byte code with the first byte xFF.
+
643  RCHECK(buffer[offset] == 0xff);
+
644  uint8_t code = buffer[offset + 1];
+
645  RCHECK(code >= 0xc0 || code == 1);
+
646 
+
647  // Skip sequences of xFF.
+
648  if (code == 0xff) {
+
649  ++offset;
+
650  continue;
+
651  }
+
652 
+
653  // Success if the next marker code is EOI (end of image)
+
654  if (code == 0xd9)
+
655  return true;
+
656 
+
657  // Check remaining codes.
+
658  if (code == 0xd8 || code == 1) {
+
659  // SOI (start of image) / TEM (private use). No other data with header.
+
660  offset += 2;
+
661  } else if (code >= 0xd0 && code <= 0xd7) {
+
662  // RST (restart) codes must be in sequence. No other data with header.
+
663  int restart = code & 0x07;
+
664  if (last_restart >= 0)
+
665  RCHECK(restart == (last_restart + 1) % 8);
+
666  last_restart = restart;
+
667  offset += 2;
+
668  } else {
+
669  // All remaining marker codes are followed by a length of the header.
+
670  int length = Read16(buffer + offset + 2) + 2;
+
671 
+
672  // Special handling of SOS (start of scan) marker since the entropy
+
673  // coded data follows the SOS. Any xFF byte in the data block must be
+
674  // followed by x00 in the data.
+
675  if (code == 0xda) {
+
676  int number_components = buffer[offset + 4];
+
677  RCHECK(length == 8 + 2 * number_components);
+
678 
+
679  // Advance to the next marker.
+
680  offset += length;
+
681  while (offset + 2 < buffer_size) {
+
682  if (buffer[offset] == 0xff && buffer[offset + 1] != 0)
+
683  break;
+
684  ++offset;
+
685  }
+
686  } else {
+
687  // Skip over the marker data for the other marker codes.
+
688  offset += length;
+
689  }
+
690  }
+
691  ++num_codes;
+
692  }
+
693  return (num_codes > 1);
+
694 }
+
695 
+
696 enum Mpeg2StartCodes {
+
697  PROGRAM_END_CODE = 0xb9,
+
698  PACK_START_CODE = 0xba
+
699 };
+
700 
+
701 // Checks for a MPEG2 Program Stream.
+
702 static bool CheckMpeg2ProgramStream(const uint8_t* buffer, int buffer_size) {
+
703  // Reference: ISO/IEC 13818-1 : 2000 (E) / ITU-T Rec. H.222.0 (2000 E).
+
704  RCHECK(buffer_size > 14);
+
705 
+
706  int offset = 0;
+
707  while (offset + 14 < buffer_size) {
+
708  BitReader reader(buffer + offset, 14);
+
709 
+
710  // Must start with pack_start_code.
+
711  RCHECK(ReadBits(&reader, 24) == 1);
+
712  RCHECK(ReadBits(&reader, 8) == PACK_START_CODE);
+
713 
+
714  // Determine MPEG version (MPEG1 has b0010, while MPEG2 has b01).
+
715  int mpeg_version = ReadBits(&reader, 2);
+
716  if (mpeg_version == 0) {
+
717  // MPEG1, 10 byte header
+
718  // Validate rest of version code
+
719  RCHECK(ReadBits(&reader, 2) == 2);
+
720  } else {
+
721  RCHECK(mpeg_version == 1);
+
722  }
+
723 
+
724  // Skip system_clock_reference_base [32..30].
+
725  reader.SkipBits(3);
+
726 
+
727  // Verify marker bit.
+
728  RCHECK(ReadBits(&reader, 1) == 1);
+
729 
+
730  // Skip system_clock_reference_base [29..15].
+
731  reader.SkipBits(15);
+
732 
+
733  // Verify next marker bit.
+
734  RCHECK(ReadBits(&reader, 1) == 1);
+
735 
+
736  // Skip system_clock_reference_base [14..0].
+
737  reader.SkipBits(15);
+
738 
+
739  // Verify next marker bit.
+
740  RCHECK(ReadBits(&reader, 1) == 1);
+
741 
+
742  if (mpeg_version == 0) {
+
743  // Verify second marker bit.
+
744  RCHECK(ReadBits(&reader, 1) == 1);
+
745 
+
746  // Skip mux_rate.
+
747  reader.SkipBits(22);
+
748 
+
749  // Verify next marker bit.
+
750  RCHECK(ReadBits(&reader, 1) == 1);
+
751 
+
752  // Update offset to be after this header.
+
753  offset += 12;
+
754  } else {
+
755  // Must be MPEG2.
+
756  // Skip program_mux_rate.
+
757  reader.SkipBits(22);
+
758 
+
759  // Verify pair of marker bits.
+
760  RCHECK(ReadBits(&reader, 2) == 3);
+
761 
+
762  // Skip reserved.
+
763  reader.SkipBits(5);
+
764 
+
765  // Update offset to be after this header.
+
766  int pack_stuffing_length = ReadBits(&reader, 3);
+
767  offset += 14 + pack_stuffing_length;
+
768  }
+
769 
+
770  // Check for system headers and PES_packets.
+
771  while (offset + 6 < buffer_size && Read24(buffer + offset) == 1) {
+
772  // Next 8 bits determine stream type.
+
773  int stream_id = buffer[offset + 3];
+
774 
+
775  // Some stream types are reserved and shouldn't occur.
+
776  if (mpeg_version == 0)
+
777  RCHECK(stream_id != 0xbc && stream_id < 0xf0);
+
778  else
+
779  RCHECK(stream_id != 0xfc && stream_id != 0xfd && stream_id != 0xfe);
+
780 
+
781  // Some stream types are used for pack headers.
+
782  if (stream_id == PACK_START_CODE) // back to outer loop.
+
783  break;
+
784  if (stream_id == PROGRAM_END_CODE) // end of stream.
+
785  return true;
+
786 
+
787  int pes_length = Read16(buffer + offset + 4);
+
788  RCHECK(pes_length > 0);
+
789  offset = offset + 6 + pes_length;
+
790  }
+
791  }
+
792  // Success as we are off the end of the buffer and liked everything
+
793  // in the buffer.
+
794  return true;
+
795 }
+
796 
+
797 const uint8_t kMpeg2SyncWord = 0x47;
+
798 
+
799 // Checks for a MPEG2 Transport Stream.
+
800 static bool CheckMpeg2TransportStream(const uint8_t* buffer, int buffer_size) {
+
801  // Spec: ISO/IEC 13818-1 : 2000 (E) / ITU-T Rec. H.222.0 (2000 E).
+
802  // Normal packet size is 188 bytes. However, some systems add various error
+
803  // correction data at the end, resulting in packet of length 192/204/208
+
804  // (https://en.wikipedia.org/wiki/MPEG_transport_stream). Determine the
+
805  // length with the first packet.
+
806  RCHECK(buffer_size >= 250); // Want more than 1 packet to check.
+
807 
+
808  int offset = 0;
+
809  int packet_length = -1;
+
810  while (buffer[offset] != kMpeg2SyncWord && offset < 20) {
+
811  // Skip over any header in the first 20 bytes.
+
812  ++offset;
+
813  }
+
814 
+
815  while (offset + 6 < buffer_size) {
+
816  BitReader reader(buffer + offset, 6);
+
817 
+
818  // Must start with sync byte.
+
819  RCHECK(ReadBits(&reader, 8) == kMpeg2SyncWord);
+
820 
+
821  // Skip transport_error_indicator, payload_unit_start_indicator, and
+
822  // transport_priority.
+
823  reader.SkipBits(1 + 1 + 1);
+
824 
+
825  // Verify the pid is not a reserved value.
+
826  int pid = ReadBits(&reader, 13);
+
827  RCHECK(pid < 3 || pid > 15);
+
828 
+
829  // Skip transport_scrambling_control.
+
830  reader.SkipBits(2);
+
831 
+
832  // Adaptation_field_control can not be 0.
+
833  int adaptation_field_control = ReadBits(&reader, 2);
+
834  RCHECK(adaptation_field_control != 0);
+
835 
+
836  // If there is an adaptation_field, verify it.
+
837  if (adaptation_field_control >= 2) {
+
838  // Skip continuity_counter.
+
839  reader.SkipBits(4);
+
840 
+
841  // Get adaptation_field_length and verify it.
+
842  int adaptation_field_length = ReadBits(&reader, 8);
+
843  if (adaptation_field_control == 2)
+
844  RCHECK(adaptation_field_length == 183);
+
845  else
+
846  RCHECK(adaptation_field_length <= 182);
+
847  }
+
848 
+
849  // Attempt to determine the packet length on the first packet.
+
850  if (packet_length < 0) {
+
851  if (buffer[offset + 188] == kMpeg2SyncWord)
+
852  packet_length = 188;
+
853  else if (buffer[offset + 192] == kMpeg2SyncWord)
+
854  packet_length = 192;
+
855  else if (buffer[offset + 204] == kMpeg2SyncWord)
+
856  packet_length = 204;
+
857  else
+
858  packet_length = 208;
+
859  }
+
860  offset += packet_length;
+
861  }
+
862  return true;
+
863 }
+
864 
+
865 enum Mpeg4StartCodes {
+
866  VISUAL_OBJECT_SEQUENCE_START_CODE = 0xb0,
+
867  VISUAL_OBJECT_SEQUENCE_END_CODE = 0xb1,
+
868  VISUAL_OBJECT_START_CODE = 0xb5,
+
869  VOP_START_CODE = 0xb6
+
870 };
+
871 
+
872 // Checks for a raw MPEG4 bitstream container.
+
873 static bool CheckMpeg4BitStream(const uint8_t* buffer, int buffer_size) {
+
874  // Defined in ISO/IEC 14496-2:2001.
+
875  // However, no length ... simply scan for start code values.
+
876  // Note tags are very similar to H.264.
+
877  RCHECK(buffer_size > 4);
+
878 
+
879  int offset = 0;
+
880  int sequence_start_count = 0;
+
881  int sequence_end_count = 0;
+
882  int visual_object_count = 0;
+
883  int vop_count = 0;
+
884  while (true) {
+
885  // Advance to start_code, if there is one.
+
886  if (!AdvanceToStartCode(buffer, buffer_size, &offset, 6, 24, 1)) {
+
887  // Not a complete sequence in memory, so return true if we've seen a
+
888  // visual_object_sequence_start_code and a visual_object_start_code.
+
889  return (sequence_start_count > 0 && visual_object_count > 0);
+
890  }
+
891 
+
892  // Now verify the block. AdvanceToStartCode() made sure that there are
+
893  // at least 6 bytes remaining in the buffer.
+
894  BitReader reader(buffer + offset, 6);
+
895  RCHECK(ReadBits(&reader, 24) == 1);
+
896 
+
897  int start_code = ReadBits(&reader, 8);
+
898  RCHECK(start_code < 0x30 || start_code > 0xaf); // 30..AF and
+
899  RCHECK(start_code < 0xb7 || start_code > 0xb9); // B7..B9 reserved
+
900 
+
901  switch (start_code) {
+
902  case VISUAL_OBJECT_SEQUENCE_START_CODE: {
+
903  ++sequence_start_count;
+
904  // Verify profile in not one of many reserved values.
+
905  int profile = ReadBits(&reader, 8);
+
906  RCHECK(profile > 0);
+
907  RCHECK(profile < 0x04 || profile > 0x10);
+
908  RCHECK(profile < 0x13 || profile > 0x20);
+
909  RCHECK(profile < 0x23 || profile > 0x31);
+
910  RCHECK(profile < 0x35 || profile > 0x41);
+
911  RCHECK(profile < 0x43 || profile > 0x60);
+
912  RCHECK(profile < 0x65 || profile > 0x70);
+
913  RCHECK(profile < 0x73 || profile > 0x80);
+
914  RCHECK(profile < 0x83 || profile > 0x90);
+
915  RCHECK(profile < 0x95 || profile > 0xa0);
+
916  RCHECK(profile < 0xa4 || profile > 0xb0);
+
917  RCHECK(profile < 0xb5 || profile > 0xc0);
+
918  RCHECK(profile < 0xc3 || profile > 0xd0);
+
919  RCHECK(profile < 0xe4);
+
920  break;
+
921  }
+
922 
+
923  case VISUAL_OBJECT_SEQUENCE_END_CODE:
+
924  RCHECK(++sequence_end_count == sequence_start_count);
+
925  break;
+
926 
+
927  case VISUAL_OBJECT_START_CODE: {
+
928  ++visual_object_count;
+
929  if (ReadBits(&reader, 1) == 1) {
+
930  int visual_object_verid = ReadBits(&reader, 4);
+
931  RCHECK(visual_object_verid > 0 && visual_object_verid < 3);
+
932  RCHECK(ReadBits(&reader, 3) != 0);
+
933  }
+
934  int visual_object_type = ReadBits(&reader, 4);
+
935  RCHECK(visual_object_type > 0 && visual_object_type < 6);
+
936  break;
+
937  }
+
938 
+
939  case VOP_START_CODE:
+
940  RCHECK(++vop_count <= visual_object_count);
+
941  break;
+
942  }
+
943  // Skip this block.
+
944  offset += 6;
+
945  }
+
946 }
+
947 
+
948 // Additional checks for a MOV/QuickTime/MPEG4 container.
+
949 static bool CheckMov(const uint8_t* buffer, int buffer_size) {
+
950  // Reference: ISO/IEC 14496-12:2005(E).
+
951  // (http://standards.iso.org/ittf/PubliclyAvailableStandards/c061988_ISO_IEC_14496-12_2012.zip)
+
952  RCHECK(buffer_size > 8);
+
953 
+
954  int offset = 0;
+
955  while (offset + 8 < buffer_size) {
+
956  int atomsize = Read32(buffer + offset);
+
957  uint32_t atomtype = Read32(buffer + offset + 4);
+
958  // Only need to check for ones that are valid at the top level.
+
959  switch (atomtype) {
+
960  case TAG('f','t','y','p'):
+
961  case TAG('p','d','i','n'):
+
962  case TAG('m','o','o','v'):
+
963  case TAG('m','o','o','f'):
+
964  case TAG('m','f','r','a'):
+
965  case TAG('m','d','a','t'):
+
966  case TAG('f','r','e','e'):
+
967  case TAG('s','k','i','p'):
+
968  case TAG('m','e','t','a'):
+
969  case TAG('m','e','c','o'):
+
970  case TAG('s','t','y','p'):
+
971  case TAG('s','i','d','x'):
+
972  case TAG('s','s','i','x'):
+
973  case TAG('p','r','f','t'):
+
974  case TAG('b','l','o','c'):
+
975  break;
+
976  default:
+
977  return false;
+
978  }
+
979  if (atomsize == 1) {
+
980  // Indicates that the length is the next 64bits.
+
981  if (offset + 16 > buffer_size)
+
982  break;
+
983  if (Read32(buffer + offset + 8) != 0)
+
984  break; // Offset is way past buffer size.
+
985  atomsize = Read32(buffer + offset + 12);
+
986  }
+
987  if (atomsize <= 0)
+
988  break; // Indicates the last atom or length too big.
+
989  offset += atomsize;
+
990  }
+
991  return true;
+
992 }
+
993 
+
994 enum MPEGVersion {
+
995  VERSION_25 = 0,
+
996  VERSION_RESERVED,
+
997  VERSION_2,
+
998  VERSION_1
+
999 };
+
1000 enum MPEGLayer {
+
1001  L_RESERVED = 0,
+
1002  LAYER_3,
+
1003  LAYER_2,
+
1004  LAYER_1
+
1005 };
+
1006 
+
1007 static int kSampleRateTable[4][4] = { { 11025, 12000, 8000, 0 }, // v2.5
+
1008  { 0, 0, 0, 0 }, // not used
+
1009  { 22050, 24000, 16000, 0 }, // v2
+
1010  { 44100, 48000, 32000, 0 } // v1
+
1011 };
+
1012 
+
1013 static int kBitRateTableV1L1[16] = { 0, 32, 64, 96, 128, 160, 192, 224, 256,
+
1014  288, 320, 352, 384, 416, 448, 0 };
+
1015 static int kBitRateTableV1L2[16] = { 0, 32, 48, 56, 64, 80, 96, 112, 128, 160,
+
1016  192, 224, 256, 320, 384, 0 };
+
1017 static int kBitRateTableV1L3[16] = { 0, 32, 40, 48, 56, 64, 80, 96, 112, 128,
+
1018  160, 192, 224, 256, 320, 0 };
+
1019 static int kBitRateTableV2L1[16] = { 0, 32, 48, 56, 64, 80, 96, 112, 128, 144,
+
1020  160, 176, 192, 224, 256, 0 };
+
1021 static int kBitRateTableV2L23[16] = { 0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96,
+
1022  112, 128, 144, 160, 0 };
+
1023 
+
1024 static bool ValidMpegAudioFrameHeader(const uint8_t* header,
+
1025  int header_size,
+
1026  int* framesize) {
+
1027  // Reference: http://mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm.
+
1028  DCHECK_GE(header_size, 4);
+
1029  *framesize = 0;
+
1030  BitReader reader(header, 4); // Header can only be 4 bytes long.
+
1031 
+
1032  // Verify frame sync (11 bits) are all set.
+
1033  RCHECK(ReadBits(&reader, 11) == 0x7ff);
+
1034 
+
1035  // Verify MPEG audio version id.
+
1036  int version = ReadBits(&reader, 2);
+
1037  RCHECK(version != 1); // Reserved.
+
1038 
+
1039  // Verify layer.
+
1040  int layer = ReadBits(&reader, 2);
+
1041  RCHECK(layer != 0);
+
1042 
+
1043  // Skip protection bit.
+
1044  reader.SkipBits(1);
+
1045 
+
1046  // Verify bitrate index.
+
1047  int bitrate_index = ReadBits(&reader, 4);
+
1048  RCHECK(bitrate_index != 0xf);
+
1049 
+
1050  // Verify sampling rate frequency index.
+
1051  int sampling_index = ReadBits(&reader, 2);
+
1052  RCHECK(sampling_index != 3);
+
1053 
+
1054  // Get padding bit.
+
1055  int padding = ReadBits(&reader, 1);
+
1056 
+
1057  // Frame size:
+
1058  // For Layer I files = (12 * BitRate / SampleRate + Padding) * 4
+
1059  // For others = 144 * BitRate / SampleRate + Padding
+
1060  // Unfortunately, BitRate and SampleRate are coded.
+
1061  int sampling_rate = kSampleRateTable[version][sampling_index];
+
1062  int bitrate;
+
1063  if (version == VERSION_1) {
+
1064  if (layer == LAYER_1)
+
1065  bitrate = kBitRateTableV1L1[bitrate_index];
+
1066  else if (layer == LAYER_2)
+
1067  bitrate = kBitRateTableV1L2[bitrate_index];
+
1068  else
+
1069  bitrate = kBitRateTableV1L3[bitrate_index];
+
1070  } else {
+
1071  if (layer == LAYER_1)
+
1072  bitrate = kBitRateTableV2L1[bitrate_index];
+
1073  else
+
1074  bitrate = kBitRateTableV2L23[bitrate_index];
+
1075  }
+
1076  if (layer == LAYER_1)
+
1077  *framesize = ((12000 * bitrate) / sampling_rate + padding) * 4;
+
1078  else
+
1079  *framesize = (144000 * bitrate) / sampling_rate + padding;
+
1080  return (bitrate > 0 && sampling_rate > 0);
+
1081 }
+
1082 
+
1083 // Extract a size encoded the MP3 way.
+
1084 static int GetMp3HeaderSize(const uint8_t* buffer, int buffer_size) {
+
1085  DCHECK_GE(buffer_size, 9);
+
1086  int size = ((buffer[6] & 0x7f) << 21) + ((buffer[7] & 0x7f) << 14) +
+
1087  ((buffer[8] & 0x7f) << 7) + (buffer[9] & 0x7f) + 10;
+
1088  if (buffer[5] & 0x10) // Footer added?
+
1089  size += 10;
+
1090  return size;
+
1091 }
+
1092 
+
1093 // Additional checks for a MP3 container.
+
1094 static bool CheckMp3(const uint8_t* buffer, int buffer_size, bool seenHeader) {
+
1095  RCHECK(buffer_size >= 10); // Must be enough to read the initial header.
+
1096 
+
1097  int framesize;
+
1098  int numSeen = 0;
+
1099  int offset = 0;
+
1100  if (seenHeader) {
+
1101  offset = GetMp3HeaderSize(buffer, buffer_size);
+
1102  } else {
+
1103  // Skip over leading 0's.
+
1104  while (offset < buffer_size && buffer[offset] == 0)
+
1105  ++offset;
+
1106  }
+
1107 
+
1108  while (offset + 3 < buffer_size) {
+
1109  RCHECK(ValidMpegAudioFrameHeader(
+
1110  buffer + offset, buffer_size - offset, &framesize));
+
1111 
+
1112  // Have we seen enough valid headers?
+
1113  if (++numSeen > 10)
+
1114  return true;
+
1115  offset += framesize;
+
1116  }
+
1117  // Off the end of the buffer, return success if a few valid headers seen.
+
1118  return numSeen > 2;
+
1119 }
+
1120 
+
1121 // Check that the next characters in |buffer| represent a number. The format
+
1122 // accepted is optional whitespace followed by 1 or more digits. |max_digits|
+
1123 // specifies the maximum number of digits to process. Returns true if a valid
+
1124 // number is found, false otherwise.
+
1125 static bool VerifyNumber(const uint8_t* buffer,
+
1126  int buffer_size,
+
1127  int* offset,
+
1128  int max_digits) {
+
1129  RCHECK(*offset < buffer_size);
+
1130 
+
1131  // Skip over any leading space.
+
1132  while (isspace(buffer[*offset])) {
+
1133  ++(*offset);
+
1134  RCHECK(*offset < buffer_size);
+
1135  }
+
1136 
+
1137  // Need to process up to max_digits digits.
+
1138  int numSeen = 0;
+
1139  while (--max_digits >= 0 && isdigit(buffer[*offset])) {
+
1140  ++numSeen;
+
1141  ++(*offset);
+
1142  if (*offset >= buffer_size)
+
1143  return true; // Out of space but seen a digit.
+
1144  }
+
1145 
+
1146  // Success if at least one digit seen.
+
1147  return (numSeen > 0);
+
1148 }
+
1149 
+
1150 // Check that the next character in |buffer| is one of |c1| or |c2|. |c2| is
+
1151 // optional. Returns true if there is a match, false if no match or out of
+
1152 // space.
+
1153 static inline bool VerifyCharacters(const uint8_t* buffer,
+
1154  int buffer_size,
+
1155  int* offset,
+
1156  char c1,
+
1157  char c2) {
+
1158  RCHECK(*offset < buffer_size);
+
1159  char c = static_cast<char>(buffer[(*offset)++]);
+
1160  return (c == c1 || (c == c2 && c2 != 0));
+
1161 }
+
1162 
+
1163 // Checks for a SRT container.
+
1164 static bool CheckSrt(const uint8_t* buffer, int buffer_size) {
+
1165  // Reference: http://en.wikipedia.org/wiki/SubRip
+
1166  RCHECK(buffer_size > 20);
+
1167 
+
1168  // First line should just be the subtitle sequence number.
+
1169  int offset = StartsWith(buffer, buffer_size, UTF8_BYTE_ORDER_MARK) ? 3 : 0;
+
1170  RCHECK(VerifyNumber(buffer, buffer_size, &offset, 100));
+
1171  RCHECK(VerifyCharacters(buffer, buffer_size, &offset, '\n', '\r'));
+
1172 
+
1173  // Skip any additional \n\r.
+
1174  while (VerifyCharacters(buffer, buffer_size, &offset, '\n', '\r')) {}
+
1175  --offset; // Since VerifyCharacters() gobbled up the next non-CR/LF.
+
1176 
+
1177  // Second line should look like the following:
+
1178  // 00:00:10,500 --> 00:00:13,000
+
1179  // Units separator can be , or .
+
1180  RCHECK(VerifyNumber(buffer, buffer_size, &offset, 100));
+
1181  RCHECK(VerifyCharacters(buffer, buffer_size, &offset, ':', 0));
+
1182  RCHECK(VerifyNumber(buffer, buffer_size, &offset, 2));
+
1183  RCHECK(VerifyCharacters(buffer, buffer_size, &offset, ':', 0));
+
1184  RCHECK(VerifyNumber(buffer, buffer_size, &offset, 2));
+
1185  RCHECK(VerifyCharacters(buffer, buffer_size, &offset, ',', '.'));
+
1186  RCHECK(VerifyNumber(buffer, buffer_size, &offset, 3));
+
1187  RCHECK(VerifyCharacters(buffer, buffer_size, &offset, ' ', 0));
+
1188  RCHECK(VerifyCharacters(buffer, buffer_size, &offset, '-', 0));
+
1189  RCHECK(VerifyCharacters(buffer, buffer_size, &offset, '-', 0));
+
1190  RCHECK(VerifyCharacters(buffer, buffer_size, &offset, '>', 0));
+
1191  RCHECK(VerifyCharacters(buffer, buffer_size, &offset, ' ', 0));
+
1192  RCHECK(VerifyNumber(buffer, buffer_size, &offset, 100));
+
1193  RCHECK(VerifyCharacters(buffer, buffer_size, &offset, ':', 0));
+
1194  RCHECK(VerifyNumber(buffer, buffer_size, &offset, 2));
+
1195  RCHECK(VerifyCharacters(buffer, buffer_size, &offset, ':', 0));
+
1196  RCHECK(VerifyNumber(buffer, buffer_size, &offset, 2));
+
1197  RCHECK(VerifyCharacters(buffer, buffer_size, &offset, ',', '.'));
+
1198  RCHECK(VerifyNumber(buffer, buffer_size, &offset, 3));
+
1199  return true;
+
1200 }
+
1201 
+
1202 // Read a Matroska Element Id.
+
1203 static int GetElementId(BitReader* reader) {
+
1204  // Element ID is coded with the leading zero bits (max 3) determining size.
+
1205  // If it is an invalid encoding or the end of the buffer is reached,
+
1206  // return -1 as a tag that won't be expected.
+
1207  if (reader->bits_available() >= 8) {
+
1208  int num_bits_to_read = 0;
+
1209  static int prefix[] = { 0x80, 0x4000, 0x200000, 0x10000000 };
+
1210  for (int i = 0; i < 4; ++i) {
+
1211  num_bits_to_read += 7;
+
1212  if (ReadBits(reader, 1) == 1) {
+
1213  if (reader->bits_available() < num_bits_to_read)
+
1214  break;
+
1215  // prefix[] adds back the bits read individually.
+
1216  return ReadBits(reader, num_bits_to_read) | prefix[i];
+
1217  }
+
1218  }
+
1219  }
+
1220  // Invalid encoding, return something not expected.
+
1221  return -1;
+
1222 }
+
1223 
+
1224 // Read a Matroska Unsigned Integer (VINT).
+
1225 static uint64_t GetVint(BitReader* reader) {
+
1226  // Values are coded with the leading zero bits (max 7) determining size.
+
1227  // If it is an invalid coding or the end of the buffer is reached,
+
1228  // return something that will go off the end of the buffer.
+
1229  if (reader->bits_available() >= 8) {
+
1230  int num_bits_to_read = 0;
+
1231  for (int i = 0; i < 8; ++i) {
+
1232  num_bits_to_read += 7;
+
1233  if (ReadBits(reader, 1) == 1) {
+
1234  if (reader->bits_available() < num_bits_to_read)
+
1235  break;
+
1236  return ReadBits(reader, num_bits_to_read);
+
1237  }
+
1238  }
+
1239  }
+
1240  // Incorrect format (more than 7 leading 0's) or off the end of the buffer.
+
1241  // Since the return value is used as a byte size, return a value that will
+
1242  // cause a failure when used.
+
1243  return (reader->bits_available() / 8) + 2;
+
1244 }
+
1245 
+
1246 // Additional checks for a WEBM container.
+
1247 static bool CheckWebm(const uint8_t* buffer, int buffer_size) {
+
1248  // Reference: http://www.matroska.org/technical/specs/index.html
+
1249  RCHECK(buffer_size > 12);
+
1250 
+
1251  BitReader reader(buffer, buffer_size);
+
1252 
+
1253  // Verify starting Element Id.
+
1254  RCHECK(GetElementId(&reader) == 0x1a45dfa3);
+
1255 
+
1256  // Get the header size, and ensure there are enough bits to check.
+
1257  int header_size = GetVint(&reader);
+
1258  RCHECK(reader.bits_available() / 8 >= header_size);
+
1259 
+
1260  // Loop through the header.
+
1261  while (reader.bits_available() > 0) {
+
1262  int tag = GetElementId(&reader);
+
1263  int tagsize = GetVint(&reader);
+
1264  switch (tag) {
+
1265  case 0x4286: // EBMLVersion
+
1266  case 0x42f7: // EBMLReadVersion
+
1267  case 0x42f2: // EBMLMaxIdLength
+
1268  case 0x42f3: // EBMLMaxSizeLength
+
1269  case 0x4287: // DocTypeVersion
+
1270  case 0x4285: // DocTypeReadVersion
+
1271  case 0xec: // void
+
1272  case 0xbf: // CRC32
+
1273  RCHECK(reader.SkipBits(tagsize * 8));
+
1274  break;
+
1275 
+
1276  case 0x4282: // EBMLDocType
+
1277  // Need to see "webm" or "matroska" next.
+
1278  switch (ReadBits(&reader, 32)) {
+
1279  case TAG('w', 'e', 'b', 'm') :
+
1280  return true;
+
1281  case TAG('m', 'a', 't', 'r') :
+
1282  return (ReadBits(&reader, 32) == TAG('o', 's', 'k', 'a'));
+
1283  }
+
1284  return false;
+
1285 
+
1286  default: // Unrecognized tag
+
1287  return false;
+
1288  }
+
1289  }
+
1290  return false;
+
1291 }
+
1292 
+
1293 enum VC1StartCodes {
+
1294  VC1_FRAME_START_CODE = 0x0d,
+
1295  VC1_ENTRY_POINT_START_CODE = 0x0e,
+
1296  VC1_SEQUENCE_START_CODE = 0x0f
+
1297 };
+
1298 
+
1299 // Checks for a VC1 bitstream container.
+
1300 static bool CheckVC1(const uint8_t* buffer, int buffer_size) {
+
1301  // Reference: SMPTE 421M
+
1302  // (http://standards.smpte.org/content/978-1-61482-555-5/st-421-2006/SEC1.body.pdf)
+
1303  // However, no length ... simply scan for start code values.
+
1304  // Expect to see SEQ | [ [ ENTRY ] PIC* ]*
+
1305  // Note tags are very similar to H.264.
+
1306 
+
1307  RCHECK(buffer_size >= 24);
+
1308 
+
1309  // First check for Bitstream Metadata Serialization (Annex L)
+
1310  if (buffer[0] == 0xc5 &&
+
1311  Read32(buffer + 4) == 0x04 &&
+
1312  Read32(buffer + 20) == 0x0c) {
+
1313  // Verify settings in STRUCT_C and STRUCT_A
+
1314  BitReader reader(buffer + 8, 12);
+
1315 
+
1316  int profile = ReadBits(&reader, 4);
+
1317  if (profile == 0 || profile == 4) { // simple or main
+
1318  // Skip FRMRTQ_POSTPROC, BITRTQ_POSTPROC, and LOOPFILTER.
+
1319  reader.SkipBits(3 + 5 + 1);
+
1320 
+
1321  // Next bit must be 0.
+
1322  RCHECK(ReadBits(&reader, 1) == 0);
+
1323 
+
1324  // Skip MULTIRES.
+
1325  reader.SkipBits(1);
+
1326 
+
1327  // Next bit must be 1.
+
1328  RCHECK(ReadBits(&reader, 1) == 1);
+
1329 
+
1330  // Skip FASTUVMC, EXTENDED_MV, DQUANT, and VSTRANSFORM.
+
1331  reader.SkipBits(1 + 1 + 2 + 1);
+
1332 
+
1333  // Next bit must be 0.
+
1334  RCHECK(ReadBits(&reader, 1) == 0);
+
1335 
+
1336  // Skip OVERLAP, SYNCMARKER, RANGERED, MAXBFRAMES, QUANTIZER, and
+
1337  // FINTERPFLAG.
+
1338  reader.SkipBits(1 + 1 + 1 + 3 + 2 + 1);
+
1339 
+
1340  // Next bit must be 1.
+
1341  RCHECK(ReadBits(&reader, 1) == 1);
+
1342 
+
1343  } else {
+
1344  RCHECK(profile == 12); // Other profile values not allowed.
+
1345  RCHECK(ReadBits(&reader, 28) == 0);
+
1346  }
+
1347 
+
1348  // Now check HORIZ_SIZE and VERT_SIZE, which must be 8192 or less.
+
1349  RCHECK(ReadBits(&reader, 32) <= 8192);
+
1350  RCHECK(ReadBits(&reader, 32) <= 8192);
+
1351  return true;
+
1352  }
+
1353 
+
1354  // Buffer isn't Bitstream Metadata, so scan for start codes.
+
1355  int offset = 0;
+
1356  int sequence_start_code = 0;
+
1357  int frame_start_code = 0;
+
1358  while (true) {
+
1359  // Advance to start_code, if there is one.
+
1360  if (!AdvanceToStartCode(buffer, buffer_size, &offset, 5, 24, 1)) {
+
1361  // Not a complete sequence in memory, so return true if we've seen a
+
1362  // sequence start and a frame start (not checking entry points since
+
1363  // they only occur in advanced profiles).
+
1364  return (sequence_start_code > 0 && frame_start_code > 0);
+
1365  }
+
1366 
+
1367  // Now verify the block. AdvanceToStartCode() made sure that there are
+
1368  // at least 5 bytes remaining in the buffer.
+
1369  BitReader reader(buffer + offset, 5);
+
1370  RCHECK(ReadBits(&reader, 24) == 1);
+
1371 
+
1372  // Keep track of the number of certain types received.
+
1373  switch (ReadBits(&reader, 8)) {
+
1374  case VC1_SEQUENCE_START_CODE: {
+
1375  ++sequence_start_code;
+
1376  switch (ReadBits(&reader, 2)) {
+
1377  case 0: // simple
+
1378  case 1: // main
+
1379  RCHECK(ReadBits(&reader, 2) == 0);
+
1380  break;
+
1381  case 2: // complex
+
1382  return false;
+
1383  case 3: // advanced
+
1384  RCHECK(ReadBits(&reader, 3) <= 4); // Verify level = 0..4
+
1385  RCHECK(ReadBits(&reader, 2) == 1); // Verify colordiff_format = 1
+
1386  break;
+
1387  }
+
1388  break;
+
1389  }
+
1390 
+
1391  case VC1_ENTRY_POINT_START_CODE:
+
1392  // No fields in entry data to check. However, it must occur after
+
1393  // sequence header.
+
1394  RCHECK(sequence_start_code > 0);
+
1395  break;
+
1396 
+
1397  case VC1_FRAME_START_CODE:
+
1398  ++frame_start_code;
+
1399  break;
+
1400  }
+
1401  offset += 5;
+
1402  }
+
1403 }
+
1404 
+
1405 // For some formats the signature is a bunch of characters. They are defined
+
1406 // below. Note that the first 4 characters of the string may be used as a TAG
+
1407 // in LookupContainerByFirst4. For signatures that contain embedded \0, use
+
1408 // uint8_t[].
+
1409 static const char kAmrSignature[] = "#!AMR";
+
1410 static const uint8_t kAsfSignature[] = {0x30, 0x26, 0xb2, 0x75, 0x8e, 0x66,
+
1411  0xcf, 0x11, 0xa6, 0xd9, 0x00, 0xaa,
+
1412  0x00, 0x62, 0xce, 0x6c};
+
1413 static const char kAssSignature[] = "[Script Info]";
+
1414 static const char kAssBomSignature[] = UTF8_BYTE_ORDER_MARK "[Script Info]";
+
1415 static const uint8_t kWtvSignature[] = {0xb7, 0xd8, 0x00, 0x20, 0x37, 0x49,
+
1416  0xda, 0x11, 0xa6, 0x4e, 0x00, 0x07,
+
1417  0xe9, 0x5e, 0xad, 0x8d};
+
1418 
+
1419 // Attempt to determine the container type from the buffer provided. This is
+
1420 // a simple pass, that uses the first 4 bytes of the buffer as an index to get
+
1421 // a rough idea of the container format.
+
1422 static MediaContainerName LookupContainerByFirst4(const uint8_t* buffer,
+
1423  int buffer_size) {
+
1424  // Minimum size that the code expects to exist without checking size.
+
1425  if (buffer_size < 12)
+
1426  return CONTAINER_UNKNOWN;
+
1427 
+
1428  uint32_t first4 = Read32(buffer);
+
1429  switch (first4) {
+
1430  case 0x1a45dfa3:
+
1431  if (CheckWebm(buffer, buffer_size))
+
1432  return CONTAINER_WEBM;
+
1433  break;
+
1434 
+
1435  case 0x3026b275:
+
1436  if (StartsWith(buffer,
+
1437  buffer_size,
+
1438  kAsfSignature,
+
1439  sizeof(kAsfSignature))) {
+
1440  return CONTAINER_ASF;
+
1441  }
+
1442  break;
+
1443 
+
1444  case TAG('#','!','A','M'):
+
1445  if (StartsWith(buffer, buffer_size, kAmrSignature))
+
1446  return CONTAINER_AMR;
+
1447  break;
+
1448 
+
1449  case TAG('#','E','X','T'):
+
1450  if (CheckHls(buffer, buffer_size))
+
1451  return CONTAINER_HLS;
+
1452  break;
+
1453 
+
1454  case TAG('.','R','M','F'):
+
1455  if (buffer[4] == 0 && buffer[5] == 0)
+
1456  return CONTAINER_RM;
+
1457  break;
+
1458 
+
1459  case TAG('.','r','a','\xfd'):
+
1460  return CONTAINER_RM;
+
1461 
+
1462  case TAG('B','I','K','b'):
+
1463  case TAG('B','I','K','d'):
+
1464  case TAG('B','I','K','f'):
+
1465  case TAG('B','I','K','g'):
+
1466  case TAG('B','I','K','h'):
+
1467  case TAG('B','I','K','i'):
+
1468  if (CheckBink(buffer, buffer_size))
+
1469  return CONTAINER_BINK;
+
1470  break;
+
1471 
+
1472  case TAG('c','a','f','f'):
+
1473  if (CheckCaf(buffer, buffer_size))
+
1474  return CONTAINER_CAF;
+
1475  break;
+
1476 
+
1477  case TAG('D','E','X','A'):
+
1478  if (buffer_size > 15 &&
+
1479  Read16(buffer + 11) <= 2048 &&
+
1480  Read16(buffer + 13) <= 2048) {
+
1481  return CONTAINER_DXA;
+
1482  }
+
1483  break;
+
1484 
+
1485  case TAG('D','T','S','H'):
+
1486  if (Read32(buffer + 4) == TAG('D','H','D','R'))
+
1487  return CONTAINER_DTSHD;
+
1488  break;
+
1489 
+
1490  case 0x64a30100:
+
1491  case 0x64a30200:
+
1492  case 0x64a30300:
+
1493  case 0x64a30400:
+
1494  case 0x0001a364:
+
1495  case 0x0002a364:
+
1496  case 0x0003a364:
+
1497  if (Read32(buffer + 4) != 0 && Read32(buffer + 8) != 0)
+
1498  return CONTAINER_IRCAM;
+
1499  break;
+
1500 
+
1501  case TAG('f','L','a','C'):
+
1502  return CONTAINER_FLAC;
+
1503 
+
1504  case TAG('F','L','V',0):
+
1505  case TAG('F','L','V',1):
+
1506  case TAG('F','L','V',2):
+
1507  case TAG('F','L','V',3):
+
1508  case TAG('F','L','V',4):
+
1509  if (buffer[5] == 0 && Read32(buffer + 5) > 8)
+
1510  return CONTAINER_FLV;
+
1511  break;
+
1512 
+
1513  case TAG('F','O','R','M'):
+
1514  switch (Read32(buffer + 8)) {
+
1515  case TAG('A','I','F','F'):
+
1516  case TAG('A','I','F','C'):
+
1517  return CONTAINER_AIFF;
+
1518  }
+
1519  break;
+
1520 
+
1521  case TAG('M','A','C',' '):
+
1522  return CONTAINER_APE;
+
1523 
+
1524  case TAG('O','N','2',' '):
+
1525  if (Read32(buffer + 8) == TAG('O','N','2','f'))
+
1526  return CONTAINER_AVI;
+
1527  break;
+
1528 
+
1529  case TAG('O','g','g','S'):
+
1530  if (buffer[5] <= 7)
+
1531  return CONTAINER_OGG;
+
1532  break;
+
1533 
+
1534  case TAG('R','F','6','4'):
+
1535  if (buffer_size > 16 && Read32(buffer + 12) == TAG('d','s','6','4'))
+
1536  return CONTAINER_WAV;
+
1537  break;
+
1538 
+
1539  case TAG('R','I','F','F'):
+
1540  switch (Read32(buffer + 8)) {
+
1541  case TAG('A','V','I',' '):
+
1542  case TAG('A','V','I','X'):
+
1543  case TAG('A','V','I','\x19'):
+
1544  case TAG('A','M','V',' '):
+
1545  return CONTAINER_AVI;
+
1546  case TAG('W','A','V','E'):
+
1547  return CONTAINER_WAV;
+
1548  }
+
1549  break;
+
1550 
+
1551  case TAG('[','S','c','r'):
+
1552  if (StartsWith(buffer, buffer_size, kAssSignature))
+
1553  return CONTAINER_ASS;
+
1554  break;
+
1555 
+
1556  case TAG('\xef','\xbb','\xbf','['):
+
1557  if (StartsWith(buffer, buffer_size, kAssBomSignature))
+
1558  return CONTAINER_ASS;
+
1559  break;
+
1560 
+
1561  case 0x7ffe8001:
+
1562  case 0xfe7f0180:
+
1563  case 0x1fffe800:
+
1564  case 0xff1f00e8:
+
1565  if (CheckDts(buffer, buffer_size))
+
1566  return CONTAINER_DTS;
+
1567  break;
+
1568 
+
1569  case 0xb7d80020:
+
1570  if (StartsWith(buffer,
+
1571  buffer_size,
+
1572  kWtvSignature,
+
1573  sizeof(kWtvSignature))) {
+
1574  return CONTAINER_WTV;
+
1575  }
+
1576  break;
+
1577  case 0x000001ba:
+
1578  return CONTAINER_MPEG2PS;
+
1579  }
+
1580 
+
1581  // Now try a few different ones that look at something other
+
1582  // than the first 4 bytes.
+
1583  uint32_t first3 = first4 & 0xffffff00;
+
1584  switch (first3) {
+
1585  case TAG('C','W','S',0):
+
1586  case TAG('F','W','S',0):
+
1587  return CONTAINER_SWF;
+
1588 
+
1589  case TAG('I','D','3',0):
+
1590  if (CheckMp3(buffer, buffer_size, true))
+
1591  return CONTAINER_MP3;
+
1592  break;
+
1593  }
+
1594 
+
1595  // Maybe the first 2 characters are something we can use.
+
1596  uint32_t first2 = Read16(buffer);
+
1597  switch (first2) {
+
1598  case kAc3SyncWord:
+
1599  if (CheckAc3(buffer, buffer_size))
+
1600  return CONTAINER_AC3;
+
1601  if (CheckEac3(buffer, buffer_size))
+
1602  return CONTAINER_EAC3;
+
1603  break;
+
1604 
+
1605  case 0xfff0:
+
1606  case 0xfff1:
+
1607  case 0xfff8:
+
1608  case 0xfff9:
+
1609  if (CheckAac(buffer, buffer_size))
+
1610  return CONTAINER_AAC;
+
1611  break;
+
1612  }
+
1613 
+
1614  // Check if the file is in MP3 format without the header.
+
1615  if (CheckMp3(buffer, buffer_size, false))
+
1616  return CONTAINER_MP3;
+
1617 
+
1618  return CONTAINER_UNKNOWN;
+
1619 }
+
1620 
+
1621 // Attempt to determine the container name from the buffer provided.
+
1622 MediaContainerName DetermineContainer(const uint8_t* buffer, int buffer_size) {
+
1623  DCHECK(buffer);
+
1624 
+
1625  // Since MOV/QuickTime/MPEG4 streams are common, check for them first.
+
1626  if (CheckMov(buffer, buffer_size))
+
1627  return CONTAINER_MOV;
+
1628 
+
1629  // Next attempt the simple checks, that typically look at just the
+
1630  // first few bytes of the file.
+
1631  MediaContainerName result = LookupContainerByFirst4(buffer, buffer_size);
+
1632  if (result != CONTAINER_UNKNOWN)
+
1633  return result;
+
1634 
+
1635  // Additional checks that may scan a portion of the buffer.
+
1636  if (CheckMpeg2ProgramStream(buffer, buffer_size))
+
1637  return CONTAINER_MPEG2PS;
+
1638  if (CheckMpeg2TransportStream(buffer, buffer_size))
+
1639  return CONTAINER_MPEG2TS;
+
1640  if (CheckMJpeg(buffer, buffer_size))
+
1641  return CONTAINER_MJPEG;
+
1642  if (CheckDV(buffer, buffer_size))
+
1643  return CONTAINER_DV;
+
1644  if (CheckH261(buffer, buffer_size))
+
1645  return CONTAINER_H261;
+
1646  if (CheckH263(buffer, buffer_size))
+
1647  return CONTAINER_H263;
+
1648  if (CheckH264(buffer, buffer_size))
+
1649  return CONTAINER_H264;
+
1650  if (CheckMpeg4BitStream(buffer, buffer_size))
+
1651  return CONTAINER_MPEG4BS;
+
1652  if (CheckVC1(buffer, buffer_size))
+
1653  return CONTAINER_VC1;
+
1654  if (CheckSrt(buffer, buffer_size))
+
1655  return CONTAINER_SRT;
+
1656  if (CheckGsm(buffer, buffer_size))
+
1657  return CONTAINER_GSM;
+
1658 
+
1659  // AC3/EAC3 might not start at the beginning of the stream,
+
1660  // so scan for a start code.
+
1661  int offset = 1; // No need to start at byte 0 due to First4 check.
+
1662  if (AdvanceToStartCode(buffer, buffer_size, &offset, 4, 16, kAc3SyncWord)) {
+
1663  if (CheckAc3(buffer + offset, buffer_size - offset))
+
1664  return CONTAINER_AC3;
+
1665  if (CheckEac3(buffer + offset, buffer_size - offset))
+
1666  return CONTAINER_EAC3;
+
1667  }
+
1668 
+
1669  return CONTAINER_UNKNOWN;
+
1670 }
+
1671 
+
1672 } // namespace media
+
1673 } // namespace edash_packager
+
+ + + + diff --git a/sdk/da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html b/sdk/da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html new file mode 100644 index 0000000000..2cca5d97d9 --- /dev/null +++ b/sdk/da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html @@ -0,0 +1,188 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::SoundMediaHeader Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::SoundMediaHeader Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::SoundMediaHeader:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + +

+Public Attributes

+uint16_t balance
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 352 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::SoundMediaHeader::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1209 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.png b/sdk/da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.png new file mode 100644 index 0000000000..c60a04ac74 Binary files /dev/null and b/sdk/da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.png differ diff --git a/sdk/da/dc3/status_8cc_source.html b/sdk/da/dc3/status_8cc_source.html new file mode 100644 index 0000000000..fae791fee6 --- /dev/null +++ b/sdk/da/dc3/status_8cc_source.html @@ -0,0 +1,175 @@ + + + + + + +DASH Media Packaging SDK: media/base/status.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
status.cc
+
+
+
1 // Copyright 2014 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/base/status.h"
+
8 
+
9 #include "packager/base/strings/stringprintf.h"
+
10 
+
11 namespace edash_packager {
+
12 namespace media {
+
13 
+
14 namespace error {
+
15 namespace {
+
16 std::string ErrorCodeToString(Code error_code) {
+
17  switch (error_code) {
+
18  case OK:
+
19  return "OK";
+
20  case UNKNOWN:
+
21  return "UNKNOWN";
+
22  case CANCELLED:
+
23  return "CANCELLED";
+
24  case INVALID_ARGUMENT:
+
25  return "INVALID_ARGUMENT";
+
26  case UNIMPLEMENTED:
+
27  return "UNIMPLEMENTED";
+
28  case FILE_FAILURE:
+
29  return "FILE_FAILURE";
+
30  case END_OF_STREAM:
+
31  return "END_OF_STREAM";
+
32  case HTTP_FAILURE:
+
33  return "HTTP_FAILURE";
+
34  case PARSER_FAILURE:
+
35  return "PARSER_FAILURE";
+
36  case MUXER_FAILURE:
+
37  return "MUXER_FAILURE";
+
38  case FRAGMENT_FINALIZED:
+
39  return "FRAGMENT_FINALIZED";
+
40  case SERVER_ERROR:
+
41  return "SERVER_ERROR";
+
42  case INTERNAL_ERROR:
+
43  return "INTERNAL_ERROR";
+
44  case STOPPED:
+
45  return "STOPPED";
+
46  case TIME_OUT:
+
47  return "TIME_OUT";
+
48  default:
+
49  NOTIMPLEMENTED() << "Unknown Status Code: " << error_code;
+
50  return "UNKNOWN_STATUS";
+
51  }
+
52 }
+
53 } // namespace
+
54 } // namespace error
+
55 
+
56 const Status& Status::OK = Status(error::OK, "");
+
57 const Status& Status::UNKNOWN = Status(error::UNKNOWN, "");
+
58 
+
59 std::string Status::ToString() const {
+
60  if (error_code_ == error::OK)
+
61  return "OK";
+
62 
+
63  return base::StringPrintf("%d (%s): %s",
+
64  error_code_,
+
65  error::ErrorCodeToString(error_code_).c_str(),
+
66  error_message_.c_str());
+
67 }
+
68 
+
69 std::ostream& operator<<(std::ostream& os, const Status& x) {
+
70  os << x.ToString();
+
71  return os;
+
72 }
+
73 
+
74 } // namespace media
+
75 } // namespace edash_packager
+ +
std::string ToString() const
Definition: status.cc:59
+
+ + + + diff --git a/sdk/da/dcb/es__descriptor_8h_source.html b/sdk/da/dcb/es__descriptor_8h_source.html new file mode 100644 index 0000000000..1533680daf --- /dev/null +++ b/sdk/da/dcb/es__descriptor_8h_source.html @@ -0,0 +1,180 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/es_descriptor.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
es_descriptor.h
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_FORMATS_MP4_ES_DESCRIPTOR_H_
+
6 #define MEDIA_FORMATS_MP4_ES_DESCRIPTOR_H_
+
7 
+
8 #include <stddef.h>
+
9 #include <stdint.h>
+
10 
+
11 #include <vector>
+
12 
+
13 namespace edash_packager {
+
14 namespace media {
+
15 
+
16 class BitReader;
+
17 class BufferWriter;
+
18 
+
19 namespace mp4 {
+
20 
+
21 // The following values are extracted from ISO 14496 Part 1 Table 5 -
+
22 // objectTypeIndication Values. Only values currently in use are included.
+
23 enum ObjectType {
+
24  kForbidden = 0,
+
25  kISO_14496_3 = 0x40, // MPEG4 AAC
+
26  kISO_13818_7_AAC_LC = 0x67, // MPEG2 AAC-LC
+
27  kEAC3 = 0xa6 // Dolby Digital Plus
+
28 };
+
29 
+
33 class ESDescriptor {
+
34  public:
+
35  ESDescriptor();
+
36  ~ESDescriptor();
+
37 
+
38  bool Parse(const std::vector<uint8_t>& data);
+
39  void Write(BufferWriter* writer) const;
+
40  size_t ComputeSize() const;
+
41 
+
42  uint16_t esid() const { return esid_; }
+
43  void set_esid(uint16_t esid) { esid_ = esid; }
+
44 
+
45  ObjectType object_type() const { return object_type_; }
+
46  void set_object_type(ObjectType object_type) { object_type_ = object_type; }
+
47 
+
48  const std::vector<uint8_t>& decoder_specific_info() const {
+
49  return decoder_specific_info_;
+
50  }
+
51  void set_decoder_specific_info(
+
52  const std::vector<uint8_t>& decoder_specific_info) {
+
53  decoder_specific_info_ = decoder_specific_info;
+
54  }
+
55 
+
57  bool IsAAC() const {
+
58  return object_type_ == kISO_14496_3 || object_type_ == kISO_13818_7_AAC_LC;
+
59  }
+
60 
+
61  private:
+
62  enum Tag {
+
63  kESDescrTag = 0x03,
+
64  kDecoderConfigDescrTag = 0x04,
+
65  kDecoderSpecificInfoTag = 0x05,
+
66  kSLConfigTag = 0x06,
+
67  };
+
68 
+
69  bool ParseDecoderConfigDescriptor(BitReader* reader);
+
70  bool ParseDecoderSpecificInfo(BitReader* reader);
+
71 
+
72  uint16_t esid_; // Elementary Stream ID.
+
73  ObjectType object_type_;
+
74  std::vector<uint8_t> decoder_specific_info_;
+
75 };
+
76 
+
77 } // namespace mp4
+
78 
+
79 } // namespace media
+
80 } // namespace edash_packager
+
81 
+
82 #endif // MEDIA_FORMATS_MP4_ES_DESCRIPTOR_H_
+
A class to read bit streams.
Definition: bit_reader.h:17
+ + + +
+ + + + diff --git a/sdk/da/dd1/fragmenter_8h_source.html b/sdk/da/dd1/fragmenter_8h_source.html new file mode 100644 index 0000000000..64eb997e72 --- /dev/null +++ b/sdk/da/dd1/fragmenter_8h_source.html @@ -0,0 +1,206 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/fragmenter.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
fragmenter.h
+
+
+
1 // Copyright 2014 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_FORMATS_MP4_FRAGMENTER_H_
+
8 #define MEDIA_FORMATS_MP4_FRAGMENTER_H_
+
9 
+
10 #include <vector>
+
11 
+
12 #include "packager/base/memory/ref_counted.h"
+
13 #include "packager/base/memory/scoped_ptr.h"
+
14 #include "packager/media/base/status.h"
+
15 
+
16 namespace edash_packager {
+
17 namespace media {
+
18 
+
19 class BufferWriter;
+
20 class MediaSample;
+
21 
+
22 namespace mp4 {
+
23 
+
24 struct SegmentReference;
+
25 struct TrackFragment;
+
26 
+
29 class Fragmenter {
+
30  public:
+ +
33 
+
34  virtual ~Fragmenter();
+
35 
+
39  virtual Status AddSample(scoped_refptr<MediaSample> sample);
+
40 
+
45  virtual Status InitializeFragment(int64_t first_sample_dts);
+
46 
+
48  virtual void FinalizeFragment();
+
49 
+ +
52 
+
53  uint64_t fragment_duration() const { return fragment_duration_; }
+
54  uint64_t first_sap_time() const { return first_sap_time_; }
+
55  uint64_t earliest_presentation_time() const {
+
56  return earliest_presentation_time_;
+
57  }
+
58  bool fragment_initialized() const { return fragment_initialized_; }
+
59  bool fragment_finalized() const { return fragment_finalized_; }
+
60  BufferWriter* data() { return data_.get(); }
+
61  BufferWriter* aux_data() { return aux_data_.get(); }
+
62 
+
63  protected:
+
64  TrackFragment* traf() { return traf_; }
+
65 
+
69  template <typename T>
+
70  bool OptimizeSampleEntries(std::vector<T>* entries, T* default_value);
+
71 
+
72  private:
+
73  // Check if the current fragment starts with SAP.
+
74  bool StartsWithSAP();
+
75 
+
76  TrackFragment* traf_;
+
77  bool fragment_initialized_;
+
78  bool fragment_finalized_;
+
79  uint64_t fragment_duration_;
+
80  int64_t presentation_start_time_;
+
81  int64_t earliest_presentation_time_;
+
82  int64_t first_sap_time_;
+
83  scoped_ptr<BufferWriter> data_;
+
84  scoped_ptr<BufferWriter> aux_data_;
+
85 
+
86  DISALLOW_COPY_AND_ASSIGN(Fragmenter);
+
87 };
+
88 
+
89 template <typename T>
+
90 bool Fragmenter::OptimizeSampleEntries(std::vector<T>* entries,
+
91  T* default_value) {
+
92  DCHECK(entries);
+
93  DCHECK(default_value);
+
94  DCHECK(!entries->empty());
+
95 
+
96  typename std::vector<T>::const_iterator it = entries->begin();
+
97  T value = *it;
+
98  for (; it < entries->end(); ++it)
+
99  if (value != *it)
+
100  return false;
+
101 
+
102  // Clear |entries| if it contains only one value.
+
103  entries->clear();
+
104  *default_value = value;
+
105  return true;
+
106 }
+
107 
+
108 } // namespace mp4
+
109 } // namespace media
+
110 } // namespace edash_packager
+
111 
+
112 #endif // MEDIA_FORMATS_MP4_FRAGMENTER_H_
+ + +
void GenerateSegmentReference(SegmentReference *reference)
Fill reference with current fragment information.
Definition: fragmenter.cc:118
+ +
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/sdk/da/de2/mock__mpd__builder_8cc_source.html b/sdk/da/de2/mock__mpd__builder_8cc_source.html new file mode 100644 index 0000000000..ea65210753 --- /dev/null +++ b/sdk/da/de2/mock__mpd__builder_8cc_source.html @@ -0,0 +1,131 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/mock_mpd_builder.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mock_mpd_builder.cc
+
+
+
1 #include "packager/mpd/base/mock_mpd_builder.h"
+
2 
+
3 #include "packager/mpd/base/media_info.pb.h"
+
4 
+
5 namespace edash_packager {
+
6 namespace {
+
7 const char kEmptyLang[] = "";
+
8 const MpdOptions kDefaultMpdOptions;
+
9 const MpdBuilder::MpdType kDefaultMpdType = MpdBuilder::kStatic;
+
10 } // namespace
+
11 
+
12 // Doesn't matter what values get passed to the super class' constructor.
+
13 // All methods used for testing should be mocked.
+
14 MockMpdBuilder::MockMpdBuilder(MpdType type)
+
15  : MpdBuilder(type, kDefaultMpdOptions) {}
+
16 MockMpdBuilder::~MockMpdBuilder() {}
+
17 
+
18 MockAdaptationSet::MockAdaptationSet(uint32_t adaptation_set_id)
+
19  : AdaptationSet(adaptation_set_id,
+
20  kEmptyLang,
+
21  kDefaultMpdOptions,
+
22  kDefaultMpdType,
+
23  &sequence_counter_) {}
+
24 MockAdaptationSet::~MockAdaptationSet() {}
+
25 
+
26 MockRepresentation::MockRepresentation(uint32_t representation_id)
+
27  : Representation(MediaInfo(),
+
28  kDefaultMpdOptions,
+
29  representation_id,
+
30  scoped_ptr<RepresentationStateChangeListener>()) {}
+
31 MockRepresentation::~MockRepresentation() {}
+
32 
+
33 } // namespace edash_packager
+
+ + + + diff --git a/sdk/da/de4/classedash__packager_1_1media_1_1AudioTimestampHelper.html b/sdk/da/de4/classedash__packager_1_1media_1_1AudioTimestampHelper.html new file mode 100644 index 0000000000..4d34d8c1e7 --- /dev/null +++ b/sdk/da/de4/classedash__packager_1_1media_1_1AudioTimestampHelper.html @@ -0,0 +1,139 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::AudioTimestampHelper Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::AudioTimestampHelper Class Reference
+
+
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

AudioTimestampHelper (uint32_t timescale, uint32_t samples_per_second)
 
+void SetBaseTimestamp (int64_t base_timestamp)
 
+int64_t base_timestamp () const
 
+int64_t frame_count () const
 
+void AddFrames (int64_t frame_count)
 
+int64_t GetTimestamp () const
 
+int64_t GetFrameDuration (int64_t frame_count) const
 
+int64_t GetFramesToTarget (int64_t target) const
 
+

Detailed Description

+
+

Definition at line 30 of file audio_timestamp_helper.h.

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/da/dfe/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset.html b/sdk/da/dfe/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset.html new file mode 100644 index 0000000000..159344aac2 --- /dev/null +++ b/sdk/da/dfe/structedash__packager_1_1media_1_1mp4_1_1CompositionOffset.html @@ -0,0 +1,120 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::CompositionOffset Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::CompositionOffset Struct Reference
+
+
+ + + + + + +

+Public Attributes

+uint32_t sample_count
 
+int64_t sample_offset
 
+

Detailed Description

+
+

Definition at line 253 of file box_definitions.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/sdk/db/d01/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator.html b/sdk/db/d01/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator.html new file mode 100644 index 0000000000..be0a3c6530 --- /dev/null +++ b/sdk/db/d01/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator.html @@ -0,0 +1,185 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::SyncSampleIterator Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::SyncSampleIterator Class Reference
+
+
+ +

#include <sync_sample_iterator.h>

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

+Public Member Functions

SyncSampleIterator (const SyncSample &sync_sample)
 Create a new SyncSampleIterator from sync sample box.
 
bool AdvanceSample ()
 
bool IsSyncSample () const
 
bool IsSyncSample (uint32_t sample) const
 
+

Detailed Description

+

Sync sample box (STSS) iterator used to iterate through the entries within the compressed table.

+ +

Definition at line 23 of file sync_sample_iterator.h.

+

Member Function Documentation

+ +
+
+ + + + + + + +
bool edash_packager::media::mp4::SyncSampleIterator::AdvanceSample ()
+
+

Advance to the next sample.

+
Returns
true if not past the last sample, false otherwise.
+ +

Definition at line 22 of file sync_sample_iterator.cc.

+ +
+
+ +
+
+ + + + + + + +
bool edash_packager::media::mp4::SyncSampleIterator::IsSyncSample () const
+
+
Returns
true if the current sample is a sync sample, false otherwise.
+ +

Definition at line 29 of file sync_sample_iterator.cc.

+ +
+
+ +
+
+ + + + + + + + +
bool edash_packager::media::mp4::SyncSampleIterator::IsSyncSample (uint32_t sample) const
+
+
Returns
true if sample (1-based) is a sync sample, false otherwise.
+ +

Definition at line 36 of file sync_sample_iterator.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/db/d09/namespaceedash__packager.html b/sdk/db/d09/namespaceedash__packager.html new file mode 100644 index 0000000000..7478c47f2e --- /dev/null +++ b/sdk/db/d09/namespaceedash__packager.html @@ -0,0 +1,558 @@ + + + + + + +DASH Media Packaging SDK: edash_packager Namespace Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
edash_packager Namespace Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

struct  Element
 
struct  ContentProtectionElement
 
class  DashIopMpdNotifier
 
class  MockMpdBuilder
 
class  MockAdaptationSet
 
class  MockRepresentation
 
class  MockMpdNotifier
 
class  MpdBuilder
 This class generates DASH MPDs (Media Presentation Descriptions). More...
 
class  AdaptationSet
 
class  RepresentationStateChangeListener
 
class  Representation
 
class  MpdNotifier
 
struct  MpdOptions
 Defines Mpd Options. More...
 
struct  SegmentInfo
 
class  SimpleMpdNotifier
 
class  MpdNotifierFactory
 
class  MpdWriter
 
+ + + + + +

+Enumerations

enum  DashProfile { kUnknownProfile, +kOnDemandProfile, +kLiveProfile + }
 
enum  ContentType { kContentTypeUnknown, +kContentTypeVideo, +kContentTypeAudio, +kContentTypeText + }
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

bool ValidateFixedCryptoFlags ()
 
bool ValidateFlag (const char *flag_name, const std::string &flag_value, bool condition, bool optional, const char *label)
 
void PrintError (const std::string &error_message)
 
bool ValidateWidevineCryptoFlags ()
 
std::string LanguageToShortestForm (const std::string &language)
 
std::string LanguageToISO_639_2 (const std::string &language)
 
bool WriteMpdToFile (const std::string &output_path, MpdBuilder *mpd_builder)
 
ContentType GetContentType (const MediaInfo &media_info)
 
+std::string Uint8VectorToBase64 (const std::vector< uint8_t > &input)
 Converts uint8 vector into base64 encoded string.
 
+bool HasVODOnlyFields (const MediaInfo &media_info)
 
+bool HasLiveOnlyFields (const MediaInfo &media_info)
 
+void RemoveDuplicateAttributes (ContentProtectionElement *content_protection_element)
 
+std::string GetCodecs (const MediaInfo &media_info)
 
+std::string SecondsToXmlDuration (double seconds)
 
+bool GetDurationAttribute (xmlNodePtr node, float *duration)
 
+bool MoreThanOneTrue (bool b1, bool b2, bool b3)
 
+bool AtLeastOneTrue (bool b1, bool b2, bool b3)
 
+bool OnlyOneTrue (bool b1, bool b2, bool b3)
 
bool HexToUUID (const std::string &data, std::string *uuid_format)
 
+void UpdateContentProtectionPsshHelper (const std::string &drm_uuid, const std::string &pssh, std::list< ContentProtectionElement > *content_protection_elements)
 
void AddContentProtectionElements (const MediaInfo &media_info, Representation *parent)
 
void AddContentProtectionElements (const MediaInfo &media_info, AdaptationSet *parent)
 
+ + + + + + + +

+Variables

+const char kEncryptedMp4Scheme [] = "urn:mpeg:dash:mp4protection:2011"
 
+const char kPsshElementName [] = "cenc:pssh"
 
+const char kEncryptedMp4Value [] = "cenc"
 
+

Detailed Description

+

NOTE: Inclusion of this module will cause curl_global_init and curl_global_cleanup to be called at static initialization / deinitialization time.

+

All the methods that are virtual are virtual for mocking. NOTE: Inclusion of this module will cause xmlInitParser and xmlCleanupParser to be called at static initialization / deinitialization time.

+

This file contains helper functions and enums for MpdNotifier implementations.

+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void edash_packager::AddContentProtectionElements (const MediaInfo & media_info,
Representation * parent 
)
+
+

Adds <ContentProtection> elements specified by media_info to adaptation_set. Note that this will add the elements as direct chlidren of AdaptationSet.

+
Parameters
+ + + +
media_infomay or may not have protected_content field.
adaptation_setis the parent element that owns the ContentProtection elements.
+
+
+ +

Definition at line 253 of file mpd_utils.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void edash_packager::AddContentProtectionElements (const MediaInfo & media_info,
AdaptationSet * parent 
)
+
+

Adds <ContentProtection> elements specified by media_info to representation.

+
Parameters
+ + + +
media_infomay or may not have protected_content field.
representationis the parent element that owns the ContentProtection elements.
+
+
+ +

Definition at line 258 of file mpd_utils.cc.

+ +
+
+ +
+
+ + + + + + + + +
ContentType edash_packager::GetContentType (const MediaInfo & media_info)
+
+

Determines the content type of |media_info|.

+
Parameters
+ + +
media_infois the information about the media.
+
+
+
Returns
content type of the media_info.
+ +

Definition at line 51 of file mpd_notifier_util.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::HexToUUID (const std::string & data,
std::string * uuid_format 
)
+
+

Converts hex data to UUID format. Hex data must be size 16.

+
Parameters
+ + + +
datainput hex data.
uuid_formatis the UUID format of the input.
+
+
+ +

Definition at line 97 of file mpd_utils.cc.

+ +
+
+ +
+
+ + + + + + + + +
std::string edash_packager::LanguageToISO_639_2 (const std::string & language)
+
+

Convert a language tag to a 3-letter ISO-639-2 code, as required by the ISO BMFF spec. The input is assumed to be a valid ISO-639-2 or ISO-639-1 language code. Regions and variants are not supported.

+ +

Definition at line 96 of file language_utils.cc.

+ +
+
+ +
+
+ + + + + + + + +
std::string edash_packager::LanguageToShortestForm (const std::string & language)
+
+

Convert a language tag to its shortest form, as required by RFC 5646 indicated in the MPD spec. Assumes the input is a valid ISO-639-2 or ISO-639-1 language tag. Regions and variants are not supported.

+ +

Definition at line 77 of file language_utils.cc.

+ +
+
+ +
+
+ + + + + + + + +
void edash_packager::PrintError (const std::string & error_message)
+
+

Format and print error message.

+
Parameters
+ + +
error_messagespecifies the error message.
+
+
+ +

Definition at line 36 of file validate_flag.cc.

+ +
+
+ +
+
+ + + + + + + +
bool edash_packager::ValidateFixedCryptoFlags ()
+
+

Validate fixed encryption/decryption flags.

+
Returns
true on success, false otherwise.
+ +

Definition at line 29 of file fixed_key_encryption_flags.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool edash_packager::ValidateFlag (const char * flag_name,
const std::string & flag_value,
bool condition,
bool optional,
const char * label 
)
+
+

Validate a flag against the given condition.

+
Parameters
+ + + + + +
flag_nameis the name of the flag.
flag_valueis the value of the flag.
condition,optionaldetermines how the flag should be validated. If condition is true and optional is false, then this flag is required
labelspecifies the label associated with the condition. It is used to generate the error message on validation failure.
+
+
+
Returns
true on success, false otherwise.
+ +

Definition at line 17 of file validate_flag.cc.

+ +
+
+ +
+
+ + + + + + + +
bool edash_packager::ValidateWidevineCryptoFlags ()
+
+

Validate widevine encryption/decryption flags.

+
Returns
true on success, false otherwise.
+ +

Definition at line 55 of file widevine_encryption_flags.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::WriteMpdToFile (const std::string & output_path,
MpdBuilder * mpd_builder 
)
+
+

Outputs MPD to output_path.

+
Parameters
+ + + +
output_pathis the path to the MPD output location.
mpd_builderis the MPD builder instance.
+
+
+ +

Definition at line 20 of file mpd_notifier_util.cc.

+ +
+
+
+ + + + diff --git a/sdk/db/d15/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample-members.html b/sdk/db/d15/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample-members.html new file mode 100644 index 0000000000..0b178d34f3 --- /dev/null +++ b/sdk/db/d15/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::DecodingTimeToSample Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::DecodingTimeToSample)edash_packager::media::mp4::DecodingTimeToSamplevirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::DecodingTimeToSamplevirtual
decoding_time (defined in edash_packager::media::mp4::DecodingTimeToSample)edash_packager::media::mp4::DecodingTimeToSample
DecodingTimeToSample() (defined in edash_packager::media::mp4::DecodingTimeToSample)edash_packager::media::mp4::DecodingTimeToSample
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::DecodingTimeToSamplevirtual
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~DecodingTimeToSample() (defined in edash_packager::media::mp4::DecodingTimeToSample)edash_packager::media::mp4::DecodingTimeToSamplevirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
+ + + + diff --git a/sdk/db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html b/sdk/db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html new file mode 100644 index 0000000000..0c4ab5850e --- /dev/null +++ b/sdk/db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html @@ -0,0 +1,420 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::TrackRunIterator Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::TrackRunIterator Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 TrackRunIterator (const Movie *moov)
 
bool Init ()
 
bool Init (const MovieFragment &moof)
 
bool IsRunValid () const
 
bool IsSampleValid () const
 
void AdvanceRun ()
 
void AdvanceSample ()
 
bool AuxInfoNeedsToBeCached ()
 
bool CacheAuxInfo (const uint8_t *buf, int size)
 
int64_t GetMaxClearOffset ()
 
+const AudioSampleEntryaudio_description () const
 Only valid if is_audio() is true.
 
+const VideoSampleEntryvideo_description () const
 Only valid if is_video() is true.
 
scoped_ptr< DecryptConfigGetDecryptConfig ()
 
Properties of the current run. Only valid if IsRunValid().
+uint32_t track_id () const
 
+int64_t aux_info_offset () const
 
+int aux_info_size () const
 
+bool is_encrypted () const
 
+bool is_audio () const
 
+bool is_video () const
 
Properties of the current sample. Only valid if IsSampleValid().
+int64_t sample_offset () const
 
+int sample_size () const
 
+int64_t dts () const
 
+int64_t cts () const
 
+int64_t duration () const
 
+bool is_keyframe () const
 
+

Detailed Description

+
+

Definition at line 24 of file track_run_iterator.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
edash_packager::media::mp4::TrackRunIterator::TrackRunIterator (const Moviemoov)
+
+explicit
+
+

Create a new TrackRunIterator from movie box.

+
Parameters
+ + +
moovshould not be NULL.
+
+
+ +

Definition at line 65 of file track_run_iterator.cc.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
void edash_packager::media::mp4::TrackRunIterator::AdvanceRun ()
+
+

Advance iterator to the next run. Require that the iterator point to a valid run.

+ +

Definition at line 383 of file track_run_iterator.cc.

+ +
+
+ +
+
+ + + + + + + +
void edash_packager::media::mp4::TrackRunIterator::AdvanceSample ()
+
+

Advance iterator to the next sample. Require that the iterator point to a valid sample.

+ +

Definition at line 397 of file track_run_iterator.cc.

+ +
+
+ +
+
+ + + + + + + +
bool edash_packager::media::mp4::TrackRunIterator::AuxInfoNeedsToBeCached ()
+
+
Returns
true if this track run has auxiliary information and has not yet been cached. Only valid if IsRunValid().
+ +

Definition at line 406 of file track_run_iterator.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::mp4::TrackRunIterator::CacheAuxInfo (const uint8_t * buf,
int size 
)
+
+

Caches the CENC data from the given buffer.

+
Parameters
+ + + +
bufmust be a buffer starting at the offset given by cenc_offset().
sizemust be at least cenc_size().
+
+
+
Returns
true on success, false on error.
+ +

Definition at line 412 of file track_run_iterator.cc.

+ +
+
+ +
+
+ + + + + + + +
scoped_ptr< DecryptConfig > edash_packager::media::mp4::TrackRunIterator::GetDecryptConfig ()
+
+

Only call when is_encrypted() is true and AuxInfoNeedsToBeCached() is false. Result is owned by caller.

+ +

Definition at line 540 of file track_run_iterator.cc.

+ +
+
+ +
+
+ + + + + + + +
int64_t edash_packager::media::mp4::TrackRunIterator::GetMaxClearOffset ()
+
+
Returns
the maximum buffer location at which no data earlier in the stream will be required in order to read the current or any subsequent sample. You may clear all data up to this offset before reading the current sample safely. Result is in the same units as offset() (for Media Source this is in bytes past the head of the MOOF box).
+ +

Definition at line 442 of file track_run_iterator.cc.

+ +
+
+ +
+
+ + + + + + + +
bool edash_packager::media::mp4::TrackRunIterator::Init ()
+
+

For non-fragmented mp4, moov contains all the chunk information; This function sets up the iterator to access all the chunks. For fragmented mp4, chunk and sample information are generally contained in moof. This function is a no-op in this case. Init(moof) will be called later after parsing moof.

+
Returns
true on success, false otherwise.
+ +

Definition at line 138 of file track_run_iterator.cc.

+ +
+
+ +
+
+ + + + + + + + +
bool edash_packager::media::mp4::TrackRunIterator::Init (const MovieFragmentmoof)
+
+

Set up the iterator to handle all the runs from the current fragment.

+
Returns
true on success, false otherwise.
+ +

Definition at line 270 of file track_run_iterator.cc.

+ +
+
+ +
+
+ + + + + + + +
bool edash_packager::media::mp4::TrackRunIterator::IsRunValid () const
+
+
Returns
true if the iterator points to a valid run, false if past the last run.
+ +

Definition at line 430 of file track_run_iterator.cc.

+ +
+
+ +
+
+ + + + + + + +
bool edash_packager::media::mp4::TrackRunIterator::IsSampleValid () const
+
+
Returns
true if the iterator points to a valid sample, false if past the last sample.
+ +

Definition at line 432 of file track_run_iterator.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/db/d2e/classedash__packager_1_1MockMpdBuilder.html b/sdk/db/d2e/classedash__packager_1_1MockMpdBuilder.html new file mode 100644 index 0000000000..bff34a2971 --- /dev/null +++ b/sdk/db/d2e/classedash__packager_1_1MockMpdBuilder.html @@ -0,0 +1,157 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::MockMpdBuilder Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::MockMpdBuilder Class Reference
+
+
+
+Inheritance diagram for edash_packager::MockMpdBuilder:
+
+
+ + +edash_packager::MpdBuilder + +
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

MockMpdBuilder (MpdType type)
 
MOCK_METHOD1 (AddAdaptationSet, AdaptationSet *(const std::string &lang))
 
MOCK_METHOD1 (ToString, bool(std::string *output))
 
- Public Member Functions inherited from edash_packager::MpdBuilder
 MpdBuilder (MpdType type, const MpdOptions &mpd_options)
 
void AddBaseUrl (const std::string &base_url)
 
virtual AdaptationSetAddAdaptationSet (const std::string &lang)
 
bool WriteMpdToFile (media::File *output_file)
 
virtual bool ToString (std::string *output)
 
MpdType type () const
 
+ + + + + + + +

+Additional Inherited Members

- Public Types inherited from edash_packager::MpdBuilder
enum  MpdType { kStatic = 0, +kDynamic + }
 
- Static Public Member Functions inherited from edash_packager::MpdBuilder
static void MakePathsRelativeToMpd (const std::string &mpd_path, MediaInfo *media_info)
 
+

Detailed Description

+
+

Definition at line 18 of file mock_mpd_builder.h.

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/db/d2e/classedash__packager_1_1MockMpdBuilder.png b/sdk/db/d2e/classedash__packager_1_1MockMpdBuilder.png new file mode 100644 index 0000000000..0de226b002 Binary files /dev/null and b/sdk/db/d2e/classedash__packager_1_1MockMpdBuilder.png differ diff --git a/sdk/db/d31/track__run__iterator_8cc_source.html b/sdk/db/d31/track__run__iterator_8cc_source.html new file mode 100644 index 0000000000..c325168d10 --- /dev/null +++ b/sdk/db/d31/track__run__iterator_8cc_source.html @@ -0,0 +1,707 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/track_run_iterator.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
track_run_iterator.cc
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/formats/mp4/track_run_iterator.h"
+
6 
+
7 #include <algorithm>
+
8 #include <limits>
+
9 
+
10 #include "packager/media/base/buffer_reader.h"
+
11 #include "packager/media/formats/mp4/chunk_info_iterator.h"
+
12 #include "packager/media/formats/mp4/composition_offset_iterator.h"
+
13 #include "packager/media/formats/mp4/decoding_time_iterator.h"
+
14 #include "packager/media/formats/mp4/rcheck.h"
+
15 #include "packager/media/formats/mp4/sync_sample_iterator.h"
+
16 
+
17 namespace {
+
18 const int64_t kInvalidOffset = std::numeric_limits<int64_t>::max();
+
19 } // namespace
+
20 
+
21 namespace edash_packager {
+
22 namespace media {
+
23 namespace mp4 {
+
24 
+
25 struct SampleInfo {
+
26  int64_t size;
+
27  int64_t duration;
+
28  int64_t cts_offset;
+
29  bool is_keyframe;
+
30 };
+
31 
+
32 struct TrackRunInfo {
+
33  uint32_t track_id;
+
34  std::vector<SampleInfo> samples;
+
35  int64_t timescale;
+
36  int64_t start_dts;
+
37  int64_t sample_start_offset;
+
38 
+
39  TrackType track_type;
+
40  const AudioSampleEntry* audio_description;
+
41  const VideoSampleEntry* video_description;
+
42 
+
43  int64_t aux_info_start_offset; // Only valid if aux_info_total_size > 0.
+
44  int aux_info_default_size;
+
45  std::vector<uint8_t> aux_info_sizes; // Populated if default_size == 0.
+
46  int aux_info_total_size;
+
47 
+
48  TrackRunInfo();
+
49  ~TrackRunInfo();
+
50 };
+
51 
+
52 TrackRunInfo::TrackRunInfo()
+
53  : track_id(0),
+
54  timescale(-1),
+
55  start_dts(-1),
+
56  sample_start_offset(-1),
+
57  track_type(kInvalid),
+
58  audio_description(NULL),
+
59  video_description(NULL),
+
60  aux_info_start_offset(-1),
+
61  aux_info_default_size(0),
+
62  aux_info_total_size(0) {}
+
63 TrackRunInfo::~TrackRunInfo() {}
+
64 
+ +
66  : moov_(moov), sample_dts_(0), sample_offset_(0) {
+
67  CHECK(moov);
+
68 }
+
69 
+
70 TrackRunIterator::~TrackRunIterator() {}
+
71 
+
72 static void PopulateSampleInfo(const TrackExtends& trex,
+
73  const TrackFragmentHeader& tfhd,
+
74  const TrackFragmentRun& trun,
+
75  const uint32_t i,
+
76  SampleInfo* sample_info) {
+
77  if (i < trun.sample_sizes.size()) {
+
78  sample_info->size = trun.sample_sizes[i];
+
79  } else if (tfhd.default_sample_size > 0) {
+
80  sample_info->size = tfhd.default_sample_size;
+
81  } else {
+
82  sample_info->size = trex.default_sample_size;
+
83  }
+
84 
+
85  if (i < trun.sample_durations.size()) {
+
86  sample_info->duration = trun.sample_durations[i];
+
87  } else if (tfhd.default_sample_duration > 0) {
+
88  sample_info->duration = tfhd.default_sample_duration;
+
89  } else {
+
90  sample_info->duration = trex.default_sample_duration;
+
91  }
+
92 
+
93  if (i < trun.sample_composition_time_offsets.size()) {
+
94  sample_info->cts_offset = trun.sample_composition_time_offsets[i];
+
95  } else {
+
96  sample_info->cts_offset = 0;
+
97  }
+
98 
+
99  uint32_t flags;
+
100  if (i < trun.sample_flags.size()) {
+
101  flags = trun.sample_flags[i];
+
102  } else if (tfhd.flags & TrackFragmentHeader::kDefaultSampleFlagsPresentMask) {
+
103  flags = tfhd.default_sample_flags;
+
104  } else {
+
105  flags = trex.default_sample_flags;
+
106  }
+
107  sample_info->is_keyframe = !(flags & TrackFragmentHeader::kNonKeySampleMask);
+
108 }
+
109 
+
110 // In well-structured encrypted media, each track run will be immediately
+
111 // preceded by its auxiliary information; this is the only optimal storage
+
112 // pattern in terms of minimum number of bytes from a serial stream needed to
+
113 // begin playback. It also allows us to optimize caching on memory-constrained
+
114 // architectures, because we can cache the relatively small auxiliary
+
115 // information for an entire run and then discard data from the input stream,
+
116 // instead of retaining the entire 'mdat' box.
+
117 //
+
118 // We optimize for this situation (with no loss of generality) by sorting track
+
119 // runs during iteration in order of their first data offset (either sample data
+
120 // or auxiliary data).
+
121 class CompareMinTrackRunDataOffset {
+
122  public:
+
123  bool operator()(const TrackRunInfo& a, const TrackRunInfo& b) {
+
124  int64_t a_aux = a.aux_info_total_size ? a.aux_info_start_offset : kInvalidOffset;
+
125  int64_t b_aux = b.aux_info_total_size ? b.aux_info_start_offset : kInvalidOffset;
+
126 
+
127  int64_t a_lesser = std::min(a_aux, a.sample_start_offset);
+
128  int64_t a_greater = std::max(a_aux, a.sample_start_offset);
+
129  int64_t b_lesser = std::min(b_aux, b.sample_start_offset);
+
130  int64_t b_greater = std::max(b_aux, b.sample_start_offset);
+
131 
+
132  if (a_lesser == b_lesser)
+
133  return a_greater < b_greater;
+
134  return a_lesser < b_lesser;
+
135  }
+
136 };
+
137 
+ +
139  runs_.clear();
+
140 
+
141  for (std::vector<Track>::const_iterator trak = moov_->tracks.begin();
+
142  trak != moov_->tracks.end(); ++trak) {
+
143  const SampleDescription& stsd =
+
144  trak->media.information.sample_table.description;
+
145  if (stsd.type != kAudio && stsd.type != kVideo) {
+
146  DVLOG(1) << "Skipping unhandled track type";
+
147  continue;
+
148  }
+
149 
+
150  // Edit list is ignored.
+
151  // We may consider supporting the single edit with a nonnegative media time
+
152  // if it is required. Just need to pass the media_time to Muxer and
+
153  // generate the edit list.
+
154  const std::vector<EditListEntry>& edits = trak->edit.list.edits;
+
155  if (!edits.empty()) {
+
156  if (edits.size() > 1)
+
157  DVLOG(1) << "Multi-entry edit box detected.";
+
158 
+
159  DLOG(INFO) << "Edit list with media time " << edits[0].media_time
+
160  << " ignored.";
+
161  }
+
162 
+
163  DecodingTimeIterator decoding_time(
+
164  trak->media.information.sample_table.decoding_time_to_sample);
+
165  CompositionOffsetIterator composition_offset(
+
166  trak->media.information.sample_table.composition_time_to_sample);
+
167  bool has_composition_offset = composition_offset.IsValid();
+
168  ChunkInfoIterator chunk_info(
+
169  trak->media.information.sample_table.sample_to_chunk);
+
170  SyncSampleIterator sync_sample(
+
171  trak->media.information.sample_table.sync_sample);
+
172  // Skip processing saiz and saio boxes for non-fragmented mp4 as we
+
173  // don't support encrypted non-fragmented mp4.
+
174 
+
175  const SampleSize& sample_size =
+
176  trak->media.information.sample_table.sample_size;
+
177  const std::vector<uint64_t>& chunk_offset_vector =
+
178  trak->media.information.sample_table.chunk_large_offset.offsets;
+
179 
+
180  int64_t run_start_dts = 0;
+
181 
+
182  uint32_t num_samples = sample_size.sample_count;
+
183  uint32_t num_chunks = chunk_offset_vector.size();
+
184 
+
185  // Check that total number of samples match.
+
186  DCHECK_EQ(num_samples, decoding_time.NumSamples());
+
187  if (has_composition_offset)
+
188  DCHECK_EQ(num_samples, composition_offset.NumSamples());
+
189  if (num_chunks > 0)
+
190  DCHECK_EQ(num_samples, chunk_info.NumSamples(1, num_chunks));
+
191  DCHECK_GE(num_chunks, chunk_info.LastFirstChunk());
+
192 
+
193  if (num_samples > 0) {
+
194  // Verify relevant tables are not empty.
+
195  RCHECK(decoding_time.IsValid());
+
196  RCHECK(chunk_info.IsValid());
+
197  }
+
198 
+
199  uint32_t sample_index = 0;
+
200  for (uint32_t chunk_index = 0; chunk_index < num_chunks; ++chunk_index) {
+
201  RCHECK(chunk_info.current_chunk() == chunk_index + 1);
+
202 
+
203  TrackRunInfo tri;
+
204  tri.track_id = trak->header.track_id;
+
205  tri.timescale = trak->media.header.timescale;
+
206  tri.start_dts = run_start_dts;
+
207  tri.sample_start_offset = chunk_offset_vector[chunk_index];
+
208 
+
209  uint32_t desc_idx = chunk_info.sample_description_index();
+
210  RCHECK(desc_idx > 0); // Descriptions are one-indexed in the file.
+
211  desc_idx -= 1;
+
212 
+
213  tri.track_type = stsd.type;
+
214  if (tri.track_type == kAudio) {
+
215  RCHECK(!stsd.audio_entries.empty());
+
216  if (desc_idx > stsd.audio_entries.size())
+
217  desc_idx = 0;
+
218  tri.audio_description = &stsd.audio_entries[desc_idx];
+
219  // We don't support encrypted non-fragmented mp4 for now.
+
220  RCHECK(!tri.audio_description->sinf.info.track_encryption.is_encrypted);
+
221  } else if (tri.track_type == kVideo) {
+
222  RCHECK(!stsd.video_entries.empty());
+
223  if (desc_idx > stsd.video_entries.size())
+
224  desc_idx = 0;
+
225  tri.video_description = &stsd.video_entries[desc_idx];
+
226  // We don't support encrypted non-fragmented mp4 for now.
+
227  RCHECK(!tri.video_description->sinf.info.track_encryption.is_encrypted);
+
228  }
+
229 
+
230  uint32_t samples_per_chunk = chunk_info.samples_per_chunk();
+
231  tri.samples.resize(samples_per_chunk);
+
232  for (uint32_t k = 0; k < samples_per_chunk; ++k) {
+
233  SampleInfo& sample = tri.samples[k];
+
234  sample.size = sample_size.sample_size != 0
+
235  ? sample_size.sample_size
+
236  : sample_size.sizes[sample_index];
+
237  sample.duration = decoding_time.sample_delta();
+
238  sample.cts_offset =
+
239  has_composition_offset ? composition_offset.sample_offset() : 0;
+
240  sample.is_keyframe = sync_sample.IsSyncSample();
+
241 
+
242  run_start_dts += sample.duration;
+
243 
+
244  // Advance to next sample. Should success except for last sample.
+
245  ++sample_index;
+
246  RCHECK(chunk_info.AdvanceSample() && sync_sample.AdvanceSample());
+
247  if (sample_index == num_samples) {
+
248  // We should hit end of tables for decoding time and composition
+
249  // offset.
+
250  RCHECK(!decoding_time.AdvanceSample());
+
251  if (has_composition_offset)
+
252  RCHECK(!composition_offset.AdvanceSample());
+
253  } else {
+
254  RCHECK(decoding_time.AdvanceSample());
+
255  if (has_composition_offset)
+
256  RCHECK(composition_offset.AdvanceSample());
+
257  }
+
258  }
+
259 
+
260  runs_.push_back(tri);
+
261  }
+
262  }
+
263 
+
264  std::sort(runs_.begin(), runs_.end(), CompareMinTrackRunDataOffset());
+
265  run_itr_ = runs_.begin();
+
266  ResetRun();
+
267  return true;
+
268 }
+
269 
+ +
271  runs_.clear();
+
272 
+
273  next_fragment_start_dts_.resize(moof.tracks.size(), 0);
+
274  for (size_t i = 0; i < moof.tracks.size(); i++) {
+
275  const TrackFragment& traf = moof.tracks[i];
+
276 
+
277  const Track* trak = NULL;
+
278  for (size_t t = 0; t < moov_->tracks.size(); t++) {
+
279  if (moov_->tracks[t].header.track_id == traf.header.track_id)
+
280  trak = &moov_->tracks[t];
+
281  }
+
282  RCHECK(trak);
+
283 
+
284  const TrackExtends* trex = NULL;
+
285  for (size_t t = 0; t < moov_->extends.tracks.size(); t++) {
+
286  if (moov_->extends.tracks[t].track_id == traf.header.track_id)
+
287  trex = &moov_->extends.tracks[t];
+
288  }
+
289  RCHECK(trex);
+
290 
+
291  const SampleDescription& stsd =
+
292  trak->media.information.sample_table.description;
+
293  if (stsd.type != kAudio && stsd.type != kVideo) {
+
294  DVLOG(1) << "Skipping unhandled track type";
+
295  continue;
+
296  }
+
297  size_t desc_idx = traf.header.sample_description_index;
+
298  if (!desc_idx)
+
299  desc_idx = trex->default_sample_description_index;
+
300  RCHECK(desc_idx > 0); // Descriptions are one-indexed in the file
+
301  desc_idx -= 1;
+
302 
+
303  int64_t run_start_dts = traf.decode_time_absent
+
304  ? next_fragment_start_dts_[i]
+
305  : traf.decode_time.decode_time;
+
306  int sample_count_sum = 0;
+
307 
+
308  for (size_t j = 0; j < traf.runs.size(); j++) {
+
309  const TrackFragmentRun& trun = traf.runs[j];
+
310  TrackRunInfo tri;
+
311  tri.track_id = traf.header.track_id;
+
312  tri.timescale = trak->media.header.timescale;
+
313  tri.start_dts = run_start_dts;
+
314  tri.sample_start_offset = trun.data_offset;
+
315 
+
316  tri.track_type = stsd.type;
+
317  if (tri.track_type == kAudio) {
+
318  RCHECK(!stsd.audio_entries.empty());
+
319  if (desc_idx > stsd.audio_entries.size())
+
320  desc_idx = 0;
+
321  tri.audio_description = &stsd.audio_entries[desc_idx];
+
322  } else if (tri.track_type == kVideo) {
+
323  RCHECK(!stsd.video_entries.empty());
+
324  if (desc_idx > stsd.video_entries.size())
+
325  desc_idx = 0;
+
326  tri.video_description = &stsd.video_entries[desc_idx];
+
327  }
+
328 
+
329  // Collect information from the auxiliary_offset entry with the same index
+
330  // in the 'saiz' container as the current run's index in the 'trun'
+
331  // container, if it is present.
+
332  if (traf.auxiliary_offset.offsets.size() > j) {
+
333  // There should be an auxiliary info entry corresponding to each sample
+
334  // in the auxiliary offset entry's corresponding track run.
+
335  RCHECK(traf.auxiliary_size.sample_count >=
+
336  sample_count_sum + trun.sample_count);
+
337  tri.aux_info_start_offset = traf.auxiliary_offset.offsets[j];
+
338  tri.aux_info_default_size =
+
339  traf.auxiliary_size.default_sample_info_size;
+
340  if (tri.aux_info_default_size == 0) {
+
341  const std::vector<uint8_t>& sizes =
+
342  traf.auxiliary_size.sample_info_sizes;
+
343  tri.aux_info_sizes.insert(
+
344  tri.aux_info_sizes.begin(),
+
345  sizes.begin() + sample_count_sum,
+
346  sizes.begin() + sample_count_sum + trun.sample_count);
+
347  }
+
348 
+
349  // If the default info size is positive, find the total size of the aux
+
350  // info block from it, otherwise sum over the individual sizes of each
+
351  // aux info entry in the aux_offset entry.
+
352  if (tri.aux_info_default_size) {
+
353  tri.aux_info_total_size =
+
354  tri.aux_info_default_size * trun.sample_count;
+
355  } else {
+
356  tri.aux_info_total_size = 0;
+
357  for (size_t k = 0; k < trun.sample_count; k++) {
+
358  tri.aux_info_total_size += tri.aux_info_sizes[k];
+
359  }
+
360  }
+
361  } else {
+
362  tri.aux_info_start_offset = -1;
+
363  tri.aux_info_total_size = 0;
+
364  }
+
365 
+
366  tri.samples.resize(trun.sample_count);
+
367  for (size_t k = 0; k < trun.sample_count; k++) {
+
368  PopulateSampleInfo(*trex, traf.header, trun, k, &tri.samples[k]);
+
369  run_start_dts += tri.samples[k].duration;
+
370  }
+
371  runs_.push_back(tri);
+
372  sample_count_sum += trun.sample_count;
+
373  }
+
374  next_fragment_start_dts_[i] = run_start_dts;
+
375  }
+
376 
+
377  std::sort(runs_.begin(), runs_.end(), CompareMinTrackRunDataOffset());
+
378  run_itr_ = runs_.begin();
+
379  ResetRun();
+
380  return true;
+
381 }
+
382 
+ +
384  ++run_itr_;
+
385  ResetRun();
+
386 }
+
387 
+
388 void TrackRunIterator::ResetRun() {
+
389  if (!IsRunValid())
+
390  return;
+
391  sample_dts_ = run_itr_->start_dts;
+
392  sample_offset_ = run_itr_->sample_start_offset;
+
393  sample_itr_ = run_itr_->samples.begin();
+
394  cenc_info_.clear();
+
395 }
+
396 
+ +
398  DCHECK(IsSampleValid());
+
399  sample_dts_ += sample_itr_->duration;
+
400  sample_offset_ += sample_itr_->size;
+
401  ++sample_itr_;
+
402 }
+
403 
+
404 // This implementation only indicates a need for caching if CENC auxiliary
+
405 // info is available in the stream.
+ +
407  DCHECK(IsRunValid());
+
408  return is_encrypted() && aux_info_size() > 0 && cenc_info_.size() == 0;
+
409 }
+
410 
+
411 // This implementation currently only caches CENC auxiliary info.
+
412 bool TrackRunIterator::CacheAuxInfo(const uint8_t* buf, int buf_size) {
+
413  RCHECK(AuxInfoNeedsToBeCached() && buf_size >= aux_info_size());
+
414 
+
415  cenc_info_.resize(run_itr_->samples.size());
+
416  int64_t pos = 0;
+
417  for (size_t i = 0; i < run_itr_->samples.size(); i++) {
+
418  int info_size = run_itr_->aux_info_default_size;
+
419  if (!info_size)
+
420  info_size = run_itr_->aux_info_sizes[i];
+
421 
+
422  BufferReader reader(buf + pos, info_size);
+
423  RCHECK(cenc_info_[i].Parse(track_encryption().default_iv_size, &reader));
+
424  pos += info_size;
+
425  }
+
426 
+
427  return true;
+
428 }
+
429 
+
430 bool TrackRunIterator::IsRunValid() const { return run_itr_ != runs_.end(); }
+
431 
+ +
433  return IsRunValid() && (sample_itr_ != run_itr_->samples.end());
+
434 }
+
435 
+
436 // Because tracks are in sorted order and auxiliary information is cached when
+
437 // returning samples, it is guaranteed that no data will be required before the
+
438 // lesser of the minimum data offset of this track and the next in sequence.
+
439 // (The stronger condition - that no data is required before the minimum data
+
440 // offset of this track alone - is not guaranteed, because the BMFF spec does
+
441 // not have any inter-run ordering restrictions.)
+ +
443  int64_t offset = kInvalidOffset;
+
444 
+
445  if (IsSampleValid()) {
+
446  offset = std::min(offset, sample_offset_);
+ +
448  offset = std::min(offset, aux_info_offset());
+
449  }
+
450  if (run_itr_ != runs_.end()) {
+
451  std::vector<TrackRunInfo>::const_iterator next_run = run_itr_ + 1;
+
452  if (next_run != runs_.end()) {
+
453  offset = std::min(offset, next_run->sample_start_offset);
+
454  if (next_run->aux_info_total_size)
+
455  offset = std::min(offset, next_run->aux_info_start_offset);
+
456  }
+
457  }
+
458  if (offset == kInvalidOffset)
+
459  return runs_.empty() ? 0 : runs_[0].sample_start_offset;
+
460  return offset;
+
461 }
+
462 
+
463 uint32_t TrackRunIterator::track_id() const {
+
464  DCHECK(IsRunValid());
+
465  return run_itr_->track_id;
+
466 }
+
467 
+
468 bool TrackRunIterator::is_encrypted() const {
+
469  DCHECK(IsRunValid());
+
470  return track_encryption().is_encrypted;
+
471 }
+
472 
+
473 int64_t TrackRunIterator::aux_info_offset() const {
+
474  return run_itr_->aux_info_start_offset;
+
475 }
+
476 
+
477 int TrackRunIterator::aux_info_size() const {
+
478  return run_itr_->aux_info_total_size;
+
479 }
+
480 
+
481 bool TrackRunIterator::is_audio() const {
+
482  DCHECK(IsRunValid());
+
483  return run_itr_->track_type == kAudio;
+
484 }
+
485 
+
486 bool TrackRunIterator::is_video() const {
+
487  DCHECK(IsRunValid());
+
488  return run_itr_->track_type == kVideo;
+
489 }
+
490 
+ +
492  DCHECK(is_audio());
+
493  DCHECK(run_itr_->audio_description);
+
494  return *run_itr_->audio_description;
+
495 }
+
496 
+ +
498  DCHECK(is_video());
+
499  DCHECK(run_itr_->video_description);
+
500  return *run_itr_->video_description;
+
501 }
+
502 
+
503 int64_t TrackRunIterator::sample_offset() const {
+
504  DCHECK(IsSampleValid());
+
505  return sample_offset_;
+
506 }
+
507 
+
508 int TrackRunIterator::sample_size() const {
+
509  DCHECK(IsSampleValid());
+
510  return sample_itr_->size;
+
511 }
+
512 
+
513 int64_t TrackRunIterator::dts() const {
+
514  DCHECK(IsSampleValid());
+
515  return sample_dts_;
+
516 }
+
517 
+
518 int64_t TrackRunIterator::cts() const {
+
519  DCHECK(IsSampleValid());
+
520  return sample_dts_ + sample_itr_->cts_offset;
+
521 }
+
522 
+
523 int64_t TrackRunIterator::duration() const {
+
524  DCHECK(IsSampleValid());
+
525  return sample_itr_->duration;
+
526 }
+
527 
+
528 bool TrackRunIterator::is_keyframe() const {
+
529  DCHECK(IsSampleValid());
+
530  return sample_itr_->is_keyframe;
+
531 }
+
532 
+
533 const TrackEncryption& TrackRunIterator::track_encryption() const {
+
534  if (is_audio())
+
535  return audio_description().sinf.info.track_encryption;
+
536  DCHECK(is_video());
+
537  return video_description().sinf.info.track_encryption;
+
538 }
+
539 
+
540 scoped_ptr<DecryptConfig> TrackRunIterator::GetDecryptConfig() {
+
541  size_t sample_idx = sample_itr_ - run_itr_->samples.begin();
+
542  DCHECK_LT(sample_idx, cenc_info_.size());
+
543  const FrameCENCInfo& cenc_info = cenc_info_[sample_idx];
+
544  DCHECK(is_encrypted());
+
545  DCHECK(!AuxInfoNeedsToBeCached());
+
546 
+
547  const size_t total_size_of_subsamples = cenc_info.GetTotalSizeOfSubsamples();
+
548  if (total_size_of_subsamples != 0 &&
+
549  total_size_of_subsamples != static_cast<size_t>(sample_size())) {
+
550  LOG(ERROR) << "Incorrect CENC subsample size.";
+
551  return scoped_ptr<DecryptConfig>();
+
552  }
+
553 
+
554  return scoped_ptr<DecryptConfig>(new DecryptConfig(
+
555  track_encryption().default_kid,
+
556  cenc_info.iv(),
+
557  0, // No offset to start of media data in MP4 using CENC.
+
558  cenc_info.subsamples()));
+
559 }
+
560 
+
561 } // namespace mp4
+
562 } // namespace media
+
563 } // namespace edash_packager
+ +
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.
+ + + + + + +
uint32_t NumSamples(uint32_t start_chunk, uint32_t end_chunk) const
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/sdk/db/d44/structedash__packager_1_1media_1_1mp4_1_1DataReference-members.html b/sdk/db/d44/structedash__packager_1_1media_1_1mp4_1_1DataReference-members.html new file mode 100644 index 0000000000..142b1cbbe4 --- /dev/null +++ b/sdk/db/d44/structedash__packager_1_1media_1_1mp4_1_1DataReference-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::DataReference Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::DataReference)edash_packager::media::mp4::DataReferencevirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::DataReferencevirtual
data_entry (defined in edash_packager::media::mp4::DataReference)edash_packager::media::mp4::DataReference
DataReference() (defined in edash_packager::media::mp4::DataReference)edash_packager::media::mp4::DataReference
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::DataReferencevirtual
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~DataReference() (defined in edash_packager::media::mp4::DataReference)edash_packager::media::mp4::DataReferencevirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
+ + + + diff --git a/sdk/db/d45/mpd__notify__muxer__listener_8h_source.html b/sdk/db/d45/mpd__notify__muxer__listener_8h_source.html new file mode 100644 index 0000000000..13ad5521d9 --- /dev/null +++ b/sdk/db/d45/mpd__notify__muxer__listener_8h_source.html @@ -0,0 +1,195 @@ + + + + + + +DASH Media Packaging SDK: media/event/mpd_notify_muxer_listener.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mpd_notify_muxer_listener.h
+
+
+
1 // Copyright 2014 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 // Implementation of MuxerListener that deals with MpdNotifier.
+
8 
+
9 #ifndef MEDIA_EVENT_MPD_NOTIFY_MUXER_LISTENER_H_
+
10 #define MEDIA_EVENT_MPD_NOTIFY_MUXER_LISTENER_H_
+
11 
+
12 #include <list>
+
13 #include <vector>
+
14 
+
15 #include "packager/base/compiler_specific.h"
+
16 #include "packager/base/memory/scoped_ptr.h"
+
17 #include "packager/media/base/muxer_options.h"
+
18 #include "packager/media/event/muxer_listener.h"
+
19 
+
20 namespace edash_packager {
+
21 
+
22 class MediaInfo;
+
23 class MpdNotifier;
+
24 
+
25 namespace media {
+
26 
+ +
28  public:
+
31  explicit MpdNotifyMuxerListener(MpdNotifier* mpd_notifier);
+
32  virtual ~MpdNotifyMuxerListener();
+
33 
+
36  void SetContentProtectionSchemeIdUri(const std::string& scheme_id_uri);
+
37 
+
40  virtual void OnEncryptionInfoReady(
+
41  bool is_initial_encryption_info,
+
42  const std::string& content_protection_uuid,
+
43  const std::string& content_protection_name_version,
+
44  const std::vector<uint8_t>& key_id,
+
45  const std::vector<uint8_t>& pssh) OVERRIDE;
+
46  virtual void OnMediaStart(const MuxerOptions& muxer_options,
+
47  const StreamInfo& stream_info,
+
48  uint32_t time_scale,
+
49  ContainerType container_type) OVERRIDE;
+
50  virtual void OnSampleDurationReady(uint32_t sample_duration) OVERRIDE;
+
51  virtual void OnMediaEnd(bool has_init_range,
+
52  uint64_t init_range_start,
+
53  uint64_t init_range_end,
+
54  bool has_index_range,
+
55  uint64_t index_range_start,
+
56  uint64_t index_range_end,
+
57  float duration_seconds,
+
58  uint64_t file_size) OVERRIDE;
+
59  virtual void OnNewSegment(uint64_t start_time,
+
60  uint64_t duration,
+
61  uint64_t segment_file_size) OVERRIDE;
+
63 
+
64  private:
+
65  // This stores data passed into OnNewSegment() for VOD.
+
66  struct SubsegmentInfo {
+
67  uint64_t start_time;
+
68  uint64_t duration;
+
69  uint64_t segment_file_size;
+
70  };
+
71 
+
72  MpdNotifier* const mpd_notifier_;
+
73  uint32_t notification_id_;
+
74  scoped_ptr<MediaInfo> media_info_;
+
75  std::string scheme_id_uri_;
+
76 
+
77  bool is_encrypted_;
+
78  // Storage for values passed to OnEncryptionInfoReady().
+
79  std::string content_protection_uuid_;
+
80  std::string content_protection_name_version_;
+
81  std::string default_key_id_;
+
82  std::string pssh_;
+
83 
+
84  // Saves all the subsegment information for VOD. This should be used to call
+
85  // MpdNotifier::NotifyNewSegment() after NotifyNewSegment() is called
+
86  // (in OnMediaEnd). This is not used for live because NotifyNewSegment() is
+
87  // called immediately in OnNewSegment().
+
88  std::list<SubsegmentInfo> subsegments_;
+
89 
+
90  DISALLOW_COPY_AND_ASSIGN(MpdNotifyMuxerListener);
+
91 };
+
92 
+
93 } // namespace media
+
94 } // namespace edash_packager
+
95 
+
96 #endif // MEDIA_EVENT_MPD_NOTIFY_MUXER_LISTENER_H_
+
Abstract class holds stream information.
Definition: stream_info.h:25
+
virtual void OnSampleDurationReady(uint32_t sample_duration) OVERRIDE
+ + + + +
This structure contains the list of configuration options for Muxer.
Definition: muxer_options.h:18
+
void SetContentProtectionSchemeIdUri(const std::string &scheme_id_uri)
+
+ + + + diff --git a/sdk/db/d49/multi__segment__segmenter_8h_source.html b/sdk/db/d49/multi__segment__segmenter_8h_source.html new file mode 100644 index 0000000000..8128331e0b --- /dev/null +++ b/sdk/db/d49/multi__segment__segmenter_8h_source.html @@ -0,0 +1,151 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/multi_segment_segmenter.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
multi_segment_segmenter.h
+
+
+
1 // Copyright 2014 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_FORMATS_MP4_MULTI_SEGMENT_SEGMENTER_H_
+
8 #define MEDIA_FORMATS_MP4_MULTI_SEGMENT_SEGMENTER_H_
+
9 
+
10 #include "packager/media/formats/mp4/segmenter.h"
+
11 
+
12 namespace edash_packager {
+
13 namespace media {
+
14 namespace mp4 {
+
15 
+
16 struct SegmentType;
+
17 
+ +
32  public:
+
33  MultiSegmentSegmenter(const MuxerOptions& options,
+
34  scoped_ptr<FileType> ftyp,
+
35  scoped_ptr<Movie> moov);
+
36  virtual ~MultiSegmentSegmenter();
+
37 
+
40  virtual bool GetInitRange(size_t* offset, size_t* size) OVERRIDE;
+
41  virtual bool GetIndexRange(size_t* offset, size_t* size) OVERRIDE;
+
43 
+
44  private:
+
45  // Segmenter implementation overrides.
+
46  virtual Status DoInitialize() OVERRIDE;
+
47  virtual Status DoFinalize() OVERRIDE;
+
48  virtual Status DoFinalizeSegment() OVERRIDE;
+
49 
+
50  // Write segment to file.
+
51  Status WriteSegment();
+
52 
+
53  scoped_ptr<SegmentType> styp_;
+
54  uint32_t num_segments_;
+
55 
+
56  DISALLOW_COPY_AND_ASSIGN(MultiSegmentSegmenter);
+
57 };
+
58 
+
59 } // namespace mp4
+
60 } // namespace media
+
61 } // namespace edash_packager
+
62 
+
63 #endif // MEDIA_FORMATS_MP4_MULTI_SEGMENT_SEGMENTER_H_
+ + +
virtual bool GetInitRange(size_t *offset, size_t *size) OVERRIDE
+
virtual bool GetIndexRange(size_t *offset, size_t *size) OVERRIDE
+ +
This structure contains the list of configuration options for Muxer.
Definition: muxer_options.h:18
+
+ + + + diff --git a/sdk/db/d4e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi.html b/sdk/db/d4e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi.html new file mode 100644 index 0000000000..8829f7506b --- /dev/null +++ b/sdk/db/d4e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi.html @@ -0,0 +1,155 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp2t::TsSectionPsi Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp2t::TsSectionPsi Class Referenceabstract
+
+
+
+Inheritance diagram for edash_packager::media::mp2t::TsSectionPsi:
+
+
+ + +edash_packager::media::mp2t::TsSection +edash_packager::media::mp2t::TsSectionPat +edash_packager::media::mp2t::TsSectionPmt + +
+ + + + + + + + + + + + +

+Public Member Functions

+virtual bool Parse (bool payload_unit_start_indicator, const uint8_t *buf, int size) OVERRIDE
 
+virtual void Flush () OVERRIDE
 
+virtual void Reset () OVERRIDE
 
+virtual bool ParsePsiSection (BitReader *bit_reader)=0
 
+virtual void ResetPsiSection ()=0
 
+ + + + +

+Additional Inherited Members

- Public Types inherited from edash_packager::media::mp2t::TsSection
enum  SpecialPid {
+  kPidPat = 0x0, +kPidCat = 0x1, +kPidTsdt = 0x2, +kPidNullPacket = 0x1fff, +
+  kPidMax = 0x1fff +
+ }
 
+

Detailed Description

+
+

Definition at line 19 of file ts_section_psi.h.

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/db/d4e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi.png b/sdk/db/d4e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi.png new file mode 100644 index 0000000000..55fc652196 Binary files /dev/null and b/sdk/db/d4e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi.png differ diff --git a/sdk/db/d51/mp2t__media__parser_8h_source.html b/sdk/db/d51/mp2t__media__parser_8h_source.html new file mode 100644 index 0000000000..26848f471d --- /dev/null +++ b/sdk/db/d51/mp2t__media__parser_8h_source.html @@ -0,0 +1,202 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp2t/mp2t_media_parser.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mp2t_media_parser.h
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_FORMATS_MP2T_MP2T_MEDIA_PARSER_H_
+
6 #define MEDIA_FORMATS_MP2T_MP2T_MEDIA_PARSER_H_
+
7 
+
8 #include <deque>
+
9 #include <map>
+
10 
+
11 #include "packager/base/memory/ref_counted.h"
+
12 #include "packager/base/memory/scoped_ptr.h"
+
13 #include "packager/media/base/byte_queue.h"
+
14 #include "packager/media/base/media_parser.h"
+
15 #include "packager/media/base/stream_info.h"
+
16 
+
17 namespace edash_packager {
+
18 namespace media {
+
19 
+
20 class MediaSample;
+
21 
+
22 namespace mp2t {
+
23 
+
24 class PidState;
+
25 class TsPacket;
+
26 class TsSection;
+
27 
+
28 typedef std::deque<scoped_refptr<MediaSample> > SampleQueue;
+
29 
+
30 class Mp2tMediaParser : public MediaParser {
+
31  public:
+ +
33  virtual ~Mp2tMediaParser();
+
34 
+
35  // MediaParser implementation overrides.
+
36  virtual void Init(const InitCB& init_cb,
+
37  const NewSampleCB& new_sample_cb,
+
38  KeySource* decryption_key_source) OVERRIDE;
+
39 
+
40  virtual void Flush() OVERRIDE;
+
41 
+
42  virtual bool Parse(const uint8_t* buf, int size) OVERRIDE;
+
43 
+
44  private:
+
45  typedef std::map<int, PidState*> PidMap;
+
46 
+
47  // Callback invoked to register a Program Map Table.
+
48  // Note: Does nothing if the PID is already registered.
+
49  void RegisterPmt(int program_number, int pmt_pid);
+
50 
+
51  // Callback invoked to register a PES pid.
+
52  // Possible values for |media_type| are defined in:
+
53  // ISO-13818.1 / ITU H.222 Table 2.34 "Media type assignments".
+
54  // |pes_pid| is part of the Program Map Table refered by |pmt_pid|.
+
55  void RegisterPes(int pmt_pid, int pes_pid, int media_type);
+
56 
+
57  // Callback invoked each time the audio/video decoder configuration is
+
58  // changed.
+
59  void OnNewStreamInfo(scoped_refptr<StreamInfo>& new_stream_info);
+
60 
+
61  // Callback invoked by the ES media parser
+
62  // to emit a new audio/video access unit.
+
63  void OnEmitSample(uint32_t pes_pid, scoped_refptr<MediaSample>& new_sample);
+
64 
+
65  // Invoke the initialization callback if needed.
+
66  bool FinishInitializationIfNeeded();
+
67 
+
68  bool EmitRemainingSamples();
+
69 
+
72  void set_sbr_in_mime_type(bool sbr_in_mimetype) {
+
73  sbr_in_mimetype_ = sbr_in_mimetype; }
+
74 
+
75  // List of callbacks.
+
76  InitCB init_cb_;
+
77  NewSampleCB new_sample_cb_;
+
78 
+
79  bool sbr_in_mimetype_;
+
80 
+
81  // Bytes of the TS media.
+
82  ByteQueue ts_byte_queue_;
+
83 
+
84  // List of PIDs and their states.
+
85  PidMap pids_;
+
86 
+
87  // Whether |init_cb_| has been invoked.
+
88  bool is_initialized_;
+
89 
+
90  DISALLOW_COPY_AND_ASSIGN(Mp2tMediaParser);
+
91 };
+
92 
+
93 } // namespace mp2t
+
94 } // namespace media
+
95 } // namespace edash_packager
+
96 
+
97 #endif
+ + + +
virtual void Init(const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source) OVERRIDE
+
base::Callback< bool(uint32_t track_id, const scoped_refptr< MediaSample > &media_sample)> NewSampleCB
Definition: media_parser.h:43
+
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:29
+
base::Callback< void(const std::vector< scoped_refptr< StreamInfo > > &stream_info)> InitCB
Definition: media_parser.h:34
+ +
virtual bool Parse(const uint8_t *buf, int size) OVERRIDE
+
+ + + + diff --git a/sdk/db/d56/classedash__packager_1_1SimpleMpdNotifier.html b/sdk/db/d56/classedash__packager_1_1SimpleMpdNotifier.html new file mode 100644 index 0000000000..6f21e61f5e --- /dev/null +++ b/sdk/db/d56/classedash__packager_1_1SimpleMpdNotifier.html @@ -0,0 +1,479 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::SimpleMpdNotifier Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::SimpleMpdNotifier Class Reference
+
+
+ +

#include <simple_mpd_notifier.h>

+
+Inheritance diagram for edash_packager::SimpleMpdNotifier:
+
+
+ + +edash_packager::MpdNotifier + +
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

SimpleMpdNotifier (DashProfile dash_profile, const MpdOptions &mpd_options, const std::vector< std::string > &base_urls, const std::string &output_path)
 
MpdNotifier implemetation overrides.
virtual bool Init () OVERRIDE
 
virtual bool NotifyNewContainer (const MediaInfo &media_info, uint32_t *id) OVERRIDE
 
virtual bool NotifySampleDuration (uint32_t container_id, uint32_t sample_duration) OVERRIDE
 
virtual bool NotifyNewSegment (uint32_t id, uint64_t start_time, uint64_t duration, uint64_t size) OVERRIDE
 
virtual bool NotifyEncryptionUpdate (uint32_t container_id, const std::string &drm_uuid, const std::vector< uint8_t > &new_key_id, const std::vector< uint8_t > &new_pssh) OVERRIDE
 
virtual bool AddContentProtectionElement (uint32_t id, const ContentProtectionElement &content_protection_element) OVERRIDE
 
virtual bool Flush () OVERRIDE
 
- Public Member Functions inherited from edash_packager::MpdNotifier
MpdNotifier (DashProfile dash_profile)
 
DashProfile dash_profile () const
 
+ + + +

+Friends

+class SimpleMpdNotifierTest
 
+

Detailed Description

+

A simple MpdNotifier implementation which receives muxer listener event and generates an Mpd file.

+ +

Definition at line 31 of file simple_mpd_notifier.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::SimpleMpdNotifier::AddContentProtectionElement (uint32_t container_id,
const ContentProtectionElementcontent_protection_element 
)
+
+virtual
+
+

Adds content protection information to the MPD.

+
Parameters
+ + + +
container_idis the nummeric container ID obtained from calling NotifyNewContainer().
content_protection_elementNew ContentProtection element specification.
+
+
+
Returns
true on success, false otherwise.
+ +

Implements edash_packager::MpdNotifier.

+ +

Definition at line 116 of file simple_mpd_notifier.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool edash_packager::SimpleMpdNotifier::Flush ()
+
+virtual
+
+

Call this method to force a flush. Implementations might not write out the MPD to a stream (file, stdout, etc.) when the MPD is updated, this forces a flush.

+ +

Implements edash_packager::MpdNotifier.

+ +

Definition at line 129 of file simple_mpd_notifier.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool edash_packager::SimpleMpdNotifier::Init ()
+
+virtual
+
+

Initializes the notifier. For example, if this notifier uses a network for notification, then this would set up the connection with the remote host.

+
Returns
true on success, false otherwise.
+ +

Implements edash_packager::MpdNotifier.

+ +

Definition at line 34 of file simple_mpd_notifier.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool edash_packager::SimpleMpdNotifier::NotifyEncryptionUpdate (uint32_t container_id,
const std::string & drm_uuid,
const std::vector< uint8_t > & new_key_id,
const std::vector< uint8_t > & new_pssh 
)
+
+virtual
+
+

Notifiers MpdBuilder that there is a new PSSH for the container. This may be called whenever the key has to change, e.g. key rotation.

+
Parameters
+ + + + + +
container_idContainer ID obtained from calling NotifyNewContainer().
drm_uuidis the UUID of the DRM for encryption.
new_key_idis the new key ID for the key.
new_psshis the new pssh box (including the header).
+
+
+
Attention
This might change or get removed once DASH IF IOP specification writes a clear guideline on how to handle key rotation.
+ +

Implements edash_packager::MpdNotifier.

+ +

Definition at line 100 of file simple_mpd_notifier.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::SimpleMpdNotifier::NotifyNewContainer (const MediaInfo & media_info,
uint32_t * container_id 
)
+
+virtual
+
+

Notifies the MpdBuilder that there is a new container along with media_info. Live may have multiple files (segments) but those should be notified via NotifyNewSegment().

+
Parameters
+ + + +
media_infois the MediaInfo that will be passed to MpdBuilder.
[out]container_idis the numeric ID of the container, possibly for NotifyNewSegment() and AddContentProtectionElement(). Only populated on success.
+
+
+
Returns
true on success, false otherwise.
+ +

Implements edash_packager::MpdNotifier.

+ +

Definition at line 38 of file simple_mpd_notifier.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool edash_packager::SimpleMpdNotifier::NotifyNewSegment (uint32_t container_id,
uint64_t start_time,
uint64_t duration,
uint64_t size 
)
+
+virtual
+
+

Notifies MpdBuilder that there is a new segment ready. For live, this is usually a new segment, for VOD this is usually a subsegment.

+
Parameters
+ + + + + +
container_idContainer ID obtained from calling NotifyNewContainer().
start_timeis the start time of the new segment, in units of the stream's time scale.
durationis the duration of the new segment, in units of the stream's time scale.
sizeis the new segment size in bytes.
+
+
+
Returns
true on success, false otherwise.
+ +

Implements edash_packager::MpdNotifier.

+ +

Definition at line 86 of file simple_mpd_notifier.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::SimpleMpdNotifier::NotifySampleDuration (uint32_t container_id,
uint32_t sample_duration 
)
+
+virtual
+
+

Change the sample duration of container with container_id.

+
Parameters
+ + + +
container_idContainer ID obtained from calling NotifyNewContainer().
sample_durationis the duration of a sample in timescale of the media.
+
+
+
Returns
true on success, false otherwise. This may fail if the container specified by container_id does not exist.
+ +

Implements edash_packager::MpdNotifier.

+ +

Definition at line 74 of file simple_mpd_notifier.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/db/d56/classedash__packager_1_1SimpleMpdNotifier.png b/sdk/db/d56/classedash__packager_1_1SimpleMpdNotifier.png new file mode 100644 index 0000000000..74bb20b188 Binary files /dev/null and b/sdk/db/d56/classedash__packager_1_1SimpleMpdNotifier.png differ diff --git a/sdk/db/d60/mpd__options_8h_source.html b/sdk/db/d60/mpd__options_8h_source.html new file mode 100644 index 0000000000..06e5a88974 --- /dev/null +++ b/sdk/db/d60/mpd__options_8h_source.html @@ -0,0 +1,132 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/mpd_options.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mpd_options.h
+
+
+
1 // Copyright 2014 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 MPD_BASE_MPD_OPTIONS_H_
+
8 #define MPD_BASE_MPD_OPTIONS_H_
+
9 
+
10 namespace edash_packager {
+
11 
+
13 struct MpdOptions {
+
14  MpdOptions()
+
15  : availability_time_offset(0),
+
16  minimum_update_period(0),
+
17  // TODO(tinskip): Set min_buffer_time in unit tests rather than here.
+
18  min_buffer_time(2.0),
+
19  time_shift_buffer_depth(0),
+
20  suggested_presentation_delay(0) {}
+
21 
+
22  ~MpdOptions() {};
+
23 
+
24  double availability_time_offset;
+
25  double minimum_update_period;
+
26  double min_buffer_time;
+
27  double time_shift_buffer_depth;
+
28  double suggested_presentation_delay;
+
29 };
+
30 
+
31 } // namespace edash_packager
+
32 
+
33 #endif // MPD_BASE_MPD_OPTIONS_H_
+
34 
+
Defines Mpd Options.
Definition: mpd_options.h:13
+
+ + + + diff --git a/sdk/db/d61/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter-members.html b/sdk/db/d61/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter-members.html new file mode 100644 index 0000000000..740d5f8a8b --- /dev/null +++ b/sdk/db/d61/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter-members.html @@ -0,0 +1,126 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::SingleSegmentSegmenter Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + +
AddSample(const MediaStream *stream, scoped_refptr< MediaSample > sample)edash_packager::media::mp4::Segmenter
Finalize()edash_packager::media::mp4::Segmenter
fragment_buffer() (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
ftyp() (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
GetDuration() const edash_packager::media::mp4::Segmenter
GetIndexRange(size_t *offset, size_t *size) OVERRIDEedash_packager::media::mp4::SingleSegmentSegmentervirtual
GetInitRange(size_t *offset, size_t *size) OVERRIDEedash_packager::media::mp4::SingleSegmentSegmentervirtual
GetReferenceTimeScale() const (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenter
Initialize(const std::vector< MediaStream * > &streams, MuxerListener *muxer_listener, ProgressListener *progress_listener, KeySource *encryption_key_source, uint32_t max_sd_pixels, double clear_lead_in_seconds, double crypto_period_duration_in_seconds)edash_packager::media::mp4::Segmenter
moov() (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
muxer_listener() (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
options() const (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
progress_target() (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
sample_duration() const edash_packager::media::mp4::Segmenterinline
Segmenter(const MuxerOptions &options, scoped_ptr< FileType > ftyp, scoped_ptr< Movie > moov) (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenter
set_progress_target(uint64_t progress_target) (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
SetComplete()edash_packager::media::mp4::Segmenterprotected
sidx() (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
SingleSegmentSegmenter(const MuxerOptions &options, scoped_ptr< FileType > ftyp, scoped_ptr< Movie > moov) (defined in edash_packager::media::mp4::SingleSegmentSegmenter)edash_packager::media::mp4::SingleSegmentSegmenter
UpdateProgress(uint64_t progress)edash_packager::media::mp4::Segmenterprotected
~Segmenter() (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmentervirtual
~SingleSegmentSegmenter() (defined in edash_packager::media::mp4::SingleSegmentSegmenter)edash_packager::media::mp4::SingleSegmentSegmentervirtual
+ + + + diff --git a/sdk/db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html b/sdk/db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html new file mode 100644 index 0000000000..38f6d4fb05 --- /dev/null +++ b/sdk/db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html @@ -0,0 +1,344 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp2t::AdtsHeader Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp2t::AdtsHeader Class Reference
+
+
+ +

#include <adts_header.h>

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

+Public Member Functions

bool Parse (const uint8_t *adts_frame, size_t adts_frame_size)
 
bool GetAudioSpecificConfig (std::vector< uint8_t > *buffer) const
 
uint8_t GetObjectType () const
 
uint32_t GetSamplingFrequency () const
 
uint8_t GetNumChannels () const
 
+ + + + + +

+Static Public Member Functions

static size_t GetAdtsFrameSize (const uint8_t *data, size_t num_bytes)
 
static size_t GetAdtsHeaderSize (const uint8_t *data, size_t num_bytes)
 
+

Detailed Description

+

Class which parses ADTS headers and synthesizes AudioSpecificConfig and audio mime type from ADTS header contents.

+ +

Definition at line 22 of file adts_header.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
size_t edash_packager::media::mp2t::AdtsHeader::GetAdtsFrameSize (const uint8_t * data,
size_t num_bytes 
)
+
+static
+
+

Get the size of the ADTS frame from a partial or complete frame.

+
Parameters
+ + + +
datais a pointer to the beginning of the ADTS frame.
num_bytesis the number of data bytes at data.
+
+
+
Returns
Size of the ADTS frame (header + payload) if successful, or zero otherwise.
+ +

Definition at line 23 of file adts_header.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
size_t edash_packager::media::mp2t::AdtsHeader::GetAdtsHeaderSize (const uint8_t * data,
size_t num_bytes 
)
+
+static
+
+

Get the size of the ADTS header from a partial or complete frame.

+
Parameters
+ + + +
datais a pointer to the beginning of the ADTS frame.
num_bytesis the number of data bytes at data.
+
+
+
Returns
Size of the ADTS header if successful, or zero otherwise.
+ +

Definition at line 31 of file adts_header.cc.

+ +
+
+ +
+
+ + + + + + + + +
bool edash_packager::media::mp2t::AdtsHeader::GetAudioSpecificConfig (std::vector< uint8_t > * buffer) const
+
+

Synthesize an AudioSpecificConfig record from the fields within the ADTS header.

+
Parameters
+ + +
[out]bufferis a pointer to a vector to contain the AudioSpecificConfig.
+
+
+
Returns
true if successful, false otherwise.
+ +

Definition at line 85 of file adts_header.cc.

+ +
+
+ +
+
+ + + + + + + +
uint8_t edash_packager::media::mp2t::AdtsHeader::GetNumChannels () const
+
+
Returns
Number of channels for this AAC config.
+ +

Definition at line 106 of file adts_header.cc.

+ +
+
+ +
+
+ + + + + + + +
uint8_t edash_packager::media::mp2t::AdtsHeader::GetObjectType () const
+
+
Returns
The audio profile for this ADTS frame.
+ +

Definition at line 97 of file adts_header.cc.

+ +
+
+ +
+
+ + + + + + + +
uint32_t edash_packager::media::mp2t::AdtsHeader::GetSamplingFrequency () const
+
+
Returns
The sampling frequency for this ADTS frame.
+ +

Definition at line 101 of file adts_header.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::mp2t::AdtsHeader::Parse (const uint8_t * adts_frame,
size_t adts_frame_size 
)
+
+

Parse an ADTS header, extracting the fields within.

+
Parameters
+ + + +
adts_frameis an input parameter pointing to the ADTS header of an ADTS-framed audio sample.
adts_frame_sizeis the size, in bytes of the input ADTS frame.
+
+
+
Returns
true if successful, false otherwise.
+ +

Definition at line 39 of file adts_header.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html b/sdk/db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html new file mode 100644 index 0000000000..5601e2a01d --- /dev/null +++ b/sdk/db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html @@ -0,0 +1,502 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::BoxReader Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::BoxReader Class Reference
+
+
+ +

Class for reading MP4 boxes. + More...

+ +

#include <box_reader.h>

+
+Inheritance diagram for edash_packager::media::mp4::BoxReader:
+
+
+ + +edash_packager::media::BufferReader + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool ScanChildren () WARN_UNUSED_RESULT
 
bool ChildExist (Box *child) WARN_UNUSED_RESULT
 
bool ReadChild (Box *child) WARN_UNUSED_RESULT
 
bool TryReadChild (Box *child) WARN_UNUSED_RESULT
 
template<typename T >
bool ReadChildren (std::vector< T > *children) WARN_UNUSED_RESULT
 
template<typename T >
bool TryReadChildren (std::vector< T > *children) WARN_UNUSED_RESULT
 
template<typename T >
bool ReadAllChildren (std::vector< T > *children) WARN_UNUSED_RESULT
 
+bool ReadFourCC (FourCC *fourcc)
 
+FourCC type () const
 
- Public Member Functions inherited from edash_packager::media::BufferReader
BufferReader (const uint8_t *buf, size_t size)
 Create a BufferReader from a raw buffer.
 
bool HasBytes (size_t count)
 
+bool ReadToVector (std::vector< uint8_t > *t, size_t count) WARN_UNUSED_RESULT
 
bool SkipBytes (size_t num_bytes) WARN_UNUSED_RESULT
 
+const uint8_t * data () const
 
+size_t size () const
 
+void set_size (size_t size)
 
+size_t pos () const
 
bool Read1 (uint8_t *v) WARN_UNUSED_RESULT
 
+bool Read2 (uint16_t *v) WARN_UNUSED_RESULT
 
+bool Read2s (int16_t *v) WARN_UNUSED_RESULT
 
+bool Read4 (uint32_t *v) WARN_UNUSED_RESULT
 
+bool Read4s (int32_t *v) WARN_UNUSED_RESULT
 
+bool Read8 (uint64_t *v) WARN_UNUSED_RESULT
 
+bool Read8s (int64_t *v) WARN_UNUSED_RESULT
 
bool ReadNBytesInto8 (uint64_t *v, size_t num_bytes) WARN_UNUSED_RESULT
 
+bool ReadNBytesInto8s (int64_t *v, size_t num_bytes) WARN_UNUSED_RESULT
 
+ + + + + + + +

+Static Public Member Functions

static BoxReaderReadTopLevelBox (const uint8_t *buf, const size_t buf_size, bool *err)
 
static bool StartTopLevelBox (const uint8_t *buf, const size_t buf_size, FourCC *type, uint64_t *box_size, bool *err) WARN_UNUSED_RESULT
 
static bool IsValidTopLevelBox (const FourCC &type)
 
+

Detailed Description

+

Class for reading MP4 boxes.

+ +

Definition at line 24 of file box_reader.h.

+

Member Function Documentation

+ +
+
+ + + + + + + + +
bool edash_packager::media::mp4::BoxReader::ChildExist (Boxchild)
+
+
Returns
true if child with type child.BoxType() exists.
+ +

Definition at line 136 of file box_reader.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool edash_packager::media::mp4::BoxReader::IsValidTopLevelBox (const FourCC & type)
+
+static
+
+
Returns
true if type is recognized to be the fourcc of a top-level box, false otherwise. This returns true for some boxes which we do not parse. This method is helpful for debugging misaligned appends.
+ +

Definition at line 78 of file box_reader.cc.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + + + + +
bool edash_packager::media::mp4::BoxReader::ReadAllChildren (std::vector< T > * children)
+
+

Read all children. It expects all children to be of type T. Note that this method is mutually exclusive with ScanChildren().

+
Returns
true on success, false otherwise.
+ +

Definition at line 163 of file box_reader.h.

+ +
+
+ +
+
+ + + + + + + + +
bool edash_packager::media::mp4::BoxReader::ReadChild (Boxchild)
+
+

Read exactly one child box from the set of children. The type of the child will be determined by the BoxType() of child.

+
Returns
true on success, false otherwise.
+ +

Definition at line 123 of file box_reader.cc.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + + + + +
bool edash_packager::media::mp4::BoxReader::ReadChildren (std::vector< T > * children)
+
+

Read at least one child.

+
Returns
false on error or no child of type <T> present.
+ +

Definition at line 133 of file box_reader.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
BoxReader * edash_packager::media::mp4::BoxReader::ReadTopLevelBox (const uint8_t * buf,
const size_t buf_size,
bool * err 
)
+
+static
+
+

Create a BoxReader from a buffer.

+
Parameters
+ + + + +
bufis retained but not owned, and must outlive the BoxReader instance.
buf_sizeindicates the size of the input buffer.
[out]erris set to true if there was a stream-level error when reading the box.
+
+
+
Returns
New box reader if successful, NULL otherwise. Note that this function may return NULL if an intact, complete box is not available in the buffer. For MDAT box only, a BoxReader object is returned as long as the box header is available.
+ +

Definition at line 37 of file box_reader.cc.

+ +
+
+ +
+
+ + + + + + + +
bool edash_packager::media::mp4::BoxReader::ScanChildren ()
+
+

Scan through all boxes within the current box, starting at the current buffer position. Must be called before any of the *Child functions work.

+
Returns
true on success, false otherwise.
+ +

Definition at line 103 of file box_reader.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool edash_packager::media::mp4::BoxReader::StartTopLevelBox (const uint8_t * buf,
const size_t buf_size,
FourCC * type,
uint64_t * box_size,
bool * err 
)
+
+static
+
+

Read the box header from the current buffer.

+
Parameters
+ + + + + + +
bufis not retained.
buf_sizeindicates the size of the input buffer.
[out]typeis filled with the fourcc of the box on success.
[out]box_sizeis filled with the size of the box on success.
[out]erris set to true if there was a stream-level error when reading the box.
+
+
+
Returns
true if there is enough data to read the header and the header is sane, which does not imply that the entire box is in the buffer.
+ +

Definition at line 60 of file box_reader.cc.

+ +
+
+ +
+
+ + + + + + + + +
bool edash_packager::media::mp4::BoxReader::TryReadChild (Boxchild)
+
+

Read one child if available.

+
Returns
false on error, true on successful read or on child absent.
+ +

Definition at line 140 of file box_reader.cc.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + + + + +
bool edash_packager::media::mp4::BoxReader::TryReadChildren (std::vector< T > * children)
+
+

Read any number of children.

+
Returns
false on error.
+ +

Definition at line 139 of file box_reader.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.png b/sdk/db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.png new file mode 100644 index 0000000000..fc9c62a5dd Binary files /dev/null and b/sdk/db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.png differ diff --git a/sdk/db/d71/http__key__fetcher_8h_source.html b/sdk/db/d71/http__key__fetcher_8h_source.html new file mode 100644 index 0000000000..d300dd93d1 --- /dev/null +++ b/sdk/db/d71/http__key__fetcher_8h_source.html @@ -0,0 +1,158 @@ + + + + + + +DASH Media Packaging SDK: media/base/http_key_fetcher.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
http_key_fetcher.h
+
+
+
1 // Copyright 2014 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 //
+
10 
+
11 #ifndef MEDIA_BASE_HTTP_KEY_FETCHER_H_
+
12 #define MEDIA_BASE_HTTP_KEY_FETCHER_H_
+
13 
+
14 #include "packager/base/compiler_specific.h"
+
15 #include "packager/media/base/key_fetcher.h"
+
16 #include "packager/media/base/status.h"
+
17 
+
18 namespace edash_packager {
+
19 namespace media {
+
20 
+
26 class HttpKeyFetcher : public KeyFetcher {
+
27  public:
+ +
32  HttpKeyFetcher(uint32_t timeout_in_seconds);
+
33  virtual ~HttpKeyFetcher();
+
34 
+
36  virtual Status FetchKeys(const std::string& url,
+
37  const std::string& request,
+
38  std::string* response) OVERRIDE;
+
39 
+
45  virtual Status Get(const std::string& url, std::string* response);
+
46 
+
52  virtual Status Post(const std::string& url,
+
53  const std::string& data,
+
54  std::string* response);
+
55 
+
56  private:
+
57  enum HttpMethod {
+
58  GET,
+
59  POST,
+
60  PUT
+
61  };
+
62 
+
63  // Internal implementation of HTTP functions, e.g. Get and Post.
+
64  Status FetchInternal(HttpMethod method, const std::string& url,
+
65  const std::string& data, std::string* response);
+
66 
+
67  const uint32_t timeout_in_seconds_;
+
68 
+
69  DISALLOW_COPY_AND_ASSIGN(HttpKeyFetcher);
+
70 };
+
71 
+
72 } // namespace media
+
73 } // namespace edash_packager
+
74 
+
75 #endif // MEDIA_BASE_HTTP_KEY_FETCHER_H_
+
HttpKeyFetcher()
Creates a fetcher with no timeout.
+
Base class for fetching keys from the license service.
Definition: key_fetcher.h:17
+ +
virtual Status Get(const std::string &url, std::string *response)
+
virtual Status Post(const std::string &url, const std::string &data, std::string *response)
+
virtual Status FetchKeys(const std::string &url, const std::string &request, std::string *response) OVERRIDE
+ +
+ + + + diff --git a/sdk/db/d79/structedash__packager_1_1media_1_1mp4_1_1EditListEntry-members.html b/sdk/db/d79/structedash__packager_1_1media_1_1mp4_1_1EditListEntry-members.html new file mode 100644 index 0000000000..b7229386b5 --- /dev/null +++ b/sdk/db/d79/structedash__packager_1_1media_1_1mp4_1_1EditListEntry-members.html @@ -0,0 +1,108 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::EditListEntry Member List
+
+
+ +

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

+ + + + + +
media_rate_fraction (defined in edash_packager::media::mp4::EditListEntry)edash_packager::media::mp4::EditListEntry
media_rate_integer (defined in edash_packager::media::mp4::EditListEntry)edash_packager::media::mp4::EditListEntry
media_time (defined in edash_packager::media::mp4::EditListEntry)edash_packager::media::mp4::EditListEntry
segment_duration (defined in edash_packager::media::mp4::EditListEntry)edash_packager::media::mp4::EditListEntry
+ + + + diff --git a/sdk/db/d7e/muxer__options_8cc_source.html b/sdk/db/d7e/muxer__options_8cc_source.html new file mode 100644 index 0000000000..7b8aaa28a8 --- /dev/null +++ b/sdk/db/d7e/muxer__options_8cc_source.html @@ -0,0 +1,121 @@ + + + + + + +DASH Media Packaging SDK: media/base/muxer_options.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
muxer_options.cc
+
+
+
1 // Copyright 2014 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/base/muxer_options.h"
+
8 
+
9 namespace edash_packager {
+
10 namespace media {
+
11 
+
12 MuxerOptions::MuxerOptions()
+
13  : single_segment(false),
+
14  segment_duration(0),
+
15  fragment_duration(0),
+
16  segment_sap_aligned(false),
+
17  fragment_sap_aligned(false),
+
18  num_subsegments_per_sidx(0),
+
19  bandwidth(0) {}
+
20 MuxerOptions::~MuxerOptions() {}
+
21 
+
22 } // namespace media
+
23 } // namespace edash_packager
+
+ + + + diff --git a/sdk/db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html b/sdk/db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html new file mode 100644 index 0000000000..4ac81c0593 --- /dev/null +++ b/sdk/db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html @@ -0,0 +1,191 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::CompactSampleSize Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::CompactSampleSize Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::CompactSampleSize:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + +

+Public Attributes

+uint8_t field_size
 
+std::vector< uint32_t > sizes
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 291 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::CompactSampleSize::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 631 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.png b/sdk/db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.png new file mode 100644 index 0000000000..fcbd9a2039 Binary files /dev/null and b/sdk/db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.png differ diff --git a/sdk/db/d8f/mp4__muxer_8h_source.html b/sdk/db/d8f/mp4__muxer_8h_source.html new file mode 100644 index 0000000000..76e742b5c2 --- /dev/null +++ b/sdk/db/d8f/mp4__muxer_8h_source.html @@ -0,0 +1,183 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/mp4_muxer.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mp4_muxer.h
+
+
+
1 // Copyright 2014 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_FORMATS_MP4_MP4_MUXER_H_
+
8 #define MEDIA_FORMATS_MP4_MP4_MUXER_H_
+
9 
+
10 #include <vector>
+
11 
+
12 #include "packager/media/base/muxer.h"
+
13 #include "packager/media/formats/mp4/fourccs.h"
+
14 
+
15 namespace edash_packager {
+
16 namespace media {
+
17 
+
18 class AudioStreamInfo;
+
19 class StreamInfo;
+
20 class VideoStreamInfo;
+
21 
+
22 namespace mp4 {
+
23 
+
24 class Segmenter;
+
25 
+
26 struct ProtectionSchemeInfo;
+
27 struct ProtectionSystemSpecificHeader;
+
28 struct Track;
+
29 
+
32 class MP4Muxer : public Muxer {
+
33  public:
+
35  explicit MP4Muxer(const MuxerOptions& options);
+
36  virtual ~MP4Muxer();
+
37 
+
38  private:
+
39  // Muxer implementation overrides.
+
40  virtual Status Initialize() OVERRIDE;
+
41  virtual Status Finalize() OVERRIDE;
+
42  virtual Status DoAddSample(const MediaStream* stream,
+
43  scoped_refptr<MediaSample> sample) OVERRIDE;
+
44 
+
45  // Generate Audio/Video Track atom.
+
46  void InitializeTrak(const StreamInfo* info, Track* trak);
+
47  void GenerateAudioTrak(const AudioStreamInfo* audio_info,
+
48  Track* trak,
+
49  uint32_t track_id);
+
50  void GenerateVideoTrak(const VideoStreamInfo* video_info,
+
51  Track* trak,
+
52  uint32_t track_id);
+
53 
+
54  // Gets |start| and |end| initialization range. Returns true if there is an
+
55  // init range and sets start-end byte-range-spec specified in RFC2616.
+
56  bool GetInitRangeStartAndEnd(uint32_t* start, uint32_t* end);
+
57 
+
58  // Gets |start| and |end| index range. Returns true if there is an index range
+
59  // and sets start-end byte-range-spec specified in RFC2616.
+
60  bool GetIndexRangeStartAndEnd(uint32_t* start, uint32_t* end);
+
61 
+
62  // Fire events if there are no errors and Muxer::muxer_listener() is not NULL.
+
63  void FireOnMediaStartEvent();
+
64  void FireOnMediaEndEvent();
+
65 
+
66  // Get time in seconds since midnight, Jan. 1, 1904, in UTC Time.
+
67  uint64_t IsoTimeNow();
+
68 
+
69  scoped_ptr<Segmenter> segmenter_;
+
70 
+
71  DISALLOW_COPY_AND_ASSIGN(MP4Muxer);
+
72 };
+
73 
+
74 } // namespace mp4
+
75 } // namespace media
+
76 } // namespace edash_packager
+
77 
+
78 #endif // MEDIA_FORMATS_MP4_MP4_MUXER_H_
+
MP4Muxer(const MuxerOptions &options)
Create a MP4Muxer object from MuxerOptions.
Definition: mp4_muxer.cc:43
+
Holds audio stream information.
+ +
Abstract class holds stream information.
Definition: stream_info.h:25
+ + +
Holds video stream information.
+ +
This structure contains the list of configuration options for Muxer.
Definition: muxer_options.h:18
+ +
+ + + + diff --git a/sdk/db/d96/wvm__media__parser_8h_source.html b/sdk/db/d96/wvm__media__parser_8h_source.html new file mode 100644 index 0000000000..3ab9489b95 --- /dev/null +++ b/sdk/db/d96/wvm__media__parser_8h_source.html @@ -0,0 +1,373 @@ + + + + + + +DASH Media Packaging SDK: media/formats/wvm/wvm_media_parser.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
wvm_media_parser.h
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 // Media parser for a Widevine Media Format (WVM) file.
+
5 
+
6 #ifndef MEDIA_FORMATS_WVM_WVM_MEDIA_PARSER_H_
+
7 #define MEDIA_FORMATS_WVM_WVM_MEDIA_PARSER_H_
+
8 
+
9 #include <deque>
+
10 #include <map>
+
11 #include <string>
+
12 #include <vector>
+
13 
+
14 #include "packager/base/memory/scoped_ptr.h"
+
15 #include "packager/media/base/media_parser.h"
+
16 #include "packager/media/base/network_util.h"
+
17 #include "packager/media/filters/h264_byte_to_unit_stream_converter.h"
+
18 
+
19 namespace edash_packager {
+
20 namespace media {
+
21 
+
22 class AesCbcCtsDecryptor;
+
23 class KeySource;
+
24 struct EncryptionKey;
+
25 
+
26 namespace wvm {
+
27 
+ +
29  public:
+ + +
32  uint32_t demux_stream_id;
+
33  uint32_t parsed_audio_or_video_stream_id;
+
34  scoped_refptr<MediaSample> media_sample;
+
35 };
+
36 
+ +
38  public:
+ +
40  ~PrevSampleData();
+
41  void Reset();
+
42  scoped_refptr<MediaSample> audio_sample;
+
43  scoped_refptr<MediaSample> video_sample;
+
44  uint32_t audio_stream_id;
+
45  uint32_t video_stream_id;
+
46  int64_t audio_sample_duration;
+
47  int64_t video_sample_duration;
+
48 };
+
49 
+
50 class WvmMediaParser : public MediaParser {
+
51  public:
+ +
53  virtual ~WvmMediaParser();
+
54 
+
55  // MediaParser implementation overrides.
+
56  virtual void Init(const InitCB& init_cb,
+
57  const NewSampleCB& new_sample_cb,
+
58  KeySource* decryption_key_source) OVERRIDE;
+
59 
+
60  virtual void Flush() OVERRIDE;
+
61 
+
62  virtual bool Parse(const uint8_t* buf, int size) OVERRIDE;
+
63 
+
64  private:
+
65  enum Tag {
+
66  CypherVersion = 0,
+
67  TrackOffset = 1,
+
68  TrackSize = 2,
+
69  TrackDuration = 3,
+
70  TrackBitRate = 4,
+
71  TrackTrickPlayRate = 5,
+
72  TrackAdaptationInterval = 6,
+
73  TrackFlags = 7,
+
74  VideoType = 8,
+
75  VideoProfile = 9,
+
76  VideoLevel = 10,
+
77  VideoWidth = 11,
+
78  VideoHeight = 12,
+
79  VideoTicksPerFrame = 13,
+
80  VideoBitRate = 14,
+
81  AudioType = 15,
+
82  AudioProfile = 16,
+
83  AudioNumChannels = 17,
+
84  AudioSampleFrequency = 18,
+
85  AudioBitRate = 19,
+
86  TrackVersion = 20,
+
87  Title = 21,
+
88  Copyright = 22,
+
89  ChapterIndex = 23,
+
90  TimeIndex = 24,
+
91  Thumbnail = 25,
+
92  ObjectSeqNum = 26,
+
93  ThumbnailOffset = 27,
+
94  ThumbnailSize = 28,
+
95  NumEntries = 29,
+
96  Chapters = 30,
+
97  VideoPixelWidth = 31,
+
98  VideoPixelHeight = 32,
+
99  FileSize = 33,
+
100  SparseDownloadUrl = 34,
+
101  SparseDownloadRangeTranslations = 35,
+
102  SparseDownloadMap = 36,
+
103  AudioSampleSize = 37,
+
104  Audio_EsDescriptor = 38,
+
105  AVCDecoderConfigurationRecord = 39,
+
106  Audio_EC3SpecificData = 40,
+
107  AudioIdentifier = 41,
+
108  VideoStreamId = 42,
+
109  VideoStreamType = 43,
+
110  AudioStreamId = 44,
+
111  AudioStreamType = 45,
+
112  Audio_DtsSpecificData = 46,
+
113  Audio_AC3SpecificData = 47,
+
114  Unset = 48
+
115  };
+
116 
+
117  enum State {
+
118  StartCode1 = 0,
+
119  StartCode2,
+
120  StartCode3,
+
121  StartCode4,
+
122  PackHeader1,
+
123  PackHeader2,
+
124  PackHeader3,
+
125  PackHeader4,
+
126  PackHeader5,
+
127  PackHeader6,
+
128  PackHeader7,
+
129  PackHeader8,
+
130  PackHeader9,
+
131  PackHeader10,
+
132  PackHeaderStuffingSkip,
+
133  SystemHeader1,
+
134  SystemHeader2,
+
135  SystemHeaderSkip,
+
136  PesStreamId,
+
137  PesPacketLength1,
+
138  PesPacketLength2,
+
139  PesExtension1,
+
140  PesExtension2,
+
141  PesExtension3,
+
142  Pts1,
+
143  Pts2,
+
144  Pts3,
+
145  Pts4,
+
146  Pts5,
+
147  Dts1,
+
148  Dts2,
+
149  Dts3,
+
150  Dts4,
+
151  Dts5,
+
152  PesHeaderData,
+
153  PesPayload,
+
154  EsPayload,
+
155  PsmPayload,
+
156  EcmPayload,
+
157  IndexPayload,
+
158  Padding,
+
159  ProgramEnd
+
160  };
+
161 
+
162  bool ProcessEcm();
+
163 
+
164  // Index denotes 'search index' in the WVM content.
+
165  bool ParseIndexEntry();
+
166 
+
167  bool DemuxNextPes(bool is_program_end);
+
168 
+
169  void StartMediaSampleDemux();
+
170 
+
171  template <typename T>
+
172  Tag GetTag(const uint8_t& tag,
+
173  const uint32_t& length,
+
174  const uint8_t* start_index,
+
175  T* value) {
+
176  if (length == sizeof(uint8_t)) {
+
177  *value = (uint8_t)(*start_index);
+
178  } else if (length == sizeof(int8_t)) {
+
179  *value = (int8_t)(*start_index);
+
180  } else if (length == sizeof(uint16_t)) {
+
181  *value = (uint16_t)(ntohsFromBuffer(start_index));
+
182  } else if (length == sizeof(int16_t)) {
+
183  *value = (int16_t)(ntohsFromBuffer(start_index));
+
184  } else if (length == sizeof(uint32_t)) {
+
185  *value = (uint32_t)(ntohlFromBuffer(start_index));
+
186  } else if (length == sizeof(int32_t)) {
+
187  *value = (int32_t)(ntohlFromBuffer(start_index));
+
188  } else if (length == sizeof(uint64_t)) {
+
189  *value = (uint64_t)(ntohllFromBuffer(start_index));
+
190  } else if (length == sizeof(int64_t)) {
+
191  *value = (int64_t)(ntohllFromBuffer(start_index));
+
192  } else {
+
193  *value = 0;
+
194  }
+
195  return Tag(tag);
+
196  }
+
197 
+
198  // |must_process_encrypted| setting determines if Output() should attempt
+
199  // to ouput media sample as encrypted.
+
200  bool Output(bool must_process_encrypted);
+
201 
+
202  bool GetAssetKey(const uint32_t asset_id, EncryptionKey* encryption_key);
+
203 
+
204  // Callback invoked by the ES media parser
+
205  // to emit a new audio/video access unit.
+
206  bool EmitSample(uint32_t parsed_audio_or_video_stream_id,
+
207  uint32_t stream_id,
+
208  scoped_refptr<MediaSample>& new_sample,
+
209  bool isLastSample);
+
210 
+
211  bool EmitPendingSamples();
+
212 
+
213  bool EmitLastSample(uint32_t stream_id,
+
214  scoped_refptr<MediaSample>& new_sample);
+
215 
+
216  // List of callbacks.t
+
217  InitCB init_cb_;
+
218  NewSampleCB new_sample_cb_;
+
219 
+
220  // Whether |init_cb_| has been invoked.
+
221  bool is_initialized_;
+
222  // Internal content parsing state.
+
223  State parse_state_;
+
224 
+
225  bool is_psm_needed_;
+
226  uint32_t skip_bytes_;
+
227  bool metadata_is_complete_;
+
228  uint8_t current_program_id_;
+
229  uint32_t pes_stream_id_;
+
230  uint32_t prev_pes_stream_id_;
+
231  uint16_t pes_packet_bytes_;
+
232  uint8_t pes_flags_1_;
+
233  uint8_t pes_flags_2_;
+
234  uint8_t prev_pes_flags_1_;
+
235  uint8_t pes_header_data_bytes_;
+
236  uint64_t timestamp_;
+
237  uint64_t pts_;
+
238  uint64_t dts_;
+
239  uint8_t index_program_id_;
+
240  scoped_refptr<MediaSample> media_sample_;
+
241  uint32_t crypto_unit_start_pos_;
+
242  PrevSampleData prev_media_sample_data_;
+
243  H264ByteToUnitStreamConverter byte_to_unit_stream_converter_;
+
244 
+
245  std::vector<uint8_t, std::allocator<uint8_t> > ecm_;
+
246  std::vector<uint8_t> psm_data_;
+
247  std::vector<uint8_t> index_data_;
+
248  std::map<std::string, uint32_t> program_demux_stream_map_;
+
249  int stream_id_count_;
+
250  std::vector<scoped_refptr<StreamInfo> > stream_infos_;
+
251  std::deque<DemuxStreamIdMediaSample> media_sample_queue_;
+
252  std::vector<uint8_t> sample_data_;
+
253  KeySource* decryption_key_source_;
+
254  scoped_ptr<AesCbcCtsDecryptor> content_decryptor_;
+
255 
+
256  DISALLOW_COPY_AND_ASSIGN(WvmMediaParser);
+
257 };
+
258 
+
259 } // namespace wvm
+
260 } // namespace media
+
261 } // namespace edash_packager
+
262 
+
263 #endif // MEDIA_FORMATS_WVM_WVM_MEDIA_PARSER_H_
+ + +
virtual bool Parse(const uint8_t *buf, int size) OVERRIDE
+
virtual void Init(const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source) OVERRIDE
+ + + + +
base::Callback< bool(uint32_t track_id, const scoped_refptr< MediaSample > &media_sample)> NewSampleCB
Definition: media_parser.h:43
+
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:29
+ +
base::Callback< void(const std::vector< scoped_refptr< StreamInfo > > &stream_info)> InitCB
Definition: media_parser.h:34
+
+ + + + diff --git a/sdk/db/da4/classBandwidthEstimator-members.html b/sdk/db/da4/classBandwidthEstimator-members.html new file mode 100644 index 0000000000..0f25b0c889 --- /dev/null +++ b/sdk/db/da4/classBandwidthEstimator-members.html @@ -0,0 +1,105 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
BandwidthEstimator Member List
+
+
+ +

This is the complete list of members for BandwidthEstimator, including all inherited members.

+ + + + + + +
AddBlock(uint64_t size, double duration) (defined in BandwidthEstimator)BandwidthEstimator
BandwidthEstimator(int num_blocks)BandwidthEstimatorexplicit
Estimate() const (defined in BandwidthEstimator)BandwidthEstimator
kUseAllBlocks (defined in BandwidthEstimator)BandwidthEstimatorstatic
~BandwidthEstimator() (defined in BandwidthEstimator)BandwidthEstimator
+ + + + diff --git a/sdk/db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html b/sdk/db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html new file mode 100644 index 0000000000..c4bcf26e5a --- /dev/null +++ b/sdk/db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html @@ -0,0 +1,567 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::WidevineKeySource Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::WidevineKeySource Class Reference
+
+
+ +

#include <widevine_key_source.h>

+
+Inheritance diagram for edash_packager::media::WidevineKeySource:
+
+
+ + +edash_packager::media::KeySource + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 WidevineKeySource (const std::string &server_url)
 
void set_signer (scoped_ptr< RequestSigner > signer)
 
void set_key_fetcher (scoped_ptr< KeyFetcher > key_fetcher)
 
KeySource implementation overrides.
virtual Status FetchKeys (const std::vector< uint8_t > &content_id, const std::string &policy) OVERRIDE
 
virtual Status FetchKeys (const std::vector< uint8_t > &pssh_data) OVERRIDE
 
virtual Status FetchKeys (uint32_t asset_id) OVERRIDE
 
virtual Status GetKey (TrackType track_type, EncryptionKey *key) OVERRIDE
 
virtual Status GetKey (const std::vector< uint8_t > &key_id, EncryptionKey *key) OVERRIDE
 
virtual Status GetCryptoPeriodKey (uint32_t crypto_period_index, TrackType track_type, EncryptionKey *key) OVERRIDE
 
virtual std::string UUID () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::KeySource
virtual std::string SystemName ()
 
+ + + +

+Protected Attributes

+ClosureThread key_production_thread_
 
+ + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from edash_packager::media::KeySource
enum  TrackType {
+  TRACK_TYPE_UNKNOWN = 0, +TRACK_TYPE_SD = 1, +TRACK_TYPE_HD = 2, +TRACK_TYPE_AUDIO = 3, +
+  TRACK_TYPE_UNSPECIFIED = 4, +NUM_VALID_TRACK_TYPES = 4 +
+ }
 
- Static Public Member Functions inherited from edash_packager::media::KeySource
static scoped_ptr< KeySourceCreateFromHexStrings (const std::string &key_id_hex, const std::string &key_hex, const std::string &pssh_data_hex, const std::string &iv_hex)
 
+static TrackType GetTrackTypeFromString (const std::string &track_type_string)
 Convert string representation of track type to enum representation.
 
+static std::string TrackTypeToString (TrackType track_type)
 Convert TrackType to string.
 
- Static Protected Member Functions inherited from edash_packager::media::KeySource
static std::vector< uint8_t > PsshBoxFromPsshData (const std::vector< uint8_t > &pssh_data)
 
+

Detailed Description

+

WidevineKeySource talks to the Widevine encryption service to acquire the encryption keys.

+ +

Definition at line 26 of file widevine_key_source.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
edash_packager::media::WidevineKeySource::WidevineKeySource (const std::string & server_url)
+
+explicit
+
+
Parameters
+ + +
server_urlis the Widevine common encryption server url.
+
+
+ +

Definition at line 139 of file widevine_key_source.cc.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Status edash_packager::media::WidevineKeySource::FetchKeys (const std::vector< uint8_t > & content_id,
const std::string & policy 
)
+
+virtual
+
+

Fetch keys for CENC from the key server.

+
Parameters
+ + + +
content_idthe unique id identify the content.
policyspecifies the DRM content rights.
+
+
+
Returns
OK on success, an error status otherwise.
+ +

Reimplemented from edash_packager::media::KeySource.

+ +

Definition at line 164 of file widevine_key_source.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Status edash_packager::media::WidevineKeySource::FetchKeys (const std::vector< uint8_t > & pssh_data)
+
+virtual
+
+

Fetch keys for CENC from the key server.

+
Parameters
+ + +
pssh_datais the Data portion of the PSSH box for the content to be decrypted.
+
+
+
Returns
OK on success, an error status otherwise.
+ +

Reimplemented from edash_packager::media::KeySource.

+ +

Definition at line 175 of file widevine_key_source.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Status edash_packager::media::WidevineKeySource::FetchKeys (uint32_t asset_id)
+
+virtual
+
+

Fetch keys for WVM decryption from the key server.

+
Parameters
+ + +
asset_idis the Widevine Classic asset ID for the content to be decrypted.
+
+
+
Returns
OK on success, an error status otherwise.
+ +

Reimplemented from edash_packager::media::KeySource.

+ +

Definition at line 184 of file widevine_key_source.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Status edash_packager::media::WidevineKeySource::GetCryptoPeriodKey (uint32_t crypto_period_index,
TrackType track_type,
EncryptionKeykey 
)
+
+virtual
+
+

Get encryption key of the specified track type at the specified index.

+
Parameters
+ + + + +
crypto_period_indexis the sequence number of the key rotation period for which the key is being retrieved.
track_typeis the type of track for which retrieving the key.
keyis a pointer to the EncryptionKey which will hold the retrieved key. Owner retains ownership, and may not be NULL.
+
+
+
Returns
OK on success, an error status otherwise.
+ +

Reimplemented from edash_packager::media::KeySource.

+ +

Definition at line 217 of file widevine_key_source.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Status edash_packager::media::WidevineKeySource::GetKey (TrackType track_type,
EncryptionKeykey 
)
+
+virtual
+
+

Get encryption key of the specified track type.

+
Parameters
+ + + +
track_typeis the type of track for which retrieving the key.
keyis a pointer to the EncryptionKey which will hold the retrieved key. Owner retains ownership, and may not be NULL.
+
+
+
Returns
OK on success, an error status otherwise.
+ +

Reimplemented from edash_packager::media::KeySource.

+ +

Definition at line 191 of file widevine_key_source.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Status edash_packager::media::WidevineKeySource::GetKey (const std::vector< uint8_t > & key_id,
EncryptionKeykey 
)
+
+virtual
+
+

Get the encryption key specified by the CENC key ID.

+
Parameters
+ + + +
key_idis the unique identifier for the key being retreived.
keyis a pointer to the EncryptionKey which will hold the retrieved key. Owner retains ownership, and may not be NULL.
+
+
+
Returns
OK on success, or an error status otherwise.
+ +

Reimplemented from edash_packager::media::KeySource.

+ +

Definition at line 201 of file widevine_key_source.cc.

+ +
+
+ +
+
+ + + + + + + + +
void edash_packager::media::WidevineKeySource::set_key_fetcher (scoped_ptr< KeyFetcherkey_fetcher)
+
+

Inject an KeyFetcher object, mainly used for testing.

+
Parameters
+ + +
key_fetcherpoints to the KeyFetcher object to be injected.
+
+
+ +

Definition at line 247 of file widevine_key_source.cc.

+ +
+
+ +
+
+ + + + + + + + +
void edash_packager::media::WidevineKeySource::set_signer (scoped_ptr< RequestSignersigner)
+
+

Set signer for the key source.

+
Parameters
+ + +
signersigns the request message.
+
+
+ +

Definition at line 243 of file widevine_key_source.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
std::string edash_packager::media::WidevineKeySource::UUID ()
+
+virtual
+
+

Returns the UUID of the key source in human readable form. UUIDs are listed here: http://dashif.org/identifiers/protection/

+
Returns
UUID of the key source, empty string if not specified.
+ +

Reimplemented from edash_packager::media::KeySource.

+ +

Definition at line 239 of file widevine_key_source.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/db/da4/classedash__packager_1_1media_1_1WidevineKeySource.png b/sdk/db/da4/classedash__packager_1_1media_1_1WidevineKeySource.png new file mode 100644 index 0000000000..77e4e012c8 Binary files /dev/null and b/sdk/db/da4/classedash__packager_1_1media_1_1WidevineKeySource.png differ diff --git a/sdk/db/da5/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry-members.html b/sdk/db/da5/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry-members.html new file mode 100644 index 0000000000..250829f10d --- /dev/null +++ b/sdk/db/da5/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry-members.html @@ -0,0 +1,109 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::CencSampleEncryptionInfoEntry Member List
+
+
+ +

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

+ + + + + + +
CencSampleEncryptionInfoEntry() (defined in edash_packager::media::mp4::CencSampleEncryptionInfoEntry)edash_packager::media::mp4::CencSampleEncryptionInfoEntry
is_encrypted (defined in edash_packager::media::mp4::CencSampleEncryptionInfoEntry)edash_packager::media::mp4::CencSampleEncryptionInfoEntry
iv_size (defined in edash_packager::media::mp4::CencSampleEncryptionInfoEntry)edash_packager::media::mp4::CencSampleEncryptionInfoEntry
key_id (defined in edash_packager::media::mp4::CencSampleEncryptionInfoEntry)edash_packager::media::mp4::CencSampleEncryptionInfoEntry
~CencSampleEncryptionInfoEntry() (defined in edash_packager::media::mp4::CencSampleEncryptionInfoEntry)edash_packager::media::mp4::CencSampleEncryptionInfoEntry
+ + + + diff --git a/sdk/db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html b/sdk/db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html new file mode 100644 index 0000000000..1640585d38 --- /dev/null +++ b/sdk/db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html @@ -0,0 +1,310 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::Fragmenter Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::Fragmenter Class Reference
+
+
+ +

#include <fragmenter.h>

+
+Inheritance diagram for edash_packager::media::mp4::Fragmenter:
+
+
+ + +edash_packager::media::mp4::EncryptingFragmenter +edash_packager::media::mp4::KeyRotationFragmenter + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Fragmenter (TrackFragment *traf)
 
virtual Status AddSample (scoped_refptr< MediaSample > sample)
 
virtual Status InitializeFragment (int64_t first_sample_dts)
 
+virtual void FinalizeFragment ()
 Finalize and optimize the fragment.
 
+void GenerateSegmentReference (SegmentReference *reference)
 Fill reference with current fragment information.
 
+uint64_t fragment_duration () const
 
+uint64_t first_sap_time () const
 
+uint64_t earliest_presentation_time () const
 
+bool fragment_initialized () const
 
+bool fragment_finalized () const
 
+BufferWriterdata ()
 
+BufferWriteraux_data ()
 
+ + + + + + +

+Protected Member Functions

+TrackFragmenttraf ()
 
template<typename T >
bool OptimizeSampleEntries (std::vector< T > *entries, T *default_value)
 
+

Detailed Description

+

Fragmenter is responsible for the generation of MP4 fragments, i.e. 'traf' box and corresponding 'mdat' box.

+ +

Definition at line 29 of file fragmenter.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
edash_packager::media::mp4::Fragmenter::Fragmenter (TrackFragmenttraf)
+
+
Parameters
+ + +
trafpoints to a TrackFragment box.
+
+
+ +

Definition at line 23 of file fragmenter.cc.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
Status edash_packager::media::mp4::Fragmenter::AddSample (scoped_refptr< MediaSamplesample)
+
+virtual
+
+

Add a sample to the fragmenter.

+
Parameters
+ + +
samplepoints to the sample to be added.
+
+
+
Returns
OK on success, an error status otherwise.
+ +

Reimplemented in edash_packager::media::mp4::EncryptingFragmenter.

+ +

Definition at line 36 of file fragmenter.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Status edash_packager::media::mp4::Fragmenter::InitializeFragment (int64_t first_sample_dts)
+
+virtual
+
+

Initialize the fragment with default data.

+
Parameters
+ + +
first_sample_dtsspecifies the decoding timestamp for the first sample for this fragment.
+
+
+
Returns
OK on success, an error status otherwise.
+ +

Reimplemented in edash_packager::media::mp4::EncryptingFragmenter.

+ +

Definition at line 73 of file fragmenter.cc.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::mp4::Fragmenter::OptimizeSampleEntries (std::vector< T > * entries,
T * default_value 
)
+
+protected
+
+

Optimize sample entries table. If all values in entries are identical, then entries is cleared and the value is assigned to default_value; otherwise it is a NOP. Return true if the table is optimized.

+ +

Definition at line 90 of file fragmenter.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.png b/sdk/db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.png new file mode 100644 index 0000000000..e8f12505e6 Binary files /dev/null and b/sdk/db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.png differ diff --git a/sdk/db/dc8/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt-members.html b/sdk/db/dc8/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt-members.html new file mode 100644 index 0000000000..d16abad110 --- /dev/null +++ b/sdk/db/dc8/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt-members.html @@ -0,0 +1,121 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp2t::TsSectionPmt Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + +
Flush() OVERRIDE (defined in edash_packager::media::mp2t::TsSectionPsi)edash_packager::media::mp2t::TsSectionPsivirtual
kPidCat enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
kPidMax enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
kPidNullPacket enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
kPidPat enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
kPidTsdt enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
Parse(bool payload_unit_start_indicator, const uint8_t *buf, int size) OVERRIDE (defined in edash_packager::media::mp2t::TsSectionPsi)edash_packager::media::mp2t::TsSectionPsivirtual
ParsePsiSection(BitReader *bit_reader) OVERRIDE (defined in edash_packager::media::mp2t::TsSectionPmt)edash_packager::media::mp2t::TsSectionPmtvirtual
RegisterPesCb typedef (defined in edash_packager::media::mp2t::TsSectionPmt)edash_packager::media::mp2t::TsSectionPmt
Reset() OVERRIDE (defined in edash_packager::media::mp2t::TsSectionPsi)edash_packager::media::mp2t::TsSectionPsivirtual
ResetPsiSection() OVERRIDE (defined in edash_packager::media::mp2t::TsSectionPmt)edash_packager::media::mp2t::TsSectionPmtvirtual
SpecialPid enum name (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
TsSectionPmt(const RegisterPesCb &register_pes_cb) (defined in edash_packager::media::mp2t::TsSectionPmt)edash_packager::media::mp2t::TsSectionPmtexplicit
TsSectionPsi() (defined in edash_packager::media::mp2t::TsSectionPsi)edash_packager::media::mp2t::TsSectionPsi
~TsSection() (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSectioninlinevirtual
~TsSectionPmt() (defined in edash_packager::media::mp2t::TsSectionPmt)edash_packager::media::mp2t::TsSectionPmtvirtual
~TsSectionPsi() (defined in edash_packager::media::mp2t::TsSectionPsi)edash_packager::media::mp2t::TsSectionPsivirtual
+ + + + diff --git a/sdk/db/dd2/chunk__info__iterator_8h_source.html b/sdk/db/dd2/chunk__info__iterator_8h_source.html new file mode 100644 index 0000000000..351734a03f --- /dev/null +++ b/sdk/db/dd2/chunk__info__iterator_8h_source.html @@ -0,0 +1,169 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/chunk_info_iterator.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
chunk_info_iterator.h
+
+
+
1 // Copyright 2014 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_FORMATS_MP4_CHUNK_INFO_ITERATOR_H_
+
8 #define MEDIA_FORMATS_MP4_CHUNK_INFO_ITERATOR_H_
+
9 
+
10 #include <stdint.h>
+
11 
+
12 #include <vector>
+
13 
+
14 #include "packager/base/macros.h"
+
15 #include "packager/media/formats/mp4/box_definitions.h"
+
16 
+
17 namespace edash_packager {
+
18 namespace media {
+
19 namespace mp4 {
+
20 
+ +
25  public:
+
27  explicit ChunkInfoIterator(const SampleToChunk& sample_to_chunk);
+ +
29 
+
32  bool AdvanceChunk();
+
33 
+
36  bool AdvanceSample();
+
37 
+
39  bool IsValid() const;
+
40 
+
42  uint32_t current_chunk() const { return current_chunk_; }
+
43 
+
45  uint32_t samples_per_chunk() const { return iterator_->samples_per_chunk; }
+
46 
+
48  uint32_t sample_description_index() const {
+
49  return iterator_->sample_description_index;
+
50  }
+
51 
+
54  uint32_t NumSamples(uint32_t start_chunk, uint32_t end_chunk) const;
+
55 
+
57  uint32_t LastFirstChunk() const {
+
58  return chunk_info_table_.empty() ? 0
+
59  : chunk_info_table_.back().first_chunk;
+
60  }
+
61 
+
62  private:
+
63  uint32_t chunk_sample_index_;
+
64  uint32_t current_chunk_;
+
65  const std::vector<ChunkInfo>& chunk_info_table_;
+
66  std::vector<ChunkInfo>::const_iterator iterator_;
+
67 
+
68  DISALLOW_COPY_AND_ASSIGN(ChunkInfoIterator);
+
69 };
+
70 
+
71 } // namespace mp4
+
72 } // namespace media
+
73 } // namespace edash_packager
+
74 
+
75 #endif // MEDIA_FORMATS_MP4_CHUNK_INFO_ITERATOR_H_
+ + + +
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.
+ + + +
+ + + + diff --git a/sdk/db/dd9/sync__sample__iterator_8h_source.html b/sdk/db/dd9/sync__sample__iterator_8h_source.html new file mode 100644 index 0000000000..9fcc9db344 --- /dev/null +++ b/sdk/db/dd9/sync__sample__iterator_8h_source.html @@ -0,0 +1,148 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/sync_sample_iterator.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sync_sample_iterator.h
+
+
+
1 // Copyright 2014 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_FORMATS_MP4_SYNC_SAMPLE_ITERATOR_H_
+
8 #define MEDIA_FORMATS_MP4_SYNC_SAMPLE_ITERATOR_H_
+
9 
+
10 #include <stdint.h>
+
11 
+
12 #include <vector>
+
13 
+
14 #include "packager/base/macros.h"
+
15 #include "packager/media/formats/mp4/box_definitions.h"
+
16 
+
17 namespace edash_packager {
+
18 namespace media {
+
19 namespace mp4 {
+
20 
+ +
24  public:
+
26  explicit SyncSampleIterator(const SyncSample& sync_sample);
+ +
28 
+
31  bool AdvanceSample();
+
32 
+
34  bool IsSyncSample() const;
+
35 
+
37  bool IsSyncSample(uint32_t sample) const;
+
38 
+
39  private:
+
40  uint32_t sample_number_;
+
41  const std::vector<uint32_t>& sync_sample_vector_;
+
42  std::vector<uint32_t>::const_iterator iterator_;
+
43  bool is_empty_;
+
44 
+
45  DISALLOW_COPY_AND_ASSIGN(SyncSampleIterator);
+
46 };
+
47 
+
48 } // namespace mp4
+
49 } // namespace media
+
50 } // namespace edash_packager
+
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/sdk/db/de4/classedash__packager_1_1AdaptationSet.html b/sdk/db/de4/classedash__packager_1_1AdaptationSet.html new file mode 100644 index 0000000000..e008a9cd8e --- /dev/null +++ b/sdk/db/de4/classedash__packager_1_1AdaptationSet.html @@ -0,0 +1,578 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::AdaptationSet Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::AdaptationSet Class Reference
+
+
+ +

#include <mpd_builder.h>

+
+Inheritance diagram for edash_packager::AdaptationSet:
+
+
+ + +edash_packager::MockAdaptationSet + +
+ + + + +

+Public Types

enum  Role {
+  kRoleCaption, +kRoleSubtitle, +kRoleMain, +kRoleAlternate, +
+  kRoleSupplementary, +kRoleCommentary, +kRoleDub +
+ }
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual RepresentationAddRepresentation (const MediaInfo &media_info)
 
virtual void AddContentProtectionElement (const ContentProtectionElement &element)
 
virtual void UpdateContentProtectionPssh (const std::string &drm_uuid, const std::string &pssh)
 
virtual void AddRole (Role role)
 
xml::ScopedXmlPtr< xmlNode >::type GetXml ()
 
void ForceSetSegmentAlignment (bool segment_alignment)
 
virtual void SetGroup (int group_number)
 
virtual int Group () const
 
+uint32_t id () const
 
void OnNewSegmentForRepresentation (uint32_t representation_id, uint64_t start_time, uint64_t duration)
 
void OnSetFrameRateForRepresentation (uint32_t representation_id, uint32_t frame_duration, uint32_t timescale)
 
+ + + +

+Protected Member Functions

 AdaptationSet (uint32_t adaptation_set_id, const std::string &lang, const MpdOptions &mpd_options, MpdBuilder::MpdType mpd_type, base::AtomicSequenceNumber *representation_counter)
 
+ + + +

+Friends

+class MpdBuilder
 
+

Detailed Description

+

AdaptationSet class provides methods to add Representations and <ContentProtection> elements to the AdaptationSet element.

+ +

Definition at line 156 of file mpd_builder.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
edash_packager::AdaptationSet::AdaptationSet (uint32_t adaptation_set_id,
const std::string & lang,
const MpdOptionsmpd_options,
MpdBuilder::MpdType mpd_type,
base::AtomicSequenceNumber * representation_counter 
)
+
+protected
+
+
Parameters
+ + + + + + +
adaptation_set_idis an ID number for this AdaptationSet.
langis the language of this AdaptationSet. Mainly relevant for audio.
mpd_optionsis the options for this MPD.
mpd_typeis the type of this MPD.
representation_counteris a Counter for assigning ID numbers to Representation. It can not be NULL.
+
+
+ +

Definition at line 636 of file mpd_builder.cc.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
void edash_packager::AdaptationSet::AddContentProtectionElement (const ContentProtectionElementelement)
+
+virtual
+
+

Add a ContenProtection element to the adaptation set. AdaptationSet does not add <ContentProtection> elements automatically to itself even if media_info.protected_content is populated. This is because some MPDs should have the elements at AdaptationSet level and some at Representation level.

+
Parameters
+ + +
elementcontains the ContentProtection element contents. If element has {value, schemeIdUri} set and has {“value”, “schemeIdUri”} as key for additional_attributes, then the former is used.
+
+
+ +

Definition at line 693 of file mpd_builder.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Representation * edash_packager::AdaptationSet::AddRepresentation (const MediaInfo & media_info)
+
+virtual
+
+

Create a Representation instance using media_info.

+
Parameters
+ + +
media_infois a MediaInfo object used to initialize the returned Representation instance.
+
+
+
Returns
On success, returns a pointer to Representation. Otherwise returns NULL. The returned pointer is owned by the AdaptationSet instance.
+ +

Definition at line 655 of file mpd_builder.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void edash_packager::AdaptationSet::AddRole (Role role)
+
+virtual
+
+

Set the Role element for this AdaptationSet. The Role element's is schemeIdUri='urn:mpeg:dash:role:2011'. See ISO/IEC 23009-1:2012 section 5.8.5.5.

+
Parameters
+ + +
roleof this AdaptationSet.
+
+
+ +

Definition at line 707 of file mpd_builder.cc.

+ +
+
+ +
+
+ + + + + + + + +
void edash_packager::AdaptationSet::ForceSetSegmentAlignment (bool segment_alignment)
+
+

Forces the (sub)segmentAlignment field to be set to segment_alignment. Use this if you are certain that the (sub)segments are alinged/unaligned for the AdaptationSet.

+
Parameters
+ + +
segment_alignmentis the value used for (sub)segmentAlignment attribute.
+
+
+ +

Definition at line 783 of file mpd_builder.cc.

+ +
+
+ +
+
+ + + + + + + +
xml::ScopedXmlPtr< xmlNode >::type edash_packager::AdaptationSet::GetXml ()
+
+

Makes a copy of AdaptationSet xml element with its child Representation and ContentProtection elements.

+
Returns
On success returns a non-NULL ScopedXmlPtr. Otherwise returns a NULL ScopedXmlPtr.
+ +

Definition at line 713 of file mpd_builder.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int edash_packager::AdaptationSet::Group () const
+
+virtual
+
+
Returns
Returns the value for group. If not set, returns a negative value.
+ +

Definition at line 793 of file mpd_builder.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void edash_packager::AdaptationSet::OnNewSegmentForRepresentation (uint32_t representation_id,
uint64_t start_time,
uint64_t duration 
)
+
+

Notifies the AdaptationSet instance that a new (sub)segment was added to the Representation with representation_id. This must be called every time a (sub)segment is added to a Representation in this AdaptationSet. If a Representation is constructed using AddRepresentation() this is called automatically whenever Representation::AddNewSegment() is is called.

+
Parameters
+ + + + +
representation_idis the id of the Representation with a new segment.
start_timeis the start time of the new segment.
durationis the duration of the new segment.
+
+
+ +

Definition at line 804 of file mpd_builder.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void edash_packager::AdaptationSet::OnSetFrameRateForRepresentation (uint32_t representation_id,
uint32_t frame_duration,
uint32_t timescale 
)
+
+

Notifies the AdaptationSet instance that the sample duration for the Representation was set. The frame duration for a video Representation might not be specified when a Representation is created (by calling AddRepresentation()). This should be used to notify this instance that the frame rate for a Represenatation has been set. This method is called automatically when Represenatation::SetSampleDuration() is called if the Represenatation instance was created using AddRepresentation().

+
Parameters
+ + + +
representation_idis the id of the Representation. is the duration of a frame in the Representation.
timescaleis the timescale of the Representation.
+
+
+ +

Definition at line 817 of file mpd_builder.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void edash_packager::AdaptationSet::SetGroup (int group_number)
+
+virtual
+
+

Sets the AdaptationSet attribute. Passing a negative value to this method will unset the attribute. Note that group=0 is a special group, as mentioned in the DASH MPD specification.

+
Parameters
+ + +
group_numberis the value of AdaptatoinSet.
+
+
+ +

Definition at line 789 of file mpd_builder.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void edash_packager::AdaptationSet::UpdateContentProtectionPssh (const std::string & drm_uuid,
const std::string & pssh 
)
+
+virtual
+
+

Update the 'cenc:pssh' element for drm_uuid ContentProtection element. If the element does not exist, this will add one.

+
Parameters
+ + + +
drm_uuidis the UUID of the DRM for encryption.
psshis the content of <cenc:pssh> element. Note that DASH IF IOP mentions that this should be base64 encoded string of the whole pssh box.
+
+
+
Attention
This might get removed once DASH IF IOP specification makes a a clear guideline on how to handle key rotation. Also to get this working with shaka-player, this method DOES NOT update the PSSH element. Instead, it removes the element regardless of the content of pssh.
+ +

Definition at line 700 of file mpd_builder.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/db/de4/classedash__packager_1_1AdaptationSet.png b/sdk/db/de4/classedash__packager_1_1AdaptationSet.png new file mode 100644 index 0000000000..9b1449c43c Binary files /dev/null and b/sdk/db/de4/classedash__packager_1_1AdaptationSet.png differ diff --git a/sdk/db/de9/classedash__packager_1_1media_1_1StreamDescriptorCompareFn-members.html b/sdk/db/de9/classedash__packager_1_1media_1_1StreamDescriptorCompareFn-members.html new file mode 100644 index 0000000000..f17fda17a2 --- /dev/null +++ b/sdk/db/de9/classedash__packager_1_1media_1_1StreamDescriptorCompareFn-members.html @@ -0,0 +1,105 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::StreamDescriptorCompareFn Member List
+
+
+ +

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

+ + +
operator()(const StreamDescriptor &a, const StreamDescriptor &b) (defined in edash_packager::media::StreamDescriptorCompareFn)edash_packager::media::StreamDescriptorCompareFninline
+ + + + diff --git a/sdk/db/dec/audio__timestamp__helper_8cc_source.html b/sdk/db/dec/audio__timestamp__helper_8cc_source.html new file mode 100644 index 0000000000..0a18364952 --- /dev/null +++ b/sdk/db/dec/audio__timestamp__helper_8cc_source.html @@ -0,0 +1,173 @@ + + + + + + +DASH Media Packaging SDK: media/base/audio_timestamp_helper.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
audio_timestamp_helper.cc
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/base/audio_timestamp_helper.h"
+
6 
+
7 #include "packager/base/logging.h"
+
8 #include "packager/media/base/timestamp.h"
+
9 
+
10 namespace edash_packager {
+
11 namespace media {
+
12 
+
13 AudioTimestampHelper::AudioTimestampHelper(uint32_t timescale,
+
14  uint32_t samples_per_second)
+
15  : base_timestamp_(kNoTimestamp), frame_count_(0) {
+
16  DCHECK_GT(samples_per_second, 0u);
+
17  double fps = samples_per_second;
+
18  ticks_per_frame_ = timescale / fps;
+
19 }
+
20 
+
21 void AudioTimestampHelper::SetBaseTimestamp(int64_t base_timestamp) {
+
22  base_timestamp_ = base_timestamp;
+
23  frame_count_ = 0;
+
24 }
+
25 
+
26 int64_t AudioTimestampHelper::base_timestamp() const {
+
27  return base_timestamp_;
+
28 }
+
29 
+
30 void AudioTimestampHelper::AddFrames(int64_t frame_count) {
+
31  DCHECK_GE(frame_count, 0);
+
32  DCHECK(base_timestamp_ != kNoTimestamp);
+
33  frame_count_ += frame_count;
+
34 }
+
35 
+
36 int64_t AudioTimestampHelper::GetTimestamp() const {
+
37  return ComputeTimestamp(frame_count_);
+
38 }
+
39 
+
40 int64_t AudioTimestampHelper::GetFrameDuration(int64_t frame_count) const {
+
41  DCHECK_GE(frame_count, 0);
+
42  int64_t end_timestamp = ComputeTimestamp(frame_count_ + frame_count);
+
43  return end_timestamp - GetTimestamp();
+
44 }
+
45 
+
46 int64_t AudioTimestampHelper::GetFramesToTarget(int64_t target) const {
+
47  DCHECK(base_timestamp_ != kNoTimestamp);
+
48  DCHECK(target >= base_timestamp_);
+
49 
+
50  int64_t delta_in_ticks = (target - GetTimestamp());
+
51  if (delta_in_ticks == 0)
+
52  return 0;
+
53 
+
54  // Compute a timestamp relative to |base_timestamp_| since timestamps
+
55  // created from |frame_count_| are computed relative to this base.
+
56  // This ensures that the time to frame computation here is the proper inverse
+
57  // of the frame to time computation in ComputeTimestamp().
+
58  int64_t delta_from_base = target - base_timestamp_;
+
59 
+
60  // Compute frame count for the time delta. This computation rounds to
+
61  // the nearest whole number of frames.
+
62  double threshold = ticks_per_frame_ / 2;
+
63  int64_t target_frame_count = (delta_from_base + threshold) / ticks_per_frame_;
+
64  return target_frame_count - frame_count_;
+
65 }
+
66 
+
67 int64_t AudioTimestampHelper::ComputeTimestamp(int64_t frame_count) const {
+
68  DCHECK_GE(frame_count, 0);
+
69  DCHECK(base_timestamp_ != kNoTimestamp);
+
70  double frames_ticks = ticks_per_frame_ * frame_count;
+
71  return base_timestamp_ + frames_ticks;
+
72 }
+
73 
+
74 } // namespace media
+
75 } // namespace edash_packager
+
+ + + + diff --git a/sdk/db/df2/classedash__packager_1_1media_1_1mp2t_1_1EsParser.html b/sdk/db/df2/classedash__packager_1_1media_1_1mp2t_1_1EsParser.html new file mode 100644 index 0000000000..80a331a40a --- /dev/null +++ b/sdk/db/df2/classedash__packager_1_1media_1_1mp2t_1_1EsParser.html @@ -0,0 +1,151 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp2t::EsParser Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp2t::EsParser Class Referenceabstract
+
+
+
+Inheritance diagram for edash_packager::media::mp2t::EsParser:
+
+
+ + +edash_packager::media::mp2t::EsParserAdts +edash_packager::media::mp2t::EsParserH264 + +
+ + + + + + +

+Public Types

+typedef base::Callback< void(scoped_refptr
+< StreamInfo > &)> 
NewStreamInfoCB
 
+typedef base::Callback< void(uint32_t,
+scoped_refptr< MediaSample > &)> 
EmitSampleCB
 
+ + + + + + + + + + + +

+Public Member Functions

EsParser (uint32_t pid)
 
+virtual bool Parse (const uint8_t *buf, int size, int64_t pts, int64_t dts)=0
 
+virtual void Flush ()=0
 
+virtual void Reset ()=0
 
+uint32_t pid ()
 
+

Detailed Description

+
+

Definition at line 21 of file es_parser.h.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/sdk/db/df2/classedash__packager_1_1media_1_1mp2t_1_1EsParser.png b/sdk/db/df2/classedash__packager_1_1media_1_1mp2t_1_1EsParser.png new file mode 100644 index 0000000000..3f50fd135a Binary files /dev/null and b/sdk/db/df2/classedash__packager_1_1media_1_1mp2t_1_1EsParser.png differ diff --git a/sdk/db/df6/muxer_8h_source.html b/sdk/db/df6/muxer_8h_source.html new file mode 100644 index 0000000000..470e16adc6 --- /dev/null +++ b/sdk/db/df6/muxer_8h_source.html @@ -0,0 +1,216 @@ + + + + + + +DASH Media Packaging SDK: media/base/muxer.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
muxer.h
+
+
+
1 // Copyright 2014 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 // Defines the muxer interface.
+
8 
+
9 #ifndef MEDIA_BASE_MUXER_H_
+
10 #define MEDIA_BASE_MUXER_H_
+
11 
+
12 #include <vector>
+
13 
+
14 #include "packager/base/memory/ref_counted.h"
+
15 #include "packager/base/memory/scoped_ptr.h"
+
16 #include "packager/base/time/clock.h"
+
17 #include "packager/media/base/muxer_options.h"
+
18 #include "packager/media/base/status.h"
+
19 #include "packager/media/event/muxer_listener.h"
+
20 #include "packager/media/event/progress_listener.h"
+
21 
+
22 namespace edash_packager {
+
23 namespace media {
+
24 
+
25 class KeySource;
+
26 class MediaSample;
+
27 class MediaStream;
+
28 
+
32 class Muxer {
+
33  public:
+
34  explicit Muxer(const MuxerOptions& options);
+
35  virtual ~Muxer();
+
36 
+
47  void SetKeySource(KeySource* encryption_key_source,
+
48  uint32_t max_sd_pixels,
+
49  double clear_lead_in_seconds,
+
50  double crypto_period_duration_in_seconds);
+
51 
+
53  void AddStream(MediaStream* stream);
+
54 
+
56  Status Run();
+
57 
+
60  void Cancel();
+
61 
+
64  void SetMuxerListener(scoped_ptr<MuxerListener> muxer_listener);
+
65 
+
68  void SetProgressListener(scoped_ptr<ProgressListener> progress_listener);
+
69 
+
70  const std::vector<MediaStream*>& streams() const { return streams_; }
+
71 
+
78  void set_clock(base::Clock* clock) {
+
79  clock_ = clock;
+
80  }
+
81 
+
82  protected:
+
83  const MuxerOptions& options() const { return options_; }
+
84  KeySource* encryption_key_source() {
+
85  return encryption_key_source_;
+
86  }
+
87  uint32_t max_sd_pixels() const { return max_sd_pixels_; }
+
88  double clear_lead_in_seconds() const { return clear_lead_in_seconds_; }
+
89  double crypto_period_duration_in_seconds() const {
+
90  return crypto_period_duration_in_seconds_;
+
91  }
+
92  MuxerListener* muxer_listener() { return muxer_listener_.get(); }
+
93  ProgressListener* progress_listener() { return progress_listener_.get(); }
+
94  base::Clock* clock() { return clock_; }
+
95 
+
96  private:
+
97  friend class MediaStream; // Needed to access AddSample.
+
98 
+
99  // Add new media sample.
+
100  Status AddSample(const MediaStream* stream,
+
101  scoped_refptr<MediaSample> sample);
+
102 
+
103  // Initialize the muxer.
+
104  virtual Status Initialize() = 0;
+
105 
+
106  // Final clean up.
+
107  virtual Status Finalize() = 0;
+
108 
+
109  // AddSample implementation.
+
110  virtual Status DoAddSample(const MediaStream* stream,
+
111  scoped_refptr<MediaSample> sample) = 0;
+
112 
+
113  MuxerOptions options_;
+
114  bool initialized_;
+
115  std::vector<MediaStream*> streams_;
+
116  KeySource* encryption_key_source_;
+
117  uint32_t max_sd_pixels_;
+
118  double clear_lead_in_seconds_;
+
119  double crypto_period_duration_in_seconds_;
+
120  bool cancelled_;
+
121 
+
122  scoped_ptr<MuxerListener> muxer_listener_;
+
123  scoped_ptr<ProgressListener> progress_listener_;
+
124  // An external injected clock, can be NULL.
+
125  base::Clock* clock_;
+
126 
+
127  DISALLOW_COPY_AND_ASSIGN(Muxer);
+
128 };
+
129 
+
130 } // namespace media
+
131 } // namespace edash_packager
+
132 
+
133 #endif // MEDIA_BASE_MUXER_H_
+
void SetMuxerListener(scoped_ptr< MuxerListener > muxer_listener)
Definition: muxer.cc:82
+ +
void set_clock(base::Clock *clock)
Definition: muxer.h:78
+
void SetProgressListener(scoped_ptr< ProgressListener > progress_listener)
Definition: muxer.cc:86
+
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:29
+
Status Run()
Drive the remuxing from muxer side (pull).
Definition: muxer.cc:44
+
void AddStream(MediaStream *stream)
Add video/audio stream.
Definition: muxer.cc:38
+ + +
This structure contains the list of configuration options for Muxer.
Definition: muxer_options.h:18
+
void SetKeySource(KeySource *encryption_key_source, uint32_t max_sd_pixels, double clear_lead_in_seconds, double crypto_period_duration_in_seconds)
Definition: muxer.cc:27
+ +
+ + + + diff --git a/sdk/db/df7/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi-members.html b/sdk/db/df7/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi-members.html new file mode 100644 index 0000000000..5dac3a4c02 --- /dev/null +++ b/sdk/db/df7/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi-members.html @@ -0,0 +1,118 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp2t::TsSectionPsi Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + +
Flush() OVERRIDE (defined in edash_packager::media::mp2t::TsSectionPsi)edash_packager::media::mp2t::TsSectionPsivirtual
kPidCat enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
kPidMax enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
kPidNullPacket enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
kPidPat enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
kPidTsdt enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
Parse(bool payload_unit_start_indicator, const uint8_t *buf, int size) OVERRIDE (defined in edash_packager::media::mp2t::TsSectionPsi)edash_packager::media::mp2t::TsSectionPsivirtual
ParsePsiSection(BitReader *bit_reader)=0 (defined in edash_packager::media::mp2t::TsSectionPsi)edash_packager::media::mp2t::TsSectionPsipure virtual
Reset() OVERRIDE (defined in edash_packager::media::mp2t::TsSectionPsi)edash_packager::media::mp2t::TsSectionPsivirtual
ResetPsiSection()=0 (defined in edash_packager::media::mp2t::TsSectionPsi)edash_packager::media::mp2t::TsSectionPsipure virtual
SpecialPid enum name (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
TsSectionPsi() (defined in edash_packager::media::mp2t::TsSectionPsi)edash_packager::media::mp2t::TsSectionPsi
~TsSection() (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSectioninlinevirtual
~TsSectionPsi() (defined in edash_packager::media::mp2t::TsSectionPsi)edash_packager::media::mp2t::TsSectionPsivirtual
+ + + + diff --git a/sdk/db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html b/sdk/db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html new file mode 100644 index 0000000000..9a8e026f4a --- /dev/null +++ b/sdk/db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html @@ -0,0 +1,197 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::VideoMediaHeader Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::VideoMediaHeader Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::VideoMediaHeader:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + + + + + +

+Public Attributes

+uint16_t graphicsmode
 
+uint16_t opcolor_red
 
+uint16_t opcolor_green
 
+uint16_t opcolor_blue
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 343 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::VideoMediaHeader::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1193 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.png b/sdk/db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.png new file mode 100644 index 0000000000..96f7f0a05b Binary files /dev/null and b/sdk/db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.png differ diff --git a/sdk/db/dfb/mpd__utils_8cc_source.html b/sdk/db/dfb/mpd__utils_8cc_source.html new file mode 100644 index 0000000000..dfe5338b39 --- /dev/null +++ b/sdk/db/dfb/mpd__utils_8cc_source.html @@ -0,0 +1,366 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/mpd_utils.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mpd_utils.cc
+
+
+
1 // Copyright 2014 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/mpd/base/mpd_utils.h"
+
8 
+
9 #include <libxml/tree.h>
+
10 
+
11 #include "packager/base/logging.h"
+
12 #include "packager/base/strings/string_number_conversions.h"
+
13 #include "packager/mpd/base/xml/scoped_xml_ptr.h"
+
14 
+
15 namespace edash_packager {
+
16 
+
17 bool HasVODOnlyFields(const MediaInfo& media_info) {
+
18  return media_info.has_init_range() || media_info.has_index_range() ||
+
19  media_info.has_media_file_name() ||
+
20  media_info.has_media_duration_seconds();
+
21 }
+
22 
+
23 bool HasLiveOnlyFields(const MediaInfo& media_info) {
+
24  return media_info.has_init_segment_name() ||
+
25  media_info.has_segment_template() ||
+
26  media_info.has_segment_duration_seconds();
+
27 }
+
28 
+
29 void RemoveDuplicateAttributes(
+
30  ContentProtectionElement* content_protection_element) {
+
31  DCHECK(content_protection_element);
+
32  typedef std::map<std::string, std::string> AttributesMap;
+
33 
+
34  AttributesMap& attributes = content_protection_element->additional_attributes;
+
35  if (!content_protection_element->value.empty())
+
36  attributes.erase("value");
+
37 
+
38  if (!content_protection_element->scheme_id_uri.empty())
+
39  attributes.erase("schemeIdUri");
+
40 }
+
41 
+
42 std::string GetCodecs(const MediaInfo& media_info) {
+
43  std::string video_codec;
+
44  if (media_info.has_video_info())
+
45  video_codec = media_info.video_info().codec();
+
46 
+
47  std::string audio_codec;
+
48  if (media_info.has_audio_info())
+
49  audio_codec = media_info.audio_info().codec();
+
50 
+
51  if (!video_codec.empty() && !audio_codec.empty()) {
+
52  return video_codec + "," + audio_codec;
+
53  } else if (!video_codec.empty()) {
+
54  return video_codec;
+
55  } else if (!audio_codec.empty()) {
+
56  return audio_codec;
+
57  }
+
58 
+
59  return "";
+
60 }
+
61 
+
62 std::string SecondsToXmlDuration(double seconds) {
+
63  return "PT" + base::DoubleToString(seconds) + "S";
+
64 }
+
65 
+
66 bool GetDurationAttribute(xmlNodePtr node, float* duration) {
+
67  DCHECK(node);
+
68  DCHECK(duration);
+
69  static const char kDuration[] = "duration";
+
70  xml::ScopedXmlPtr<xmlChar>::type duration_value(
+
71  xmlGetProp(node, BAD_CAST kDuration));
+
72 
+
73  if (!duration_value)
+
74  return false;
+
75 
+
76  double duration_double_precision = 0.0;
+
77  if (!base::StringToDouble(reinterpret_cast<const char*>(duration_value.get()),
+
78  &duration_double_precision)) {
+
79  return false;
+
80  }
+
81 
+
82  *duration = static_cast<float>(duration_double_precision);
+
83  return true;
+
84 }
+
85 
+
86 bool MoreThanOneTrue(bool b1, bool b2, bool b3) {
+
87  return (b1 && b2) || (b2 && b3) || (b3 && b1);
+
88 }
+
89 
+
90 bool AtLeastOneTrue(bool b1, bool b2, bool b3) { return b1 || b2 || b3; }
+
91 
+
92 bool OnlyOneTrue(bool b1, bool b2, bool b3) {
+
93  return !MoreThanOneTrue(b1, b2, b3) && AtLeastOneTrue(b1, b2, b3);
+
94 }
+
95 
+
96 // Coverts binary data into human readable UUID format.
+
97 bool HexToUUID(const std::string& data, std::string* uuid_format) {
+
98  DCHECK(uuid_format);
+
99  const size_t kExpectedUUIDSize = 16;
+
100  if (data.size() != kExpectedUUIDSize) {
+
101  LOG(ERROR) << "UUID size is expected to be " << kExpectedUUIDSize
+
102  << " but is " << data.size() << " and the data in hex is "
+
103  << base::HexEncode(data.data(), data.size());
+
104  return false;
+
105  }
+
106 
+
107  const std::string hex_encoded =
+
108  StringToLowerASCII(base::HexEncode(data.data(), data.size()));
+
109  DCHECK_EQ(hex_encoded.size(), kExpectedUUIDSize * 2);
+
110  base::StringPiece all(hex_encoded);
+
111  // Note UUID has 5 parts separated with dashes.
+
112  // e.g. 123e4567-e89b-12d3-a456-426655440000
+
113  // These StringPieces have each part.
+
114  base::StringPiece first = all.substr(0, 8);
+
115  base::StringPiece second = all.substr(8, 4);
+
116  base::StringPiece third = all.substr(12, 4);
+
117  base::StringPiece fourth = all.substr(16, 4);
+
118  base::StringPiece fifth = all.substr(20, 12);
+
119 
+
120  // 32 hexadecimal characters with 4 hyphens.
+
121  const size_t kHumanReadableUUIDSize = 36;
+
122  uuid_format->reserve(kHumanReadableUUIDSize);
+
123  first.CopyToString(uuid_format);
+
124  uuid_format->append("-");
+
125  second.AppendToString(uuid_format);
+
126  uuid_format->append("-");
+
127  third.AppendToString(uuid_format);
+
128  uuid_format->append("-");
+
129  fourth.AppendToString(uuid_format);
+
130  uuid_format->append("-");
+
131  fifth.AppendToString(uuid_format);
+
132  return true;
+
133 }
+
134 
+
135 void UpdateContentProtectionPsshHelper(
+
136  const std::string& drm_uuid,
+
137  const std::string& pssh,
+
138  std::list<ContentProtectionElement>* content_protection_elements) {
+
139  const std::string drm_uuid_schemd_id_uri_form = "urn:uuid:" + drm_uuid;
+
140  for (std::list<ContentProtectionElement>::iterator protection =
+
141  content_protection_elements->begin();
+
142  protection != content_protection_elements->end(); ++protection) {
+
143  if (protection->scheme_id_uri != drm_uuid_schemd_id_uri_form) {
+
144  continue;
+
145  }
+
146 
+
147  for (std::vector<Element>::iterator subelement =
+
148  protection->subelements.begin();
+
149  subelement != protection->subelements.end(); ++subelement) {
+
150  if (subelement->name == kPsshElementName) {
+
151  // For now, we want to remove the PSSH element because some players do
+
152  // not support updating pssh.
+
153  protection->subelements.erase(subelement);
+
154 
+
155  // TODO(rkuroiwa): Uncomment this and remove the line above when
+
156  // shaka-player supports updating PSSH.
+
157  // subelement->content = pssh;
+
158  return;
+
159  }
+
160  }
+
161 
+
162  // Reaching here means <cenc:pssh> does not exist under the
+
163  // ContentProtection element. Add it.
+
164  // TODO(rkuroiwa): Uncomment this when shaka-player supports updating PSSH.
+
165  // Element cenc_pssh;
+
166  // cenc_pssh.name = kPsshElementName;
+
167  // cenc_pssh.content = pssh;
+
168  // protection->subelements.push_back(cenc_pssh);
+
169  return;
+
170  }
+
171 
+
172  // Reaching here means that ContentProtection for the DRM does not exist.
+
173  // Add it.
+
174  ContentProtectionElement content_protection;
+
175  content_protection.scheme_id_uri = drm_uuid_schemd_id_uri_form;
+
176  // TODO(rkuroiwa): Uncomment this when shaka-player supports updating PSSH.
+
177  // Element cenc_pssh;
+
178  // cenc_pssh.name = kPsshElementName;
+
179  // cenc_pssh.content = pssh;
+
180  // content_protection.subelements.push_back(cenc_pssh);
+
181  content_protection_elements->push_back(content_protection);
+
182  return;
+
183 }
+
184 
+
185 namespace {
+
186 // Helper function. This works because Representation and AdaptationSet both
+
187 // have AddContentProtectionElement().
+
188 template <typename ContentProtectionParent>
+
189 void AddContentProtectionElementsHelperTemplated(
+
190  const MediaInfo& media_info,
+
191  ContentProtectionParent* parent) {
+
192  DCHECK(parent);
+
193  if (!media_info.has_protected_content())
+
194  return;
+
195 
+
196  const MediaInfo::ProtectedContent& protected_content =
+
197  media_info.protected_content();
+
198 
+
199  // DASH MPD spec specifies a default ContentProtection element for ISO BMFF
+
200  // (MP4) files.
+
201  const bool is_mp4_container =
+
202  media_info.container_type() == MediaInfo::CONTAINER_MP4;
+
203  if (is_mp4_container) {
+
204  ContentProtectionElement mp4_content_protection;
+
205  mp4_content_protection.scheme_id_uri = kEncryptedMp4Scheme;
+
206  mp4_content_protection.value = kEncryptedMp4Value;
+
207  if (protected_content.has_default_key_id()) {
+
208  std::string key_id_uuid_format;
+
209  if (HexToUUID(protected_content.default_key_id(), &key_id_uuid_format)) {
+
210  mp4_content_protection.additional_attributes["cenc:default_KID"] =
+
211  key_id_uuid_format;
+
212  } else {
+
213  LOG(ERROR) << "Failed to convert default key ID into UUID format.";
+
214  }
+
215  }
+
216 
+
217  parent->AddContentProtectionElement(mp4_content_protection);
+
218  }
+
219 
+
220  for (int i = 0; i < protected_content.content_protection_entry().size();
+
221  ++i) {
+
222  const MediaInfo::ProtectedContent::ContentProtectionEntry& entry =
+
223  protected_content.content_protection_entry(i);
+
224  if (!entry.has_uuid()) {
+
225  LOG(WARNING)
+
226  << "ContentProtectionEntry was specified but no UUID is set for "
+
227  << entry.name_version() << ", skipping.";
+
228  continue;
+
229  }
+
230 
+
231  ContentProtectionElement drm_content_protection;
+
232  drm_content_protection.scheme_id_uri = "urn:uuid:" + entry.uuid();
+
233  if (entry.has_name_version())
+
234  drm_content_protection.value = entry.name_version();
+
235 
+
236  if (entry.has_pssh()) {
+
237  std::string base64_encoded_pssh;
+
238  base::Base64Encode(entry.pssh(), &base64_encoded_pssh);
+
239  Element cenc_pssh;
+
240  cenc_pssh.name = kPsshElementName;
+
241  cenc_pssh.content = base64_encoded_pssh;
+
242  drm_content_protection.subelements.push_back(cenc_pssh);
+
243  }
+
244 
+
245  parent->AddContentProtectionElement(drm_content_protection);
+
246  }
+
247 
+
248  LOG_IF(WARNING, protected_content.content_protection_entry().size() == 0)
+
249  << "The media is encrypted but no content protection specified.";
+
250 }
+
251 } // namespace
+
252 
+
253 void AddContentProtectionElements(const MediaInfo& media_info,
+
254  Representation* parent) {
+
255  AddContentProtectionElementsHelperTemplated(media_info, parent);
+
256 }
+
257 
+
258 void AddContentProtectionElements(const MediaInfo& media_info,
+
259  AdaptationSet* parent) {
+
260  AddContentProtectionElementsHelperTemplated(media_info, parent);
+
261 }
+
262 
+
263 
+
264 } // namespace edash_packager
+ +
void AddContentProtectionElements(const MediaInfo &media_info, Representation *parent)
Definition: mpd_utils.cc:253
+ +
bool HexToUUID(const std::string &data, std::string *uuid_format)
Definition: mpd_utils.cc:97
+
+ + + + diff --git a/sdk/db/dfc/mpd__notify__muxer__listener_8cc_source.html b/sdk/db/dfc/mpd__notify__muxer__listener_8cc_source.html new file mode 100644 index 0000000000..5761f338a2 --- /dev/null +++ b/sdk/db/dfc/mpd__notify__muxer__listener_8cc_source.html @@ -0,0 +1,273 @@ + + + + + + +DASH Media Packaging SDK: media/event/mpd_notify_muxer_listener.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mpd_notify_muxer_listener.cc
+
+
+
1 // Copyright 2014 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/event/mpd_notify_muxer_listener.h"
+
8 
+
9 #include <cmath>
+
10 
+
11 #include "packager/base/logging.h"
+
12 #include "packager/media/base/audio_stream_info.h"
+
13 #include "packager/media/base/video_stream_info.h"
+
14 #include "packager/media/event/muxer_listener_internal.h"
+
15 #include "packager/mpd/base/media_info.pb.h"
+
16 #include "packager/mpd/base/mpd_notifier.h"
+
17 
+
18 namespace edash_packager {
+
19 namespace media {
+
20 
+ +
22  : mpd_notifier_(mpd_notifier), notification_id_(0), is_encrypted_(false) {
+
23  DCHECK(mpd_notifier);
+
24  DCHECK(mpd_notifier->dash_profile() == kOnDemandProfile ||
+
25  mpd_notifier->dash_profile() == kLiveProfile);
+
26 }
+
27 
+
28 MpdNotifyMuxerListener::~MpdNotifyMuxerListener() {}
+
29 
+ +
31  const std::string& scheme_id_uri) {
+
32  scheme_id_uri_ = scheme_id_uri;
+
33 }
+
34 
+
35 void MpdNotifyMuxerListener::OnEncryptionInfoReady(
+
36  bool is_initial_encryption_info,
+
37  const std::string& content_protection_uuid,
+
38  const std::string& content_protection_name_version,
+
39  const std::vector<uint8_t>& key_id,
+
40  const std::vector<uint8_t>& pssh) {
+
41  if (is_initial_encryption_info) {
+
42  LOG_IF(WARNING, is_encrypted_)
+
43  << "Updating initial encryption information.";
+
44  content_protection_uuid_ = content_protection_uuid;
+
45  content_protection_name_version_ = content_protection_name_version;
+
46  default_key_id_.assign(key_id.begin(), key_id.end());
+
47  pssh_.assign(pssh.begin(), pssh.end());
+
48  is_encrypted_ = true;
+
49  return;
+
50  }
+
51 
+
52  bool updated = mpd_notifier_->NotifyEncryptionUpdate(
+
53  notification_id_, content_protection_uuid, key_id, pssh);
+
54  LOG_IF(WARNING, !updated) << "Failed to update encryption info.";
+
55 }
+
56 
+
57 void MpdNotifyMuxerListener::OnMediaStart(
+
58  const MuxerOptions& muxer_options,
+
59  const StreamInfo& stream_info,
+
60  uint32_t time_scale,
+
61  ContainerType container_type) {
+
62  scoped_ptr<MediaInfo> media_info(new MediaInfo());
+
63  if (!internal::GenerateMediaInfo(muxer_options,
+
64  stream_info,
+
65  time_scale,
+
66  container_type,
+
67  media_info.get())) {
+
68  LOG(ERROR) << "Failed to generate MediaInfo from input.";
+
69  return;
+
70  }
+
71 
+
72  if (is_encrypted_) {
+
73  internal::SetContentProtectionFields(
+
74  content_protection_uuid_, content_protection_name_version_,
+
75  default_key_id_, pssh_, media_info.get());
+
76  }
+
77 
+
78  if (mpd_notifier_->dash_profile() == kLiveProfile) {
+
79  // TODO(kqyang): Check return result.
+
80  mpd_notifier_->NotifyNewContainer(*media_info, &notification_id_);
+
81  } else {
+
82  media_info_ = media_info.Pass();
+
83  }
+
84 }
+
85 
+
86 // Record the sample duration in the media info for VOD so that OnMediaEnd, all
+
87 // the information is in the media info.
+ +
89  uint32_t sample_duration) {
+
90  if (mpd_notifier_->dash_profile() == kLiveProfile) {
+
91  mpd_notifier_->NotifySampleDuration(notification_id_, sample_duration);
+
92  return;
+
93  }
+
94 
+
95  if (!media_info_) {
+
96  LOG(WARNING) << "Got sample duration " << sample_duration
+
97  << " but no media was specified.";
+
98  return;
+
99  }
+
100  if (!media_info_->has_video_info()) {
+
101  // If non video, don't worry about it (at the moment).
+
102  return;
+
103  }
+
104  if (media_info_->video_info().has_frame_duration()) {
+
105  return;
+
106  }
+
107 
+
108  media_info_->mutable_video_info()->set_frame_duration(sample_duration);
+
109 }
+
110 
+
111 void MpdNotifyMuxerListener::OnMediaEnd(bool has_init_range,
+
112  uint64_t init_range_start,
+
113  uint64_t init_range_end,
+
114  bool has_index_range,
+
115  uint64_t index_range_start,
+
116  uint64_t index_range_end,
+
117  float duration_seconds,
+
118  uint64_t file_size) {
+
119  if (mpd_notifier_->dash_profile() == kLiveProfile) {
+
120  DCHECK(subsegments_.empty());
+
121  return;
+
122  }
+
123 
+
124  DCHECK(media_info_);
+
125  if (!internal::SetVodInformation(has_init_range,
+
126  init_range_start,
+
127  init_range_end,
+
128  has_index_range,
+
129  index_range_start,
+
130  index_range_end,
+
131  duration_seconds,
+
132  file_size,
+
133  media_info_.get())) {
+
134  LOG(ERROR) << "Failed to generate VOD information from input.";
+
135  return;
+
136  }
+
137 
+
138  uint32_t id;
+
139  // TODO(kqyang): Check return result.
+
140  mpd_notifier_->NotifyNewContainer(*media_info_, &id);
+
141  for (std::list<SubsegmentInfo>::const_iterator it = subsegments_.begin();
+
142  it != subsegments_.end(); ++it) {
+
143  mpd_notifier_->NotifyNewSegment(id, it->start_time, it->duration,
+
144  it->segment_file_size);
+
145  }
+
146  subsegments_.clear();
+
147  mpd_notifier_->Flush();
+
148 }
+
149 
+
150 void MpdNotifyMuxerListener::OnNewSegment(uint64_t start_time,
+
151  uint64_t duration,
+
152  uint64_t segment_file_size) {
+
153  if (mpd_notifier_->dash_profile() == kLiveProfile) {
+
154  // TODO(kqyang): Check return result.
+
155  mpd_notifier_->NotifyNewSegment(
+
156  notification_id_, start_time, duration, segment_file_size);
+
157  mpd_notifier_->Flush();
+
158  } else {
+
159  SubsegmentInfo subsegment = {start_time, duration, segment_file_size};
+
160  subsegments_.push_back(subsegment);
+
161  }
+
162 }
+
163 
+
164 } // namespace media
+
165 } // namespace edash_packager
+
DashProfile dash_profile() const
Definition: mpd_notifier.h:108
+
virtual bool NotifyNewContainer(const MediaInfo &media_info, uint32_t *container_id)=0
+ +
virtual void OnSampleDurationReady(uint32_t sample_duration) OVERRIDE
+ + +
virtual bool NotifySampleDuration(uint32_t container_id, uint32_t sample_duration)=0
+
virtual bool NotifyNewSegment(uint32_t container_id, uint64_t start_time, uint64_t duration, uint64_t size)=0
+
void SetContentProtectionSchemeIdUri(const std::string &scheme_id_uri)
+
virtual bool NotifyEncryptionUpdate(uint32_t container_id, const std::string &drm_uuid, const std::vector< uint8_t > &new_key_id, const std::vector< uint8_t > &new_pssh)=0
+
+ + + + diff --git a/sdk/db/dfe/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor.html b/sdk/db/dfe/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor.html new file mode 100644 index 0000000000..7b7aae9041 --- /dev/null +++ b/sdk/db/dfe/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor.html @@ -0,0 +1,217 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::AesCbcPkcs5Decryptor Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::AesCbcPkcs5Decryptor Class Reference
+
+
+ + + + + + + + + + +

+Public Member Functions

bool InitializeWithIv (const std::vector< uint8_t > &key, const std::vector< uint8_t > &iv)
 
bool Decrypt (const std::string &ciphertext, std::string *plaintext)
 
bool SetIv (const std::vector< uint8_t > &iv)
 
+const std::vector< uint8_t > & iv () const
 
+

Detailed Description

+
+

Definition at line 146 of file aes_encryptor.h.

+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::AesCbcPkcs5Decryptor::Decrypt (const std::string & ciphertext,
std::string * plaintext 
)
+
+
Parameters
+ + + +
ciphertextis expected to be padded with PKCS5 padding.
plaintextshould not be NULL.
+
+
+
Returns
true on success, false otherwise.
+ +

Definition at line 218 of file aes_encryptor.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::AesCbcPkcs5Decryptor::InitializeWithIv (const std::vector< uint8_t > & key,
const std::vector< uint8_t > & iv 
)
+
+

Initialize the decryptor with specified key and IV.

+
Parameters
+ + + +
keyshould be 128 bits or 192 bits or 256 bits in size as defined in AES spec.
ivshould be 16 bytes in size.
+
+
+
Returns
true on successful initialization, false otherwise.
+ +

Definition at line 200 of file aes_encryptor.cc.

+ +
+
+ +
+
+ + + + + + + + +
bool edash_packager::media::AesCbcPkcs5Decryptor::SetIv (const std::vector< uint8_t > & iv)
+
+
Returns
true if successful, false if the input is invalid.
+ +

Definition at line 248 of file aes_encryptor.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.html b/sdk/dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.html new file mode 100644 index 0000000000..980e32c36e --- /dev/null +++ b/sdk/dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.html @@ -0,0 +1,294 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::xml::RepresentationXmlNode Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::xml::RepresentationXmlNode Class Reference
+
+
+ +

RepresentationType in MPD. + More...

+ +

#include <xml_node.h>

+
+Inheritance diagram for edash_packager::xml::RepresentationXmlNode:
+
+
+ + +edash_packager::xml::RepresentationBaseXmlNode +edash_packager::xml::XmlNode + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool AddVideoInfo (const MediaInfo::VideoInfo &video_info)
 
bool AddAudioInfo (const MediaInfo::AudioInfo &audio_info)
 
bool AddVODOnlyInfo (const MediaInfo &media_info)
 
bool AddLiveOnlyInfo (const MediaInfo &media_info, const std::list< SegmentInfo > &segment_infos, uint32_t start_number)
 
- Public Member Functions inherited from edash_packager::xml::RepresentationBaseXmlNode
+bool AddContentProtectionElements (const std::list< ContentProtectionElement > &content_protection_elements)
 
- Public Member Functions inherited from edash_packager::xml::XmlNode
 XmlNode (const char *name)
 
bool AddChild (ScopedXmlPtr< xmlNode >::type child)
 
+bool AddElements (const std::vector< Element > &elements)
 Adds Elements to this node using the Element struct.
 
void SetStringAttribute (const char *attribute_name, const std::string &attribute)
 
void SetIntegerAttribute (const char *attribute_name, uint64_t number)
 
void SetFloatingPointAttribute (const char *attribute_name, double number)
 
void SetId (uint32_t id)
 
void SetContent (const std::string &content)
 
ScopedXmlPtr< xmlNode >::type PassScopedPtr ()
 
xmlNodePtr Release ()
 
xmlNodePtr GetRawPtr ()
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from edash_packager::xml::RepresentationBaseXmlNode
RepresentationBaseXmlNode (const char *name)
 
+

Detailed Description

+

RepresentationType in MPD.

+ +

Definition at line 128 of file xml_node.h.

+

Member Function Documentation

+ +
+
+ + + + + + + + +
bool edash_packager::xml::RepresentationXmlNode::AddAudioInfo (const MediaInfo::AudioInfo & audio_info)
+
+

Adds audio metadata to the MPD.

+
Parameters
+ + +
audio_infoconstains the AudioInfos for a Representation.
+
+
+
Returns
true if successfully set attributes and children elements (if applicable), false otherwise.
+ +

Definition at line 238 of file xml_node.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool edash_packager::xml::RepresentationXmlNode::AddLiveOnlyInfo (const MediaInfo & media_info,
const std::list< SegmentInfo > & segment_infos,
uint32_t start_number 
)
+
+
Parameters
+ + +
segment_infosis a set of SegmentInfos. This method assumes that SegmentInfos are sorted by its start time.
+
+
+ +

Definition at line 293 of file xml_node.cc.

+ +
+
+ +
+
+ + + + + + + + +
bool edash_packager::xml::RepresentationXmlNode::AddVideoInfo (const MediaInfo::VideoInfo & video_info)
+
+

Adds video metadata to the MPD.

+
Parameters
+ + +
video_infoconstains the VideoInfo for a Representation.
+
+
+
Returns
true if successfully set attributes and children elements (if applicable), false otherwise.
+ +

Definition at line 218 of file xml_node.cc.

+ +
+
+ +
+
+ + + + + + + + +
bool edash_packager::xml::RepresentationXmlNode::AddVODOnlyInfo (const MediaInfo & media_info)
+
+

Adds fields that are specific to VOD. This ignores media_info fields for Live.

+
Parameters
+ + +
media_infois a MediaInfo with VOD information.
+
+
+
Returns
true on success, false otherwise.
+ +

Definition at line 246 of file xml_node.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.png b/sdk/dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.png new file mode 100644 index 0000000000..9cdcf6b00c Binary files /dev/null and b/sdk/dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.png differ diff --git a/sdk/dc/d0d/structedash__packager_1_1media_1_1mp4_1_1EditListEntry.html b/sdk/dc/d0d/structedash__packager_1_1media_1_1mp4_1_1EditListEntry.html new file mode 100644 index 0000000000..a7f4cf9d84 --- /dev/null +++ b/sdk/dc/d0d/structedash__packager_1_1media_1_1mp4_1_1EditListEntry.html @@ -0,0 +1,126 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::EditListEntry Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::EditListEntry Struct Reference
+
+
+ + + + + + + + + + +

+Public Attributes

+uint64_t segment_duration
 
+int64_t media_time
 
+int16_t media_rate_integer
 
+int16_t media_rate_fraction
 
+

Detailed Description

+
+

Definition at line 143 of file box_definitions.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/sdk/dc/d19/box_8h_source.html b/sdk/dc/d19/box_8h_source.html new file mode 100644 index 0000000000..c0146a7044 --- /dev/null +++ b/sdk/dc/d19/box_8h_source.html @@ -0,0 +1,166 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/box.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
box.h
+
+
+
1 // Copyright 2014 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_FORMATS_MP4_BOX_H_
+
8 #define MEDIA_FORMATS_MP4_BOX_H_
+
9 
+
10 #include <stdint.h>
+
11 
+
12 #include "packager/base/compiler_specific.h"
+
13 #include "packager/media/formats/mp4/fourccs.h"
+
14 
+
15 namespace edash_packager {
+
16 namespace media {
+
17 
+
18 class BufferWriter;
+
19 
+
20 namespace mp4 {
+
21 
+
22 class BoxBuffer;
+
23 class BoxReader;
+
24 
+
28 struct Box {
+
29  public:
+
30  Box();
+
31  virtual ~Box();
+
34  bool Parse(BoxReader* reader);
+
39  void Write(BufferWriter* writer);
+
42  virtual uint32_t ComputeSize() = 0;
+
43  virtual FourCC BoxType() const = 0;
+
44 
+
45  protected:
+
46  friend class BoxBuffer;
+
48  virtual bool ReadWrite(BoxBuffer* buffer);
+
49 
+
52  uint32_t atom_size;
+
53 };
+
54 
+
58 struct FullBox : Box {
+
59  public:
+
60  FullBox();
+
61  virtual ~FullBox();
+
62 
+
63  uint8_t version;
+
64  uint32_t flags;
+
65 
+
66  protected:
+
67  virtual bool ReadWrite(BoxBuffer* buffer) OVERRIDE;
+
68 };
+
69 
+
70 } // namespace mp4
+
71 } // namespace media
+
72 } // namespace edash_packager
+
73 
+
74 #endif // MEDIA_FORMATS_MP4_BOX_H_
+ +
virtual bool ReadWrite(BoxBuffer *buffer)
Read/write the mp4 box from/to BoxBuffer.
Definition: box.cc:36
+
virtual uint32_t ComputeSize()=0
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
Definition: box.cc:50
+ +
bool Parse(BoxReader *reader)
Definition: box.cc:19
+ +
void Write(BufferWriter *writer)
Definition: box.cc:25
+
Class for reading MP4 boxes.
Definition: box_reader.h:24
+ + +
+ + + + diff --git a/sdk/dc/d22/dash__iop__mpd__notifier_8cc_source.html b/sdk/dc/d22/dash__iop__mpd__notifier_8cc_source.html new file mode 100644 index 0000000000..75caf109ae --- /dev/null +++ b/sdk/dc/d22/dash__iop__mpd__notifier_8cc_source.html @@ -0,0 +1,405 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/dash_iop_mpd_notifier.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
dash_iop_mpd_notifier.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/mpd/base/dash_iop_mpd_notifier.h"
+
8 
+
9 #include "packager/mpd/base/media_info.pb.h"
+
10 #include "packager/mpd/base/mpd_notifier_util.h"
+
11 #include "packager/mpd/base/mpd_utils.h"
+
12 
+
13 namespace edash_packager {
+
14 
+
15 namespace {
+
16 
+
17 const int kStartingGroupId = 1;
+
18 
+
19 // The easiest way to check whether two protobufs are equal, is to compare the
+
20 // serialized version.
+
21 bool ProtectedContentEq(
+
22  const MediaInfo::ProtectedContent& content_protection1,
+
23  const MediaInfo::ProtectedContent& content_protection2) {
+
24  std::string s1;
+
25  std::string s2;
+
26  return content_protection1.SerializeToString(&s1) &&
+
27  content_protection2.SerializeToString(&s2) &&
+
28  s1 == s2;
+
29 }
+
30 
+
31 std::set<std::string> GetUUIDs(
+
32  const MediaInfo::ProtectedContent& protected_content) {
+
33  std::set<std::string> uuids;
+
34  for (int i = 0; i < protected_content.content_protection_entry().size();
+
35  ++i) {
+
36  const MediaInfo::ProtectedContent::ContentProtectionEntry& entry =
+
37  protected_content.content_protection_entry(i);
+
38  uuids.insert(entry.uuid());
+
39  }
+
40  return uuids;
+
41 }
+
42 
+
43 } // namespace
+
44 
+
45 DashIopMpdNotifier::DashIopMpdNotifier(
+
46  DashProfile dash_profile,
+
47  const MpdOptions& mpd_options,
+
48  const std::vector<std::string>& base_urls,
+
49  const std::string& output_path)
+
50  : MpdNotifier(dash_profile),
+
51  output_path_(output_path),
+
52  mpd_builder_(new MpdBuilder(dash_profile == kLiveProfile
+
53  ? MpdBuilder::kDynamic
+
54  : MpdBuilder::kStatic,
+
55  mpd_options)),
+
56  next_group_id_(kStartingGroupId) {
+
57  DCHECK(dash_profile == kLiveProfile || dash_profile == kOnDemandProfile);
+
58  for (size_t i = 0; i < base_urls.size(); ++i)
+
59  mpd_builder_->AddBaseUrl(base_urls[i]);
+
60 }
+
61 
+
62 DashIopMpdNotifier::~DashIopMpdNotifier() {}
+
63 
+ +
65  return true;
+
66 }
+
67 
+
68 bool DashIopMpdNotifier::NotifyNewContainer(const MediaInfo& media_info,
+
69  uint32_t* container_id) {
+
70  DCHECK(container_id);
+
71 
+
72  ContentType content_type = GetContentType(media_info);
+
73  if (content_type == kContentTypeUnknown)
+
74  return false;
+
75 
+
76  base::AutoLock auto_lock(lock_);
+
77  std::string lang;
+
78  if (media_info.has_audio_info()) {
+
79  lang = media_info.audio_info().language();
+
80  }
+
81 
+
82  AdaptationSet* adaptation_set =
+
83  GetAdaptationSetForMediaInfo(media_info, content_type, lang);
+
84  DCHECK(adaptation_set);
+
85 
+
86  MediaInfo adjusted_media_info(media_info);
+
87  MpdBuilder::MakePathsRelativeToMpd(output_path_, &adjusted_media_info);
+
88  Representation* representation =
+
89  adaptation_set->AddRepresentation(adjusted_media_info);
+
90  if (!representation)
+
91  return false;
+
92 
+
93  representation_id_to_adaptation_set_[representation->id()] = adaptation_set;
+
94 
+
95  SetGroupId(content_type, lang, adaptation_set);
+
96 
+
97  *container_id = representation->id();
+
98  DCHECK(!ContainsKey(representation_map_, representation->id()));
+
99  representation_map_[representation->id()] = representation;
+
100  return true;
+
101 }
+
102 
+
103 bool DashIopMpdNotifier::NotifySampleDuration(uint32_t container_id,
+
104  uint32_t sample_duration) {
+
105  base::AutoLock auto_lock(lock_);
+
106  RepresentationMap::iterator it = representation_map_.find(container_id);
+
107  if (it == representation_map_.end()) {
+
108  LOG(ERROR) << "Unexpected container_id: " << container_id;
+
109  return false;
+
110  }
+
111  it->second->SetSampleDuration(sample_duration);
+
112  return true;
+
113 }
+
114 
+
115 bool DashIopMpdNotifier::NotifyNewSegment(uint32_t container_id,
+
116  uint64_t start_time,
+
117  uint64_t duration,
+
118  uint64_t size) {
+
119  base::AutoLock auto_lock(lock_);
+
120  RepresentationMap::iterator it = representation_map_.find(container_id);
+
121  if (it == representation_map_.end()) {
+
122  LOG(ERROR) << "Unexpected container_id: " << container_id;
+
123  return false;
+
124  }
+
125  it->second->AddNewSegment(start_time, duration, size);
+
126  return true;
+
127 }
+
128 
+ +
130  uint32_t container_id,
+
131  const std::string& drm_uuid,
+
132  const std::vector<uint8_t>& new_key_id,
+
133  const std::vector<uint8_t>& new_pssh) {
+
134  base::AutoLock auto_lock(lock_);
+
135  RepresentationMap::iterator it = representation_map_.find(container_id);
+
136  if (it == representation_map_.end()) {
+
137  LOG(ERROR) << "Unexpected container_id: " << container_id;
+
138  return false;
+
139  }
+
140 
+
141  AdaptationSet* adaptation_set_for_representation =
+
142  representation_id_to_adaptation_set_[it->second->id()];
+
143  adaptation_set_for_representation->UpdateContentProtectionPssh(
+
144  drm_uuid, Uint8VectorToBase64(new_pssh));
+
145  return true;
+
146 }
+
147 
+ +
149  uint32_t container_id,
+
150  const ContentProtectionElement& content_protection_element) {
+
151  // Intentionally not implemented because if a Representation gets a new
+
152  // <ContentProtection> element, then it might require moving the
+
153  // Representation out of the AdaptationSet. There's no logic to do that
+
154  // yet.
+
155  return false;
+
156 }
+
157 
+ +
159  return WriteMpdToFile(output_path_, mpd_builder_.get());
+
160 }
+
161 
+
162 AdaptationSet* DashIopMpdNotifier::GetAdaptationSetForMediaInfo(
+
163  const MediaInfo& media_info,
+
164  ContentType content_type,
+
165  const std::string& language) {
+
166  std::list<AdaptationSet*>& adaptation_sets =
+
167  adaptation_set_list_map_[content_type][language];
+
168  if (adaptation_sets.empty())
+
169  return NewAdaptationSet(media_info, language, &adaptation_sets);
+
170 
+
171  const bool has_protected_content = media_info.has_protected_content();
+
172 
+
173  for (std::list<AdaptationSet*>::const_iterator adaptation_set_it =
+
174  adaptation_sets.begin();
+
175  adaptation_set_it != adaptation_sets.end(); ++adaptation_set_it) {
+
176  ProtectedContentMap::const_iterator protected_content_it =
+
177  protected_content_map_.find((*adaptation_set_it)->id());
+
178 
+
179  // If the AdaptationSet ID is not registered in the map, then it is clear
+
180  // content (or encrypted but doesn't need <ContentProtection> element
+
181  // possibly because the player knows how to handle it).
+
182  if (protected_content_it == protected_content_map_.end()) {
+
183  // Can reuse the AdaptationSet without content protection.
+
184  if (!has_protected_content)
+
185  return *adaptation_set_it;
+
186  continue;
+
187  }
+
188 
+
189  if (ProtectedContentEq(protected_content_it->second,
+
190  media_info.protected_content())) {
+
191  // Content protection info matches. Reuse the AdaptationSet.
+
192  return *adaptation_set_it;
+
193  }
+
194  }
+
195 
+
196  // None of the adaptation sets match with the new content protection.
+
197  // Need a new one.
+
198  return NewAdaptationSet(media_info, language, &adaptation_sets);
+
199 }
+
200 
+
201 // Get all the UUIDs of the AdaptationSet. If another AdaptationSet has the
+
202 // same UUIDs then those should be groupable.
+
203 void DashIopMpdNotifier::SetGroupId(ContentType type,
+
204  const std::string& language,
+
205  AdaptationSet* adaptation_set) {
+
206  if (adaptation_set->Group() >= 0) // @group already assigned.
+
207  return;
+
208 
+
209  ProtectedContentMap::const_iterator protected_content_it =
+
210  protected_content_map_.find(adaptation_set->id());
+
211  // Clear contents should be in one AdaptationSet, so no need to assign
+
212  // @group.
+
213  if (protected_content_it == protected_content_map_.end()) {
+
214  DVLOG(1) << "No content protection set for AdaptationSet@id="
+
215  << adaptation_set->id();
+
216  return;
+
217  }
+
218 
+
219  // Get all the UUIDs of the ContentProtections in AdaptationSet.
+
220  std::set<std::string> adaptation_set_uuids =
+
221  GetUUIDs(protected_content_it->second);
+
222 
+
223  std::list<AdaptationSet*>& same_type_adapatation_sets =
+
224  adaptation_set_list_map_[type][language];
+
225  DCHECK(!same_type_adapatation_sets.empty())
+
226  << "same_type_adapatation_sets should not be null, it should at least "
+
227  "contain adaptation_set";
+
228 
+
229  for (std::list<AdaptationSet*>::iterator adaptation_set_it =
+
230  same_type_adapatation_sets.begin();
+
231  adaptation_set_it != same_type_adapatation_sets.end();
+
232  ++adaptation_set_it) {
+
233  const uint32_t loop_adaptation_set_id = (*adaptation_set_it)->id();
+
234  if (loop_adaptation_set_id == adaptation_set->id() ||
+
235  !ContainsKey(protected_content_map_, loop_adaptation_set_id)) {
+
236  continue;
+
237  }
+
238 
+
239  const MediaInfo::ProtectedContent& loop_protected_content =
+
240  protected_content_map_[loop_adaptation_set_id];
+
241  if (static_cast<int>(adaptation_set_uuids.size()) !=
+
242  loop_protected_content.content_protection_entry().size()) {
+
243  // Different number of UUIDs, cannot be grouped.
+
244  continue;
+
245  }
+
246 
+
247  if (adaptation_set_uuids == GetUUIDs(loop_protected_content)) {
+
248  AdaptationSet& uuid_match_adaptation_set = **adaptation_set_it;
+
249  // They match. These AdaptationSets can be in the same group. Break out.
+
250  if (uuid_match_adaptation_set.Group() >= 0) {
+
251  adaptation_set->SetGroup(uuid_match_adaptation_set.Group());
+
252  } else {
+
253  const int group_id = next_group_id_++;
+
254  uuid_match_adaptation_set.SetGroup(group_id);
+
255  adaptation_set->SetGroup(group_id);
+
256  }
+
257  break;
+
258  }
+
259  }
+
260 }
+
261 
+
262 AdaptationSet* DashIopMpdNotifier::NewAdaptationSet(
+
263  const MediaInfo& media_info,
+
264  const std::string& language,
+
265  std::list<AdaptationSet*>* adaptation_sets) {
+
266  AdaptationSet* new_adaptation_set = mpd_builder_->AddAdaptationSet(language);
+
267  if (media_info.has_protected_content()) {
+
268  DCHECK(!ContainsKey(protected_content_map_, new_adaptation_set->id()));
+
269  protected_content_map_[new_adaptation_set->id()] =
+
270  media_info.protected_content();
+
271  AddContentProtectionElements(media_info, new_adaptation_set);
+
272  }
+
273  adaptation_sets->push_back(new_adaptation_set);
+
274 
+
275  if (media_info.has_video_info()) {
+
276  // Because 'lang' is ignored for videos, |adaptation_sets| must have
+
277  // all the video AdaptationSets.
+
278  if (adaptation_sets->size() > 2) {
+
279  new_adaptation_set->AddRole(AdaptationSet::kRoleMain);
+
280  } else if (adaptation_sets->size() == 2) {
+
281  // Set "main" Role for both AdaptatoinSets.
+
282  (*adaptation_sets->begin())->AddRole(AdaptationSet::kRoleMain);
+
283  new_adaptation_set->AddRole(AdaptationSet::kRoleMain);
+
284  }
+
285  }
+
286  return new_adaptation_set;
+
287 }
+
288 
+
289 } // namespace edash_packager
+
virtual bool NotifyEncryptionUpdate(uint32_t container_id, const std::string &drm_uuid, const std::vector< uint8_t > &new_key_id, const std::vector< uint8_t > &new_pssh) OVERRIDE
+
virtual bool NotifyNewSegment(uint32_t id, uint64_t start_time, uint64_t duration, uint64_t size) OVERRIDE
+ +
virtual bool NotifyNewContainer(const MediaInfo &media_info, uint32_t *id) OVERRIDE
+
void AddContentProtectionElements(const MediaInfo &media_info, Representation *parent)
Definition: mpd_utils.cc:253
+
virtual bool NotifySampleDuration(uint32_t container_id, uint32_t sample_duration) OVERRIDE
+
static void MakePathsRelativeToMpd(const std::string &mpd_path, MediaInfo *media_info)
Definition: mpd_builder.cc:608
+ +
std::string Uint8VectorToBase64(const std::vector< uint8_t > &input)
Converts uint8 vector into base64 encoded string.
+ +
virtual Representation * AddRepresentation(const MediaInfo &media_info)
Definition: mpd_builder.cc:655
+ + +
bool WriteMpdToFile(const std::string &output_path, MpdBuilder *mpd_builder)
+
virtual void UpdateContentProtectionPssh(const std::string &drm_uuid, const std::string &pssh)
Definition: mpd_builder.cc:700
+
virtual bool AddContentProtectionElement(uint32_t id, const ContentProtectionElement &content_protection_element) OVERRIDE
+ +
ContentType GetContentType(const MediaInfo &media_info)
+
+ + + + diff --git a/sdk/dc/d23/classedash__packager_1_1MockMpdNotifier-members.html b/sdk/dc/d23/classedash__packager_1_1MockMpdNotifier-members.html new file mode 100644 index 0000000000..6fb4f1be63 --- /dev/null +++ b/sdk/dc/d23/classedash__packager_1_1MockMpdNotifier-members.html @@ -0,0 +1,123 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::MockMpdNotifier Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + +
AddContentProtectionElement(uint32_t container_id, const ContentProtectionElement &content_protection_element)=0edash_packager::MpdNotifierpure virtual
dash_profile() const edash_packager::MpdNotifierinline
Flush()=0edash_packager::MpdNotifierpure virtual
Init()=0edash_packager::MpdNotifierpure virtual
MOCK_METHOD0(Init, bool()) (defined in edash_packager::MockMpdNotifier)edash_packager::MockMpdNotifier
MOCK_METHOD0(Flush, bool()) (defined in edash_packager::MockMpdNotifier)edash_packager::MockMpdNotifier
MOCK_METHOD2(NotifyNewContainer, bool(const MediaInfo &media_info, uint32_t *container_id)) (defined in edash_packager::MockMpdNotifier)edash_packager::MockMpdNotifier
MOCK_METHOD2(NotifySampleDuration, bool(uint32_t container_id, uint32_t sample_duration)) (defined in edash_packager::MockMpdNotifier)edash_packager::MockMpdNotifier
MOCK_METHOD2(AddContentProtectionElement, bool(uint32_t container_id, const ContentProtectionElement &content_protection_element)) (defined in edash_packager::MockMpdNotifier)edash_packager::MockMpdNotifier
MOCK_METHOD4(NotifyNewSegment, bool(uint32_t container_id, uint64_t start_time, uint64_t duration, uint64_t size)) (defined in edash_packager::MockMpdNotifier)edash_packager::MockMpdNotifier
MOCK_METHOD4(NotifyEncryptionUpdate, bool(uint32_t container_id, const std::string &drm_uuid, const std::vector< uint8_t > &new_key_id, const std::vector< uint8_t > &new_pssh)) (defined in edash_packager::MockMpdNotifier)edash_packager::MockMpdNotifier
MockMpdNotifier(DashProfile profile) (defined in edash_packager::MockMpdNotifier)edash_packager::MockMpdNotifier
MpdNotifier(DashProfile dash_profile) (defined in edash_packager::MpdNotifier)edash_packager::MpdNotifierinline
NotifyEncryptionUpdate(uint32_t container_id, const std::string &drm_uuid, const std::vector< uint8_t > &new_key_id, const std::vector< uint8_t > &new_pssh)=0edash_packager::MpdNotifierpure virtual
NotifyNewContainer(const MediaInfo &media_info, uint32_t *container_id)=0edash_packager::MpdNotifierpure virtual
NotifyNewSegment(uint32_t container_id, uint64_t start_time, uint64_t duration, uint64_t size)=0edash_packager::MpdNotifierpure virtual
NotifySampleDuration(uint32_t container_id, uint32_t sample_duration)=0edash_packager::MpdNotifierpure virtual
~MockMpdNotifier() (defined in edash_packager::MockMpdNotifier)edash_packager::MockMpdNotifiervirtual
~MpdNotifier() (defined in edash_packager::MpdNotifier)edash_packager::MpdNotifierinlinevirtual
+ + + + diff --git a/sdk/dc/d2f/classedash__packager_1_1media_1_1KeySource-members.html b/sdk/dc/d2f/classedash__packager_1_1media_1_1KeySource-members.html new file mode 100644 index 0000000000..74b9acb0a6 --- /dev/null +++ b/sdk/dc/d2f/classedash__packager_1_1media_1_1KeySource-members.html @@ -0,0 +1,125 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::KeySource Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + +
CreateFromHexStrings(const std::string &key_id_hex, const std::string &key_hex, const std::string &pssh_data_hex, const std::string &iv_hex)edash_packager::media::KeySourcestatic
FetchKeys(const std::vector< uint8_t > &content_id, const std::string &policy)edash_packager::media::KeySourcevirtual
FetchKeys(const std::vector< uint8_t > &pssh_data)edash_packager::media::KeySourcevirtual
FetchKeys(uint32_t asset_id)edash_packager::media::KeySourcevirtual
GetCryptoPeriodKey(uint32_t crypto_period_index, TrackType track_type, EncryptionKey *key)edash_packager::media::KeySourcevirtual
GetKey(TrackType track_type, EncryptionKey *key)edash_packager::media::KeySourcevirtual
GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key)edash_packager::media::KeySourcevirtual
GetTrackTypeFromString(const std::string &track_type_string)edash_packager::media::KeySourcestatic
KeySource() (defined in edash_packager::media::KeySource)edash_packager::media::KeySourceprotected
NUM_VALID_TRACK_TYPES enum value (defined in edash_packager::media::KeySource)edash_packager::media::KeySource
PsshBoxFromPsshData(const std::vector< uint8_t > &pssh_data)edash_packager::media::KeySourceprotectedstatic
SystemName()edash_packager::media::KeySourcevirtual
TRACK_TYPE_AUDIO enum value (defined in edash_packager::media::KeySource)edash_packager::media::KeySource
TRACK_TYPE_HD enum value (defined in edash_packager::media::KeySource)edash_packager::media::KeySource
TRACK_TYPE_SD enum value (defined in edash_packager::media::KeySource)edash_packager::media::KeySource
TRACK_TYPE_UNKNOWN enum value (defined in edash_packager::media::KeySource)edash_packager::media::KeySource
TRACK_TYPE_UNSPECIFIED enum value (defined in edash_packager::media::KeySource)edash_packager::media::KeySource
TrackType enum name (defined in edash_packager::media::KeySource)edash_packager::media::KeySource
TrackTypeToString(TrackType track_type)edash_packager::media::KeySourcestatic
UUID()edash_packager::media::KeySourcevirtual
~KeySource() (defined in edash_packager::media::KeySource)edash_packager::media::KeySourcevirtual
+ + + + diff --git a/sdk/dc/d35/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser-members.html b/sdk/dc/d35/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser-members.html new file mode 100644 index 0000000000..f6cfca96d0 --- /dev/null +++ b/sdk/dc/d35/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser-members.html @@ -0,0 +1,113 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp2t::Mp2tMediaParser Member List
+
+
+ +

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

+ + + + + + + + + + +
Flush() OVERRIDEedash_packager::media::mp2t::Mp2tMediaParservirtual
Init(const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source) OVERRIDEedash_packager::media::mp2t::Mp2tMediaParservirtual
InitCB typedefedash_packager::media::MediaParser
MediaParser() (defined in edash_packager::media::MediaParser)edash_packager::media::MediaParserinline
Mp2tMediaParser() (defined in edash_packager::media::mp2t::Mp2tMediaParser)edash_packager::media::mp2t::Mp2tMediaParser
NewSampleCB typedefedash_packager::media::MediaParser
Parse(const uint8_t *buf, int size) OVERRIDEedash_packager::media::mp2t::Mp2tMediaParservirtual
~MediaParser() (defined in edash_packager::media::MediaParser)edash_packager::media::MediaParserinlinevirtual
~Mp2tMediaParser() (defined in edash_packager::media::mp2t::Mp2tMediaParser)edash_packager::media::mp2t::Mp2tMediaParservirtual
+ + + + diff --git a/sdk/dc/d3b/fixed__key__encryption__flags_8cc_source.html b/sdk/dc/d3b/fixed__key__encryption__flags_8cc_source.html new file mode 100644 index 0000000000..e51dd6b233 --- /dev/null +++ b/sdk/dc/d3b/fixed__key__encryption__flags_8cc_source.html @@ -0,0 +1,161 @@ + + + + + + +DASH Media Packaging SDK: app/fixed_key_encryption_flags.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
fixed_key_encryption_flags.cc
+
+
+
1 // Copyright 2014 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 // Defines command line flags for fixed key encryption/decryption.
+
8 
+
9 #include "packager/app/fixed_key_encryption_flags.h"
+
10 
+
11 #include "packager/app/validate_flag.h"
+
12 
+
13 DEFINE_bool(enable_fixed_key_encryption,
+
14  false,
+
15  "Enable encryption with fixed key.");
+
16 DEFINE_bool(enable_fixed_key_decryption,
+
17  false,
+
18  "Enable decryption with fixed key.");
+
19 DEFINE_string(key_id, "", "Key id in hex string format.");
+
20 DEFINE_string(key, "", "Key in hex string format.");
+
21 DEFINE_string(iv,
+
22  "",
+
23  "Iv in hex string format. If not specified, a random iv will be "
+
24  "generated. This flag should only be used for testing.");
+
25 DEFINE_string(pssh, "", "PSSH in hex string format.");
+
26 
+
27 namespace edash_packager {
+
28 
+ +
30  bool success = true;
+
31 
+
32  const bool fixed_crypto =
+
33  FLAGS_enable_fixed_key_encryption || FLAGS_enable_fixed_key_decryption;
+
34  const char fixed_crypto_label[] = "--enable_fixed_key_encryption/decryption";
+
35  // --key_id and --key are associated with --enable_fixed_key_encryption and
+
36  // --enable_fixed_key_decryption.
+
37  if (!ValidateFlag(
+
38  "key_id", FLAGS_key_id, fixed_crypto, false, fixed_crypto_label)) {
+
39  success = false;
+
40  }
+
41  if (!ValidateFlag(
+
42  "key", FLAGS_key, fixed_crypto, false, fixed_crypto_label)) {
+
43  success = false;
+
44  }
+
45  if (!ValidateFlag("iv", FLAGS_iv, FLAGS_enable_fixed_key_encryption, true,
+
46  "--enable_fixed_key_encryption")) {
+
47  success = false;
+
48  }
+
49 
+
50  // --pssh is associated with --enable_fix_key_encryption.
+
51  if (!ValidateFlag("pssh",
+
52  FLAGS_pssh,
+
53  FLAGS_enable_fixed_key_encryption,
+
54  false,
+
55  "--enable_fixed_key_encryption")) {
+
56  success = false;
+
57  }
+
58  return success;
+
59 }
+
60 
+
61 } // namespace edash_packager
+ +
bool ValidateFlag(const char *flag_name, const std::string &flag_value, bool condition, bool optional, const char *label)
+
+ + + + diff --git a/sdk/dc/d3f/key__source_8h_source.html b/sdk/dc/d3f/key__source_8h_source.html new file mode 100644 index 0000000000..2ade3a68e1 --- /dev/null +++ b/sdk/dc/d3f/key__source_8h_source.html @@ -0,0 +1,197 @@ + + + + + + +DASH Media Packaging SDK: media/base/key_source.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
key_source.h
+
+
+
1 // Copyright 2014 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_BASE_KEY_SOURCE_H_
+
8 #define MEDIA_BASE_KEY_SOURCE_H_
+
9 
+
10 #include <vector>
+
11 
+
12 #include "packager/base/memory/scoped_ptr.h"
+
13 #include "packager/media/base/status.h"
+
14 
+
15 namespace edash_packager {
+
16 namespace media {
+
17 
+
18 struct EncryptionKey {
+
19  EncryptionKey();
+
20  ~EncryptionKey();
+
21 
+
22  std::vector<uint8_t> key_id;
+
23  std::vector<uint8_t> key;
+
24  std::vector<uint8_t> pssh;
+
25  std::vector<uint8_t> iv;
+
26 };
+
27 
+
29 class KeySource {
+
30  public:
+
31  enum TrackType {
+
32  TRACK_TYPE_UNKNOWN = 0,
+
33  TRACK_TYPE_SD = 1,
+
34  TRACK_TYPE_HD = 2,
+
35  TRACK_TYPE_AUDIO = 3,
+
36  TRACK_TYPE_UNSPECIFIED = 4,
+
37  NUM_VALID_TRACK_TYPES = 4
+
38  };
+
39 
+
40  virtual ~KeySource();
+
41 
+
46  virtual Status FetchKeys(const std::vector<uint8_t>& content_id,
+
47  const std::string& policy);
+
48 
+
53  virtual Status FetchKeys(const std::vector<uint8_t>& pssh_data);
+
54 
+
59  virtual Status FetchKeys(uint32_t asset_id);
+
60 
+
66  virtual Status GetKey(TrackType track_type, EncryptionKey* key);
+
67 
+
73  virtual Status GetKey(const std::vector<uint8_t>& key_id, EncryptionKey* key);
+
74 
+
82  virtual Status GetCryptoPeriodKey(uint32_t crypto_period_index,
+
83  TrackType track_type,
+
84  EncryptionKey* key);
+
85 
+
90  virtual std::string UUID();
+
91 
+
97  virtual std::string SystemName();
+
98 
+
107  static scoped_ptr<KeySource> CreateFromHexStrings(
+
108  const std::string& key_id_hex,
+
109  const std::string& key_hex,
+
110  const std::string& pssh_data_hex,
+
111  const std::string& iv_hex);
+
112 
+
114  static TrackType GetTrackTypeFromString(const std::string& track_type_string);
+
115 
+
117  static std::string TrackTypeToString(TrackType track_type);
+
118 
+
119  protected:
+
120  KeySource();
+
121 
+
124  static std::vector<uint8_t> PsshBoxFromPsshData(
+
125  const std::vector<uint8_t>& pssh_data);
+
126 
+
127  private:
+
128  explicit KeySource(scoped_ptr<EncryptionKey> encryption_key);
+
129 
+
130  scoped_ptr<EncryptionKey> encryption_key_;
+
131 
+
132  DISALLOW_COPY_AND_ASSIGN(KeySource);
+
133 };
+
134 
+
135 } // namespace media
+
136 } // namespace edash_packager
+
137 
+
138 #endif // MEDIA_BASE_KEY_SOURCE_H_
+
virtual Status GetKey(TrackType track_type, EncryptionKey *key)
Definition: key_source.cc:46
+
virtual Status GetCryptoPeriodKey(uint32_t crypto_period_index, TrackType track_type, EncryptionKey *key)
Definition: key_source.cc:66
+ + +
virtual Status FetchKeys(const std::vector< uint8_t > &content_id, const std::string &policy)
Definition: key_source.cc:30
+
virtual std::string UUID()
Definition: key_source.cc:92
+
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:29
+
static scoped_ptr< KeySource > CreateFromHexStrings(const std::string &key_id_hex, const std::string &key_hex, const std::string &pssh_data_hex, const std::string &iv_hex)
Definition: key_source.cc:100
+
static std::vector< uint8_t > PsshBoxFromPsshData(const std::vector< uint8_t > &pssh_data)
Definition: key_source.cc:164
+
virtual std::string SystemName()
Definition: key_source.cc:96
+
static TrackType GetTrackTypeFromString(const std::string &track_type_string)
Convert string representation of track type to enum representation.
Definition: key_source.cc:136
+
static std::string TrackTypeToString(TrackType track_type)
Convert TrackType to string.
Definition: key_source.cc:150
+
+ + + + diff --git a/sdk/dc/d41/classedash__packager_1_1xml_1_1RepresentationXmlNode-members.html b/sdk/dc/d41/classedash__packager_1_1xml_1_1RepresentationXmlNode-members.html new file mode 100644 index 0000000000..404213ed26 --- /dev/null +++ b/sdk/dc/d41/classedash__packager_1_1xml_1_1RepresentationXmlNode-members.html @@ -0,0 +1,125 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::xml::RepresentationXmlNode Member List
+
+
+ +

This is the complete list of members for edash_packager::xml::RepresentationXmlNode, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
AddAudioInfo(const MediaInfo::AudioInfo &audio_info)edash_packager::xml::RepresentationXmlNode
AddChild(ScopedXmlPtr< xmlNode >::type child)edash_packager::xml::XmlNode
AddContentProtectionElements(const std::list< ContentProtectionElement > &content_protection_elements) (defined in edash_packager::xml::RepresentationBaseXmlNode)edash_packager::xml::RepresentationBaseXmlNode
AddElements(const std::vector< Element > &elements)edash_packager::xml::XmlNode
AddLiveOnlyInfo(const MediaInfo &media_info, const std::list< SegmentInfo > &segment_infos, uint32_t start_number)edash_packager::xml::RepresentationXmlNode
AddVideoInfo(const MediaInfo::VideoInfo &video_info)edash_packager::xml::RepresentationXmlNode
AddVODOnlyInfo(const MediaInfo &media_info)edash_packager::xml::RepresentationXmlNode
GetRawPtr()edash_packager::xml::XmlNode
PassScopedPtr()edash_packager::xml::XmlNode
Release()edash_packager::xml::XmlNode
RepresentationBaseXmlNode(const char *name) (defined in edash_packager::xml::RepresentationBaseXmlNode)edash_packager::xml::RepresentationBaseXmlNodeexplicitprotected
RepresentationXmlNode() (defined in edash_packager::xml::RepresentationXmlNode)edash_packager::xml::RepresentationXmlNode
SetContent(const std::string &content)edash_packager::xml::XmlNode
SetFloatingPointAttribute(const char *attribute_name, double number)edash_packager::xml::XmlNode
SetId(uint32_t id)edash_packager::xml::XmlNode
SetIntegerAttribute(const char *attribute_name, uint64_t number)edash_packager::xml::XmlNode
SetStringAttribute(const char *attribute_name, const std::string &attribute)edash_packager::xml::XmlNode
XmlNode(const char *name)edash_packager::xml::XmlNodeexplicit
~RepresentationBaseXmlNode() (defined in edash_packager::xml::RepresentationBaseXmlNode)edash_packager::xml::RepresentationBaseXmlNodevirtual
~RepresentationXmlNode() (defined in edash_packager::xml::RepresentationXmlNode)edash_packager::xml::RepresentationXmlNodevirtual
~XmlNode() (defined in edash_packager::xml::XmlNode)edash_packager::xml::XmlNodevirtual
+ + + + diff --git a/sdk/dc/d44/classedash__packager_1_1xml_1_1XmlNode-members.html b/sdk/dc/d44/classedash__packager_1_1xml_1_1XmlNode-members.html new file mode 100644 index 0000000000..800c6b60f6 --- /dev/null +++ b/sdk/dc/d44/classedash__packager_1_1xml_1_1XmlNode-members.html @@ -0,0 +1,116 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::xml::XmlNode Member List
+
+
+ +

This is the complete list of members for edash_packager::xml::XmlNode, including all inherited members.

+ + + + + + + + + + + + + +
AddChild(ScopedXmlPtr< xmlNode >::type child)edash_packager::xml::XmlNode
AddElements(const std::vector< Element > &elements)edash_packager::xml::XmlNode
GetRawPtr()edash_packager::xml::XmlNode
PassScopedPtr()edash_packager::xml::XmlNode
Release()edash_packager::xml::XmlNode
SetContent(const std::string &content)edash_packager::xml::XmlNode
SetFloatingPointAttribute(const char *attribute_name, double number)edash_packager::xml::XmlNode
SetId(uint32_t id)edash_packager::xml::XmlNode
SetIntegerAttribute(const char *attribute_name, uint64_t number)edash_packager::xml::XmlNode
SetStringAttribute(const char *attribute_name, const std::string &attribute)edash_packager::xml::XmlNode
XmlNode(const char *name)edash_packager::xml::XmlNodeexplicit
~XmlNode() (defined in edash_packager::xml::XmlNode)edash_packager::xml::XmlNodevirtual
+ + + + diff --git a/sdk/dc/d48/classedash__packager_1_1media_1_1MediaParser.html b/sdk/dc/d48/classedash__packager_1_1media_1_1MediaParser.html new file mode 100644 index 0000000000..3bf4b01000 --- /dev/null +++ b/sdk/dc/d48/classedash__packager_1_1media_1_1MediaParser.html @@ -0,0 +1,303 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::MediaParser Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::MediaParser Class Referenceabstract
+
+
+
+Inheritance diagram for edash_packager::media::MediaParser:
+
+
+ + +edash_packager::media::mp2t::Mp2tMediaParser +edash_packager::media::mp4::MP4MediaParser +edash_packager::media::wvm::WvmMediaParser + +
+ + + + + + +

+Public Types

typedef base::Callback< void(const
+std::vector< scoped_refptr
+< StreamInfo > > &stream_info)> 
InitCB
 
typedef base::Callback< bool(uint32_t
+track_id, const scoped_refptr
+< MediaSample > &media_sample)> 
NewSampleCB
 
+ + + + + + + +

+Public Member Functions

virtual void Init (const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source)=0
 
virtual void Flush ()=0
 
virtual bool Parse (const uint8_t *buf, int size)=0
 
+

Detailed Description

+
+

Definition at line 25 of file media_parser.h.

+

Member Typedef Documentation

+ +
+
+ + + + +
typedef base::Callback< void(const std::vector<scoped_refptr<StreamInfo> >& stream_info)> edash_packager::media::MediaParser::InitCB
+
+

Called upon completion of parser initialization.

+
Parameters
+ + +
stream_infocontains the stream info of all the elementary streams within this file.
+
+
+ +

Definition at line 34 of file media_parser.h.

+ +
+
+ +
+
+ + + + +
typedef base::Callback<bool(uint32_t track_id, const scoped_refptr<MediaSample>& media_sample)> edash_packager::media::MediaParser::NewSampleCB
+
+

Called when a new media sample has been parsed.

+
Parameters
+ + + +
track_idis the track id of the new sample.
media_sampleis the new media sample.
+
+
+
Returns
true if the sample is accepted, false if something was wrong with the sample and a parsing error should be signaled.
+ +

Definition at line 43 of file media_parser.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual void edash_packager::media::MediaParser::Flush ()
+
+pure virtual
+
+

Flush data currently in the parser and put the parser in a state where it can receive data for a new seek point.

+ +

Implemented in edash_packager::media::wvm::WvmMediaParser, edash_packager::media::mp4::MP4MediaParser, and edash_packager::media::mp2t::Mp2tMediaParser.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void edash_packager::media::MediaParser::Init (const InitCBinit_cb,
const NewSampleCBnew_sample_cb,
KeySourcedecryption_key_source 
)
+
+pure virtual
+
+

Initialize the parser with necessary callbacks. Must be called before any data is passed to Parse().

+
Parameters
+ + + +
init_cbwill be called once enough data has been parsed to determine the initial stream configurations.
new_sample_cbwill be called each time a new media sample is available from the parser. May be NULL, and caller retains ownership.
+
+
+ +

Implemented in edash_packager::media::wvm::WvmMediaParser, edash_packager::media::mp4::MP4MediaParser, and edash_packager::media::mp2t::Mp2tMediaParser.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool edash_packager::media::MediaParser::Parse (const uint8_t * buf,
int size 
)
+
+pure virtual
+
+

Should be called when there is new data to parse.

+
Returns
true if successful.
+ +

Implemented in edash_packager::media::wvm::WvmMediaParser, edash_packager::media::mp4::MP4MediaParser, and edash_packager::media::mp2t::Mp2tMediaParser.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/sdk/dc/d48/classedash__packager_1_1media_1_1MediaParser.png b/sdk/dc/d48/classedash__packager_1_1media_1_1MediaParser.png new file mode 100644 index 0000000000..e36be4b578 Binary files /dev/null and b/sdk/dc/d48/classedash__packager_1_1media_1_1MediaParser.png differ diff --git a/sdk/dc/d52/decoding__time__iterator_8h_source.html b/sdk/dc/d52/decoding__time__iterator_8h_source.html new file mode 100644 index 0000000000..1efddfedda --- /dev/null +++ b/sdk/dc/d52/decoding__time__iterator_8h_source.html @@ -0,0 +1,155 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/decoding_time_iterator.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
decoding_time_iterator.h
+
+
+
1 // Copyright 2014 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_FORMATS_MP4_DECODING_TIME_ITERATOR_H_
+
8 #define MEDIA_FORMATS_MP4_DECODING_TIME_ITERATOR_H_
+
9 
+
10 #include <stdint.h>
+
11 
+
12 #include <vector>
+
13 
+
14 #include "packager/base/macros.h"
+
15 #include "packager/media/formats/mp4/box_definitions.h"
+
16 
+
17 namespace edash_packager {
+
18 namespace media {
+
19 namespace mp4 {
+
20 
+ +
25  public:
+
27  explicit DecodingTimeIterator(
+
28  const DecodingTimeToSample& decoding_time_to_sample);
+ +
30 
+
33  bool AdvanceSample();
+
34 
+
37  bool IsValid() const;
+
38 
+
40  uint32_t sample_delta() const { return iterator_->sample_delta; }
+
41 
+
43  uint64_t Duration(uint32_t start_sample, uint32_t end_sample) const;
+
44 
+
46  uint32_t NumSamples() const;
+
47 
+
48  private:
+
49  uint32_t sample_index_;
+
50  const std::vector<DecodingTime>& decoding_time_table_;
+
51  std::vector<DecodingTime>::const_iterator iterator_;
+
52 
+
53  DISALLOW_COPY_AND_ASSIGN(DecodingTimeIterator);
+
54 };
+
55 
+
56 } // namespace mp4
+
57 } // namespace media
+
58 } // namespace edash_packager
+
59 
+
60 #endif // MEDIA_FORMATS_MP4_DECODING_TIME_ITERATOR_H_
+
DecodingTimeIterator(const DecodingTimeToSample &decoding_time_to_sample)
Create DecodingTimeIterator from decoding time to sample box.
+ + + + + + +
uint64_t Duration(uint32_t start_sample, uint32_t end_sample) const
+
+ + + + diff --git a/sdk/dc/d55/structedash__packager_1_1media_1_1H264SEIMessage-members.html b/sdk/dc/d55/structedash__packager_1_1media_1_1H264SEIMessage-members.html new file mode 100644 index 0000000000..55575ecb3c --- /dev/null +++ b/sdk/dc/d55/structedash__packager_1_1media_1_1H264SEIMessage-members.html @@ -0,0 +1,110 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::H264SEIMessage Member List
+
+
+ +

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

+ + + + + + + +
H264SEIMessage() (defined in edash_packager::media::H264SEIMessage)edash_packager::media::H264SEIMessage
kSEIRecoveryPoint enum value (defined in edash_packager::media::H264SEIMessage)edash_packager::media::H264SEIMessage
payload_size (defined in edash_packager::media::H264SEIMessage)edash_packager::media::H264SEIMessage
recovery_point (defined in edash_packager::media::H264SEIMessage)edash_packager::media::H264SEIMessage
Type enum name (defined in edash_packager::media::H264SEIMessage)edash_packager::media::H264SEIMessage
type (defined in edash_packager::media::H264SEIMessage)edash_packager::media::H264SEIMessage
+ + + + diff --git a/sdk/dc/d73/classedash__packager_1_1media_1_1RequestSigner.html b/sdk/dc/d73/classedash__packager_1_1media_1_1RequestSigner.html new file mode 100644 index 0000000000..f23ac06332 --- /dev/null +++ b/sdk/dc/d73/classedash__packager_1_1media_1_1RequestSigner.html @@ -0,0 +1,188 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::RequestSigner Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::RequestSigner Class Referenceabstract
+
+
+ +

Abstract class used for signature generation. + More...

+ +

#include <request_signer.h>

+
+Inheritance diagram for edash_packager::media::RequestSigner:
+
+
+ + +edash_packager::media::AesRequestSigner +edash_packager::media::RsaRequestSigner + +
+ + + + + + +

+Public Member Functions

virtual bool GenerateSignature (const std::string &message, std::string *signature)=0
 
+const std::string & signer_name () const
 
+ + + +

+Protected Member Functions

RequestSigner (const std::string &signer_name)
 
+

Detailed Description

+

Abstract class used for signature generation.

+ +

Definition at line 21 of file request_signer.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool edash_packager::media::RequestSigner::GenerateSignature (const std::string & message,
std::string * signature 
)
+
+pure virtual
+
+

Generate signature for the input message.

+
Parameters
+ + +
signatureshould not be NULL.
+
+
+
Returns
true on success, false otherwise.
+ +

Implemented in edash_packager::media::RsaRequestSigner, and edash_packager::media::AesRequestSigner.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/dc/d73/classedash__packager_1_1media_1_1RequestSigner.png b/sdk/dc/d73/classedash__packager_1_1media_1_1RequestSigner.png new file mode 100644 index 0000000000..e68c9a10ca Binary files /dev/null and b/sdk/dc/d73/classedash__packager_1_1media_1_1RequestSigner.png differ diff --git a/sdk/dc/d7a/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html b/sdk/dc/d7a/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html new file mode 100644 index 0000000000..88b41f6ae1 --- /dev/null +++ b/sdk/dc/d7a/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html @@ -0,0 +1,267 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::MultiSegmentSegmenter Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::MultiSegmentSegmenter Class Reference
+
+
+ +

#include <multi_segment_segmenter.h>

+
+Inheritance diagram for edash_packager::media::mp4::MultiSegmentSegmenter:
+
+
+ + +edash_packager::media::mp4::Segmenter + +
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

MultiSegmentSegmenter (const MuxerOptions &options, scoped_ptr< FileType > ftyp, scoped_ptr< Movie > moov)
 
Segmenter implementation overrides.
virtual bool GetInitRange (size_t *offset, size_t *size) OVERRIDE
 
virtual bool GetIndexRange (size_t *offset, size_t *size) OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Segmenter
Segmenter (const MuxerOptions &options, scoped_ptr< FileType > ftyp, scoped_ptr< Movie > moov)
 
Status Initialize (const std::vector< MediaStream * > &streams, MuxerListener *muxer_listener, ProgressListener *progress_listener, KeySource *encryption_key_source, uint32_t max_sd_pixels, double clear_lead_in_seconds, double crypto_period_duration_in_seconds)
 
Status Finalize ()
 
Status AddSample (const MediaStream *stream, scoped_refptr< MediaSample > sample)
 
+uint32_t GetReferenceTimeScale () const
 
double GetDuration () const
 
uint32_t sample_duration () const
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from edash_packager::media::mp4::Segmenter
+void UpdateProgress (uint64_t progress)
 Update segmentation progress using ProgressListener.
 
+void SetComplete ()
 Set progress to 100%.
 
+const MuxerOptionsoptions () const
 
+FileTypeftyp ()
 
+Moviemoov ()
 
+BufferWriterfragment_buffer ()
 
+SegmentIndexsidx ()
 
+MuxerListenermuxer_listener ()
 
+uint64_t progress_target ()
 
+void set_progress_target (uint64_t progress_target)
 
+

Detailed Description

+

Segmenter for MP4 live, main and simple profiles. The generated media file can contain one or many segments with segment duration defined by MuxerOptions.segment_duration. A segment can contain one or many subsegments defined by num_subsegments_per_sidx. A subsegment can contain one or many fragments with fragment duration defined by MuxerOptions.fragment_duration. The actual segment or fragment duration may not match the requested duration exactly, but will be approximated. That is, the Segmenter tries to end segment/fragment at the first sample with overall segment/fragment duration not smaller than defined duration and yet meet SAP requirements. The generated segments are written to files defined by MuxerOptions.segment_template if specified; otherwise, the segments are appended to the main output file specified by MuxerOptions.output_file_name.

+ +

Definition at line 31 of file multi_segment_segmenter.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::mp4::MultiSegmentSegmenter::GetIndexRange (size_t * offset,
size_t * size 
)
+
+virtual
+
+
Returns
true if there is an index byte range, while setting offset and size; or false if index byte range does not apply.
+ +

Implements edash_packager::media::mp4::Segmenter.

+ +

Definition at line 42 of file multi_segment_segmenter.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::mp4::MultiSegmentSegmenter::GetInitRange (size_t * offset,
size_t * size 
)
+
+virtual
+
+
Returns
true if there is an initialization range, while setting offset and size; or false if initialization range does not apply.
+ +

Implements edash_packager::media::mp4::Segmenter.

+ +

Definition at line 36 of file multi_segment_segmenter.cc.

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

+Public Member Functions

+bool AddFile (const std::string &media_info_path, const std::string &mpd_path)
 
+void AddBaseUrl (const std::string &base_url)
 
+bool WriteMpdToFile (const char *file_name)
 
+ + + +

+Friends

+class MpdWriterTest
 
+

Detailed Description

+
+

Definition at line 53 of file mpd_writer.h.

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/dc/d8a/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter.html b/sdk/dc/d8a/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter.html new file mode 100644 index 0000000000..0f1edd9529 --- /dev/null +++ b/sdk/dc/d8a/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter.html @@ -0,0 +1,307 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::KeyRotationFragmenter Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::KeyRotationFragmenter Class Reference
+
+
+ +

#include <key_rotation_fragmenter.h>

+
+Inheritance diagram for edash_packager::media::mp4::KeyRotationFragmenter:
+
+
+ + +edash_packager::media::mp4::EncryptingFragmenter +edash_packager::media::mp4::Fragmenter + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 KeyRotationFragmenter (MovieFragment *moof, TrackFragment *traf, KeySource *encryption_key_source, KeySource::TrackType track_type, int64_t crypto_period_duration, int64_t clear_time, uint8_t nalu_length_size, MuxerListener *muxer_listener)
 
- Public Member Functions inherited from edash_packager::media::mp4::EncryptingFragmenter
 EncryptingFragmenter (TrackFragment *traf, scoped_ptr< EncryptionKey > encryption_key, int64_t clear_time, uint8_t nalu_length_size)
 
virtual Status AddSample (scoped_refptr< MediaSample > sample) OVERRIDE
 
virtual Status InitializeFragment (int64_t first_sample_dts) OVERRIDE
 
+virtual void FinalizeFragment () OVERRIDE
 Finalize and optimize the fragment.
 
- Public Member Functions inherited from edash_packager::media::mp4::Fragmenter
 Fragmenter (TrackFragment *traf)
 
+void GenerateSegmentReference (SegmentReference *reference)
 Fill reference with current fragment information.
 
+uint64_t fragment_duration () const
 
+uint64_t first_sap_time () const
 
+uint64_t earliest_presentation_time () const
 
+bool fragment_initialized () const
 
+bool fragment_finalized () const
 
+BufferWriterdata ()
 
+BufferWriteraux_data ()
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

Fragmenter implementation overrides.
virtual Status PrepareFragmentForEncryption (bool enable_encryption) OVERRIDE
 
+virtual void FinalizeFragmentForEncryption () OVERRIDE
 Finalize current fragment for encryption.
 
- Protected Member Functions inherited from edash_packager::media::mp4::EncryptingFragmenter
Status CreateEncryptor ()
 
+EncryptionKeyencryption_key ()
 
+AesCtrEncryptorencryptor ()
 
+void set_encryption_key (scoped_ptr< EncryptionKey > encryption_key)
 
- Protected Member Functions inherited from edash_packager::media::mp4::Fragmenter
+TrackFragmenttraf ()
 
template<typename T >
bool OptimizeSampleEntries (std::vector< T > *entries, T *default_value)
 
+

Detailed Description

+

KeyRotationFragmenter generates MP4 fragments with sample encrypted by rotation keys.

+ +

Definition at line 22 of file key_rotation_fragmenter.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
edash_packager::media::mp4::KeyRotationFragmenter::KeyRotationFragmenter (MovieFragmentmoof,
TrackFragmenttraf,
KeySourceencryption_key_source,
KeySource::TrackType track_type,
int64_t crypto_period_duration,
int64_t clear_time,
uint8_t nalu_length_size,
MuxerListenermuxer_listener 
)
+
+
Parameters
+ + + + + + + + + +
moofpoints to a MovieFragment box.
trafpoints to a TrackFragment box.
encryption_key_sourcepoints to the source which generates encryption keys.
track_typeindicates whether SD key or HD key should be used to encrypt the video content.
crypto_period_durationspecifies crypto period duration in units of the current track's timescale.
clear_timespecifies clear lead duration in units of the current track's timescale.
nalu_length_sizeNAL unit length size, in bytes, for subsample encryption.
muxer_listeneris a pointer to MuxerListener for notifying muxer related events. This may be null.
+
+
+ +

Definition at line 20 of file key_rotation_fragmenter.cc.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
Status edash_packager::media::mp4::KeyRotationFragmenter::PrepareFragmentForEncryption (bool enable_encryption)
+
+protectedvirtual
+
+

Prepare current fragment for encryption.

+
Returns
OK on success, an error status otherwise.
+ +

Reimplemented from edash_packager::media::mp4::EncryptingFragmenter.

+ +

Definition at line 44 of file key_rotation_fragmenter.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/dc/d8a/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter.png b/sdk/dc/d8a/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter.png new file mode 100644 index 0000000000..6e69942cf6 Binary files /dev/null and b/sdk/dc/d8a/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter.png differ diff --git a/sdk/dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.html b/sdk/dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.html new file mode 100644 index 0000000000..dd82160ab2 --- /dev/null +++ b/sdk/dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.html @@ -0,0 +1,263 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp2t::Mp2tMediaParser Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp2t::Mp2tMediaParser Class Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp2t::Mp2tMediaParser:
+
+
+ + +edash_packager::media::MediaParser + +
+ + + + + + + + +

+Public Member Functions

virtual void Init (const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source) OVERRIDE
 
virtual void Flush () OVERRIDE
 
virtual bool Parse (const uint8_t *buf, int size) OVERRIDE
 
+ + + + + + +

+Additional Inherited Members

- Public Types inherited from edash_packager::media::MediaParser
typedef base::Callback< void(const
+std::vector< scoped_refptr
+< StreamInfo > > &stream_info)> 
InitCB
 
typedef base::Callback< bool(uint32_t
+track_id, const scoped_refptr
+< MediaSample > &media_sample)> 
NewSampleCB
 
+

Detailed Description

+
+

Definition at line 30 of file mp2t_media_parser.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
void edash_packager::media::mp2t::Mp2tMediaParser::Flush ()
+
+virtual
+
+

Flush data currently in the parser and put the parser in a state where it can receive data for a new seek point.

+ +

Implements edash_packager::media::MediaParser.

+ +

Definition at line 169 of file mp2t_media_parser.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void edash_packager::media::mp2t::Mp2tMediaParser::Init (const InitCBinit_cb,
const NewSampleCBnew_sample_cb,
KeySourcedecryption_key_source 
)
+
+virtual
+
+

Initialize the parser with necessary callbacks. Must be called before any data is passed to Parse().

+
Parameters
+ + + +
init_cbwill be called once enough data has been parsed to determine the initial stream configurations.
new_sample_cbwill be called each time a new media sample is available from the parser. May be NULL, and caller retains ownership.
+
+
+ +

Implements edash_packager::media::MediaParser.

+ +

Definition at line 156 of file mp2t_media_parser.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::mp2t::Mp2tMediaParser::Parse (const uint8_t * buf,
int size 
)
+
+virtual
+
+

Should be called when there is new data to parse.

+
Returns
true if successful.
+ +

Implements edash_packager::media::MediaParser.

+ +

Definition at line 187 of file mp2t_media_parser.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.png b/sdk/dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.png new file mode 100644 index 0000000000..dc933b436a Binary files /dev/null and b/sdk/dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.png differ diff --git a/sdk/dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html b/sdk/dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html new file mode 100644 index 0000000000..92bedf7922 --- /dev/null +++ b/sdk/dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html @@ -0,0 +1,188 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::DecodingTimeToSample Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::DecodingTimeToSample Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::DecodingTimeToSample:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + +

+Public Attributes

+std::vector< DecodingTimedecoding_time
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 247 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::DecodingTimeToSample::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 469 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.png b/sdk/dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.png new file mode 100644 index 0000000000..08bcbe67e0 Binary files /dev/null and b/sdk/dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.png differ diff --git a/sdk/dc/dbf/box__buffer_8h_source.html b/sdk/dc/dbf/box__buffer_8h_source.html new file mode 100644 index 0000000000..0117a285a4 --- /dev/null +++ b/sdk/dc/dbf/box__buffer_8h_source.html @@ -0,0 +1,283 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/box_buffer.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
box_buffer.h
+
+
+
1 // Copyright 2014 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_FORMATS_MP4_BOX_BUFFER_H_
+
8 #define MEDIA_FORMATS_MP4_BOX_BUFFER_H_
+
9 
+
10 #include "packager/base/compiler_specific.h"
+
11 #include "packager/media/base/buffer_writer.h"
+
12 #include "packager/media/formats/mp4/box.h"
+
13 #include "packager/media/formats/mp4/box_reader.h"
+
14 
+
15 namespace edash_packager {
+
16 namespace media {
+
17 namespace mp4 {
+
18 
+
23 class BoxBuffer {
+
24  public:
+
27  explicit BoxBuffer(BoxReader* reader) : reader_(reader), writer_(NULL) {
+
28  DCHECK(reader);
+
29  }
+
32  explicit BoxBuffer(BufferWriter* writer) : reader_(NULL), writer_(writer) {
+
33  DCHECK(writer);
+
34  }
+
35  ~BoxBuffer() {}
+
36 
+
38  bool Reading() const { return reader_ != NULL; }
+
39 
+
42  size_t Pos() const {
+
43  if (reader_)
+
44  return reader_->pos();
+
45  return writer_->Size();
+
46  }
+
47 
+
52  size_t Size() const {
+
53  if (reader_)
+
54  return reader_->size();
+
55  return writer_->Size();
+
56  }
+
57 
+
60  bool ReadWriteUInt8(uint8_t* v) {
+
61  if (reader_)
+
62  return reader_->Read1(v);
+
63  writer_->AppendInt(*v);
+
64  return true;
+
65  }
+
66  bool ReadWriteUInt16(uint16_t* v) {
+
67  if (reader_)
+
68  return reader_->Read2(v);
+
69  writer_->AppendInt(*v);
+
70  return true;
+
71  }
+
72  bool ReadWriteUInt32(uint32_t* v) {
+
73  if (reader_)
+
74  return reader_->Read4(v);
+
75  writer_->AppendInt(*v);
+
76  return true;
+
77  }
+
78  bool ReadWriteUInt64(uint64_t* v) {
+
79  if (reader_)
+
80  return reader_->Read8(v);
+
81  writer_->AppendInt(*v);
+
82  return true;
+
83  }
+
84  bool ReadWriteInt16(int16_t* v) {
+
85  if (reader_)
+
86  return reader_->Read2s(v);
+
87  writer_->AppendInt(*v);
+
88  return true;
+
89  }
+
90  bool ReadWriteInt32(int32_t* v) {
+
91  if (reader_)
+
92  return reader_->Read4s(v);
+
93  writer_->AppendInt(*v);
+
94  return true;
+
95  }
+
96  bool ReadWriteInt64(int64_t* v) {
+
97  if (reader_)
+
98  return reader_->Read8s(v);
+
99  writer_->AppendInt(*v);
+
100  return true;
+
101  }
+
103 
+
107  bool ReadWriteUInt64NBytes(uint64_t* v, size_t num_bytes) {
+
108  if (reader_)
+
109  return reader_->ReadNBytesInto8(v, num_bytes);
+
110  writer_->AppendNBytes(*v, num_bytes);
+
111  return true;
+
112  }
+
113  bool ReadWriteInt64NBytes(int64_t* v, size_t num_bytes) {
+
114  if (reader_)
+
115  return reader_->ReadNBytesInto8s(v, num_bytes);
+
116  writer_->AppendNBytes(*v, num_bytes);
+
117  return true;
+
118  }
+
119  bool ReadWriteVector(std::vector<uint8_t>* vector, size_t count) {
+
120  if (reader_)
+
121  return reader_->ReadToVector(vector, count);
+
122  DCHECK_EQ(vector->size(), count);
+
123  writer_->AppendVector(*vector);
+
124  return true;
+
125  }
+
126  bool ReadWriteFourCC(FourCC* fourcc) {
+
127  if (reader_)
+
128  return reader_->ReadFourCC(fourcc);
+
129  writer_->AppendInt(static_cast<uint32_t>(*fourcc));
+
130  return true;
+
131  }
+
132 
+ +
136  if (reader_)
+
137  return reader_->ScanChildren();
+
138  // NOP in write mode.
+
139  return true;
+
140  }
+
141 
+
144  bool ReadWriteChild(Box* box) {
+
145  if (reader_)
+
146  return reader_->ReadChild(box);
+
147  // The box is mandatory, i.e. the box size should not be 0.
+
148  DCHECK_NE(0u, box->atom_size);
+
149  CHECK(box->ReadWrite(this));
+
150  return true;
+
151  }
+
152 
+
155  bool TryReadWriteChild(Box* box) {
+
156  if (reader_)
+
157  return reader_->TryReadChild(box);
+
158  // The box is optional, i.e. it can be skipped if the box size is 0.
+
159  if (box->atom_size != 0)
+
160  CHECK(box->ReadWrite(this));
+
161  return true;
+
162  }
+
163 
+
167  bool IgnoreBytes(size_t num_bytes) {
+
168  if (reader_)
+
169  return reader_->SkipBytes(num_bytes);
+
170  std::vector<uint8_t> vector(num_bytes, 0);
+
171  writer_->AppendVector(vector);
+
172  return true;
+
173  }
+
174 
+
176  BoxReader* reader() { return reader_; }
+
178  BufferWriter* writer() { return writer_; }
+
179 
+
180  private:
+
181  BoxReader* reader_;
+
182  BufferWriter* writer_;
+
183 
+
184  DISALLOW_COPY_AND_ASSIGN(BoxBuffer);
+
185 };
+
186 
+
187 } // namespace mp4
+
188 } // namespace media
+
189 } // namespace edash_packager
+
190 
+
191 #endif // MEDIA_FORMATS_MP4_BOX_BUFFER_H_
+
void AppendNBytes(uint64_t v, size_t num_bytes)
+
bool ReadChild(Box *child) WARN_UNUSED_RESULT
Definition: box_reader.cc:123
+ +
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 TryReadChild(Box *child) WARN_UNUSED_RESULT
Definition: box_reader.cc:140
+ +
bool ReadWriteUInt64NBytes(uint64_t *v, size_t num_bytes)
Definition: box_buffer.h:107
+ +
bool ScanChildren() WARN_UNUSED_RESULT
Definition: box_reader.cc:103
+ +
bool IgnoreBytes(size_t num_bytes)
Definition: box_buffer.h:167
+
bool SkipBytes(size_t num_bytes) WARN_UNUSED_RESULT
+
BoxBuffer(BufferWriter *writer)
Definition: box_buffer.h:32
+ + +
bool ReadNBytesInto8(uint64_t *v, size_t num_bytes) WARN_UNUSED_RESULT
+ + +
Class for reading MP4 boxes.
Definition: box_reader.h:24
+ + + + +
+ + + + diff --git a/sdk/dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html b/sdk/dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html new file mode 100644 index 0000000000..829cfd0f82 --- /dev/null +++ b/sdk/dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html @@ -0,0 +1,321 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::AACAudioSpecificConfig Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::AACAudioSpecificConfig Class Reference
+
+
+ +

#include <aac_audio_specific_config.h>

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

+Public Member Functions

bool Parse (const std::vector< uint8_t > &data)
 
uint32_t GetOutputSamplesPerSecond (bool sbr_in_mimetype) const
 
uint8_t GetNumChannels (bool sbr_in_mimetype) const
 
bool ConvertToADTS (std::vector< uint8_t > *buffer) const
 
uint8_t audio_object_type () const
 
uint32_t frequency () const
 
uint8_t num_channels () const
 
+ + + + +

+Static Public Attributes

+static const size_t kADTSHeaderSize = 7
 Size in bytes of the ADTS header added by ConvertEsdsToADTS().
 
+

Detailed Description

+

This class parses the AAC information from decoder specific information embedded in the esds box in an ISO BMFF file. Please refer to ISO 14496 Part 3 Table 1.13 - Syntax of AudioSpecificConfig for more details.

+ +

Definition at line 24 of file aac_audio_specific_config.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint8_t edash_packager::media::mp4::AACAudioSpecificConfig::audio_object_type () const
+
+inline
+
+
Returns
The audio object type for this AAC config.
+ +

Definition at line 55 of file aac_audio_specific_config.h.

+ +
+
+ +
+
+ + + + + + + + +
bool edash_packager::media::mp4::AACAudioSpecificConfig::ConvertToADTS (std::vector< uint8_t > * buffer) const
+
+

Convert a raw AAC frame into an AAC frame with an ADTS header.

+
Parameters
+ + +
[in,out]buffercontains the raw AAC frame on input, and the converted frame on output if successful; it is untouched on failure.
+
+
+
Returns
true on success, false otherwise.
+ +

Definition at line 159 of file aac_audio_specific_config.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::AACAudioSpecificConfig::frequency () const
+
+inline
+
+
Returns
The sampling frequency for this AAC config.
+ +

Definition at line 58 of file aac_audio_specific_config.h.

+ +
+
+ +
+
+ + + + + + + + +
uint8_t edash_packager::media::mp4::AACAudioSpecificConfig::GetNumChannels (bool sbr_in_mimetype) const
+
+
Parameters
+ + +
sbr_in_mimetypeindicates whether SBR mode is specified in the mimetype, i.e. codecs parameter contains mp4a.40.5.
+
+
+
Returns
Number of channels for the AAC stream.
+ +

Definition at line 145 of file aac_audio_specific_config.cc.

+ +
+
+ +
+
+ + + + + + + + +
uint32_t edash_packager::media::mp4::AACAudioSpecificConfig::GetOutputSamplesPerSecond (bool sbr_in_mimetype) const
+
+
Parameters
+ + +
sbr_in_mimetypeindicates whether SBR mode is specified in the mimetype, i.e. codecs parameter contains mp4a.40.5.
+
+
+
Returns
Output sample rate for the AAC stream.
+ +

Definition at line 130 of file aac_audio_specific_config.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint8_t edash_packager::media::mp4::AACAudioSpecificConfig::num_channels () const
+
+inline
+
+
Returns
Number of channels for this AAC config.
+ +

Definition at line 61 of file aac_audio_specific_config.h.

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

Parse the AAC config from decoder specific information embedded in an esds box. The function will parse the data and get the ElementaryStreamDescriptor, then it will parse the ElementaryStreamDescriptor to get audio stream configurations.

+
Parameters
+ + +
datacontains decoder specific information from an esds box.
+
+
+
Returns
true if successful, false otherwise.
+ +

Definition at line 41 of file aac_audio_specific_config.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/dc/dd4/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry-members.html b/sdk/dc/dd4/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry-members.html new file mode 100644 index 0000000000..924df4f83d --- /dev/null +++ b/sdk/dc/dd4/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry-members.html @@ -0,0 +1,109 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::SampleToGroupEntry Member List
+
+
+ +

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

+ + + + + + +
group_description_index (defined in edash_packager::media::mp4::SampleToGroupEntry)edash_packager::media::mp4::SampleToGroupEntry
GroupDescriptionIndexBase enum name (defined in edash_packager::media::mp4::SampleToGroupEntry)edash_packager::media::mp4::SampleToGroupEntry
kTrackFragmentGroupDescriptionIndexBase enum value (defined in edash_packager::media::mp4::SampleToGroupEntry)edash_packager::media::mp4::SampleToGroupEntry
kTrackGroupDescriptionIndexBase enum value (defined in edash_packager::media::mp4::SampleToGroupEntry)edash_packager::media::mp4::SampleToGroupEntry
sample_count (defined in edash_packager::media::mp4::SampleToGroupEntry)edash_packager::media::mp4::SampleToGroupEntry
+ + + + diff --git a/sdk/dc/dd9/rsa__key_8cc_source.html b/sdk/dc/dd9/rsa__key_8cc_source.html new file mode 100644 index 0000000000..aa720cbab9 --- /dev/null +++ b/sdk/dc/dd9/rsa__key_8cc_source.html @@ -0,0 +1,358 @@ + + + + + + +DASH Media Packaging SDK: media/base/rsa_key.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
rsa_key.cc
+
+
+
1 // Copyright 2014 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 // RSA signature details:
+
8 // Algorithm: RSASSA-PSS
+
9 // Hash algorithm: SHA1
+
10 // Mask generation function: mgf1SHA1
+
11 // Salt length: 20 bytes
+
12 // Trailer field: 0xbc
+
13 //
+
14 // RSA encryption details:
+
15 // Algorithm: RSA-OAEP
+
16 // Mask generation function: mgf1SHA1
+
17 // Label (encoding paramter): empty std::string
+
18 
+
19 #include "packager/media/base/rsa_key.h"
+
20 
+
21 #include <openssl/err.h>
+
22 #include <openssl/rsa.h>
+
23 #include <openssl/x509.h>
+
24 #include <vector>
+
25 
+
26 #include "packager/base/logging.h"
+
27 #include "packager/base/sha1.h"
+
28 #include "packager/base/stl_util.h"
+
29 
+
30 namespace {
+
31 
+
32 const size_t kPssSaltLength = 20u;
+
33 
+
34 // Serialize rsa key from DER encoded PKCS#1 RSAPrivateKey.
+
35 RSA* DeserializeRsaKey(const std::string& serialized_key,
+
36  bool deserialize_private_key) {
+
37  if (serialized_key.empty()) {
+
38  LOG(ERROR) << "Serialized RSA Key is empty.";
+
39  return NULL;
+
40  }
+
41 
+
42  BIO* bio = BIO_new_mem_buf(const_cast<char*>(serialized_key.data()),
+
43  serialized_key.size());
+
44  if (bio == NULL) {
+
45  LOG(ERROR) << "BIO_new_mem_buf returned NULL.";
+
46  return NULL;
+
47  }
+
48  RSA* rsa_key = deserialize_private_key ? d2i_RSAPrivateKey_bio(bio, NULL)
+
49  : d2i_RSAPublicKey_bio(bio, NULL);
+
50  BIO_free(bio);
+
51  return rsa_key;
+
52 }
+
53 
+
54 RSA* DeserializeRsaPrivateKey(const std::string& serialized_key) {
+
55  RSA* rsa_key = DeserializeRsaKey(serialized_key, true);
+
56  if (!rsa_key) {
+
57  LOG(ERROR) << "Private RSA key deserialization failure.";
+
58  return NULL;
+
59  }
+
60  if (RSA_check_key(rsa_key) != 1) {
+
61  LOG(ERROR) << "Invalid RSA Private key: " << ERR_error_string(
+
62  ERR_get_error(), NULL);
+
63  RSA_free(rsa_key);
+
64  return NULL;
+
65  }
+
66  return rsa_key;
+
67 }
+
68 
+
69 RSA* DeserializeRsaPublicKey(const std::string& serialized_key) {
+
70  RSA* rsa_key = DeserializeRsaKey(serialized_key, false);
+
71  if (!rsa_key) {
+
72  LOG(ERROR) << "Private RSA key deserialization failure.";
+
73  return NULL;
+
74  }
+
75  if (RSA_size(rsa_key) <= 0) {
+
76  LOG(ERROR) << "Invalid RSA Public key: " << ERR_error_string(
+
77  ERR_get_error(), NULL);
+
78  RSA_free(rsa_key);
+
79  return NULL;
+
80  }
+
81  return rsa_key;
+
82 }
+
83 
+
84 } // namespace
+
85 
+
86 namespace edash_packager {
+
87 namespace media {
+
88 
+
89 RsaPrivateKey::RsaPrivateKey(RSA* rsa_key) : rsa_key_(rsa_key) {
+
90  DCHECK(rsa_key);
+
91 }
+
92 RsaPrivateKey::~RsaPrivateKey() {
+
93  if (rsa_key_ != NULL)
+
94  RSA_free(rsa_key_);
+
95 }
+
96 
+
97 RsaPrivateKey* RsaPrivateKey::Create(const std::string& serialized_key) {
+
98  RSA* rsa_key = DeserializeRsaPrivateKey(serialized_key);
+
99  return rsa_key == NULL ? NULL : new RsaPrivateKey(rsa_key);
+
100 }
+
101 
+
102 bool RsaPrivateKey::Decrypt(const std::string& encrypted_message,
+
103  std::string* decrypted_message) {
+
104  DCHECK(decrypted_message);
+
105 
+
106  size_t rsa_size = RSA_size(rsa_key_);
+
107  if (encrypted_message.size() != rsa_size) {
+
108  LOG(ERROR) << "Encrypted RSA message has the wrong size (expected "
+
109  << rsa_size << ", actual " << encrypted_message.size() << ").";
+
110  return false;
+
111  }
+
112 
+
113  decrypted_message->resize(rsa_size);
+
114  int decrypted_size = RSA_private_decrypt(
+
115  rsa_size,
+
116  reinterpret_cast<const uint8_t*>(encrypted_message.data()),
+
117  reinterpret_cast<uint8_t*>(string_as_array(decrypted_message)),
+
118  rsa_key_,
+
119  RSA_PKCS1_OAEP_PADDING);
+
120 
+
121  if (decrypted_size == -1) {
+
122  LOG(ERROR) << "RSA private decrypt failure: " << ERR_error_string(
+
123  ERR_get_error(), NULL);
+
124  return false;
+
125  }
+
126  decrypted_message->resize(decrypted_size);
+
127  return true;
+
128 }
+
129 
+
130 bool RsaPrivateKey::GenerateSignature(const std::string& message,
+
131  std::string* signature) {
+
132  DCHECK(signature);
+
133  if (message.empty()) {
+
134  LOG(ERROR) << "Message to be signed is empty.";
+
135  return false;
+
136  }
+
137 
+
138  std::string message_digest = base::SHA1HashString(message);
+
139 
+
140  // Add PSS padding.
+
141  size_t rsa_size = RSA_size(rsa_key_);
+
142  std::vector<uint8_t> padded_digest(rsa_size);
+
143  if (!RSA_padding_add_PKCS1_PSS_mgf1(
+
144  rsa_key_,
+
145  &padded_digest[0],
+
146  reinterpret_cast<uint8_t*>(string_as_array(&message_digest)),
+
147  EVP_sha1(),
+
148  EVP_sha1(),
+
149  kPssSaltLength)) {
+
150  LOG(ERROR) << "RSA padding failure: " << ERR_error_string(ERR_get_error(),
+
151  NULL);
+
152  return false;
+
153  }
+
154 
+
155  // Encrypt PSS padded digest.
+
156  signature->resize(rsa_size);
+
157  int signature_size = RSA_private_encrypt(
+
158  padded_digest.size(),
+
159  &padded_digest[0],
+
160  reinterpret_cast<uint8_t*>(string_as_array(signature)),
+
161  rsa_key_,
+
162  RSA_NO_PADDING);
+
163 
+
164  if (signature_size != static_cast<int>(rsa_size)) {
+
165  LOG(ERROR) << "RSA private encrypt failure: " << ERR_error_string(
+
166  ERR_get_error(), NULL);
+
167  return false;
+
168  }
+
169  return true;
+
170 }
+
171 
+
172 RsaPublicKey::RsaPublicKey(RSA* rsa_key) : rsa_key_(rsa_key) {
+
173  DCHECK(rsa_key);
+
174 }
+
175 RsaPublicKey::~RsaPublicKey() {
+
176  if (rsa_key_ != NULL)
+
177  RSA_free(rsa_key_);
+
178 }
+
179 
+
180 RsaPublicKey* RsaPublicKey::Create(const std::string& serialized_key) {
+
181  RSA* rsa_key = DeserializeRsaPublicKey(serialized_key);
+
182  return rsa_key == NULL ? NULL : new RsaPublicKey(rsa_key);
+
183 }
+
184 
+
185 bool RsaPublicKey::Encrypt(const std::string& clear_message,
+
186  std::string* encrypted_message) {
+
187  DCHECK(encrypted_message);
+
188  if (clear_message.empty()) {
+
189  LOG(ERROR) << "Message to be encrypted is empty.";
+
190  return false;
+
191  }
+
192 
+
193  size_t rsa_size = RSA_size(rsa_key_);
+
194  encrypted_message->resize(rsa_size);
+
195  int encrypted_size = RSA_public_encrypt(
+
196  clear_message.size(),
+
197  reinterpret_cast<const uint8_t*>(clear_message.data()),
+
198  reinterpret_cast<uint8_t*>(string_as_array(encrypted_message)),
+
199  rsa_key_,
+
200  RSA_PKCS1_OAEP_PADDING);
+
201 
+
202  if (encrypted_size != static_cast<int>(rsa_size)) {
+
203  LOG(ERROR) << "RSA public encrypt failure: " << ERR_error_string(
+
204  ERR_get_error(), NULL);
+
205  return false;
+
206  }
+
207  return true;
+
208 }
+
209 
+
210 bool RsaPublicKey::VerifySignature(const std::string& message,
+
211  const std::string& signature) {
+
212  if (message.empty()) {
+
213  LOG(ERROR) << "Signed message is empty.";
+
214  return false;
+
215  }
+
216 
+
217  size_t rsa_size = RSA_size(rsa_key_);
+
218  if (signature.size() != rsa_size) {
+
219  LOG(ERROR) << "Message signature is of the wrong size (expected "
+
220  << rsa_size << ", actual " << signature.size() << ").";
+
221  return false;
+
222  }
+
223 
+
224  // Decrypt the signature.
+
225  std::vector<uint8_t> padded_digest(signature.size());
+
226  int decrypted_size =
+
227  RSA_public_decrypt(signature.size(),
+
228  reinterpret_cast<const uint8_t*>(signature.data()),
+
229  &padded_digest[0],
+
230  rsa_key_,
+
231  RSA_NO_PADDING);
+
232 
+
233  if (decrypted_size != static_cast<int>(rsa_size)) {
+
234  LOG(ERROR) << "RSA public decrypt failure: " << ERR_error_string(
+
235  ERR_get_error(), NULL);
+
236  return false;
+
237  }
+
238 
+
239  std::string message_digest = base::SHA1HashString(message);
+
240 
+
241  // Verify PSS padding.
+
242  return RSA_verify_PKCS1_PSS_mgf1(
+
243  rsa_key_,
+
244  reinterpret_cast<const uint8_t*>(message_digest.data()),
+
245  EVP_sha1(),
+
246  EVP_sha1(),
+
247  &padded_digest[0],
+
248  kPssSaltLength) != 0;
+
249 }
+
250 
+
251 } // namespace media
+
252 } // namespace edash_packager
+
bool Decrypt(const std::string &encrypted_message, std::string *decrypted_message)
Definition: rsa_key.cc:102
+
bool GenerateSignature(const std::string &message, std::string *signature)
Definition: rsa_key.cc:130
+
static RsaPrivateKey * Create(const std::string &serialized_key)
Definition: rsa_key.cc:97
+
static RsaPublicKey * Create(const std::string &serialized_key)
Definition: rsa_key.cc:180
+
bool VerifySignature(const std::string &message, const std::string &signature)
Definition: rsa_key.cc:210
+
bool Encrypt(const std::string &clear_message, std::string *encrypted_message)
Definition: rsa_key.cc:185
+
Rsa public key, used for signature verification and encryption.
Definition: rsa_key.h:53
+
Rsa private key, used for message signing and decryption.
Definition: rsa_key.h:24
+
+ + + + diff --git a/sdk/dc/ddf/udp__file__posix_8cc_source.html b/sdk/dc/ddf/udp__file__posix_8cc_source.html new file mode 100644 index 0000000000..9a7dc4fc88 --- /dev/null +++ b/sdk/dc/ddf/udp__file__posix_8cc_source.html @@ -0,0 +1,330 @@ + + + + + + +DASH Media Packaging SDK: media/file/udp_file_posix.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
udp_file_posix.cc
+
+
+
1 // Copyright 2014 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/file/udp_file.h"
+
8 
+
9 #include <arpa/inet.h>
+
10 #include <errno.h>
+
11 #include <gflags/gflags.h>
+
12 #include <strings.h>
+
13 #include <sys/socket.h>
+
14 #include <unistd.h>
+
15 
+
16 #include <limits>
+
17 
+
18 #include "packager/base/logging.h"
+
19 #include "packager/base/strings/string_number_conversions.h"
+
20 
+
21 // TODO(tinskip): Adapt to work with winsock.
+
22 
+
23 DEFINE_string(udp_interface_address,
+
24  "0.0.0.0",
+
25  "IP address of the interface over which to receive UDP unicast"
+
26  " or multicast streams");
+
27 
+
28 namespace edash_packager {
+
29 namespace media {
+
30 
+
31 namespace {
+
32 
+
33 const int kInvalidSocket(-1);
+
34 
+
35 bool StringToIpv4Address(const std::string& addr_in, uint32_t* addr_out) {
+
36  DCHECK(addr_out);
+
37 
+
38  *addr_out = 0;
+
39  size_t start_pos(0);
+
40  size_t end_pos(0);
+
41  for (int i = 0; i < 4; ++i) {
+
42  end_pos = addr_in.find('.', start_pos);
+
43  if ((end_pos == std::string::npos) != (i == 3))
+
44  return false;
+
45  unsigned addr_byte;
+
46  if (!base::StringToUint(addr_in.substr(start_pos, end_pos - start_pos),
+
47  &addr_byte)
+
48  || (addr_byte > 255))
+
49  return false;
+
50  *addr_out <<= 8;
+
51  *addr_out |= addr_byte;
+
52  start_pos = end_pos + 1;
+
53  }
+
54  return true;
+
55 }
+
56 
+
57 bool StringToIpv4AddressAndPort(const std::string& addr_and_port,
+
58  uint32_t* addr,
+
59  uint16_t* port) {
+
60  DCHECK(addr);
+
61  DCHECK(port);
+
62 
+
63  size_t colon_pos = addr_and_port.find(':');
+
64  if (colon_pos == std::string::npos) {
+
65  return false;
+
66  }
+
67  if (!StringToIpv4Address(addr_and_port.substr(0, colon_pos), addr))
+
68  return false;
+
69  unsigned port_value;
+
70  if (!base::StringToUint(addr_and_port.substr(colon_pos + 1),
+
71  &port_value) ||
+
72  (port_value > 65535))
+
73  return false;
+
74  *port = port_value;
+
75  return true;
+
76 }
+
77 
+
78 bool IsIpv4MulticastAddress(uint32_t addr) {
+
79  return (addr & 0xf0000000) == 0xe0000000;
+
80 }
+
81 
+
82 } // anonymous namespace
+
83 
+
84 UdpFile::UdpFile(const char* file_name) :
+
85  File(file_name),
+
86  socket_(kInvalidSocket) {}
+
87 
+
88 UdpFile::~UdpFile() {}
+
89 
+ +
91  if (socket_ != kInvalidSocket) {
+
92  close(socket_);
+
93  socket_ = kInvalidSocket;
+
94  }
+
95  delete this;
+
96  return true;
+
97 }
+
98 
+
99 int64_t UdpFile::Read(void* buffer, uint64_t length) {
+
100  DCHECK(buffer);
+
101  DCHECK_GE(length, 65535u)
+
102  << "Buffer may be too small to read entire datagram.";
+
103 
+
104  if (socket_ == kInvalidSocket)
+
105  return -1;
+
106 
+
107  int64_t result;
+
108  do {
+
109  result = recvfrom(socket_, buffer, length, 0, NULL, 0);
+
110  } while ((result == -1) && (errno == EINTR));
+
111 
+
112  return result;
+
113 }
+
114 
+
115 int64_t UdpFile::Write(const void* buffer, uint64_t length) {
+
116  NOTIMPLEMENTED();
+
117  return -1;
+
118 }
+
119 
+
120 int64_t UdpFile::Size() {
+
121  if (socket_ == kInvalidSocket)
+
122  return -1;
+
123 
+
124  return std::numeric_limits<int64_t>::max();
+
125 }
+
126 
+ +
128  NOTIMPLEMENTED();
+
129  return false;
+
130 }
+
131 
+
132 bool UdpFile::Seek(uint64_t position) {
+
133  NOTIMPLEMENTED();
+
134  return false;
+
135 }
+
136 
+
137 bool UdpFile::Tell(uint64_t* position) {
+
138  NOTIMPLEMENTED();
+
139  return false;
+
140 }
+
141 
+
142 class ScopedSocket {
+
143  public:
+
144  explicit ScopedSocket(int sock_fd)
+
145  : sock_fd_(sock_fd) {}
+
146 
+
147  ~ScopedSocket() {
+
148  if (sock_fd_ != kInvalidSocket)
+
149  close(sock_fd_);
+
150  }
+
151 
+
152  int get() { return sock_fd_; }
+
153 
+
154  int release() {
+
155  int socket = sock_fd_;
+
156  sock_fd_ = kInvalidSocket;
+
157  return socket;
+
158  }
+
159 
+
160  private:
+
161  int sock_fd_;
+
162 
+
163  DISALLOW_COPY_AND_ASSIGN(ScopedSocket);
+
164 };
+
165 
+ +
167  DCHECK_EQ(kInvalidSocket, socket_);
+
168 
+
169  // TODO(tinskip): Support IPv6 addresses.
+
170  uint32_t dest_addr;
+
171  uint16_t dest_port;
+
172  if (!StringToIpv4AddressAndPort(file_name(),
+
173  &dest_addr,
+
174  &dest_port)) {
+
175  LOG(ERROR) << "Malformed IPv4 address:port UDP stream specifier.";
+
176  return false;
+
177  }
+
178 
+
179  ScopedSocket new_socket(socket(AF_INET, SOCK_DGRAM, 0));
+
180  if (new_socket.get() == kInvalidSocket) {
+
181  LOG(ERROR) << "Could not allocate socket.";
+
182  return false;
+
183  }
+
184 
+
185  struct sockaddr_in local_sock_addr;
+
186  bzero(&local_sock_addr, sizeof(local_sock_addr));
+
187  local_sock_addr.sin_family = AF_INET;
+
188  local_sock_addr.sin_port = htons(dest_port);
+
189  local_sock_addr.sin_addr.s_addr = htonl(dest_addr);
+
190  if (bind(new_socket.get(),
+
191  reinterpret_cast<struct sockaddr*>(&local_sock_addr),
+
192  sizeof(local_sock_addr))) {
+
193  LOG(ERROR) << "Could not bind UDP socket";
+
194  return false;
+
195  }
+
196 
+
197  if (IsIpv4MulticastAddress(dest_addr)) {
+
198  uint32_t if_addr;
+
199  if (!StringToIpv4Address(FLAGS_udp_interface_address, &if_addr)) {
+
200  LOG(ERROR) << "Malformed IPv4 address for interface.";
+
201  return false;
+
202  }
+
203  struct ip_mreq multicast_group;
+
204  multicast_group.imr_multiaddr.s_addr = htonl(dest_addr);
+
205  multicast_group.imr_interface.s_addr = htonl(if_addr);
+
206  if (setsockopt(new_socket.get(),
+
207  IPPROTO_IP,
+
208  IP_ADD_MEMBERSHIP,
+
209  &multicast_group,
+
210  sizeof(multicast_group)) < 0) {
+
211  LOG(ERROR) << "Failed to join multicast group.";
+
212  return false;
+
213  }
+
214  }
+
215 
+
216  socket_ = new_socket.release();
+
217  return true;
+
218 }
+
219 
+
220 } // namespace media
+
221 } // namespace edash_packager
+
UdpFile(const char *address_and_port)
+
Define an abstract file interface.
Definition: file.h:22
+
const std::string & file_name() const
Definition: file.h:89
+
virtual bool Flush() OVERRIDE
+
virtual bool Open() OVERRIDE
Internal open. Should not be used directly.
+
virtual bool Tell(uint64_t *position) OVERRIDE
+
virtual int64_t Write(const void *buffer, uint64_t length) OVERRIDE
+
virtual int64_t Read(void *buffer, uint64_t length) OVERRIDE
+
virtual int64_t Size() OVERRIDE
+
virtual bool Close() OVERRIDE
+
virtual bool Seek(uint64_t position) OVERRIDE
+
+ + + + diff --git a/sdk/dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html b/sdk/dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html new file mode 100644 index 0000000000..3898945330 --- /dev/null +++ b/sdk/dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html @@ -0,0 +1,431 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::Segmenter Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::Segmenter Class Referenceabstract
+
+
+ +

#include <segmenter.h>

+
+Inheritance diagram for edash_packager::media::mp4::Segmenter:
+
+
+ + +edash_packager::media::mp4::MultiSegmentSegmenter +edash_packager::media::mp4::SingleSegmentSegmenter + +
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Segmenter (const MuxerOptions &options, scoped_ptr< FileType > ftyp, scoped_ptr< Movie > moov)
 
Status Initialize (const std::vector< MediaStream * > &streams, MuxerListener *muxer_listener, ProgressListener *progress_listener, KeySource *encryption_key_source, uint32_t max_sd_pixels, double clear_lead_in_seconds, double crypto_period_duration_in_seconds)
 
Status Finalize ()
 
Status AddSample (const MediaStream *stream, scoped_refptr< MediaSample > sample)
 
virtual bool GetInitRange (size_t *offset, size_t *size)=0
 
virtual bool GetIndexRange (size_t *offset, size_t *size)=0
 
+uint32_t GetReferenceTimeScale () const
 
double GetDuration () const
 
uint32_t sample_duration () const
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

+void UpdateProgress (uint64_t progress)
 Update segmentation progress using ProgressListener.
 
+void SetComplete ()
 Set progress to 100%.
 
+const MuxerOptionsoptions () const
 
+FileTypeftyp ()
 
+Moviemoov ()
 
+BufferWriterfragment_buffer ()
 
+SegmentIndexsidx ()
 
+MuxerListenermuxer_listener ()
 
+uint64_t progress_target ()
 
+void set_progress_target (uint64_t progress_target)
 
+

Detailed Description

+

This class defines the Segmenter which is responsible for organizing fragments into segments/subsegments and package them into a MP4 file. Inherited by MultiSegmentSegmenter and SingleSegmentSegmenter. SingleSegmentSegmenter defines the Segmenter for DASH Video-On-Demand with a single segment for each media presentation while MultiSegmentSegmenter handles all other cases including DASH live profile.

+ +

Definition at line 44 of file segmenter.h.

+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
Status edash_packager::media::mp4::Segmenter::AddSample (const MediaStreamstream,
scoped_refptr< MediaSamplesample 
)
+
+

Add sample to the indicated stream.

+
Parameters
+ + + +
streampoints to the stream to which the sample belongs. It cannot be NULL.
samplepoints to the sample to be added.
+
+
+
Returns
OK on success, an error status otherwise.
+ +

Definition at line 266 of file segmenter.cc.

+ +
+
+ +
+
+ + + + + + + +
Status edash_packager::media::mp4::Segmenter::Finalize ()
+
+

Finalize the segmenter.

+
Returns
OK on success, an error status otherwise.
+ +

Definition at line 240 of file segmenter.cc.

+ +
+
+ +
+
+ + + + + + + +
double edash_packager::media::mp4::Segmenter::GetDuration () const
+
+
Returns
The total length, in seconds, of segmented media files.
+ +

Definition at line 324 of file segmenter.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool edash_packager::media::mp4::Segmenter::GetIndexRange (size_t * offset,
size_t * size 
)
+
+pure virtual
+
+
Returns
true if there is an index byte range, while setting offset and size; or false if index byte range does not apply.
+ +

Implemented in edash_packager::media::mp4::MultiSegmentSegmenter, and edash_packager::media::mp4::SingleSegmentSegmenter.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool edash_packager::media::mp4::Segmenter::GetInitRange (size_t * offset,
size_t * size 
)
+
+pure virtual
+
+
Returns
true if there is an initialization range, while setting offset and size; or false if initialization range does not apply.
+ +

Implemented in edash_packager::media::mp4::MultiSegmentSegmenter, and edash_packager::media::mp4::SingleSegmentSegmenter.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Status edash_packager::media::mp4::Segmenter::Initialize (const std::vector< MediaStream * > & streams,
MuxerListenermuxer_listener,
ProgressListenerprogress_listener,
KeySourceencryption_key_source,
uint32_t max_sd_pixels,
double clear_lead_in_seconds,
double crypto_period_duration_in_seconds 
)
+
+

Initialize the segmenter. Calling other public methods of this class without this method returning Status::OK results in an undefined behavior.

+
Parameters
+ + + + + + + + +
streamscontains the vector of MediaStreams to be segmented.
muxer_listenerreceives muxer events. Can be NULL.
progress_listenerreceives progress updates. Can be NULL.
encryption_key_sourcepoints to the key source which contains the encryption keys. It can be NULL to indicate that no encryption is required.
max_sd_pixelsspecifies the threshold to determine whether a video track should be considered as SD or HD. If the track has more pixels per frame than max_sd_pixels, it is HD, SD otherwise.
clear_timespecifies clear lead duration in seconds.
crypto_period_durationspecifies crypto period duration in seconds.
+
+
+
Returns
OK on success, an error status otherwise.
+ +

Definition at line 132 of file segmenter.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::Segmenter::sample_duration () const
+
+inline
+
+
Returns
The sample duration in the timescale of the media. Returns 0 if no samples are added yet.
+ +

Definition at line 101 of file segmenter.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.png b/sdk/dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.png new file mode 100644 index 0000000000..7b8f57b845 Binary files /dev/null and b/sdk/dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.png differ diff --git a/sdk/dc/dec/ts__section__pmt_8cc_source.html b/sdk/dc/dec/ts__section__pmt_8cc_source.html new file mode 100644 index 0000000000..455d679f5d --- /dev/null +++ b/sdk/dc/dec/ts__section__pmt_8cc_source.html @@ -0,0 +1,215 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp2t/ts_section_pmt.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ts_section_pmt.cc
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/formats/mp2t/ts_section_pmt.h"
+
6 
+
7 #include <map>
+
8 
+
9 #include "packager/base/logging.h"
+
10 #include "packager/media/base/bit_reader.h"
+
11 #include "packager/media/formats/mp2t/mp2t_common.h"
+
12 
+
13 namespace edash_packager {
+
14 namespace media {
+
15 namespace mp2t {
+
16 
+
17 TsSectionPmt::TsSectionPmt(const RegisterPesCb& register_pes_cb)
+
18  : register_pes_cb_(register_pes_cb) {
+
19 }
+
20 
+
21 TsSectionPmt::~TsSectionPmt() {
+
22 }
+
23 
+
24 bool TsSectionPmt::ParsePsiSection(BitReader* bit_reader) {
+
25  // Read up to |last_section_number|.
+
26  int table_id;
+
27  int section_syntax_indicator;
+
28  int dummy_zero;
+
29  int reserved;
+
30  int section_length;
+
31  int program_number;
+
32  int version_number;
+
33  int current_next_indicator;
+
34  int section_number;
+
35  int last_section_number;
+
36  RCHECK(bit_reader->ReadBits(8, &table_id));
+
37  RCHECK(bit_reader->ReadBits(1, &section_syntax_indicator));
+
38  RCHECK(bit_reader->ReadBits(1, &dummy_zero));
+
39  RCHECK(bit_reader->ReadBits(2, &reserved));
+
40  RCHECK(bit_reader->ReadBits(12, &section_length));
+
41  int section_start_marker = bit_reader->bits_available() / 8;
+
42 
+
43  RCHECK(bit_reader->ReadBits(16, &program_number));
+
44  RCHECK(bit_reader->ReadBits(2, &reserved));
+
45  RCHECK(bit_reader->ReadBits(5, &version_number));
+
46  RCHECK(bit_reader->ReadBits(1, &current_next_indicator));
+
47  RCHECK(bit_reader->ReadBits(8, &section_number));
+
48  RCHECK(bit_reader->ReadBits(8, &last_section_number));
+
49 
+
50  // Perform a few verifications:
+
51  // - table ID should be 2 for a PMT.
+
52  // - section_syntax_indicator should be one.
+
53  // - section length should not exceed 1021.
+
54  RCHECK(table_id == 0x2);
+
55  RCHECK(section_syntax_indicator);
+
56  RCHECK(!dummy_zero);
+
57  RCHECK(section_length <= 1021);
+
58  RCHECK(section_number == 0);
+
59  RCHECK(last_section_number == 0);
+
60 
+
61  // Read the end of the fixed length section.
+
62  int pcr_pid;
+
63  int program_info_length;
+
64  RCHECK(bit_reader->ReadBits(3, &reserved));
+
65  RCHECK(bit_reader->ReadBits(13, &pcr_pid));
+
66  RCHECK(bit_reader->ReadBits(4, &reserved));
+
67  RCHECK(bit_reader->ReadBits(12, &program_info_length));
+
68  RCHECK(program_info_length < 1024);
+
69 
+
70  // Read the program info descriptor.
+
71  // Defined in section 2.6 of ISO-13818.
+
72  RCHECK(bit_reader->SkipBits(8 * program_info_length));
+
73 
+
74  // Read the ES description table.
+
75  // The end of the PID map if 4 bytes away from the end of the section
+
76  // (4 bytes = size of the CRC).
+
77  int pid_map_end_marker = section_start_marker - section_length + 4;
+
78  std::map<int, int> pid_map;
+
79  while (bit_reader->bits_available() > 8 * pid_map_end_marker) {
+
80  int stream_type;
+
81  int reserved;
+
82  int pid_es;
+
83  int es_info_length;
+
84  RCHECK(bit_reader->ReadBits(8, &stream_type));
+
85  RCHECK(bit_reader->ReadBits(3, &reserved));
+
86  RCHECK(bit_reader->ReadBits(13, &pid_es));
+
87  RCHECK(bit_reader->ReadBits(4, &reserved));
+
88  RCHECK(bit_reader->ReadBits(12, &es_info_length));
+
89 
+
90  // Do not register the PID right away.
+
91  // Wait for the end of the section to be fully parsed
+
92  // to make sure there is no error.
+
93  pid_map.insert(std::pair<int, int>(pid_es, stream_type));
+
94 
+
95  // Read the ES info descriptors.
+
96  // Defined in section 2.6 of ISO-13818.
+
97  RCHECK(bit_reader->SkipBits(8 * es_info_length));
+
98  }
+
99 
+
100  // Read the CRC.
+
101  int crc32;
+
102  RCHECK(bit_reader->ReadBits(32, &crc32));
+
103 
+
104  // Once the PMT has been proved to be correct, register the PIDs.
+
105  for (std::map<int, int>::iterator it = pid_map.begin();
+
106  it != pid_map.end(); ++it)
+
107  register_pes_cb_.Run(it->first, it->second);
+
108 
+
109  return true;
+
110 }
+
111 
+
112 void TsSectionPmt::ResetPsiSection() {
+
113 }
+
114 
+
115 } // namespace mp2t
+
116 } // namespace media
+
117 } // namespace edash_packager
+
+ + + + diff --git a/sdk/dc/def/structedash__packager_1_1media_1_1mp4_1_1DataInformation-members.html b/sdk/dc/def/structedash__packager_1_1media_1_1mp4_1_1DataInformation-members.html new file mode 100644 index 0000000000..4d30cb5023 --- /dev/null +++ b/sdk/dc/def/structedash__packager_1_1media_1_1mp4_1_1DataInformation-members.html @@ -0,0 +1,115 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::DataInformation Member List
+
+
+ +

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

+ + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::DataInformation)edash_packager::media::mp4::DataInformationvirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::DataInformationvirtual
DataInformation() (defined in edash_packager::media::mp4::DataInformation)edash_packager::media::mp4::DataInformation
dref (defined in edash_packager::media::mp4::DataInformation)edash_packager::media::mp4::DataInformation
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::DataInformationvirtual
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~DataInformation() (defined in edash_packager::media::mp4::DataInformation)edash_packager::media::mp4::DataInformationvirtual
+ + + + diff --git a/sdk/dc/df1/classedash__packager_1_1media_1_1DecryptorSource.html b/sdk/dc/df1/classedash__packager_1_1media_1_1DecryptorSource.html new file mode 100644 index 0000000000..95fb447b92 --- /dev/null +++ b/sdk/dc/df1/classedash__packager_1_1media_1_1DecryptorSource.html @@ -0,0 +1,166 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::DecryptorSource Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::DecryptorSource Class Referenceabstract
+
+
+ +

DecryptorSource is responsible for decryption key acquisition. + More...

+ +

#include <decryptor_source.h>

+ + + + +

+Public Member Functions

virtual Status OnNeedKey (MediaContainerName container, const std::string &init_data)=0
 
+

Detailed Description

+

DecryptorSource is responsible for decryption key acquisition.

+ +

Definition at line 18 of file decryptor_source.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual Status edash_packager::media::DecryptorSource::OnNeedKey (MediaContainerName container,
const std::string & init_data 
)
+
+pure virtual
+
+

NeedKey event handler.

+
Parameters
+ + + +
containerindicates the container format.
init_dataspecifies container dependent initialization data that is used to initialize the decryption key.
+
+
+
Returns
OK on success, an adequate status on error.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/sdk/dc/df8/closure__thread_8h_source.html b/sdk/dc/df8/closure__thread_8h_source.html new file mode 100644 index 0000000000..dfbeb588b9 --- /dev/null +++ b/sdk/dc/df8/closure__thread_8h_source.html @@ -0,0 +1,135 @@ + + + + + + +DASH Media Packaging SDK: media/base/closure_thread.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
closure_thread.h
+
+
+
1 // Copyright 2014 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_BASE_CLOSURE_THREAD_H_
+
8 #define MEDIA_BASE_CLOSURE_THREAD_H_
+
9 
+
10 #include "packager/base/callback.h"
+
11 #include "packager/base/threading/simple_thread.h"
+
12 
+
13 namespace edash_packager {
+
14 namespace media {
+
15 
+
25 class ClosureThread : public base::SimpleThread {
+
26  public:
+
32  explicit ClosureThread(const std::string& name_prefix,
+
33  const base::Closure& task);
+
34 
+
36  virtual ~ClosureThread();
+
37 
+
38  protected:
+
40  virtual void Run() OVERRIDE;
+
41 
+
42  private:
+
43  const base::Closure task_;
+
44 };
+
45 
+
46 } // namespace media
+
47 } // namespace edash_packager
+
48 
+
49 #endif // MEDIA_BASE_CLOSURE_THREAD_H_
+
ClosureThread(const std::string &name_prefix, const base::Closure &task)
+
virtual void Run() OVERRIDE
SimpleThread implementation overrides.
+ +
virtual ~ClosureThread()
The destructor calls Join automatically if it is not yet joined.
+
+ + + + diff --git a/sdk/dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html b/sdk/dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html new file mode 100644 index 0000000000..bf356b1796 --- /dev/null +++ b/sdk/dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html @@ -0,0 +1,446 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::ThreadedIoFile Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::ThreadedIoFile Class Reference
+
+
+ +

Declaration of class which implements a thread-safe circular buffer. + More...

+ +

#include <threaded_io_file.h>

+
+Inheritance diagram for edash_packager::media::ThreadedIoFile:
+
+
+ + +edash_packager::media::File + +
+ + + + +

+Public Types

enum  Mode { kInputMode, +kOutputMode + }
 
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

ThreadedIoFile (scoped_ptr< File, FileCloser > internal_file, Mode mode, uint64_t io_cache_size, uint64_t io_block_size)
 
File implementation overrides.
virtual bool Close () OVERRIDE
 
virtual int64_t Read (void *buffer, uint64_t length) OVERRIDE
 
virtual int64_t Write (const void *buffer, uint64_t length) OVERRIDE
 
virtual int64_t Size () OVERRIDE
 
virtual bool Flush () OVERRIDE
 
virtual bool Seek (uint64_t position) OVERRIDE
 
virtual bool Tell (uint64_t *position) OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::File
const std::string & file_name () const
 
+ + + + + + + + + + + + + +

+Protected Member Functions

+virtual bool Open () OVERRIDE
 Internal open. Should not be used directly.
 
+void RunInInputMode ()
 
+void RunInOutputMode ()
 
- Protected Member Functions inherited from edash_packager::media::File
File (const std::string &file_name)
 
virtual ~File ()
 
+ + + + + + + + + + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from edash_packager::media::File
static FileOpen (const char *file_name, const char *mode)
 
static FileOpenWithNoBuffering (const char *file_name, const char *mode)
 
static bool Delete (const char *file_name)
 
static int64_t GetFileSize (const char *file_name)
 
static bool ReadFileToString (const char *file_name, std::string *contents)
 
+

Detailed Description

+

Declaration of class which implements a thread-safe circular buffer.

+ +

Definition at line 22 of file threaded_io_file.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool edash_packager::media::ThreadedIoFile::Close ()
+
+virtual
+
+

Flush() and de-allocate resources associated with this file, and delete this File object. THIS IS THE ONE TRUE WAY TO DEALLOCATE THIS OBJECT.

+
Returns
true on success. For writable files, returning false MAY INDICATE DATA LOSS.
+ +

Implements edash_packager::media::File.

+ +

Definition at line 51 of file threaded_io_file.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool edash_packager::media::ThreadedIoFile::Flush ()
+
+virtual
+
+

Flush the file so that recently written data will survive an application crash (but not necessarily an OS crash). For instance, in LocalFile the data is flushed into the OS but not necessarily to disk.

+
Returns
true on success, false otherwise.
+ +

Implements edash_packager::media::File.

+ +

Definition at line 99 of file threaded_io_file.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int64_t edash_packager::media::ThreadedIoFile::Read (void * buffer,
uint64_t length 
)
+
+virtual
+
+

Read data and return it in buffer.

+
Parameters
+ + + +
[out]bufferpoints to a block of memory with a size of at least length bytes.
lengthindicates number of bytes to be read.
+
+
+
Returns
Number of bytes read, or a value < 0 on error. Zero on end-of-file, or if 'length' is zero.
+ +

Implements edash_packager::media::File.

+ +

Definition at line 66 of file threaded_io_file.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool edash_packager::media::ThreadedIoFile::Seek (uint64_t position)
+
+virtual
+
+

Seek to the specifield position in the file.

+
Parameters
+ + +
positionis the position to seek to.
+
+
+
Returns
true on success, false otherwise.
+ +

Implements edash_packager::media::File.

+ +

Definition at line 126 of file threaded_io_file.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int64_t edash_packager::media::ThreadedIoFile::Size ()
+
+virtual
+
+
Returns
Size of the file in bytes. A return value less than zero indicates a problem getting the size.
+ +

Implements edash_packager::media::File.

+ +

Definition at line 92 of file threaded_io_file.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool edash_packager::media::ThreadedIoFile::Tell (uint64_t * position)
+
+virtual
+
+

Get the current file position.

+
Parameters
+ + +
positionis a pointer to contain the current file position upon successful return.
+
+
+
Returns
true on succcess, false otherwise.
+ +

Implements edash_packager::media::File.

+ +

Definition at line 131 of file threaded_io_file.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int64_t edash_packager::media::ThreadedIoFile::Write (const void * buffer,
uint64_t length 
)
+
+virtual
+
+

Write block of data.

+
Parameters
+ + + +
bufferpoints to a block of memory with at least length bytes.
lengthindicates number of bytes to write.
+
+
+
Returns
Number of bytes written, or a value < 0 on error.
+ +

Implements edash_packager::media::File.

+ +

Definition at line 80 of file threaded_io_file.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.png b/sdk/dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.png new file mode 100644 index 0000000000..8519e26c23 Binary files /dev/null and b/sdk/dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.png differ diff --git a/sdk/dc/dfc/classedash__packager_1_1media_1_1Muxer-members.html b/sdk/dc/dfc/classedash__packager_1_1media_1_1Muxer-members.html new file mode 100644 index 0000000000..b6e5245647 --- /dev/null +++ b/sdk/dc/dfc/classedash__packager_1_1media_1_1Muxer-members.html @@ -0,0 +1,123 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::Muxer Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + +
AddStream(MediaStream *stream)edash_packager::media::Muxer
Cancel()edash_packager::media::Muxer
clear_lead_in_seconds() const (defined in edash_packager::media::Muxer)edash_packager::media::Muxerinlineprotected
clock() (defined in edash_packager::media::Muxer)edash_packager::media::Muxerinlineprotected
crypto_period_duration_in_seconds() const (defined in edash_packager::media::Muxer)edash_packager::media::Muxerinlineprotected
encryption_key_source() (defined in edash_packager::media::Muxer)edash_packager::media::Muxerinlineprotected
max_sd_pixels() const (defined in edash_packager::media::Muxer)edash_packager::media::Muxerinlineprotected
MediaStream (defined in edash_packager::media::Muxer)edash_packager::media::Muxerfriend
Muxer(const MuxerOptions &options) (defined in edash_packager::media::Muxer)edash_packager::media::Muxerexplicit
muxer_listener() (defined in edash_packager::media::Muxer)edash_packager::media::Muxerinlineprotected
options() const (defined in edash_packager::media::Muxer)edash_packager::media::Muxerinlineprotected
progress_listener() (defined in edash_packager::media::Muxer)edash_packager::media::Muxerinlineprotected
Run()edash_packager::media::Muxer
set_clock(base::Clock *clock)edash_packager::media::Muxerinline
SetKeySource(KeySource *encryption_key_source, uint32_t max_sd_pixels, double clear_lead_in_seconds, double crypto_period_duration_in_seconds)edash_packager::media::Muxer
SetMuxerListener(scoped_ptr< MuxerListener > muxer_listener)edash_packager::media::Muxer
SetProgressListener(scoped_ptr< ProgressListener > progress_listener)edash_packager::media::Muxer
streams() const (defined in edash_packager::media::Muxer)edash_packager::media::Muxerinline
~Muxer() (defined in edash_packager::media::Muxer)edash_packager::media::Muxervirtual
+ + + + diff --git a/sdk/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264.html b/sdk/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264.html new file mode 100644 index 0000000000..2d52e8b208 --- /dev/null +++ b/sdk/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264.html @@ -0,0 +1,156 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp2t::EsParserH264 Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp2t::EsParserH264 Class Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp2t::EsParserH264:
+
+
+ + +edash_packager::media::mp2t::EsParser + +
+ + + + + + + + + + + + + + + +

+Public Member Functions

EsParserH264 (uint32_t pid, const NewStreamInfoCB &new_stream_info_cb, const EmitSampleCB &emit_sample_cb)
 
+virtual bool Parse (const uint8_t *buf, int size, int64_t pts, int64_t dts) OVERRIDE
 
+virtual void Flush () OVERRIDE
 
+virtual void Reset () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp2t::EsParser
EsParser (uint32_t pid)
 
+uint32_t pid ()
 
+ + + + + + +

+Additional Inherited Members

- Public Types inherited from edash_packager::media::mp2t::EsParser
+typedef base::Callback< void(scoped_refptr
+< StreamInfo > &)> 
NewStreamInfoCB
 
+typedef base::Callback< void(uint32_t,
+scoped_refptr< MediaSample > &)> 
EmitSampleCB
 
+

Detailed Description

+
+

Definition at line 33 of file es_parser_h264.h.

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264.png b/sdk/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264.png new file mode 100644 index 0000000000..0edec17938 Binary files /dev/null and b/sdk/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264.png differ diff --git a/sdk/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat.html b/sdk/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat.html new file mode 100644 index 0000000000..5d79f40069 --- /dev/null +++ b/sdk/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat.html @@ -0,0 +1,163 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp2t::TsSectionPat Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp2t::TsSectionPat Class Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp2t::TsSectionPat:
+
+
+ + +edash_packager::media::mp2t::TsSectionPsi +edash_packager::media::mp2t::TsSection + +
+ + + + + + + +

+Public Types

+typedef base::Callback< void(int,
+int)> 
RegisterPmtCb
 
- Public Types inherited from edash_packager::media::mp2t::TsSection
enum  SpecialPid {
+  kPidPat = 0x0, +kPidCat = 0x1, +kPidTsdt = 0x2, +kPidNullPacket = 0x1fff, +
+  kPidMax = 0x1fff +
+ }
 
+ + + + + + + + + + + + + + +

+Public Member Functions

TsSectionPat (const RegisterPmtCb &register_pmt_cb)
 
+virtual bool ParsePsiSection (BitReader *bit_reader) OVERRIDE
 
+virtual void ResetPsiSection () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp2t::TsSectionPsi
+virtual bool Parse (bool payload_unit_start_indicator, const uint8_t *buf, int size) OVERRIDE
 
+virtual void Flush () OVERRIDE
 
+virtual void Reset () OVERRIDE
 
+

Detailed Description

+
+

Definition at line 16 of file ts_section_pat.h.

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat.png b/sdk/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat.png new file mode 100644 index 0000000000..5701dbb675 Binary files /dev/null and b/sdk/dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat.png differ diff --git a/sdk/dd/d11/mpd__builder_8cc_source.html b/sdk/dd/d11/mpd__builder_8cc_source.html new file mode 100644 index 0000000000..c6e3abbab9 --- /dev/null +++ b/sdk/dd/d11/mpd__builder_8cc_source.html @@ -0,0 +1,1430 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/mpd_builder.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mpd_builder.cc
+
+
+
1 // Copyright 2014 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/mpd/base/mpd_builder.h"
+
8 
+
9 #include <libxml/tree.h>
+
10 #include <libxml/xmlstring.h>
+
11 
+
12 #include <cmath>
+
13 #include <iterator>
+
14 #include <list>
+
15 #include <string>
+
16 
+
17 #include "packager/base/base64.h"
+
18 #include "packager/base/files/file_path.h"
+
19 #include "packager/base/logging.h"
+
20 #include "packager/base/memory/scoped_ptr.h"
+
21 #include "packager/base/strings/string_number_conversions.h"
+
22 #include "packager/base/strings/stringprintf.h"
+
23 #include "packager/base/synchronization/lock.h"
+
24 #include "packager/base/time/time.h"
+
25 #include "packager/media/file/file.h"
+
26 #include "packager/mpd/base/content_protection_element.h"
+
27 #include "packager/mpd/base/language_utils.h"
+
28 #include "packager/mpd/base/mpd_utils.h"
+
29 #include "packager/mpd/base/xml/xml_node.h"
+
30 
+
31 namespace edash_packager {
+
32 
+
33 using base::FilePath;
+
34 using xml::XmlNode;
+
35 using xml::RepresentationXmlNode;
+
36 using xml::AdaptationSetXmlNode;
+
37 
+
38 namespace {
+
39 
+
40 const int kAdaptationSetGroupNotSet = -1;
+
41 
+
42 std::string GetMimeType(const std::string& prefix,
+
43  MediaInfo::ContainerType container_type) {
+
44  switch (container_type) {
+
45  case MediaInfo::CONTAINER_MP4:
+
46  return prefix + "/mp4";
+
47  case MediaInfo::CONTAINER_MPEG2_TS:
+
48  // NOTE: DASH MPD spec uses lowercase but RFC3555 says uppercase.
+
49  return prefix + "/MP2T";
+
50  case MediaInfo::CONTAINER_WEBM:
+
51  return prefix + "/webm";
+
52  default:
+
53  break;
+
54  }
+
55 
+
56  // Unsupported container types should be rejected/handled by the caller.
+
57  NOTREACHED() << "Unrecognized container type: " << container_type;
+
58  return std::string();
+
59 }
+
60 
+
61 void AddMpdNameSpaceInfo(XmlNode* mpd) {
+
62  DCHECK(mpd);
+
63 
+
64  static const char kXmlNamespace[] = "urn:mpeg:DASH:schema:MPD:2011";
+
65  static const char kXmlNamespaceXsi[] =
+
66  "http://www.w3.org/2001/XMLSchema-instance";
+
67  static const char kXmlNamespaceXlink[] = "http://www.w3.org/1999/xlink";
+
68  static const char kDashSchemaMpd2011[] =
+
69  "urn:mpeg:DASH:schema:MPD:2011 DASH-MPD.xsd";
+
70  static const char kCencNamespace[] = "urn:mpeg:cenc:2013";
+
71 
+
72  mpd->SetStringAttribute("xmlns", kXmlNamespace);
+
73  mpd->SetStringAttribute("xmlns:xsi", kXmlNamespaceXsi);
+
74  mpd->SetStringAttribute("xmlns:xlink", kXmlNamespaceXlink);
+
75  mpd->SetStringAttribute("xsi:schemaLocation", kDashSchemaMpd2011);
+
76  mpd->SetStringAttribute("xmlns:cenc", kCencNamespace);
+
77 }
+
78 
+
79 bool IsPeriodNode(xmlNodePtr node) {
+
80  DCHECK(node);
+
81  int kEqual = 0;
+
82  return xmlStrcmp(node->name, reinterpret_cast<const xmlChar*>("Period")) ==
+
83  kEqual;
+
84 }
+
85 
+
86 // Find the first <Period> element. This does not recurse down the tree,
+
87 // only checks direct children. Returns the pointer to Period element on
+
88 // success, otherwise returns false.
+
89 // As noted here, we must traverse.
+
90 // http://www.xmlsoft.org/tutorial/ar01s04.html
+
91 xmlNodePtr FindPeriodNode(XmlNode* xml_node) {
+
92  for (xmlNodePtr node = xml_node->GetRawPtr()->xmlChildrenNode; node != NULL;
+
93  node = node->next) {
+
94  if (IsPeriodNode(node))
+
95  return node;
+
96  }
+
97 
+
98  return NULL;
+
99 }
+
100 
+
101 bool Positive(double d) {
+
102  return d > 0.0;
+
103 }
+
104 
+
105 // Return current time in XML DateTime format. The value is in UTC, so the
+
106 // string ends with a 'Z'.
+
107 std::string XmlDateTimeNowWithOffset(int32_t offset_seconds) {
+
108  base::Time time = base::Time::Now();
+
109  time += base::TimeDelta::FromSeconds(offset_seconds);
+
110  base::Time::Exploded time_exploded;
+
111  time.UTCExplode(&time_exploded);
+
112 
+
113  return base::StringPrintf("%4d-%02d-%02dT%02d:%02d:%02dZ", time_exploded.year,
+
114  time_exploded.month, time_exploded.day_of_month,
+
115  time_exploded.hour, time_exploded.minute,
+
116  time_exploded.second);
+
117 }
+
118 
+
119 void SetIfPositive(const char* attr_name, double value, XmlNode* mpd) {
+
120  if (Positive(value)) {
+
121  mpd->SetStringAttribute(attr_name, SecondsToXmlDuration(value));
+
122  }
+
123 }
+
124 
+
125 uint32_t GetTimeScale(const MediaInfo& media_info) {
+
126  if (media_info.has_reference_time_scale()) {
+
127  return media_info.reference_time_scale();
+
128  }
+
129 
+
130  if (media_info.has_video_info()) {
+
131  return media_info.video_info().time_scale();
+
132  }
+
133 
+
134  if (media_info.has_audio_info()) {
+
135  return media_info.audio_info().time_scale();
+
136  }
+
137 
+
138  LOG(WARNING) << "No timescale specified, using 1 as timescale.";
+
139  return 1;
+
140 }
+
141 
+
142 uint64_t LastSegmentStartTime(const SegmentInfo& segment_info) {
+
143  return segment_info.start_time + segment_info.duration * segment_info.repeat;
+
144 }
+
145 
+
146 // This is equal to |segment_info| end time
+
147 uint64_t LastSegmentEndTime(const SegmentInfo& segment_info) {
+
148  return segment_info.start_time +
+
149  segment_info.duration * (segment_info.repeat + 1);
+
150 }
+
151 
+
152 uint64_t LatestSegmentStartTime(const std::list<SegmentInfo>& segments) {
+
153  DCHECK(!segments.empty());
+
154  const SegmentInfo& latest_segment = segments.back();
+
155  return LastSegmentStartTime(latest_segment);
+
156 }
+
157 
+
158 // Given |timeshift_limit|, finds out the number of segments that are no longer
+
159 // valid and should be removed from |segment_info|.
+
160 int SearchTimedOutRepeatIndex(uint64_t timeshift_limit,
+
161  const SegmentInfo& segment_info) {
+
162  DCHECK_LE(timeshift_limit, LastSegmentEndTime(segment_info));
+
163  if (timeshift_limit < segment_info.start_time)
+
164  return 0;
+
165 
+
166  return (timeshift_limit - segment_info.start_time) / segment_info.duration;
+
167 }
+
168 
+
169 // Overload this function to support different types of |output|.
+
170 // Note that this could be done by call MpdBuilder::ToString() and use the
+
171 // result to write to a file, it requires an extra copy.
+
172 bool WriteXmlCharArrayToOutput(xmlChar* doc,
+
173  int doc_size,
+
174  std::string* output) {
+
175  DCHECK(doc);
+
176  DCHECK(output);
+
177  output->assign(doc, doc + doc_size);
+
178  return true;
+
179 }
+
180 
+
181 bool WriteXmlCharArrayToOutput(xmlChar* doc,
+
182  int doc_size,
+
183  media::File* output) {
+
184  DCHECK(doc);
+
185  DCHECK(output);
+
186  if (output->Write(doc, doc_size) < doc_size)
+
187  return false;
+
188 
+
189  return output->Flush();
+
190 }
+
191 
+
192 std::string MakePathRelative(const std::string& path,
+
193  const std::string& mpd_dir) {
+
194  return (path.find(mpd_dir) == 0) ? path.substr(mpd_dir.size()) : path;
+
195 }
+
196 
+
197 // Check whether the video info has width and height.
+
198 // DASH IOP also requires several other fields for video representations, namely
+
199 // width, height, framerate, and sar.
+
200 bool HasRequiredVideoFields(const MediaInfo_VideoInfo& video_info) {
+
201  if (!video_info.has_height() || !video_info.has_width()) {
+
202  LOG(ERROR)
+
203  << "Width and height are required fields for generating a valid MPD.";
+
204  return false;
+
205  }
+
206  // These fields are not required for a valid MPD, but required for DASH IOP
+
207  // compliant MPD. MpdBuilder can keep generating MPDs without these fields.
+
208  LOG_IF(WARNING, !video_info.has_time_scale())
+
209  << "Video info does not contain timescale required for "
+
210  "calculating framerate. @frameRate is required for DASH IOP.";
+
211  LOG_IF(WARNING, !video_info.has_frame_duration())
+
212  << "Video info does not contain frame duration required "
+
213  "for calculating framerate. @frameRate is required for DASH IOP.";
+
214  LOG_IF(WARNING, !video_info.has_pixel_width())
+
215  << "Video info does not contain pixel_width to calculate the sample "
+
216  "aspect ratio required for DASH IOP.";
+
217  LOG_IF(WARNING, !video_info.has_pixel_height())
+
218  << "Video info does not contain pixel_height to calculate the sample "
+
219  "aspect ratio required for DASH IOP.";
+
220  return true;
+
221 }
+
222 
+
223 // Returns the picture aspect ratio string e.g. "16:9", "4:3".
+
224 // "Reducing the quotient to minimal form" does not work well in practice as
+
225 // there may be some rounding performed in the input, e.g. the resolution of
+
226 // 480p is 854:480 for 16:9 aspect ratio, can only be reduced to 427:240.
+
227 // The algorithm finds out the pair of integers, num and den, where num / den is
+
228 // the closest ratio to scaled_width / scaled_height, by looping den through
+
229 // common values.
+
230 std::string GetPictureAspectRatio(uint32_t width,
+
231  uint32_t height,
+
232  uint32_t pixel_width,
+
233  uint32_t pixel_height) {
+
234  const uint32_t scaled_width = pixel_width * width;
+
235  const uint32_t scaled_height = pixel_height * height;
+
236  const double par = static_cast<double>(scaled_width) / scaled_height;
+
237 
+
238  // Typical aspect ratios have par_y less than or equal to 19:
+
239  // https://en.wikipedia.org/wiki/List_of_common_resolutions
+
240  const uint32_t kLargestPossibleParY = 19;
+
241 
+
242  uint32_t par_num = 0;
+
243  uint32_t par_den = 0;
+
244  double min_error = 1.0;
+
245  for (uint32_t den = 1; den <= kLargestPossibleParY; ++den) {
+
246  uint32_t num = par * den + 0.5;
+
247  double error = fabs(par - static_cast<double>(num) / den);
+
248  if (error < min_error) {
+
249  min_error = error;
+
250  par_num = num;
+
251  par_den = den;
+
252  if (error == 0) break;
+
253  }
+
254  }
+
255  VLOG(2) << "width*pix_width : height*pixel_height (" << scaled_width << ":"
+
256  << scaled_height << ") reduced to " << par_num << ":" << par_den
+
257  << " with error " << min_error << ".";
+
258 
+
259  return base::IntToString(par_num) + ":" + base::IntToString(par_den);
+
260 }
+
261 
+
262 // Adds an entry to picture_aspect_ratio if the size of picture_aspect_ratio is
+
263 // less than 2 and video_info has both pixel width and pixel height.
+
264 void AddPictureAspectRatio(
+
265  const MediaInfo::VideoInfo& video_info,
+
266  std::set<std::string>* picture_aspect_ratio) {
+
267  // If there are more than one entries in picture_aspect_ratio, the @par
+
268  // attribute cannot be set, so skip.
+
269  if (picture_aspect_ratio->size() > 1)
+
270  return;
+
271 
+
272  if (video_info.width() == 0 || video_info.height() == 0 ||
+
273  video_info.pixel_width() == 0 || video_info.pixel_height() == 0) {
+
274  // If there is even one Representation without a @sar attribute, @par cannot
+
275  // be calculated.
+
276  // Just populate the set with at least 2 bogus strings so that further call
+
277  // to this function will bail out immediately.
+
278  picture_aspect_ratio->insert("bogus");
+
279  picture_aspect_ratio->insert("entries");
+
280  return;
+
281  }
+
282 
+
283  const std::string par = GetPictureAspectRatio(
+
284  video_info.width(), video_info.height(),
+
285  video_info.pixel_width(), video_info.pixel_height());
+
286  DVLOG(1) << "Setting par as: " << par
+
287  << " for video with width: " << video_info.width()
+
288  << " height: " << video_info.height()
+
289  << " pixel_width: " << video_info.pixel_width() << " pixel_height; "
+
290  << video_info.pixel_height();
+
291  picture_aspect_ratio->insert(par);
+
292 }
+
293 
+
294 std::string RoleToText(AdaptationSet::Role role) {
+
295  // Using switch so that the compiler can detect whether there is a case that's
+
296  // not being handled.
+
297  switch (role) {
+
298  case AdaptationSet::kRoleCaption:
+
299  return "caption";
+
300  case AdaptationSet::kRoleSubtitle:
+
301  return "subtitle";
+
302  case AdaptationSet::kRoleMain:
+
303  return "main";
+
304  case AdaptationSet::kRoleAlternate:
+
305  return "alternate";
+
306  case AdaptationSet::kRoleSupplementary:
+
307  return "supplementary";
+
308  case AdaptationSet::kRoleCommentary:
+
309  return "commentary";
+
310  case AdaptationSet::kRoleDub:
+
311  return "dub";
+
312  default:
+
313  NOTREACHED();
+
314  return "";
+
315  }
+
316 
+
317  NOTREACHED();
+
318  return "";
+
319 }
+
320 
+
321 // Spooky static initialization/cleanup of libxml.
+
322 class LibXmlInitializer {
+
323  public:
+
324  LibXmlInitializer() : initialized_(false) {
+
325  base::AutoLock lock(lock_);
+
326  if (!initialized_) {
+
327  xmlInitParser();
+
328  initialized_ = true;
+
329  }
+
330  }
+
331 
+
332  ~LibXmlInitializer() {
+
333  base::AutoLock lock(lock_);
+
334  if (initialized_) {
+
335  xmlCleanupParser();
+
336  initialized_ = false;
+
337  }
+
338  }
+
339 
+
340  private:
+
341  base::Lock lock_;
+
342  bool initialized_;
+
343 
+
344  DISALLOW_COPY_AND_ASSIGN(LibXmlInitializer);
+
345 };
+
346 
+
347 class RepresentationStateChangeListenerImpl
+
348  : public RepresentationStateChangeListener {
+
349  public:
+
350  // |adaptation_set| is not owned by this class.
+
351  RepresentationStateChangeListenerImpl(uint32_t representation_id,
+
352  AdaptationSet* adaptation_set)
+
353  : representation_id_(representation_id), adaptation_set_(adaptation_set) {
+
354  DCHECK(adaptation_set_);
+
355  }
+
356  virtual ~RepresentationStateChangeListenerImpl() OVERRIDE {}
+
357 
+
358  // RepresentationStateChangeListener implementation.
+
359  virtual void OnNewSegmentForRepresentation(uint64_t start_time,
+
360  uint64_t duration) OVERRIDE {
+
361  adaptation_set_->OnNewSegmentForRepresentation(representation_id_,
+
362  start_time, duration);
+
363  }
+
364 
+
365  virtual void OnSetFrameRateForRepresentation(uint32_t frame_duration,
+
366  uint32_t timescale) OVERRIDE {
+
367  adaptation_set_->OnSetFrameRateForRepresentation(representation_id_,
+
368  frame_duration, timescale);
+
369  }
+
370 
+
371  private:
+
372  const uint32_t representation_id_;
+
373  AdaptationSet* const adaptation_set_;
+
374 
+
375  DISALLOW_COPY_AND_ASSIGN(RepresentationStateChangeListenerImpl);
+
376 };
+
377 
+
378 } // namespace
+
379 
+
380 MpdBuilder::MpdBuilder(MpdType type, const MpdOptions& mpd_options)
+
381  : type_(type),
+
382  mpd_options_(mpd_options),
+
383  adaptation_sets_deleter_(&adaptation_sets_) {}
+
384 
+
385 MpdBuilder::~MpdBuilder() {}
+
386 
+
387 void MpdBuilder::AddBaseUrl(const std::string& base_url) {
+
388  base::AutoLock scoped_lock(lock_);
+
389  base_urls_.push_back(base_url);
+
390 }
+
391 
+
392 AdaptationSet* MpdBuilder::AddAdaptationSet(const std::string& lang) {
+
393  base::AutoLock scoped_lock(lock_);
+
394  scoped_ptr<AdaptationSet> adaptation_set(
+
395  new AdaptationSet(adaptation_set_counter_.GetNext(), lang, mpd_options_,
+
396  type_,
+
397  &representation_counter_));
+
398 
+
399  DCHECK(adaptation_set);
+
400  adaptation_sets_.push_back(adaptation_set.get());
+
401  return adaptation_set.release();
+
402 }
+
403 
+ +
405  base::AutoLock scoped_lock(lock_);
+
406  DCHECK(output_file);
+
407  return WriteMpdToOutput(output_file);
+
408 }
+
409 
+
410 bool MpdBuilder::ToString(std::string* output) {
+
411  base::AutoLock scoped_lock(lock_);
+
412  DCHECK(output);
+
413  return WriteMpdToOutput(output);
+
414 }
+
415 template <typename OutputType>
+
416 bool MpdBuilder::WriteMpdToOutput(OutputType* output) {
+
417  static LibXmlInitializer lib_xml_initializer;
+
418 
+
419  xml::ScopedXmlPtr<xmlDoc>::type doc(GenerateMpd());
+
420  if (!doc.get())
+
421  return false;
+
422 
+
423  static const int kNiceFormat = 1;
+
424  int doc_str_size = 0;
+
425  xmlChar* doc_str = NULL;
+
426  xmlDocDumpFormatMemoryEnc(doc.get(), &doc_str, &doc_str_size, "UTF-8",
+
427  kNiceFormat);
+
428 
+
429  bool result = WriteXmlCharArrayToOutput(doc_str, doc_str_size, output);
+
430  xmlFree(doc_str);
+
431 
+
432  // Cleanup, free the doc.
+
433  doc.reset();
+
434  return result;
+
435 }
+
436 
+
437 xmlDocPtr MpdBuilder::GenerateMpd() {
+
438  // Setup nodes.
+
439  static const char kXmlVersion[] = "1.0";
+
440  xml::ScopedXmlPtr<xmlDoc>::type doc(xmlNewDoc(BAD_CAST kXmlVersion));
+
441  XmlNode mpd("MPD");
+
442 
+
443  // Iterate thru AdaptationSets and add them to one big Period element.
+
444  XmlNode period("Period");
+
445  std::list<AdaptationSet*>::iterator adaptation_sets_it =
+
446  adaptation_sets_.begin();
+
447  for (; adaptation_sets_it != adaptation_sets_.end(); ++adaptation_sets_it) {
+
448  xml::ScopedXmlPtr<xmlNode>::type child((*adaptation_sets_it)->GetXml());
+
449  if (!child.get() || !period.AddChild(child.Pass()))
+
450  return NULL;
+
451  }
+
452 
+
453  // Add baseurls to MPD.
+
454  std::list<std::string>::const_iterator base_urls_it = base_urls_.begin();
+
455  for (; base_urls_it != base_urls_.end(); ++base_urls_it) {
+
456  XmlNode base_url("BaseURL");
+
457  base_url.SetContent(*base_urls_it);
+
458 
+
459  if (!mpd.AddChild(base_url.PassScopedPtr()))
+
460  return NULL;
+
461  }
+
462 
+
463  if (type_ == kDynamic) {
+
464  // This is the only Period and it is a regular period.
+
465  period.SetStringAttribute("start", "PT0S");
+
466  }
+
467 
+
468  if (!mpd.AddChild(period.PassScopedPtr()))
+
469  return NULL;
+
470 
+
471  AddMpdNameSpaceInfo(&mpd);
+
472  AddCommonMpdInfo(&mpd);
+
473  switch (type_) {
+
474  case kStatic:
+
475  AddStaticMpdInfo(&mpd);
+
476  break;
+
477  case kDynamic:
+
478  AddDynamicMpdInfo(&mpd);
+
479  break;
+
480  default:
+
481  NOTREACHED() << "Unknown MPD type: " << type_;
+
482  break;
+
483  }
+
484 
+
485  DCHECK(doc);
+
486  xmlDocSetRootElement(doc.get(), mpd.Release());
+
487  return doc.release();
+
488 }
+
489 
+
490 void MpdBuilder::AddCommonMpdInfo(XmlNode* mpd_node) {
+
491  if (Positive(mpd_options_.min_buffer_time)) {
+
492  mpd_node->SetStringAttribute(
+
493  "minBufferTime", SecondsToXmlDuration(mpd_options_.min_buffer_time));
+
494  } else {
+
495  LOG(ERROR) << "minBufferTime value not specified.";
+
496  // TODO(tinskip): Propagate error.
+
497  }
+
498 }
+
499 
+
500 void MpdBuilder::AddStaticMpdInfo(XmlNode* mpd_node) {
+
501  DCHECK(mpd_node);
+
502  DCHECK_EQ(MpdBuilder::kStatic, type_);
+
503 
+
504  static const char kStaticMpdType[] = "static";
+
505  static const char kStaticMpdProfile[] =
+
506  "urn:mpeg:dash:profile:isoff-on-demand:2011";
+
507  mpd_node->SetStringAttribute("type", kStaticMpdType);
+
508  mpd_node->SetStringAttribute("profiles", kStaticMpdProfile);
+
509  mpd_node->SetStringAttribute(
+
510  "mediaPresentationDuration",
+
511  SecondsToXmlDuration(GetStaticMpdDuration(mpd_node)));
+
512 }
+
513 
+
514 void MpdBuilder::AddDynamicMpdInfo(XmlNode* mpd_node) {
+
515  DCHECK(mpd_node);
+
516  DCHECK_EQ(MpdBuilder::kDynamic, type_);
+
517 
+
518  static const char kDynamicMpdType[] = "dynamic";
+
519  static const char kDynamicMpdProfile[] =
+
520  "urn:mpeg:dash:profile:isoff-live:2011";
+
521  mpd_node->SetStringAttribute("type", kDynamicMpdType);
+
522  mpd_node->SetStringAttribute("profiles", kDynamicMpdProfile);
+
523 
+
524  // 'availabilityStartTime' is required for dynamic profile. Calculate if
+
525  // not already calculated.
+
526  if (availability_start_time_.empty()) {
+
527  double earliest_presentation_time;
+
528  if (GetEarliestTimestamp(&earliest_presentation_time)) {
+
529  availability_start_time_ =
+
530  XmlDateTimeNowWithOffset(mpd_options_.availability_time_offset -
+
531  std::ceil(earliest_presentation_time));
+
532  } else {
+
533  LOG(ERROR) << "Could not determine the earliest segment presentation "
+
534  "time for availabilityStartTime calculation.";
+
535  // TODO(tinskip). Propagate an error.
+
536  }
+
537  }
+
538  if (!availability_start_time_.empty())
+
539  mpd_node->SetStringAttribute("availabilityStartTime",
+
540  availability_start_time_);
+
541 
+
542  if (Positive(mpd_options_.minimum_update_period)) {
+
543  mpd_node->SetStringAttribute(
+
544  "minimumUpdatePeriod",
+
545  SecondsToXmlDuration(mpd_options_.minimum_update_period));
+
546  } else {
+
547  LOG(WARNING) << "The profile is dynamic but no minimumUpdatePeriod "
+
548  "specified.";
+
549  }
+
550 
+
551  SetIfPositive("timeShiftBufferDepth", mpd_options_.time_shift_buffer_depth,
+
552  mpd_node);
+
553  SetIfPositive("suggestedPresentationDelay",
+
554  mpd_options_.suggested_presentation_delay, mpd_node);
+
555 }
+
556 
+
557 float MpdBuilder::GetStaticMpdDuration(XmlNode* mpd_node) {
+
558  DCHECK(mpd_node);
+
559  DCHECK_EQ(MpdBuilder::kStatic, type_);
+
560 
+
561  xmlNodePtr period_node = FindPeriodNode(mpd_node);
+
562  DCHECK(period_node) << "Period element must be a child of mpd_node.";
+
563  DCHECK(IsPeriodNode(period_node));
+
564 
+
565  // Attribute mediaPresentationDuration must be present for 'static' MPD. So
+
566  // setting "PT0S" is required even if none of the representaions have duration
+
567  // attribute.
+
568  float max_duration = 0.0f;
+
569  for (xmlNodePtr adaptation_set = xmlFirstElementChild(period_node);
+
570  adaptation_set; adaptation_set = xmlNextElementSibling(adaptation_set)) {
+
571  for (xmlNodePtr representation = xmlFirstElementChild(adaptation_set);
+
572  representation;
+
573  representation = xmlNextElementSibling(representation)) {
+
574  float duration = 0.0f;
+
575  if (GetDurationAttribute(representation, &duration)) {
+
576  max_duration = max_duration > duration ? max_duration : duration;
+
577 
+
578  // 'duration' attribute is there only to help generate MPD, not
+
579  // necessary for MPD, remove the attribute.
+
580  xmlUnsetProp(representation, BAD_CAST "duration");
+
581  }
+
582  }
+
583  }
+
584 
+
585  return max_duration;
+
586 }
+
587 
+
588 bool MpdBuilder::GetEarliestTimestamp(double* timestamp_seconds) {
+
589  DCHECK(timestamp_seconds);
+
590 
+
591  double earliest_timestamp(-1);
+
592  for (std::list<AdaptationSet*>::const_iterator iter =
+
593  adaptation_sets_.begin();
+
594  iter != adaptation_sets_.end(); ++iter) {
+
595  double timestamp;
+
596  if ((*iter)->GetEarliestTimestamp(&timestamp) &&
+
597  ((earliest_timestamp < 0) || (timestamp < earliest_timestamp))) {
+
598  earliest_timestamp = timestamp;
+
599  }
+
600  }
+
601  if (earliest_timestamp < 0)
+
602  return false;
+
603 
+
604  *timestamp_seconds = earliest_timestamp;
+
605  return true;
+
606 }
+
607 
+
608 void MpdBuilder::MakePathsRelativeToMpd(const std::string& mpd_path,
+
609  MediaInfo* media_info) {
+
610  DCHECK(media_info);
+
611  const std::string kFileProtocol("file://");
+
612  std::string mpd_file_path = (mpd_path.find(kFileProtocol) == 0)
+
613  ? mpd_path.substr(kFileProtocol.size())
+
614  : mpd_path;
+
615 
+
616  if (!mpd_file_path.empty()) {
+
617  std::string mpd_dir(
+
618  FilePath(mpd_file_path).DirName().AsEndingWithSeparator().value());
+
619  if (!mpd_dir.empty()) {
+
620  if (media_info->has_media_file_name()) {
+
621  media_info->set_media_file_name(
+
622  MakePathRelative(media_info->media_file_name(), mpd_dir));
+
623  }
+
624  if (media_info->has_init_segment_name()) {
+
625  media_info->set_init_segment_name(
+
626  MakePathRelative(media_info->init_segment_name(), mpd_dir));
+
627  }
+
628  if (media_info->has_segment_template()) {
+
629  media_info->set_segment_template(
+
630  MakePathRelative(media_info->segment_template(), mpd_dir));
+
631  }
+
632  }
+
633  }
+
634 }
+
635 
+
636 AdaptationSet::AdaptationSet(uint32_t adaptation_set_id,
+
637  const std::string& lang,
+
638  const MpdOptions& mpd_options,
+
639  MpdBuilder::MpdType mpd_type,
+
640  base::AtomicSequenceNumber* counter)
+
641  : representations_deleter_(&representations_),
+
642  representation_counter_(counter),
+
643  id_(adaptation_set_id),
+
644  lang_(lang),
+
645  mpd_options_(mpd_options),
+
646  mpd_type_(mpd_type),
+
647  group_(kAdaptationSetGroupNotSet),
+
648  segments_aligned_(kSegmentAlignmentUnknown),
+
649  force_set_segment_alignment_(false) {
+
650  DCHECK(counter);
+
651 }
+
652 
+
653 AdaptationSet::~AdaptationSet() {}
+
654 
+
655 Representation* AdaptationSet::AddRepresentation(const MediaInfo& media_info) {
+
656  base::AutoLock scoped_lock(lock_);
+
657  const uint32_t representation_id = representation_counter_->GetNext();
+
658  // Note that AdaptationSet outlive Representation, so this object
+
659  // will die before AdaptationSet.
+
660  scoped_ptr<RepresentationStateChangeListener> listener(
+
661  new RepresentationStateChangeListenerImpl(representation_id, this));
+
662  scoped_ptr<Representation> representation(new Representation(
+
663  media_info, mpd_options_, representation_id, listener.Pass()));
+
664 
+
665  if (!representation->Init())
+
666  return NULL;
+
667 
+
668  // For videos, record the width, height, and the frame rate to calculate the
+
669  // max {width,height,framerate} required for DASH IOP.
+
670  if (media_info.has_video_info()) {
+
671  const MediaInfo::VideoInfo& video_info = media_info.video_info();
+
672  DCHECK(video_info.has_width());
+
673  DCHECK(video_info.has_height());
+
674  video_widths_.insert(video_info.width());
+
675  video_heights_.insert(video_info.height());
+
676 
+
677  if (video_info.has_time_scale() && video_info.has_frame_duration())
+
678  RecordFrameRate(video_info.frame_duration(), video_info.time_scale());
+
679 
+
680  AddPictureAspectRatio(video_info, &picture_aspect_ratio_);
+
681  }
+
682 
+
683  if (media_info.has_video_info()) {
+
684  content_type_ = "video";
+
685  } else if (media_info.has_audio_info()) {
+
686  content_type_ = "audio";
+
687  }
+
688 
+
689  representations_.push_back(representation.get());
+
690  return representation.release();
+
691 }
+
692 
+ +
694  const ContentProtectionElement& content_protection_element) {
+
695  base::AutoLock scoped_lock(lock_);
+
696  content_protection_elements_.push_back(content_protection_element);
+
697  RemoveDuplicateAttributes(&content_protection_elements_.back());
+
698 }
+
699 
+
700 void AdaptationSet::UpdateContentProtectionPssh(const std::string& drm_uuid,
+
701  const std::string& pssh) {
+
702  base::AutoLock scoped_lock(lock_);
+
703  UpdateContentProtectionPsshHelper(drm_uuid, pssh,
+
704  &content_protection_elements_);
+
705 }
+
706 
+
707 void AdaptationSet::AddRole(Role role) {
+
708  roles_.insert(role);
+
709 }
+
710 
+
711 // Creates a copy of <AdaptationSet> xml element, iterate thru all the
+
712 // <Representation> (child) elements and add them to the copy.
+
713 xml::ScopedXmlPtr<xmlNode>::type AdaptationSet::GetXml() {
+
714  base::AutoLock scoped_lock(lock_);
+
715  AdaptationSetXmlNode adaptation_set;
+
716 
+
717  if (!adaptation_set.AddContentProtectionElements(
+
718  content_protection_elements_)) {
+
719  return xml::ScopedXmlPtr<xmlNode>::type();
+
720  }
+
721  for (std::set<Role>::const_iterator role_it = roles_.begin();
+
722  role_it != roles_.end(); ++role_it) {
+
723  adaptation_set.AddRoleElement("urn:mpeg:dash:role:2011",
+
724  RoleToText(*role_it));
+
725  }
+
726 
+
727  std::list<Representation*>::iterator representation_it =
+
728  representations_.begin();
+
729 
+
730  for (; representation_it != representations_.end(); ++representation_it) {
+
731  xml::ScopedXmlPtr<xmlNode>::type child((*representation_it)->GetXml());
+
732  if (!child || !adaptation_set.AddChild(child.Pass()))
+
733  return xml::ScopedXmlPtr<xmlNode>::type();
+
734  }
+
735 
+
736  adaptation_set.SetId(id_);
+
737  adaptation_set.SetStringAttribute("contentType", content_type_);
+
738  if (!lang_.empty() && lang_ != "und") {
+
739  adaptation_set.SetStringAttribute("lang", LanguageToShortestForm(lang_));
+
740  }
+
741 
+
742  // Note that std::{set,map} are ordered, so the last element is the max value.
+
743  if (video_widths_.size() == 1) {
+
744  adaptation_set.SetIntegerAttribute("width", *video_widths_.begin());
+
745  } else if (video_widths_.size() > 1) {
+
746  adaptation_set.SetIntegerAttribute("maxWidth", *video_widths_.rbegin());
+
747  }
+
748  if (video_heights_.size() == 1) {
+
749  adaptation_set.SetIntegerAttribute("height", *video_heights_.begin());
+
750  } else if (video_heights_.size() > 1) {
+
751  adaptation_set.SetIntegerAttribute("maxHeight", *video_heights_.rbegin());
+
752  }
+
753 
+
754  if (video_frame_rates_.size() == 1) {
+
755  adaptation_set.SetStringAttribute("frameRate",
+
756  video_frame_rates_.begin()->second);
+
757  } else if (video_frame_rates_.size() > 1) {
+
758  adaptation_set.SetStringAttribute("maxFrameRate",
+
759  video_frame_rates_.rbegin()->second);
+
760  }
+
761 
+
762  // Note: must be checked before checking segments_aligned_ (below).
+
763  if (mpd_type_ == MpdBuilder::kStatic) {
+
764  CheckVodSegmentAlignment();
+
765  }
+
766 
+
767  if (segments_aligned_ == kSegmentAlignmentTrue) {
+
768  adaptation_set.SetStringAttribute(mpd_type_ == MpdBuilder::kStatic
+
769  ? "subSegmentAlignment"
+
770  : "segmentAlignment",
+
771  "true");
+
772  }
+
773 
+
774  if (picture_aspect_ratio_.size() == 1)
+
775  adaptation_set.SetStringAttribute("par", *picture_aspect_ratio_.begin());
+
776 
+
777  if (group_ >= 0)
+
778  adaptation_set.SetIntegerAttribute("group", group_);
+
779 
+
780  return adaptation_set.PassScopedPtr();
+
781 }
+
782 
+
783 void AdaptationSet::ForceSetSegmentAlignment(bool segment_alignment) {
+
784  segments_aligned_ =
+
785  segment_alignment ? kSegmentAlignmentTrue : kSegmentAlignmentFalse;
+
786  force_set_segment_alignment_ = true;
+
787 }
+
788 
+
789 void AdaptationSet::SetGroup(int group_number) {
+
790  group_ = group_number;
+
791 }
+
792 
+
793 int AdaptationSet::Group() const {
+
794  return group_;
+
795 }
+
796 
+
797 // Check segmentAlignment for Live here. Storing all start_time and duration
+
798 // will out-of-memory because there's no way of knowing when it will end.
+
799 // VOD subSegmentAlignment check is *not* done here because it is possible
+
800 // that some Representations might not have been added yet (e.g. a thread is
+
801 // assigned per muxer so one might run faster than others).
+
802 // To be clear, for Live, all Representations should be added before a
+
803 // segment is added.
+
804 void AdaptationSet::OnNewSegmentForRepresentation(uint32_t representation_id,
+
805  uint64_t start_time,
+
806  uint64_t duration) {
+
807  base::AutoLock scoped_lock(lock_);
+
808 
+
809  if (mpd_type_ == MpdBuilder::kDynamic) {
+
810  CheckLiveSegmentAlignment(representation_id, start_time, duration);
+
811  } else {
+
812  representation_segment_start_times_[representation_id].push_back(
+
813  start_time);
+
814  }
+
815 }
+
816 
+ +
818  uint32_t /* representation_id */,
+
819  uint32_t frame_duration,
+
820  uint32_t timescale) {
+
821  base::AutoLock scoped_lock(lock_);
+
822  RecordFrameRate(frame_duration, timescale);
+
823 }
+
824 
+
825 bool AdaptationSet::GetEarliestTimestamp(double* timestamp_seconds) {
+
826  DCHECK(timestamp_seconds);
+
827 
+
828  base::AutoLock scoped_lock(lock_);
+
829  double earliest_timestamp(-1);
+
830  for (std::list<Representation*>::const_iterator iter =
+
831  representations_.begin();
+
832  iter != representations_.end(); ++iter) {
+
833  double timestamp;
+
834  if ((*iter)->GetEarliestTimestamp(&timestamp) &&
+
835  ((earliest_timestamp < 0) || (timestamp < earliest_timestamp))) {
+
836  earliest_timestamp = timestamp;
+
837  }
+
838  }
+
839  if (earliest_timestamp < 0)
+
840  return false;
+
841 
+
842  *timestamp_seconds = earliest_timestamp;
+
843  return true;
+
844 }
+
845 
+
846 // This implementation assumes that each representations' segments' are
+
847 // contiguous.
+
848 // Also assumes that all Representations are added before this is called.
+
849 // This checks whether the first elements of the lists in
+
850 // representation_segment_start_times_ are aligned.
+
851 // For example, suppose this method was just called with args rep_id=2
+
852 // start_time=1.
+
853 // 1 -> [1, 100, 200]
+
854 // 2 -> [1]
+
855 // The timestamps of the first elements match, so this flags
+
856 // segments_aligned_=true.
+
857 // Also since the first segment start times match, the first element of all the
+
858 // lists are removed, so the map of lists becomes:
+
859 // 1 -> [100, 200]
+
860 // 2 -> []
+
861 // Note that there could be false positives.
+
862 // e.g. just got rep_id=3 start_time=1 duration=300, and the duration of the
+
863 // whole AdaptationSet is 300.
+
864 // 1 -> [1, 100, 200]
+
865 // 2 -> [1, 90, 100]
+
866 // 3 -> [1]
+
867 // They are not aligned but this will be marked as aligned.
+
868 // But since this is unlikely to happen in the packager (and to save
+
869 // computation), this isn't handled at the moment.
+
870 void AdaptationSet::CheckLiveSegmentAlignment(uint32_t representation_id,
+
871  uint64_t start_time,
+
872  uint64_t /* duration */) {
+
873  if (segments_aligned_ == kSegmentAlignmentFalse ||
+
874  force_set_segment_alignment_) {
+
875  return;
+
876  }
+
877 
+
878  std::list<uint64_t>& representation_start_times =
+
879  representation_segment_start_times_[representation_id];
+
880  representation_start_times.push_back(start_time);
+
881  // There's no way to detemine whether the segments are aligned if some
+
882  // representations do not have any segments.
+
883  if (representation_segment_start_times_.size() != representations_.size())
+
884  return;
+
885 
+
886  DCHECK(!representation_start_times.empty());
+
887  const uint64_t expected_start_time = representation_start_times.front();
+
888  for (RepresentationTimeline::const_iterator it =
+
889  representation_segment_start_times_.begin();
+
890  it != representation_segment_start_times_.end(); ++it) {
+
891  // If there are no entries in a list, then there is no way for the
+
892  // segment alignment status to change.
+
893  // Note that it can be empty because entries get deleted below.
+
894  if (it->second.empty())
+
895  return;
+
896 
+
897  if (expected_start_time != it->second.front()) {
+
898  // Flag as false and clear the start times data, no need to keep it
+
899  // around.
+
900  segments_aligned_ = kSegmentAlignmentFalse;
+
901  representation_segment_start_times_.clear();
+
902  return;
+
903  }
+
904  }
+
905  segments_aligned_ = kSegmentAlignmentTrue;
+
906 
+
907  for (RepresentationTimeline::iterator it =
+
908  representation_segment_start_times_.begin();
+
909  it != representation_segment_start_times_.end(); ++it) {
+
910  it->second.pop_front();
+
911  }
+
912 }
+
913 
+
914 // Make sure all segements start times match for all Representations.
+
915 // This assumes that the segments are contiguous.
+
916 void AdaptationSet::CheckVodSegmentAlignment() {
+
917  if (segments_aligned_ == kSegmentAlignmentFalse ||
+
918  force_set_segment_alignment_) {
+
919  return;
+
920  }
+
921  if (representation_segment_start_times_.empty())
+
922  return;
+
923  if (representation_segment_start_times_.size() == 1) {
+
924  segments_aligned_ = kSegmentAlignmentTrue;
+
925  return;
+
926  }
+
927 
+
928  // This is not the most efficient implementation to compare the values
+
929  // because expected_time_line is compared against all other time lines, but
+
930  // probably the most readable.
+
931  const std::list<uint64_t>& expected_time_line =
+
932  representation_segment_start_times_.begin()->second;
+
933 
+
934  bool all_segment_time_line_same_length = true;
+
935  // Note that the first entry is skipped because it is expected_time_line.
+
936  RepresentationTimeline::const_iterator it =
+
937  representation_segment_start_times_.begin();
+
938  for (++it; it != representation_segment_start_times_.end(); ++it) {
+
939  const std::list<uint64_t>& other_time_line = it->second;
+
940  if (expected_time_line.size() != other_time_line.size()) {
+
941  all_segment_time_line_same_length = false;
+
942  }
+
943 
+
944  const std::list<uint64_t>* longer_list = &other_time_line;
+
945  const std::list<uint64_t>* shorter_list = &expected_time_line;
+
946  if (expected_time_line.size() > other_time_line.size()) {
+
947  shorter_list = &other_time_line;
+
948  longer_list = &expected_time_line;
+
949  }
+
950 
+
951  if (!std::equal(shorter_list->begin(), shorter_list->end(),
+
952  longer_list->begin())) {
+
953  // Some segments are definitely unaligned.
+
954  segments_aligned_ = kSegmentAlignmentFalse;
+
955  representation_segment_start_times_.clear();
+
956  return;
+
957  }
+
958  }
+
959 
+
960  // TODO(rkuroiwa): The right way to do this is to also check the durations.
+
961  // For example:
+
962  // (a) 3 4 5
+
963  // (b) 3 4 5 6
+
964  // could be true or false depending on the length of the third segment of (a).
+
965  // i.e. if length of the third segment is 2, then this is not aligned.
+
966  if (!all_segment_time_line_same_length) {
+
967  segments_aligned_ = kSegmentAlignmentUnknown;
+
968  return;
+
969  }
+
970 
+
971  segments_aligned_ = kSegmentAlignmentTrue;
+
972 }
+
973 
+
974 // Since all AdaptationSet cares about is the maxFrameRate, representation_id
+
975 // is not passed to this method.
+
976 void AdaptationSet::RecordFrameRate(uint32_t frame_duration,
+
977  uint32_t timescale) {
+
978  if (frame_duration == 0) {
+
979  LOG(ERROR) << "Frame duration is 0 and cannot be set.";
+
980  return;
+
981  }
+
982  video_frame_rates_[static_cast<double>(timescale) / frame_duration] =
+
983  base::IntToString(timescale) + "/" + base::IntToString(frame_duration);
+
984 }
+
985 
+ +
987  const MediaInfo& media_info,
+
988  const MpdOptions& mpd_options,
+
989  uint32_t id,
+
990  scoped_ptr<RepresentationStateChangeListener> state_change_listener)
+
991  : media_info_(media_info),
+
992  id_(id),
+
993  bandwidth_estimator_(BandwidthEstimator::kUseAllBlocks),
+
994  mpd_options_(mpd_options),
+
995  start_number_(1),
+
996  state_change_listener_(state_change_listener.Pass()) {}
+
997 
+
998 Representation::~Representation() {}
+
999 
+ +
1001  codecs_ = GetCodecs(media_info_);
+
1002  if (codecs_.empty()) {
+
1003  LOG(ERROR) << "Missing codec info in MediaInfo.";
+
1004  return false;
+
1005  }
+
1006 
+
1007  const bool has_video_info = media_info_.has_video_info();
+
1008  const bool has_audio_info = media_info_.has_audio_info();
+
1009 
+
1010  if (!has_video_info && !has_audio_info) {
+
1011  // This is an error. Segment information can be in AdaptationSet, Period, or
+
1012  // MPD but the interface does not provide a way to set them.
+
1013  // See 5.3.9.1 ISO 23009-1:2012 for segment info.
+
1014  LOG(ERROR) << "Representation needs video or audio.";
+
1015  return false;
+
1016  }
+
1017 
+
1018  if (media_info_.container_type() == MediaInfo::CONTAINER_UNKNOWN) {
+
1019  LOG(ERROR) << "'container_type' in MediaInfo cannot be CONTAINER_UNKNOWN.";
+
1020  return false;
+
1021  }
+
1022 
+
1023  // For mimetypes, this checks the video and then audio. Usually when there is
+
1024  // audio + video, we take video/<type>.
+
1025  if (has_video_info) {
+
1026  mime_type_ = GetVideoMimeType();
+
1027  if (!HasRequiredVideoFields(media_info_.video_info())) {
+
1028  LOG(ERROR) << "Missing required fields to create a video Representation.";
+
1029  return false;
+
1030  }
+
1031  } else if (has_audio_info) {
+
1032  mime_type_ = GetAudioMimeType();
+
1033  }
+
1034 
+
1035  return true;
+
1036 }
+
1037 
+ +
1039  const ContentProtectionElement& content_protection_element) {
+
1040  base::AutoLock scoped_lock(lock_);
+
1041  content_protection_elements_.push_back(content_protection_element);
+
1042  RemoveDuplicateAttributes(&content_protection_elements_.back());
+
1043 }
+
1044 
+
1045 void Representation::UpdateContentProtectionPssh(const std::string& drm_uuid,
+
1046  const std::string& pssh) {
+
1047  base::AutoLock scoped_lock(lock_);
+
1048  UpdateContentProtectionPsshHelper(drm_uuid, pssh,
+
1049  &content_protection_elements_);
+
1050 }
+
1051 
+
1052 void Representation::AddNewSegment(uint64_t start_time,
+
1053  uint64_t duration,
+
1054  uint64_t size) {
+
1055  if (start_time == 0 && duration == 0) {
+
1056  LOG(WARNING) << "Got segment with start_time and duration == 0. Ignoring.";
+
1057  return;
+
1058  }
+
1059 
+
1060  base::AutoLock scoped_lock(lock_);
+
1061  if (state_change_listener_)
+
1062  state_change_listener_->OnNewSegmentForRepresentation(start_time, duration);
+
1063  if (IsContiguous(start_time, duration, size)) {
+
1064  ++segment_infos_.back().repeat;
+
1065  } else {
+
1066  SegmentInfo s = {start_time, duration, /* Not repeat. */ 0};
+
1067  segment_infos_.push_back(s);
+
1068  }
+
1069 
+
1070  bandwidth_estimator_.AddBlock(
+
1071  size, static_cast<double>(duration) / media_info_.reference_time_scale());
+
1072 
+
1073  SlideWindow();
+
1074  DCHECK_GE(segment_infos_.size(), 1u);
+
1075 }
+
1076 
+
1077 void Representation::SetSampleDuration(uint32_t sample_duration) {
+
1078  base::AutoLock scoped_lock(lock_);
+
1079 
+
1080  if (media_info_.has_video_info()) {
+
1081  media_info_.mutable_video_info()->set_frame_duration(sample_duration);
+
1082  if (state_change_listener_) {
+
1083  state_change_listener_->OnSetFrameRateForRepresentation(
+
1084  sample_duration, media_info_.video_info().time_scale());
+
1085  }
+
1086  }
+
1087 }
+
1088 
+
1089 // Uses info in |media_info_| and |content_protection_elements_| to create a
+
1090 // "Representation" node.
+
1091 // MPD schema has strict ordering. The following must be done in order.
+
1092 // AddVideoInfo() (possibly adds FramePacking elements), AddAudioInfo() (Adds
+
1093 // AudioChannelConfig elements), AddContentProtectionElements*(), and
+
1094 // AddVODOnlyInfo() (Adds segment info).
+
1095 xml::ScopedXmlPtr<xmlNode>::type Representation::GetXml() {
+
1096  base::AutoLock scoped_lock(lock_);
+
1097 
+
1098  if (!HasRequiredMediaInfoFields()) {
+
1099  LOG(ERROR) << "MediaInfo missing required fields.";
+
1100  return xml::ScopedXmlPtr<xmlNode>::type();
+
1101  }
+
1102 
+
1103  const uint64_t bandwidth = media_info_.has_bandwidth()
+
1104  ? media_info_.bandwidth()
+
1105  : bandwidth_estimator_.Estimate();
+
1106 
+
1107  DCHECK(!(HasVODOnlyFields(media_info_) && HasLiveOnlyFields(media_info_)));
+
1108 
+
1109  RepresentationXmlNode representation;
+
1110  // Mandatory fields for Representation.
+
1111  representation.SetId(id_);
+
1112  representation.SetIntegerAttribute("bandwidth", bandwidth);
+
1113  representation.SetStringAttribute("codecs", codecs_);
+
1114  representation.SetStringAttribute("mimeType", mime_type_);
+
1115 
+
1116  const bool has_video_info = media_info_.has_video_info();
+
1117  const bool has_audio_info = media_info_.has_audio_info();
+
1118 
+
1119  if (has_video_info &&
+
1120  !representation.AddVideoInfo(media_info_.video_info())) {
+
1121  LOG(ERROR) << "Failed to add video info to Representation XML.";
+
1122  return xml::ScopedXmlPtr<xmlNode>::type();
+
1123  }
+
1124 
+
1125  if (has_audio_info &&
+
1126  !representation.AddAudioInfo(media_info_.audio_info())) {
+
1127  LOG(ERROR) << "Failed to add audio info to Representation XML.";
+
1128  return xml::ScopedXmlPtr<xmlNode>::type();
+
1129  }
+
1130 
+
1131  if (!representation.AddContentProtectionElements(
+
1132  content_protection_elements_)) {
+
1133  return xml::ScopedXmlPtr<xmlNode>::type();
+
1134  }
+
1135 
+
1136  if (HasVODOnlyFields(media_info_) &&
+
1137  !representation.AddVODOnlyInfo(media_info_)) {
+
1138  LOG(ERROR) << "Failed to add VOD segment info.";
+
1139  return xml::ScopedXmlPtr<xmlNode>::type();
+
1140  }
+
1141 
+
1142  if (HasLiveOnlyFields(media_info_) &&
+
1143  !representation.AddLiveOnlyInfo(media_info_, segment_infos_,
+
1144  start_number_)) {
+
1145  LOG(ERROR) << "Failed to add Live info.";
+
1146  return xml::ScopedXmlPtr<xmlNode>::type();
+
1147  }
+
1148  // TODO(rkuroiwa): It is likely that all representations have the exact same
+
1149  // SegmentTemplate. Optimize and propagate the tag up to AdaptationSet level.
+
1150 
+
1151  return representation.PassScopedPtr();
+
1152 }
+
1153 
+
1154 bool Representation::HasRequiredMediaInfoFields() {
+
1155  if (HasVODOnlyFields(media_info_) && HasLiveOnlyFields(media_info_)) {
+
1156  LOG(ERROR) << "MediaInfo cannot have both VOD and Live fields.";
+
1157  return false;
+
1158  }
+
1159 
+
1160  if (!media_info_.has_container_type()) {
+
1161  LOG(ERROR) << "MediaInfo missing required field: container_type.";
+
1162  return false;
+
1163  }
+
1164 
+
1165  if (HasVODOnlyFields(media_info_) && !media_info_.has_bandwidth()) {
+
1166  LOG(ERROR) << "Missing 'bandwidth' field. MediaInfo requires bandwidth for "
+
1167  "static profile for generating a valid MPD.";
+
1168  return false;
+
1169  }
+
1170 
+
1171  VLOG_IF(3, HasLiveOnlyFields(media_info_) && !media_info_.has_bandwidth())
+
1172  << "MediaInfo missing field 'bandwidth'. Using estimated from "
+
1173  "segment size.";
+
1174 
+
1175  return true;
+
1176 }
+
1177 
+
1178 bool Representation::IsContiguous(uint64_t start_time,
+
1179  uint64_t duration,
+
1180  uint64_t size) const {
+
1181  if (segment_infos_.empty())
+
1182  return false;
+
1183 
+
1184  // Contiguous segment.
+
1185  const SegmentInfo& previous = segment_infos_.back();
+
1186  const uint64_t previous_segment_end_time =
+
1187  previous.start_time + previous.duration * (previous.repeat + 1);
+
1188  if (previous_segment_end_time == start_time &&
+
1189  segment_infos_.back().duration == duration) {
+
1190  return true;
+
1191  }
+
1192 
+
1193  // No out of order segments.
+
1194  const uint64_t previous_segment_start_time =
+
1195  previous.start_time + previous.duration * previous.repeat;
+
1196  if (previous_segment_start_time >= start_time) {
+
1197  LOG(ERROR) << "Segments should not be out of order segment. Adding segment "
+
1198  "with start_time == "
+
1199  << start_time << " but the previous segment starts at "
+
1200  << previous.start_time << ".";
+
1201  return false;
+
1202  }
+
1203 
+
1204  // A gap since previous.
+
1205  const uint64_t kRoundingErrorGrace = 5;
+
1206  if (previous_segment_end_time + kRoundingErrorGrace < start_time) {
+
1207  LOG(WARNING) << "Found a gap of size "
+
1208  << (start_time - previous_segment_end_time)
+
1209  << " > kRoundingErrorGrace (" << kRoundingErrorGrace
+
1210  << "). The new segment starts at " << start_time
+
1211  << " but the previous segment ends at "
+
1212  << previous_segment_end_time << ".";
+
1213  return false;
+
1214  }
+
1215 
+
1216  // No overlapping segments.
+
1217  if (start_time < previous_segment_end_time - kRoundingErrorGrace) {
+
1218  LOG(WARNING)
+
1219  << "Segments should not be overlapping. The new segment starts at "
+
1220  << start_time << " but the previous segment ends at "
+
1221  << previous_segment_end_time << ".";
+
1222  return false;
+
1223  }
+
1224 
+
1225  // Within rounding error grace but technically not contiguous in terms of MPD.
+
1226  return false;
+
1227 }
+
1228 
+
1229 void Representation::SlideWindow() {
+
1230  DCHECK(!segment_infos_.empty());
+
1231  if (mpd_options_.time_shift_buffer_depth <= 0.0)
+
1232  return;
+
1233 
+
1234  const uint32_t time_scale = GetTimeScale(media_info_);
+
1235  DCHECK_GT(time_scale, 0u);
+
1236 
+
1237  uint64_t time_shift_buffer_depth =
+
1238  static_cast<uint64_t>(mpd_options_.time_shift_buffer_depth * time_scale);
+
1239 
+
1240  // The start time of the latest segment is considered the current_play_time,
+
1241  // and this should guarantee that the latest segment will stay in the list.
+
1242  const uint64_t current_play_time = LatestSegmentStartTime(segment_infos_);
+
1243  if (current_play_time <= time_shift_buffer_depth)
+
1244  return;
+
1245 
+
1246  const uint64_t timeshift_limit = current_play_time - time_shift_buffer_depth;
+
1247 
+
1248  // First remove all the SegmentInfos that are completely out of range, by
+
1249  // looking at the very last segment's end time.
+
1250  std::list<SegmentInfo>::iterator first = segment_infos_.begin();
+
1251  std::list<SegmentInfo>::iterator last = first;
+
1252  size_t num_segments_removed = 0;
+
1253  for (; last != segment_infos_.end(); ++last) {
+
1254  const uint64_t last_segment_end_time = LastSegmentEndTime(*last);
+
1255  if (timeshift_limit < last_segment_end_time)
+
1256  break;
+
1257  num_segments_removed += last->repeat + 1;
+
1258  }
+
1259  segment_infos_.erase(first, last);
+
1260  start_number_ += num_segments_removed;
+
1261 
+
1262  // Now some segment in the first SegmentInfo should be left in the list.
+
1263  SegmentInfo* first_segment_info = &segment_infos_.front();
+
1264  DCHECK_LE(timeshift_limit, LastSegmentEndTime(*first_segment_info));
+
1265 
+
1266  // Identify which segments should still be in the SegmentInfo.
+
1267  const int repeat_index =
+
1268  SearchTimedOutRepeatIndex(timeshift_limit, *first_segment_info);
+
1269  CHECK_GE(repeat_index, 0);
+
1270  if (repeat_index == 0)
+
1271  return;
+
1272 
+
1273  first_segment_info->start_time = first_segment_info->start_time +
+
1274  first_segment_info->duration * repeat_index;
+
1275 
+
1276  first_segment_info->repeat = first_segment_info->repeat - repeat_index;
+
1277  start_number_ += repeat_index;
+
1278 }
+
1279 
+
1280 std::string Representation::GetVideoMimeType() const {
+
1281  return GetMimeType("video", media_info_.container_type());
+
1282 }
+
1283 
+
1284 std::string Representation::GetAudioMimeType() const {
+
1285  return GetMimeType("audio", media_info_.container_type());
+
1286 }
+
1287 
+
1288 bool Representation::GetEarliestTimestamp(double* timestamp_seconds) {
+
1289  DCHECK(timestamp_seconds);
+
1290 
+
1291  base::AutoLock scoped_lock(lock_);
+
1292  if (segment_infos_.empty())
+
1293  return false;
+
1294 
+
1295  *timestamp_seconds = static_cast<double>(segment_infos_.begin()->start_time) /
+
1296  GetTimeScale(media_info_);
+
1297  return true;
+
1298 }
+
1299 
+
1300 } // namespace edash_packager
+
std::string LanguageToShortestForm(const std::string &language)
+
virtual void AddNewSegment(uint64_t start_time, uint64_t duration, uint64_t size)
+
AdaptationSet(uint32_t adaptation_set_id, const std::string &lang, const MpdOptions &mpd_options, MpdBuilder::MpdType mpd_type, base::AtomicSequenceNumber *representation_counter)
Definition: mpd_builder.cc:636
+ +
Defines Mpd Options.
Definition: mpd_options.h:13
+ +
virtual int Group() const
Definition: mpd_builder.cc:793
+
virtual AdaptationSet * AddAdaptationSet(const std::string &lang)
Definition: mpd_builder.cc:392
+
Define an abstract file interface.
Definition: file.h:22
+
xml::ScopedXmlPtr< xmlNode >::type GetXml()
+
static void MakePathsRelativeToMpd(const std::string &mpd_path, MediaInfo *media_info)
Definition: mpd_builder.cc:608
+
void ForceSetSegmentAlignment(bool segment_alignment)
Definition: mpd_builder.cc:783
+
virtual void SetSampleDuration(uint32_t sample_duration)
+
void AddBaseUrl(const std::string &base_url)
Definition: mpd_builder.cc:387
+
virtual void UpdateContentProtectionPssh(const std::string &drm_uuid, const std::string &pssh)
+
Representation(const MediaInfo &media_info, const MpdOptions &mpd_options, uint32_t representation_id, scoped_ptr< RepresentationStateChangeListener > state_change_listener)
Definition: mpd_builder.cc:986
+
virtual void SetGroup(int group_number)
Definition: mpd_builder.cc:789
+
xml::ScopedXmlPtr< xmlNode >::type GetXml()
Definition: mpd_builder.cc:713
+ +
virtual void AddContentProtectionElement(const ContentProtectionElement &element)
+
bool WriteMpdToFile(media::File *output_file)
Definition: mpd_builder.cc:404
+
void OnSetFrameRateForRepresentation(uint32_t representation_id, uint32_t frame_duration, uint32_t timescale)
Definition: mpd_builder.cc:817
+
virtual Representation * AddRepresentation(const MediaInfo &media_info)
Definition: mpd_builder.cc:655
+ + +
virtual void UpdateContentProtectionPssh(const std::string &drm_uuid, const std::string &pssh)
Definition: mpd_builder.cc:700
+
virtual bool ToString(std::string *output)
Definition: mpd_builder.cc:410
+
virtual void AddRole(Role role)
Definition: mpd_builder.cc:707
+
MpdBuilder(MpdType type, const MpdOptions &mpd_options)
Definition: mpd_builder.cc:380
+
virtual void AddContentProtectionElement(const ContentProtectionElement &element)
Definition: mpd_builder.cc:693
+ +
void OnNewSegmentForRepresentation(uint32_t representation_id, uint64_t start_time, uint64_t duration)
Definition: mpd_builder.cc:804
+
+ + + + diff --git a/sdk/dd/d12/mpd__writer_8cc_source.html b/sdk/dd/d12/mpd__writer_8cc_source.html new file mode 100644 index 0000000000..53fad7da13 --- /dev/null +++ b/sdk/dd/d12/mpd__writer_8cc_source.html @@ -0,0 +1,234 @@ + + + + + + +DASH Media Packaging SDK: mpd/util/mpd_writer.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mpd_writer.cc
+
+
+
1 // Copyright 2014 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/mpd/util/mpd_writer.h"
+
8 
+
9 #include <gflags/gflags.h>
+
10 #include <google/protobuf/text_format.h>
+
11 #include <stdint.h>
+
12 
+
13 #include "packager/base/file_util.h"
+
14 #include "packager/base/files/file_path.h"
+
15 #include "packager/media/file/file.h"
+
16 #include "packager/mpd/base/dash_iop_mpd_notifier.h"
+
17 #include "packager/mpd/base/mpd_builder.h"
+
18 #include "packager/mpd/base/mpd_notifier.h"
+
19 #include "packager/mpd/base/mpd_utils.h"
+
20 #include "packager/mpd/base/simple_mpd_notifier.h"
+
21 
+
22 DEFINE_bool(generate_dash_if_iop_compliant_mpd,
+
23  false,
+
24  "Try to generate DASH-IF IOPv3 compliant MPD. This is best effort "
+
25  "and does not guarantee compliance. Off by default until players "
+
26  "support IOP MPDs.");
+
27 
+ +
29 
+
30 namespace edash_packager {
+
31 
+
32 namespace {
+
33 
+
34 // Factory that creates DashIopMpdNotifier instances.
+
35 class DashIopMpdNotifierFactory : public MpdNotifierFactory {
+
36  public:
+
37  DashIopMpdNotifierFactory() {}
+
38  virtual ~DashIopMpdNotifierFactory() OVERRIDE {}
+
39 
+
40  virtual scoped_ptr<MpdNotifier> Create(
+
41  DashProfile dash_profile,
+
42  const MpdOptions& mpd_options,
+
43  const std::vector<std::string>& base_urls,
+
44  const std::string& output_path) OVERRIDE {
+
45  return scoped_ptr<MpdNotifier>(new DashIopMpdNotifier(
+
46  dash_profile, mpd_options, base_urls, output_path));
+
47  }
+
48 };
+
49 
+
50 // Factory that creates SimpleMpdNotifier instances.
+
51 class SimpleMpdNotifierFactory : public MpdNotifierFactory {
+
52  public:
+
53  SimpleMpdNotifierFactory() {}
+
54  virtual ~SimpleMpdNotifierFactory() OVERRIDE {}
+
55 
+
56  virtual scoped_ptr<MpdNotifier> Create(
+
57  DashProfile dash_profile,
+
58  const MpdOptions& mpd_options,
+
59  const std::vector<std::string>& base_urls,
+
60  const std::string& output_path) OVERRIDE {
+
61  return scoped_ptr<MpdNotifier>(new SimpleMpdNotifier(
+
62  dash_profile, mpd_options, base_urls, output_path));
+
63  }
+
64 };
+
65 
+
66 } // namespace
+
67 
+
68 MpdWriter::MpdWriter()
+
69  : notifier_factory_(FLAGS_generate_dash_if_iop_compliant_mpd
+
70  ? static_cast<MpdNotifierFactory*>(
+
71  new DashIopMpdNotifierFactory())
+
72  : static_cast<MpdNotifierFactory*>(
+
73  new SimpleMpdNotifierFactory())) {}
+
74 MpdWriter::~MpdWriter() {}
+
75 
+
76 bool MpdWriter::AddFile(const std::string& media_info_path,
+
77  const std::string& mpd_path) {
+
78  std::string file_content;
+
79  if (!media::File::ReadFileToString(media_info_path.c_str(),
+
80  &file_content)) {
+
81  LOG(ERROR) << "Failed to read " << media_info_path << " to string.";
+
82  return false;
+
83  }
+
84 
+
85  MediaInfo media_info;
+
86  if (!::google::protobuf::TextFormat::ParseFromString(file_content,
+
87  &media_info)) {
+
88  LOG(ERROR) << "Failed to parse " << file_content << " to MediaInfo.";
+
89  return false;
+
90  }
+
91 
+
92  MpdBuilder::MakePathsRelativeToMpd(mpd_path, &media_info);
+
93  media_infos_.push_back(media_info);
+
94  return true;
+
95 }
+
96 
+
97 void MpdWriter::AddBaseUrl(const std::string& base_url) {
+
98  base_urls_.push_back(base_url);
+
99 }
+
100 
+
101 bool MpdWriter::WriteMpdToFile(const char* file_name) {
+
102  CHECK(file_name);
+
103  scoped_ptr<MpdNotifier> notifier = notifier_factory_->Create(
+
104  kOnDemandProfile, MpdOptions(), base_urls_, file_name);
+
105  if (!notifier->Init()) {
+
106  LOG(ERROR) << "failed to initialize MpdNotifier.";
+
107  return false;
+
108  }
+
109 
+
110  for (std::list<MediaInfo>::const_iterator it = media_infos_.begin();
+
111  it != media_infos_.end();
+
112  ++it) {
+
113  uint32_t unused_conatiner_id;
+
114  if (!notifier->NotifyNewContainer(*it, &unused_conatiner_id)) {
+
115  LOG(ERROR) << "Failed to add MediaInfo for media file: "
+
116  << it->media_file_name();
+
117  return false;
+
118  }
+
119  }
+
120 
+
121  if (!notifier->Flush()) {
+
122  LOG(ERROR) << "Failed to flush MPD notifier.";
+
123  return false;
+
124  }
+
125  return true;
+
126 }
+
127 
+
128 void MpdWriter::SetMpdNotifierFactoryForTest(
+
129  scoped_ptr<MpdNotifierFactory> factory) {
+
130  notifier_factory_ = factory.Pass();
+
131 }
+
132 
+
133 } // namespace edash_packager
+
static bool ReadFileToString(const char *file_name, std::string *contents)
Definition: file.cc:160
+
Define an abstract file interface.
Definition: file.h:22
+
static void MakePathsRelativeToMpd(const std::string &mpd_path, MediaInfo *media_info)
Definition: mpd_builder.cc:608
+
+ + + + diff --git a/sdk/dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html b/sdk/dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html new file mode 100644 index 0000000000..1dabb9be93 --- /dev/null +++ b/sdk/dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html @@ -0,0 +1,206 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::MovieHeader Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::MovieHeader Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::MovieHeader:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+uint64_t creation_time
 
+uint64_t modification_time
 
+uint32_t timescale
 
+uint64_t duration
 
+int32_t rate
 
+int16_t volume
 
+uint32_t next_track_id
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 109 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::MovieHeader::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 337 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.png b/sdk/dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.png new file mode 100644 index 0000000000..4be1895baf Binary files /dev/null and b/sdk/dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.png differ diff --git a/sdk/dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html b/sdk/dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html new file mode 100644 index 0000000000..91d4037e78 --- /dev/null +++ b/sdk/dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html @@ -0,0 +1,221 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::TrackHeader Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::TrackHeader Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::TrackHeader:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + +

+Public Types

enum  TrackHeaderFlags { kTrackEnabled = 0x000001, +kTrackInMovie = 0x000002, +kTrackInPreview = 0x000004 + }
 
+ + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+uint64_t creation_time
 
+uint64_t modification_time
 
+uint32_t track_id
 
+uint64_t duration
 
+int16_t layer
 
+int16_t alternate_group
 
+int16_t volume
 
+uint32_t width
 
+uint32_t height
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 121 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::TrackHeader::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 389 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.png b/sdk/dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.png new file mode 100644 index 0000000000..644d0db66f Binary files /dev/null and b/sdk/dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.png differ diff --git a/sdk/dd/d18/es__parser__adts_8h_source.html b/sdk/dd/d18/es__parser__adts_8h_source.html new file mode 100644 index 0000000000..f4591cd7fd --- /dev/null +++ b/sdk/dd/d18/es__parser__adts_8h_source.html @@ -0,0 +1,183 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp2t/es_parser_adts.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
es_parser_adts.h
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_FORMATS_MP2T_ES_PARSER_ADTS_H_
+
6 #define MEDIA_FORMATS_MP2T_ES_PARSER_ADTS_H_
+
7 
+
8 #include <list>
+
9 #include <utility>
+
10 
+
11 #include "packager/base/callback.h"
+
12 #include "packager/base/compiler_specific.h"
+
13 #include "packager/base/memory/scoped_ptr.h"
+
14 #include "packager/media/base/audio_stream_info.h"
+
15 #include "packager/media/base/byte_queue.h"
+
16 #include "packager/media/formats/mp2t/es_parser.h"
+
17 
+
18 namespace edash_packager {
+
19 namespace media {
+
20 class AudioTimestampHelper;
+
21 class BitReader;
+
22 
+
23 namespace mp2t {
+
24 
+
25 class EsParserAdts : public EsParser {
+
26  public:
+
27  EsParserAdts(uint32_t pid,
+
28  const NewStreamInfoCB& new_stream_info_cb,
+
29  const EmitSampleCB& emit_sample_cb,
+
30  bool sbr_in_mimetype);
+
31  virtual ~EsParserAdts();
+
32 
+
33  // EsParser implementation.
+
34  virtual bool Parse(const uint8_t* buf,
+
35  int size,
+
36  int64_t pts,
+
37  int64_t dts) OVERRIDE;
+
38  virtual void Flush() OVERRIDE;
+
39  virtual void Reset() OVERRIDE;
+
40 
+
41  private:
+
42  // Used to link a PTS with a byte position in the ES stream.
+
43  typedef std::pair<int, int64_t> EsPts;
+
44  typedef std::list<EsPts> EsPtsList;
+
45 
+
46  // Signal any audio configuration change (if any).
+
47  // Return false if the current audio config is not
+
48  // a supported ADTS audio config.
+
49  bool UpdateAudioConfiguration(const uint8_t* adts_frame, size_t frame_size);
+
50 
+
51  // Discard some bytes from the ES stream.
+
52  void DiscardEs(int nbytes);
+
53 
+
54  // Callbacks:
+
55  // - to signal a new audio configuration,
+
56  // - to send ES buffers.
+
57  NewStreamInfoCB new_stream_info_cb_;
+
58  EmitSampleCB emit_sample_cb_;
+
59 
+
60  // True when AAC SBR extension is signalled in the mimetype
+
61  // (mp4a.40.5 in the codecs parameter).
+
62  bool sbr_in_mimetype_;
+
63 
+
64  // Bytes of the ES stream that have not been emitted yet.
+
65  ByteQueue es_byte_queue_;
+
66 
+
67  // List of PTS associated with a position in the ES stream.
+
68  EsPtsList pts_list_;
+
69 
+
70  // Interpolated PTS for frames that don't have one.
+
71  scoped_ptr<AudioTimestampHelper> audio_timestamp_helper_;
+
72 
+
73  scoped_refptr<StreamInfo> last_audio_decoder_config_;
+
74 
+
75  DISALLOW_COPY_AND_ASSIGN(EsParserAdts);
+
76 };
+
77 
+
78 } // namespace mp2t
+
79 } // namespace media
+
80 } // namespace edash_packager
+
81 
+
82 #endif
+ + + +
+ + + + diff --git a/sdk/dd/d19/video__stream__info_8cc_source.html b/sdk/dd/d19/video__stream__info_8cc_source.html new file mode 100644 index 0000000000..c67c682a52 --- /dev/null +++ b/sdk/dd/d19/video__stream__info_8cc_source.html @@ -0,0 +1,220 @@ + + + + + + +DASH Media Packaging SDK: media/base/video_stream_info.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
video_stream_info.cc
+
+
+
1 // Copyright 2014 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/base/video_stream_info.h"
+
8 
+
9 #include "packager/base/logging.h"
+
10 #include "packager/base/stl_util.h"
+
11 #include "packager/base/strings/string_number_conversions.h"
+
12 #include "packager/base/strings/string_util.h"
+
13 #include "packager/base/strings/stringprintf.h"
+
14 #include "packager/media/base/limits.h"
+
15 
+
16 namespace edash_packager {
+
17 namespace media {
+
18 
+
19 namespace {
+
20 std::string VideoCodecToString(VideoCodec video_codec) {
+
21  switch (video_codec) {
+
22  case kCodecH264:
+
23  return "H264";
+
24  case kCodecVC1:
+
25  return "VC1";
+
26  case kCodecMPEG2:
+
27  return "MPEG2";
+
28  case kCodecMPEG4:
+
29  return "MPEG4";
+
30  case kCodecTheora:
+
31  return "Theora";
+
32  case kCodecVP8:
+
33  return "VP8";
+
34  case kCodecVP9:
+
35  return "VP9";
+
36  default:
+
37  NOTIMPLEMENTED() << "Unknown Video Codec: " << video_codec;
+
38  return "UnknownVideoCodec";
+
39  }
+
40 }
+
41 
+
42 } // namespace
+
43 
+ +
45  uint32_t time_scale,
+
46  uint64_t duration,
+
47  VideoCodec codec,
+
48  const std::string& codec_string,
+
49  const std::string& language,
+
50  uint16_t width,
+
51  uint16_t height,
+
52  uint32_t pixel_width,
+
53  uint32_t pixel_height,
+
54  int16_t trick_play_rate,
+
55  uint8_t nalu_length_size,
+
56  const uint8_t* extra_data,
+
57  size_t extra_data_size,
+
58  bool is_encrypted)
+
59  : StreamInfo(kStreamVideo,
+
60  track_id,
+
61  time_scale,
+
62  duration,
+
63  codec_string,
+
64  language,
+
65  extra_data,
+
66  extra_data_size,
+
67  is_encrypted),
+
68  codec_(codec),
+
69  width_(width),
+
70  height_(height),
+
71  pixel_width_(pixel_width),
+
72  pixel_height_(pixel_height),
+
73  trick_play_rate_(trick_play_rate),
+
74  nalu_length_size_(nalu_length_size) {
+
75 }
+
76 
+
77 VideoStreamInfo::~VideoStreamInfo() {}
+
78 
+ +
80  return codec_ != kUnknownVideoCodec &&
+
81  width_ > 0 && width_ <= limits::kMaxDimension &&
+
82  height_ > 0 && height_ <= limits::kMaxDimension &&
+
83  (nalu_length_size_ <= 2 || nalu_length_size_ == 4);
+
84 }
+
85 
+
86 std::string VideoStreamInfo::ToString() const {
+
87  return base::StringPrintf(
+
88  "%s codec: %s\n width: %d\n height: %d\n pixel aspect ratio: %d:%d\n "
+
89  "trick_play_rate: %d\n nalu_length_size: %d\n",
+
90  StreamInfo::ToString().c_str(), VideoCodecToString(codec_).c_str(),
+
91  width_, height_, pixel_width_, pixel_height_, trick_play_rate_,
+
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  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
+
virtual bool IsValidConfig() const OVERRIDE
+
virtual std::string ToString() const OVERRIDE
+
Abstract class holds stream information.
Definition: stream_info.h:25
+
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/sdk/dd/d1a/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter-members.html b/sdk/dd/d1a/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter-members.html new file mode 100644 index 0000000000..cd7e65c485 --- /dev/null +++ b/sdk/dd/d1a/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter-members.html @@ -0,0 +1,109 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::H264ByteToUnitStreamConverter Member List
+
+
+ +

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

+ + + + + + +
ConvertByteStreamToNalUnitStream(const uint8_t *input_frame, size_t input_frame_size, std::vector< uint8_t > *output_frame)edash_packager::media::H264ByteToUnitStreamConverter
GetAVCDecoderConfigurationRecord(std::vector< uint8_t > *decoder_config)edash_packager::media::H264ByteToUnitStreamConverter
H264ByteToUnitStreamConverter() (defined in edash_packager::media::H264ByteToUnitStreamConverter)edash_packager::media::H264ByteToUnitStreamConverter
kUnitStreamNaluLengthSize (defined in edash_packager::media::H264ByteToUnitStreamConverter)edash_packager::media::H264ByteToUnitStreamConverterstatic
~H264ByteToUnitStreamConverter() (defined in edash_packager::media::H264ByteToUnitStreamConverter)edash_packager::media::H264ByteToUnitStreamConverter
+ + + + diff --git a/sdk/dd/d2b/classedash__packager_1_1media_1_1ClosureThread.html b/sdk/dd/d2b/classedash__packager_1_1media_1_1ClosureThread.html new file mode 100644 index 0000000000..4e8f971a2f --- /dev/null +++ b/sdk/dd/d2b/classedash__packager_1_1media_1_1ClosureThread.html @@ -0,0 +1,187 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::ClosureThread Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::ClosureThread Class Reference
+
+
+ +

#include <closure_thread.h>

+
+Inheritance diagram for edash_packager::media::ClosureThread:
+
+
+ + + +
+ + + + + + + +

+Public Member Functions

 ClosureThread (const std::string &name_prefix, const base::Closure &task)
 
+virtual ~ClosureThread ()
 The destructor calls Join automatically if it is not yet joined.
 
+ + + + +

+Protected Member Functions

+virtual void Run () OVERRIDE
 SimpleThread implementation overrides.
 
+

Detailed Description

+

Class for creating a thread which invokes a closure. Start() starts the thread and invokes the given closure inside the thread.

+

NOTE: It is invalid to destroy a ClosureThread without Start() having been called (and a thread never created).

+

Thread Safety: A ClosureThread is not completely thread safe. It is safe to access it from the creating thread or from the newly created thread. This implies that the creator thread should be the thread that calls Join.

+ +

Definition at line 25 of file closure_thread.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
edash_packager::media::ClosureThread::ClosureThread (const std::string & name_prefix,
const base::Closure & task 
)
+
+explicit
+
+

Create a ClosureThread. The thread will not be created until Start() is called.

+
Parameters
+ + + +
name_prefixis the thread name prefix. Every thread has a name, in the form of name_prefix/TID, for example "my_thread/321".
taskis the Closure to run in the thread.
+
+
+ +

Definition at line 12 of file closure_thread.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/dd/d2b/classedash__packager_1_1media_1_1ClosureThread.png b/sdk/dd/d2b/classedash__packager_1_1media_1_1ClosureThread.png new file mode 100644 index 0000000000..c849d7f586 Binary files /dev/null and b/sdk/dd/d2b/classedash__packager_1_1media_1_1ClosureThread.png differ diff --git a/sdk/dd/d2c/single__segment__segmenter_8h_source.html b/sdk/dd/d2c/single__segment__segmenter_8h_source.html new file mode 100644 index 0000000000..cef6f9df1c --- /dev/null +++ b/sdk/dd/d2c/single__segment__segmenter_8h_source.html @@ -0,0 +1,148 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/single_segment_segmenter.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
single_segment_segmenter.h
+
+
+
1 // Copyright 2014 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_FORMATS_MP4_SINGLE_SEGMENT_SEGMENTER_H_
+
8 #define MEDIA_FORMATS_MP4_SINGLE_SEGMENT_SEGMENTER_H_
+
9 
+
10 #include "packager/media/file/file_closer.h"
+
11 #include "packager/media/formats/mp4/segmenter.h"
+
12 
+
13 namespace edash_packager {
+
14 namespace media {
+
15 namespace mp4 {
+
16 
+ +
29  public:
+
30  SingleSegmentSegmenter(const MuxerOptions& options,
+
31  scoped_ptr<FileType> ftyp,
+
32  scoped_ptr<Movie> moov);
+
33  virtual ~SingleSegmentSegmenter();
+
34 
+
37  virtual bool GetInitRange(size_t* offset, size_t* size) OVERRIDE;
+
38  virtual bool GetIndexRange(size_t* offset, size_t* size) OVERRIDE;
+
40 
+
41  private:
+
42  // Segmenter implementation overrides.
+
43  virtual Status DoInitialize() OVERRIDE;
+
44  virtual Status DoFinalize() OVERRIDE;
+
45  virtual Status DoFinalizeSegment() OVERRIDE;
+
46 
+
47  scoped_ptr<SegmentIndex> vod_sidx_;
+
48  std::string temp_file_name_;
+
49  scoped_ptr<File, FileCloser> temp_file_;
+
50 
+
51  DISALLOW_COPY_AND_ASSIGN(SingleSegmentSegmenter);
+
52 };
+
53 
+
54 } // namespace mp4
+
55 } // namespace media
+
56 } // namespace edash_packager
+
57 
+
58 #endif // MEDIA_FORMATS_MP4_SINGLE_SEGMENT_SEGMENTER_H_
+ + + +
virtual bool GetInitRange(size_t *offset, size_t *size) OVERRIDE
+
virtual bool GetIndexRange(size_t *offset, size_t *size) OVERRIDE
+
This structure contains the list of configuration options for Muxer.
Definition: muxer_options.h:18
+
+ + + + diff --git a/sdk/dd/d30/wvm__media__parser_8cc_source.html b/sdk/dd/d30/wvm__media__parser_8cc_source.html new file mode 100644 index 0000000000..99ae34ce32 --- /dev/null +++ b/sdk/dd/d30/wvm__media__parser_8cc_source.html @@ -0,0 +1,1274 @@ + + + + + + +DASH Media Packaging SDK: media/formats/wvm/wvm_media_parser.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
wvm_media_parser.cc
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/formats/wvm/wvm_media_parser.h"
+
6 
+
7 #include <map>
+
8 #include <sstream>
+
9 #include <vector>
+
10 
+
11 #include "packager/base/stl_util.h"
+
12 #include "packager/base/strings/string_number_conversions.h"
+
13 #include "packager/media/base/aes_encryptor.h"
+
14 #include "packager/media/base/audio_stream_info.h"
+
15 #include "packager/media/base/key_source.h"
+
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"
+
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"
+
23 
+
24 #define HAS_HEADER_EXTENSION(x) ((x != 0xBC) && (x != 0xBE) && (x != 0xBF) \
+
25  && (x != 0xF0) && (x != 0xF2) && (x != 0xF8) \
+
26  && (x != 0xFF))
+
27 
+
28 namespace {
+
29 const uint32_t kMpeg2ClockRate = 90000;
+
30 const uint32_t kPesOptPts = 0x80;
+
31 const uint32_t kPesOptDts = 0x40;
+
32 const uint32_t kPesOptAlign = 0x04;
+
33 const uint32_t kPsmStreamId = 0xBC;
+
34 const uint32_t kPaddingStreamId = 0xBE;
+
35 const uint32_t kIndexMagic = 0x49444d69;
+
36 const uint32_t kIndexStreamId = 0xBF; // private_stream_2
+
37 const uint32_t kIndexVersion4HeaderSize = 12;
+
38 const uint32_t kEcmStreamId = 0xF0;
+
39 const uint32_t kV2MetadataStreamId = 0xF1; // EMM_stream
+
40 const uint32_t kScramblingBitsMask = 0x30;
+
41 const uint32_t kStartCode1 = 0x00;
+
42 const uint32_t kStartCode2 = 0x00;
+
43 const uint32_t kStartCode3 = 0x01;
+
44 const uint32_t kStartCode4Pack = 0xBA;
+
45 const uint32_t kStartCode4System = 0xBB;
+
46 const uint32_t kStartCode4ProgramEnd = 0xB9;
+
47 const uint32_t kPesStreamIdVideoMask = 0xF0;
+
48 const uint32_t kPesStreamIdVideo = 0xE0;
+
49 const uint32_t kPesStreamIdAudioMask = 0xE0;
+
50 const uint32_t kPesStreamIdAudio = 0xC0;
+
51 const uint32_t kVersion4 = 4;
+
52 const int kAdtsHeaderMinSize = 7;
+
53 const uint8_t kAacSampleSizeBits = 16;
+
54 // Applies to all video streams.
+
55 const uint8_t kNaluLengthSize = 4; // unit is bytes.
+
56 // Placeholder sampling frequency for all audio streams, which
+
57 // will be overwritten after filter parsing.
+
58 const uint32_t kDefaultSamplingFrequency = 100;
+
59 const uint16_t kEcmSizeBytes = 80;
+
60 const uint32_t kInitializationVectorSizeBytes = 16;
+
61 // ECM fields for processing.
+
62 const uint32_t kEcmContentKeySizeBytes = 16;
+
63 const uint32_t kEcmDCPFlagsSizeBytes = 3;
+
64 const uint32_t kEcmCCIFlagsSizeBytes = 1;
+
65 const uint32_t kEcmFlagsSizeBytes =
+
66  kEcmCCIFlagsSizeBytes + kEcmDCPFlagsSizeBytes;
+
67 const uint32_t kEcmPaddingSizeBytes = 12;
+
68 const uint32_t kAssetKeySizeBytes = 16;
+
69 // Default audio and video PES stream IDs.
+
70 const uint8_t kDefaultAudioStreamId = kPesStreamIdAudio;
+
71 const uint8_t kDefaultVideoStreamId = kPesStreamIdVideo;
+
72 
+
73 enum Type {
+
74  Type_void = 0,
+
75  Type_uint8 = 1,
+
76  Type_int8 = 2,
+
77  Type_uint16 = 3,
+
78  Type_int16 = 4,
+
79  Type_uint32 = 5,
+
80  Type_int32 = 6,
+
81  Type_uint64 = 7,
+
82  Type_int64 = 8,
+
83  Type_string = 9,
+
84  Type_BinaryData = 10
+
85 };
+
86 } // namespace
+
87 
+
88 namespace edash_packager {
+
89 namespace media {
+
90 namespace wvm {
+
91 
+
92 WvmMediaParser::WvmMediaParser()
+
93  : is_initialized_(false),
+
94  parse_state_(StartCode1),
+
95  is_psm_needed_(true),
+
96  skip_bytes_(0),
+
97  metadata_is_complete_(false),
+
98  current_program_id_(0),
+
99  pes_stream_id_(0),
+
100  prev_pes_stream_id_(0),
+
101  pes_packet_bytes_(0),
+
102  pes_flags_1_(0),
+
103  pes_flags_2_(0),
+
104  prev_pes_flags_1_(0),
+
105  pes_header_data_bytes_(0),
+
106  timestamp_(0),
+
107  pts_(0),
+
108  dts_(0),
+
109  index_program_id_(0),
+
110  media_sample_(NULL),
+
111  crypto_unit_start_pos_(0),
+
112  stream_id_count_(0),
+
113  decryption_key_source_(NULL) {
+
114 }
+
115 
+
116 WvmMediaParser::~WvmMediaParser() {}
+
117 
+
118 void WvmMediaParser::Init(const InitCB& init_cb,
+
119  const NewSampleCB& new_sample_cb,
+
120  KeySource* decryption_key_source) {
+
121  DCHECK(!is_initialized_);
+
122  DCHECK(!init_cb.is_null());
+
123  DCHECK(!new_sample_cb.is_null());
+
124  decryption_key_source_ = decryption_key_source;
+
125  init_cb_ = init_cb;
+
126  new_sample_cb_ = new_sample_cb;
+
127 }
+
128 
+
129 bool WvmMediaParser::Parse(const uint8_t* buf, int size) {
+
130  uint32_t num_bytes, prev_size;
+
131  num_bytes = prev_size = 0;
+
132  uint8_t* read_ptr = (uint8_t*)(&buf[0]);
+
133  uint8_t* end = read_ptr + size;
+
134 
+
135  while (read_ptr < end) {
+
136  switch(parse_state_) {
+
137  case StartCode1:
+
138  if (*read_ptr == kStartCode1) {
+
139  parse_state_ = StartCode2;
+
140  }
+
141  break;
+
142  case StartCode2:
+
143  if (*read_ptr == kStartCode2) {
+
144  parse_state_ = StartCode3;
+
145  } else {
+
146  parse_state_ = StartCode1;
+
147  }
+
148  break;
+
149  case StartCode3:
+
150  if (*read_ptr == kStartCode3) {
+
151  parse_state_ = StartCode4;
+
152  } else {
+
153  parse_state_ = StartCode1;
+
154  }
+
155  break;
+
156  case StartCode4:
+
157  switch (*read_ptr) {
+
158  case kStartCode4Pack:
+
159  parse_state_ = PackHeader1;
+
160  break;
+
161  case kStartCode4System:
+
162  parse_state_ = SystemHeader1;
+
163  break;
+
164  case kStartCode4ProgramEnd:
+
165  parse_state_ = ProgramEnd;
+
166  continue;
+
167  default:
+
168  parse_state_ = PesStreamId;
+
169  continue;
+
170  }
+
171  break;
+
172  case PackHeader1:
+
173  parse_state_ = PackHeader2;
+
174  break;
+
175  case PackHeader2:
+
176  parse_state_ = PackHeader3;
+
177  break;
+
178  case PackHeader3:
+
179  parse_state_ = PackHeader4;
+
180  break;
+
181  case PackHeader4:
+
182  parse_state_ = PackHeader5;
+
183  break;
+
184  case PackHeader5:
+
185  parse_state_ = PackHeader6;
+
186  break;
+
187  case PackHeader6:
+
188  parse_state_ = PackHeader7;
+
189  break;
+
190  case PackHeader7:
+
191  parse_state_ = PackHeader8;
+
192  break;
+
193  case PackHeader8:
+
194  parse_state_ = PackHeader9;
+
195  break;
+
196  case PackHeader9:
+
197  parse_state_ = PackHeader10;
+
198  break;
+
199  case PackHeader10:
+
200  skip_bytes_ = *read_ptr & 0x07;
+
201  parse_state_ = PackHeaderStuffingSkip;
+
202  break;
+
203  case SystemHeader1:
+
204  skip_bytes_ = *read_ptr;
+
205  skip_bytes_ <<= 8;
+
206  parse_state_ = SystemHeader2;
+
207  break;
+
208  case SystemHeader2:
+
209  skip_bytes_ |= *read_ptr;
+
210  parse_state_ = SystemHeaderSkip;
+
211  break;
+
212  case PackHeaderStuffingSkip:
+
213  if ((end - read_ptr) >= (int32_t)skip_bytes_) {
+
214  read_ptr += skip_bytes_;
+
215  skip_bytes_ = 0;
+
216  parse_state_ = StartCode1;
+
217  } else {
+
218  skip_bytes_ -= (end - read_ptr);
+
219  read_ptr = end;
+
220  }
+
221  continue;
+
222  case SystemHeaderSkip:
+
223  if ((end - read_ptr) >= (int32_t)skip_bytes_) {
+
224  read_ptr += skip_bytes_;
+
225  skip_bytes_ = 0;
+
226  parse_state_ = StartCode1;
+
227  } else {
+
228  uint32_t remaining_size = end - read_ptr;
+
229  skip_bytes_ -= remaining_size;
+
230  read_ptr = end;
+
231  }
+
232  continue;
+
233  case PesStreamId:
+
234  pes_stream_id_ = *read_ptr;
+
235  if (!metadata_is_complete_ &&
+
236  (pes_stream_id_ != kPsmStreamId) &&
+
237  (pes_stream_id_ != kIndexStreamId) &&
+
238  (pes_stream_id_ != kEcmStreamId) &&
+
239  (pes_stream_id_ != kV2MetadataStreamId) &&
+
240  (pes_stream_id_ != kPaddingStreamId)) {
+
241  metadata_is_complete_ = true;
+
242  }
+
243  parse_state_ = PesPacketLength1;
+
244  break;
+
245  case PesPacketLength1:
+
246  pes_packet_bytes_ = *read_ptr;
+
247  pes_packet_bytes_ <<= 8;
+
248  parse_state_ = PesPacketLength2;
+
249  break;
+
250  case PesPacketLength2:
+
251  pes_packet_bytes_ |= *read_ptr;
+
252  if (HAS_HEADER_EXTENSION(pes_stream_id_)) {
+
253  parse_state_ = PesExtension1;
+
254  } else {
+
255  pes_flags_1_ = pes_flags_2_ = 0;
+
256  pes_header_data_bytes_ = 0;
+
257  parse_state_ = PesPayload;
+
258  }
+
259  break;
+
260  case PesExtension1:
+
261  prev_pes_flags_1_ = pes_flags_1_;
+
262  pes_flags_1_ = *read_ptr;
+
263  *read_ptr &= ~kScramblingBitsMask;
+
264  --pes_packet_bytes_;
+
265  parse_state_ = PesExtension2;
+
266  break;
+
267  case PesExtension2:
+
268  pes_flags_2_ = *read_ptr;
+
269  --pes_packet_bytes_;
+
270  parse_state_ = PesExtension3;
+
271  break;
+
272  case PesExtension3:
+
273  pes_header_data_bytes_ = *read_ptr;
+
274  --pes_packet_bytes_;
+
275  if (pes_flags_2_ & kPesOptPts) {
+
276  parse_state_ = Pts1;
+
277  } else {
+
278  parse_state_ = PesHeaderData;
+
279  }
+
280  break;
+
281  case Pts1:
+
282  timestamp_ = (*read_ptr & 0x0E);
+
283  --pes_header_data_bytes_;
+
284  --pes_packet_bytes_;
+
285  parse_state_ = Pts2;
+
286  break;
+
287  case Pts2:
+
288  timestamp_ <<= 7;
+
289  timestamp_ |= *read_ptr;
+
290  --pes_header_data_bytes_;
+
291  --pes_packet_bytes_;
+
292  parse_state_ = Pts3;
+
293  break;
+
294  case Pts3:
+
295  timestamp_ <<= 7;
+
296  timestamp_ |= *read_ptr >> 1;
+
297  --pes_header_data_bytes_;
+
298  --pes_packet_bytes_;
+
299  parse_state_ = Pts4;
+
300  break;
+
301  case Pts4:
+
302  timestamp_ <<= 8;
+
303  timestamp_ |= *read_ptr;
+
304  --pes_header_data_bytes_;
+
305  --pes_packet_bytes_;
+
306  parse_state_ = Pts5;
+
307  break;
+
308  case Pts5:
+
309  timestamp_ <<= 7;
+
310  timestamp_ |= *read_ptr >> 1;
+
311  pts_ = timestamp_;
+
312  --pes_header_data_bytes_;
+
313  --pes_packet_bytes_;
+
314  if (pes_flags_2_ & kPesOptDts) {
+
315  parse_state_ = Dts1;
+
316  } else {
+
317  dts_ = pts_;
+
318  parse_state_ = PesHeaderData;
+
319  }
+
320  break;
+
321  case Dts1:
+
322  timestamp_ = (*read_ptr & 0x0E);
+
323  --pes_header_data_bytes_;
+
324  --pes_packet_bytes_;
+
325  parse_state_ = Dts2;
+
326  break;
+
327  case Dts2:
+
328  timestamp_ <<= 7;
+
329  timestamp_ |= *read_ptr;
+
330  --pes_header_data_bytes_;
+
331  --pes_packet_bytes_;
+
332  parse_state_ = Dts3;
+
333  break;
+
334  case Dts3:
+
335  timestamp_ <<= 7;
+
336  timestamp_ |= *read_ptr >> 1;
+
337  --pes_header_data_bytes_;
+
338  --pes_packet_bytes_;
+
339  parse_state_ = Dts4;
+
340  break;
+
341  case Dts4:
+
342  timestamp_ <<= 8;
+
343  timestamp_ |= *read_ptr;
+
344  --pes_header_data_bytes_;
+
345  --pes_packet_bytes_;
+
346  parse_state_ = Dts5;
+
347  break;
+
348  case Dts5:
+
349  timestamp_ <<= 7;
+
350  timestamp_ |= *read_ptr >> 1;
+
351  dts_ = timestamp_;
+
352  --pes_header_data_bytes_;
+
353  --pes_packet_bytes_;
+
354  parse_state_ = PesHeaderData;
+
355  break;
+
356  case PesHeaderData:
+
357  num_bytes = end - read_ptr;
+
358  if (num_bytes >= pes_header_data_bytes_) {
+
359  num_bytes = pes_header_data_bytes_;
+
360  parse_state_ = PesPayload;
+
361  }
+
362  pes_header_data_bytes_ -= num_bytes;
+
363  pes_packet_bytes_ -= num_bytes;
+
364  read_ptr += num_bytes;
+
365  continue;
+
366  case PesPayload:
+
367  switch (pes_stream_id_) {
+
368  case kPsmStreamId:
+
369  psm_data_.clear();
+
370  parse_state_ = PsmPayload;
+
371  continue;
+
372  case kPaddingStreamId:
+
373  parse_state_ = Padding;
+
374  continue;
+
375  case kEcmStreamId:
+
376  ecm_.clear();
+
377  parse_state_ = EcmPayload;
+
378  continue;
+
379  case kIndexStreamId:
+
380  parse_state_ = IndexPayload;
+
381  continue;
+
382  default:
+
383  if (!DemuxNextPes(false)) {
+
384  return false;
+
385  }
+
386  parse_state_ = EsPayload;
+
387  }
+
388  continue;
+
389  case PsmPayload:
+
390  num_bytes = end - read_ptr;
+
391  if (num_bytes >= pes_packet_bytes_) {
+
392  num_bytes = pes_packet_bytes_;
+
393  parse_state_ = StartCode1;
+
394  }
+
395  if (num_bytes > 0) {
+
396  pes_packet_bytes_ -= num_bytes;
+
397  prev_size = psm_data_.size();
+
398  psm_data_.resize(prev_size + num_bytes);
+
399  memcpy(&psm_data_[prev_size], read_ptr, num_bytes);
+
400  }
+
401  read_ptr += num_bytes;
+
402  continue;
+
403  case EcmPayload:
+
404  num_bytes = end - read_ptr;
+
405  if (num_bytes >= pes_packet_bytes_) {
+
406  num_bytes = pes_packet_bytes_;
+
407  parse_state_ = StartCode1;
+
408  }
+
409  if (num_bytes > 0) {
+
410  pes_packet_bytes_ -= num_bytes;
+
411  prev_size = ecm_.size();
+
412  ecm_.resize(prev_size + num_bytes);
+
413  memcpy(&ecm_[prev_size], read_ptr, num_bytes);
+
414  }
+
415  if ((pes_packet_bytes_ == 0) && !ecm_.empty()) {
+
416  if (!ProcessEcm()) {
+
417  return(false);
+
418  }
+
419  }
+
420  read_ptr += num_bytes;
+
421  continue;
+
422  case IndexPayload:
+
423  num_bytes = end - read_ptr;
+
424  if (num_bytes >= pes_packet_bytes_) {
+
425  num_bytes = pes_packet_bytes_;
+
426  parse_state_ = StartCode1;
+
427  }
+
428  if (num_bytes > 0) {
+
429  pes_packet_bytes_ -= num_bytes;
+
430  prev_size = index_data_.size();
+
431  index_data_.resize(prev_size + num_bytes);
+
432  memcpy(&index_data_[prev_size], read_ptr, num_bytes);
+
433  }
+
434  if (pes_packet_bytes_ == 0 && !index_data_.empty()) {
+
435  if (!metadata_is_complete_) {
+
436  if (!ParseIndexEntry()) {
+
437  return false;
+
438  }
+
439  }
+
440  }
+
441  read_ptr += num_bytes;
+
442  continue;
+
443  case EsPayload:
+
444  num_bytes = end - read_ptr;
+
445  if (num_bytes >= pes_packet_bytes_) {
+
446  num_bytes = pes_packet_bytes_;
+
447  parse_state_ = StartCode1;
+
448  }
+
449  pes_packet_bytes_ -= num_bytes;
+
450  if (pes_stream_id_ != kV2MetadataStreamId) {
+
451  sample_data_.resize(sample_data_.size() + num_bytes);
+
452  memcpy(&sample_data_[sample_data_.size() - num_bytes], read_ptr,
+
453  num_bytes);
+
454  }
+
455  prev_pes_stream_id_ = pes_stream_id_;
+
456  read_ptr += num_bytes;
+
457  continue;
+
458  case Padding:
+
459  num_bytes = end - read_ptr;
+
460  if (num_bytes >= pes_packet_bytes_) {
+
461  num_bytes = pes_packet_bytes_;
+
462  parse_state_ = StartCode1;
+
463  }
+
464  pes_packet_bytes_ -= num_bytes;
+
465  read_ptr += num_bytes;
+
466  continue;
+
467  case ProgramEnd:
+
468  parse_state_ = StartCode1;
+
469  metadata_is_complete_ = true;
+
470  if (!DemuxNextPes(true)) {
+
471  return false;
+
472  }
+
473  Flush();
+
474  // Reset.
+
475  dts_ = pts_ = 0;
+
476  parse_state_ = StartCode1;
+
477  prev_media_sample_data_.Reset();
+
478  current_program_id_++;
+
479  ecm_.clear();
+
480  index_data_.clear();
+
481  psm_data_.clear();
+
482  break;
+
483  default:
+
484  break;
+
485  }
+
486  ++read_ptr;
+
487  }
+
488  return true;
+
489 }
+
490 
+
491 bool WvmMediaParser::EmitLastSample(uint32_t stream_id,
+
492  scoped_refptr<MediaSample>& new_sample) {
+
493  std::string key = base::UintToString(current_program_id_)
+
494  .append(":")
+
495  .append(base::UintToString(stream_id));
+
496  std::map<std::string, uint32_t>::iterator it =
+
497  program_demux_stream_map_.find(key);
+
498  if (it == program_demux_stream_map_.end())
+
499  return false;
+
500  return EmitSample(stream_id, (*it).second, new_sample, true);
+
501 }
+
502 
+
503 bool WvmMediaParser::EmitPendingSamples() {
+
504  // Emit queued samples which were built when not initialized.
+
505  while (!media_sample_queue_.empty()) {
+
506  DemuxStreamIdMediaSample& demux_stream_media_sample =
+
507  media_sample_queue_.front();
+
508  if (!EmitSample(demux_stream_media_sample.parsed_audio_or_video_stream_id,
+
509  demux_stream_media_sample.demux_stream_id,
+
510  demux_stream_media_sample.media_sample,
+
511  false)) {
+
512  return false;
+
513  }
+
514  media_sample_queue_.pop_front();
+
515  }
+
516  return true;
+
517 }
+
518 
+
519 void WvmMediaParser::Flush() {
+
520  // Flush the last audio and video sample for current program.
+
521  // Reset the streamID when successfully emitted.
+
522  if (prev_media_sample_data_.audio_sample != NULL) {
+
523  if (!EmitLastSample(prev_pes_stream_id_,
+
524  prev_media_sample_data_.audio_sample)) {
+
525  LOG(ERROR) << "Did not emit last sample for audio stream with ID = "
+
526  << prev_pes_stream_id_;
+
527  }
+
528  }
+
529  if (prev_media_sample_data_.video_sample != NULL) {
+
530  if (!EmitLastSample(prev_pes_stream_id_,
+
531  prev_media_sample_data_.video_sample)) {
+
532  LOG(ERROR) << "Did not emit last sample for video stream with ID = "
+
533  << prev_pes_stream_id_;
+
534  }
+
535  }
+
536 }
+
537 
+
538 bool WvmMediaParser::ParseIndexEntry() {
+
539  // Do not parse index entry at the beginning of any track *after* the first
+
540  // track.
+
541  if (current_program_id_ > 0) {
+
542  return true;
+
543  }
+
544  uint32_t index_size = 0;
+
545  if (index_data_.size() < kIndexVersion4HeaderSize) {
+
546  return false;
+
547  }
+
548 
+
549  const uint8_t* read_ptr = vector_as_array(&index_data_);
+
550  if (ntohlFromBuffer(read_ptr) != kIndexMagic) {
+
551  index_data_.clear();
+
552  return false;
+
553  }
+
554  read_ptr += 4;
+
555 
+
556  uint32_t version = ntohlFromBuffer(read_ptr);
+
557  read_ptr += 4;
+
558  if (version == kVersion4) {
+
559  index_size = kIndexVersion4HeaderSize + ntohlFromBuffer(read_ptr);
+
560  if (index_data_.size() < index_size) {
+
561  // We do not yet have the full index. Keep accumulating index data.
+
562  return true;
+
563  }
+
564  read_ptr += sizeof(uint32_t);
+
565 
+
566  // Index metadata
+
567  uint32_t index_metadata_max_size = index_size - kIndexVersion4HeaderSize;
+
568  if (index_metadata_max_size < sizeof(uint8_t)) {
+
569  index_data_.clear();
+
570  return false;
+
571  }
+
572 
+
573  uint64_t track_duration = 0;
+
574  int16_t trick_play_rate = 0;
+
575  uint32_t sampling_frequency = kDefaultSamplingFrequency;
+
576  uint32_t time_scale = kMpeg2ClockRate;
+
577  uint16_t video_width = 0;
+
578  uint16_t video_height = 0;
+
579  uint32_t pixel_width = 0;
+
580  uint32_t pixel_height = 0;
+
581  uint8_t nalu_length_size = kNaluLengthSize;
+
582  uint8_t num_channels = 0;
+
583  int audio_pes_stream_id = 0;
+
584  int video_pes_stream_id = 0;
+
585  bool has_video = false;
+
586  bool has_audio = false;
+
587  std::vector<uint8_t> audio_codec_config;
+
588  std::vector<uint8_t> video_codec_config;
+
589  uint8_t num_index_entries = *read_ptr;
+
590  ++read_ptr;
+
591  --index_metadata_max_size;
+
592 
+
593  for (uint8_t idx = 0; idx < num_index_entries; ++idx) {
+
594  if (index_metadata_max_size < (2 * sizeof(uint8_t)) + sizeof(uint32_t)) {
+
595  return false;
+
596  }
+
597  uint8_t tag = *read_ptr;
+
598  ++read_ptr;
+
599  uint8_t type = *read_ptr;
+
600  ++read_ptr;
+
601  uint32_t length = ntohlFromBuffer(read_ptr);
+
602  read_ptr += sizeof(uint32_t);
+
603  index_metadata_max_size -= (2 * sizeof(uint8_t)) + sizeof(uint32_t);
+
604  if (index_metadata_max_size < length) {
+
605  return false;
+
606  }
+
607  int64_t value = 0;
+
608  Tag tagtype = Unset;
+
609  std::vector<uint8_t> binary_data;
+
610  switch (Type(type)) {
+
611  case Type_uint8:
+
612  if (length == sizeof(uint8_t)) {
+
613  tagtype = GetTag(tag, length, read_ptr, &value);
+
614  } else {
+
615  return false;
+
616  }
+
617  break;
+
618  case Type_int8:
+
619  if (length == sizeof(int8_t)) {
+
620  tagtype = GetTag(tag, length, read_ptr, &value);
+
621  } else {
+
622  return false;
+
623  }
+
624  break;
+
625  case Type_uint16:
+
626  if (length == sizeof(uint16_t)) {
+
627  tagtype = GetTag(tag, length, read_ptr, &value);
+
628  } else {
+
629  return false;
+
630  }
+
631  break;
+
632  case Type_int16:
+
633  if (length == sizeof(int16_t)) {
+
634  tagtype = GetTag(tag, length, read_ptr, &value);
+
635  } else {
+
636  return false;
+
637  }
+
638  break;
+
639  case Type_uint32:
+
640  if (length == sizeof(uint32_t)) {
+
641  tagtype = GetTag(tag, length, read_ptr, &value);
+
642  } else {
+
643  return false;
+
644  }
+
645  break;
+
646  case Type_int32:
+
647  if (length == sizeof(int32_t)) {
+
648  tagtype = GetTag(tag, length, read_ptr, &value);
+
649  } else {
+
650  return false;
+
651  }
+
652  break;
+
653  case Type_uint64:
+
654  if (length == sizeof(uint64_t)) {
+
655  tagtype = GetTag(tag, length, read_ptr, &value);
+
656  } else {
+
657  return false;
+
658  }
+
659  break;
+
660  case Type_int64:
+
661  if (length == sizeof(int64_t)) {
+
662  tagtype = GetTag(tag, length, read_ptr, &value);
+
663  } else {
+
664  return false;
+
665  }
+
666  break;
+
667  case Type_string:
+
668  case Type_BinaryData:
+
669  binary_data.assign(read_ptr, read_ptr + length);
+
670  tagtype = Tag(tag);
+
671  break;
+
672  default:
+
673  break;
+
674  }
+
675 
+
676  switch (tagtype) {
+
677  case TrackDuration:
+
678  track_duration = value;
+
679  break;
+
680  case TrackTrickPlayRate:
+
681  trick_play_rate = value;
+
682  break;
+
683  case VideoStreamId:
+
684  video_pes_stream_id = value;
+
685  break;
+
686  case AudioStreamId:
+
687  audio_pes_stream_id = value;
+
688  break;
+
689  case VideoWidth:
+
690  video_width = (uint16_t)value;
+
691  break;
+
692  case VideoHeight:
+
693  video_height = (uint16_t)value;
+
694  break;
+
695  case AudioNumChannels:
+
696  num_channels = (uint8_t)value;
+
697  break;
+
698  case VideoType:
+
699  has_video = true;
+
700  break;
+
701  case AudioType:
+
702  has_audio = true;
+
703  break;
+
704  case VideoPixelWidth:
+
705  pixel_width = static_cast<uint32_t>(value);
+
706  break;
+
707  case VideoPixelHeight:
+
708  pixel_height = static_cast<uint32_t>(value);
+
709  break;
+
710  case Audio_EsDescriptor: {
+
711  mp4::ESDescriptor descriptor;
+
712  if (!descriptor.Parse(binary_data)) {
+
713  LOG(ERROR) <<
+
714  "Could not extract AudioSpecificConfig from ES_Descriptor";
+
715  return false;
+
716  }
+
717  audio_codec_config = descriptor.decoder_specific_info();
+
718  break;
+
719  }
+
720  case Audio_EC3SpecificData:
+
721  case Audio_DtsSpecificData:
+
722  case Audio_AC3SpecificData:
+
723  LOG(ERROR) << "Audio type not supported.";
+
724  return false;
+
725  case AVCDecoderConfigurationRecord:
+
726  video_codec_config = binary_data;
+
727  break;
+
728  default:
+
729  break;
+
730  }
+
731 
+
732  read_ptr += length;
+
733  index_metadata_max_size -= length;
+
734  }
+
735  // End Index metadata
+
736  index_size = read_ptr - vector_as_array(&index_data_);
+
737 
+
738  if (has_video) {
+
739  VideoCodec video_codec = kCodecH264;
+
740  stream_infos_.push_back(new VideoStreamInfo(
+
741  stream_id_count_, time_scale, track_duration, video_codec,
+
742  std::string(), std::string(), video_width, video_height,
+
743  pixel_width, pixel_height, trick_play_rate, nalu_length_size,
+
744  vector_as_array(&video_codec_config), video_codec_config.size(),
+
745  true));
+
746  program_demux_stream_map_[base::UintToString(index_program_id_) + ":" +
+
747  base::UintToString(video_pes_stream_id ?
+
748  video_pes_stream_id :
+
749  kDefaultVideoStreamId)] =
+
750  stream_id_count_++;
+
751  }
+
752  if (has_audio) {
+
753  AudioCodec audio_codec = kCodecAAC;
+
754  stream_infos_.push_back(new AudioStreamInfo(
+
755  stream_id_count_, time_scale, track_duration, audio_codec,
+
756  std::string(), std::string(), kAacSampleSizeBits, num_channels,
+
757  sampling_frequency, vector_as_array(&audio_codec_config),
+
758  audio_codec_config.size(), true));
+
759  program_demux_stream_map_[base::UintToString(index_program_id_) + ":" +
+
760  base::UintToString(audio_pes_stream_id ?
+
761  audio_pes_stream_id :
+
762  kDefaultAudioStreamId)] =
+
763  stream_id_count_++;
+
764  }
+
765  }
+
766 
+
767  index_program_id_++;
+
768  index_data_.clear();
+
769  return true;
+
770 }
+
771 
+
772 bool WvmMediaParser::DemuxNextPes(bool is_program_end) {
+
773  bool output_encrypted_sample = false;
+
774  if (!sample_data_.empty() && (prev_pes_flags_1_ & kScramblingBitsMask)) {
+
775  // Decrypt crypto unit.
+
776  if (!content_decryptor_) {
+
777  output_encrypted_sample = true;
+
778  } else {
+
779  content_decryptor_->Decrypt(&sample_data_[crypto_unit_start_pos_],
+
780  sample_data_.size() - crypto_unit_start_pos_,
+
781  &sample_data_[crypto_unit_start_pos_]);
+
782  }
+
783  }
+
784  // Demux media sample if we are at program end or if we are not at a
+
785  // continuation PES.
+
786  if ((pes_flags_2_ & kPesOptPts) || is_program_end) {
+
787  if (!sample_data_.empty()) {
+
788  if (!Output(output_encrypted_sample)) {
+
789  return false;
+
790  }
+
791  }
+
792  StartMediaSampleDemux();
+
793  }
+
794 
+
795  crypto_unit_start_pos_ = sample_data_.size();
+
796  return true;
+
797 }
+
798 
+
799 void WvmMediaParser::StartMediaSampleDemux() {
+
800  bool is_key_frame = ((pes_flags_1_ & kPesOptAlign) != 0);
+
801  media_sample_ = MediaSample::CreateEmptyMediaSample();
+
802  media_sample_->set_dts(dts_);
+
803  media_sample_->set_pts(pts_);
+
804  media_sample_->set_is_key_frame(is_key_frame);
+
805 
+
806  sample_data_.clear();
+
807 }
+
808 
+
809 bool WvmMediaParser::Output(bool output_encrypted_sample) {
+
810  if (output_encrypted_sample) {
+
811  media_sample_->set_data(vector_as_array(&sample_data_),
+
812  sample_data_.size());
+
813  media_sample_->set_is_encrypted(true);
+
814  } else {
+
815  if ((prev_pes_stream_id_ & kPesStreamIdVideoMask) == kPesStreamIdVideo) {
+
816  // Convert video stream to unit stream and get config.
+
817  std::vector<uint8_t> nal_unit_stream;
+
818  if (!byte_to_unit_stream_converter_.ConvertByteStreamToNalUnitStream(
+
819  vector_as_array(&sample_data_), sample_data_.size(),
+
820  &nal_unit_stream)) {
+
821  LOG(ERROR) << "Could not convert h.264 byte stream sample";
+
822  return false;
+
823  }
+
824  media_sample_->set_data(nal_unit_stream.data(), nal_unit_stream.size());
+
825  if (!is_initialized_) {
+
826  // Set extra data for video stream from AVC Decoder Config Record.
+
827  // Also, set codec string from the AVC Decoder Config Record.
+
828  std::vector<uint8_t> decoder_config_record;
+
829  byte_to_unit_stream_converter_.GetAVCDecoderConfigurationRecord(
+
830  &decoder_config_record);
+
831  for (uint32_t i = 0; i < stream_infos_.size(); i++) {
+
832  if (stream_infos_[i]->stream_type() == media::kStreamVideo &&
+
833  stream_infos_[i]->codec_string().empty()) {
+
834  const std::vector<uint8_t>* stream_config;
+
835  if (stream_infos_[i]->extra_data().empty()) {
+
836  // Decoder config record not available for stream. Use the one
+
837  // computed from the first video stream.
+
838  stream_infos_[i]->set_extra_data(decoder_config_record);
+
839  stream_config = &decoder_config_record;
+
840  } else {
+
841  // Use stream-specific config record.
+
842  stream_config = &stream_infos_[i]->extra_data();
+
843  }
+
844  DCHECK(stream_config);
+
845  stream_infos_[i]->set_codec_string(VideoStreamInfo::GetCodecString(
+
846  kCodecH264, (*stream_config)[1], (*stream_config)[2],
+
847  (*stream_config)[3]));
+
848 
+
849  VideoStreamInfo* video_stream_info =
+
850  reinterpret_cast<VideoStreamInfo*>(stream_infos_[i].get());
+
851  uint32_t coded_width = 0;
+
852  uint32_t coded_height = 0;
+
853  uint32_t pixel_width = 0;
+
854  uint32_t pixel_height = 0;
+
855  if (!ExtractResolutionFromDecoderConfig(
+
856  vector_as_array(stream_config), stream_config->size(),
+
857  &coded_width, &coded_height, &pixel_width, &pixel_height)) {
+
858  LOG(WARNING) << "Failed to parse AVCDecoderConfigurationRecord. "
+
859  "Using computed configuration record instead.";
+
860  video_stream_info->set_extra_data(decoder_config_record);
+
861  if (!ExtractResolutionFromDecoderConfig(
+
862  vector_as_array(&decoder_config_record),
+
863  decoder_config_record.size(),
+
864  &coded_width, &coded_height, &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  }
+
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
+
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/sdk/dd/d36/classedash__packager_1_1media_1_1MediaSample-members.html b/sdk/dd/d36/classedash__packager_1_1media_1_1MediaSample-members.html new file mode 100644 index 0000000000..47568faed2 --- /dev/null +++ b/sdk/dd/d36/classedash__packager_1_1media_1_1MediaSample-members.html @@ -0,0 +1,127 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::MediaSample Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + + +
base::RefCountedThreadSafe< MediaSample > (defined in edash_packager::media::MediaSample)edash_packager::media::MediaSamplefriend
CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)edash_packager::media::MediaSamplestatic
CopyFrom(const uint8_t *data, size_t size, const uint8_t *side_data, size_t side_data_size, bool is_key_frame)edash_packager::media::MediaSamplestatic
CreateEmptyMediaSample()edash_packager::media::MediaSamplestatic
CreateEOSBuffer()edash_packager::media::MediaSamplestatic
data() const (defined in edash_packager::media::MediaSample)edash_packager::media::MediaSampleinline
data_size() const (defined in edash_packager::media::MediaSample)edash_packager::media::MediaSampleinline
dts() const (defined in edash_packager::media::MediaSample)edash_packager::media::MediaSampleinline
duration() const (defined in edash_packager::media::MediaSample)edash_packager::media::MediaSampleinline
end_of_stream() const (defined in edash_packager::media::MediaSample)edash_packager::media::MediaSampleinline
is_encrypted() const (defined in edash_packager::media::MediaSample)edash_packager::media::MediaSampleinline
is_key_frame() const (defined in edash_packager::media::MediaSample)edash_packager::media::MediaSampleinline
pts() const (defined in edash_packager::media::MediaSample)edash_packager::media::MediaSampleinline
set_data(const uint8_t *data, const size_t data_size) (defined in edash_packager::media::MediaSample)edash_packager::media::MediaSampleinline
set_dts(int64_t dts) (defined in edash_packager::media::MediaSample)edash_packager::media::MediaSampleinline
set_duration(int64_t duration) (defined in edash_packager::media::MediaSample)edash_packager::media::MediaSampleinline
set_is_encrypted(bool value) (defined in edash_packager::media::MediaSample)edash_packager::media::MediaSampleinline
set_is_key_frame(bool value) (defined in edash_packager::media::MediaSample)edash_packager::media::MediaSampleinline
set_pts(int64_t pts) (defined in edash_packager::media::MediaSample)edash_packager::media::MediaSampleinline
side_data() const (defined in edash_packager::media::MediaSample)edash_packager::media::MediaSampleinline
side_data_size() const (defined in edash_packager::media::MediaSample)edash_packager::media::MediaSampleinline
ToString() const edash_packager::media::MediaSample
writable_data() (defined in edash_packager::media::MediaSample)edash_packager::media::MediaSampleinline
+ + + + diff --git a/sdk/dd/d41/structedash__packager_1_1media_1_1H264NALU.html b/sdk/dd/d41/structedash__packager_1_1media_1_1H264NALU.html new file mode 100644 index 0000000000..ff6ee6c98b --- /dev/null +++ b/sdk/dd/d41/structedash__packager_1_1media_1_1H264NALU.html @@ -0,0 +1,147 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::H264NALU Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::H264NALU Struct Reference
+
+
+ + + + +

+Public Types

enum  Type {
+  kUnspecified = 0, +kNonIDRSlice = 1, +kIDRSlice = 5, +kSEIMessage = 6, +
+  kSPS = 7, +kPPS = 8, +kAUD = 9, +kEOSeq = 10, +
+  kEOStream = 11, +kCodedSliceExtension = 20 +
+ }
 
+ + + + + + + + + +

+Public Attributes

+const uint8_t * data
 
+off_t size
 
+int nal_ref_idc
 
+int nal_unit_type
 
+

Detailed Description

+
+

Definition at line 51 of file h264_parser.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/dd/d44/structedash__packager_1_1media_1_1mp4_1_1SegmentReference-members.html b/sdk/dd/d44/structedash__packager_1_1media_1_1mp4_1_1SegmentReference-members.html new file mode 100644 index 0000000000..a5943dd354 --- /dev/null +++ b/sdk/dd/d44/structedash__packager_1_1media_1_1mp4_1_1SegmentReference-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::SegmentReference Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
earliest_presentation_time (defined in edash_packager::media::mp4::SegmentReference)edash_packager::media::mp4::SegmentReference
reference_type (defined in edash_packager::media::mp4::SegmentReference)edash_packager::media::mp4::SegmentReference
referenced_size (defined in edash_packager::media::mp4::SegmentReference)edash_packager::media::mp4::SegmentReference
sap_delta_time (defined in edash_packager::media::mp4::SegmentReference)edash_packager::media::mp4::SegmentReference
sap_type (defined in edash_packager::media::mp4::SegmentReference)edash_packager::media::mp4::SegmentReference
SAPType enum name (defined in edash_packager::media::mp4::SegmentReference)edash_packager::media::mp4::SegmentReference
starts_with_sap (defined in edash_packager::media::mp4::SegmentReference)edash_packager::media::mp4::SegmentReference
subsegment_duration (defined in edash_packager::media::mp4::SegmentReference)edash_packager::media::mp4::SegmentReference
Type1 enum value (defined in edash_packager::media::mp4::SegmentReference)edash_packager::media::mp4::SegmentReference
Type2 enum value (defined in edash_packager::media::mp4::SegmentReference)edash_packager::media::mp4::SegmentReference
Type3 enum value (defined in edash_packager::media::mp4::SegmentReference)edash_packager::media::mp4::SegmentReference
Type4 enum value (defined in edash_packager::media::mp4::SegmentReference)edash_packager::media::mp4::SegmentReference
Type5 enum value (defined in edash_packager::media::mp4::SegmentReference)edash_packager::media::mp4::SegmentReference
Type6 enum value (defined in edash_packager::media::mp4::SegmentReference)edash_packager::media::mp4::SegmentReference
TypeUnknown enum value (defined in edash_packager::media::mp4::SegmentReference)edash_packager::media::mp4::SegmentReference
+ + + + diff --git a/sdk/dd/d4c/structedash__packager_1_1media_1_1mp4_1_1FullBox-members.html b/sdk/dd/d4c/structedash__packager_1_1media_1_1mp4_1_1FullBox-members.html new file mode 100644 index 0000000000..6a965b1ccb --- /dev/null +++ b/sdk/dd/d4c/structedash__packager_1_1media_1_1mp4_1_1FullBox-members.html @@ -0,0 +1,116 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::FullBox Member List
+
+
+ +

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

+ + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const =0 (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxpure virtual
ComputeSize()=0edash_packager::media::mp4::Boxpure virtual
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::FullBoxprotectedvirtual
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
+ + + + diff --git a/sdk/dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html b/sdk/dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html new file mode 100644 index 0000000000..28ca397e04 --- /dev/null +++ b/sdk/dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html @@ -0,0 +1,530 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::BoxBuffer Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::BoxBuffer Class Reference
+
+
+ +

#include <box_buffer.h>

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

+Public Member Functions

 BoxBuffer (BoxReader *reader)
 
 BoxBuffer (BufferWriter *writer)
 
bool Reading () const
 
size_t Pos () const
 
size_t Size () const
 
bool ReadWriteUInt64NBytes (uint64_t *v, size_t num_bytes)
 
+bool ReadWriteInt64NBytes (int64_t *v, size_t num_bytes)
 
+bool ReadWriteVector (std::vector< uint8_t > *vector, size_t count)
 
+bool ReadWriteFourCC (FourCC *fourcc)
 
bool PrepareChildren ()
 
bool ReadWriteChild (Box *box)
 
bool TryReadWriteChild (Box *box)
 
bool IgnoreBytes (size_t num_bytes)
 
BoxReaderreader ()
 
BufferWriterwriter ()
 
Read/write integers of various sizes and signedness.
+bool ReadWriteUInt8 (uint8_t *v)
 
+bool ReadWriteUInt16 (uint16_t *v)
 
+bool ReadWriteUInt32 (uint32_t *v)
 
+bool ReadWriteUInt64 (uint64_t *v)
 
+bool ReadWriteInt16 (int16_t *v)
 
+bool ReadWriteInt32 (int32_t *v)
 
+bool ReadWriteInt64 (int64_t *v)
 
+

Detailed Description

+

Class for MP4 box I/O. Box I/O is symmetric and exclusive, so we can define a single method to do either reading or writing box objects. BoxBuffer wraps either BoxReader for reading or BufferWriter for writing. Thus it is capable of doing either reading or writing, but not both.

+ +

Definition at line 23 of file box_buffer.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
edash_packager::media::mp4::BoxBuffer::BoxBuffer (BoxReaderreader)
+
+inlineexplicit
+
+

Create a reader version of the BoxBuffer.

+
Parameters
+ + +
readershould not be NULL.
+
+
+ +

Definition at line 27 of file box_buffer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
edash_packager::media::mp4::BoxBuffer::BoxBuffer (BufferWriterwriter)
+
+inlineexplicit
+
+

Create a writer version of the BoxBuffer.

+
Parameters
+ + +
writershould not be NULL.
+
+
+ +

Definition at line 32 of file box_buffer.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
bool edash_packager::media::mp4::BoxBuffer::IgnoreBytes (size_t num_bytes)
+
+inline
+
+
Parameters
+ + +
num_bytesspecifies number of bytes to skip in read mode or number of bytes to be padded with zero in write mode.
+
+
+
Returns
true on success, false otherwise.
+ +

Definition at line 167 of file box_buffer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
size_t edash_packager::media::mp4::BoxBuffer::Pos () const
+
+inline
+
+
Returns
Current read/write position. In read mode, this is the current read position. In write mode, it is the same as Size().
+ +

Definition at line 42 of file box_buffer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool edash_packager::media::mp4::BoxBuffer::PrepareChildren ()
+
+inline
+
+

Prepare child boxes for reading/writing.

+
Returns
true on success, false otherwise.
+ +

Definition at line 135 of file box_buffer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
BoxReader* edash_packager::media::mp4::BoxBuffer::reader ()
+
+inline
+
+
Returns
A pointer to the inner reader object.
+ +

Definition at line 176 of file box_buffer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool edash_packager::media::mp4::BoxBuffer::Reading () const
+
+inline
+
+
Returns
true for reader, false for writer.
+ +

Definition at line 38 of file box_buffer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool edash_packager::media::mp4::BoxBuffer::ReadWriteChild (Boxbox)
+
+inline
+
+

Read/write child box.

+
Returns
true on success, false otherwise.
+ +

Definition at line 144 of file box_buffer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::mp4::BoxBuffer::ReadWriteUInt64NBytes (uint64_t * v,
size_t num_bytes 
)
+
+inline
+
+

Read/write the least significant |num_bytes| of |v| from/to the buffer.

+
Parameters
+ + +
num_bytesshould not be larger than sizeof(v), i.e. 8.
+
+
+
Returns
true on success, false otherwise.
+ +

Definition at line 107 of file box_buffer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
size_t edash_packager::media::mp4::BoxBuffer::Size () const
+
+inline
+
+
Returns
Total buffer size. In read mode, it includes data that has already been read or skipped, and will not change. In write mode, it includes all data that has been written, and will change as more data is written.
+ +

Definition at line 52 of file box_buffer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool edash_packager::media::mp4::BoxBuffer::TryReadWriteChild (Boxbox)
+
+inline
+
+

Read/write child box if exists.

+
Returns
true on success, false otherwise.
+ +

Definition at line 155 of file box_buffer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
BufferWriter* edash_packager::media::mp4::BoxBuffer::writer ()
+
+inline
+
+
Returns
A pointer to the inner writer object.
+ +

Definition at line 178 of file box_buffer.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/sdk/dd/d54/widevine__encryption__flags_8h_source.html b/sdk/dd/d54/widevine__encryption__flags_8h_source.html new file mode 100644 index 0000000000..a882c9ecbe --- /dev/null +++ b/sdk/dd/d54/widevine__encryption__flags_8h_source.html @@ -0,0 +1,131 @@ + + + + + + +DASH Media Packaging SDK: app/widevine_encryption_flags.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
widevine_encryption_flags.h
+
+
+
1 // Copyright 2014 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 // Defines command line flags for widevine_encryption.
+
8 
+
9 #ifndef APP_WIDEVINE_ENCRYPTION_FLAGS_H_
+
10 #define APP_WIDEVINE_ENCRYPTION_FLAGS_H_
+
11 
+
12 #include <gflags/gflags.h>
+
13 
+
14 DECLARE_bool(enable_widevine_encryption);
+
15 DECLARE_bool(enable_widevine_decryption);
+
16 DECLARE_string(key_server_url);
+
17 DECLARE_string(content_id);
+
18 DECLARE_string(policy);
+
19 DECLARE_int32(max_sd_pixels);
+
20 DECLARE_string(signer);
+
21 DECLARE_string(aes_signing_key);
+
22 DECLARE_string(aes_signing_iv);
+
23 DECLARE_string(rsa_signing_key_path);
+
24 DECLARE_int32(crypto_period_duration);
+
25 
+
26 namespace edash_packager {
+
27 
+ +
31 
+
32 } // namespace edash_packager
+
33 
+
34 #endif // APP_WIDEVINE_ENCRYPTION_FLAGS_H_
+ +
+ + + + diff --git a/sdk/dd/d67/h264__byte__to__unit__stream__converter_8cc_source.html b/sdk/dd/d67/h264__byte__to__unit__stream__converter_8cc_source.html new file mode 100644 index 0000000000..fb5060fe20 --- /dev/null +++ b/sdk/dd/d67/h264__byte__to__unit__stream__converter_8cc_source.html @@ -0,0 +1,234 @@ + + + + + + +DASH Media Packaging SDK: media/filters/h264_byte_to_unit_stream_converter.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
h264_byte_to_unit_stream_converter.cc
+
+
+
1 // Copyright 2014 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/h264_byte_to_unit_stream_converter.h"
+
8 
+
9 #include "packager/base/logging.h"
+
10 #include "packager/media/base/buffer_writer.h"
+
11 #include "packager/media/filters/h264_parser.h"
+
12 
+
13 namespace edash_packager {
+
14 namespace media {
+
15 
+
16 namespace {
+
17 // Additional space to reserve for output frame. This value ought to be enough
+
18 // to acommodate frames consisting of 100 NAL units with 3-byte start codes.
+
19 const size_t kStreamConversionOverhead = 100;
+
20 }
+
21 
+
22 H264ByteToUnitStreamConverter::H264ByteToUnitStreamConverter() {}
+
23 
+
24 H264ByteToUnitStreamConverter::~H264ByteToUnitStreamConverter() {}
+
25 
+ +
27  const uint8_t* input_frame,
+
28  size_t input_frame_size,
+
29  std::vector<uint8_t>* output_frame) {
+
30  DCHECK(input_frame);
+
31  DCHECK(output_frame);
+
32 
+
33  BufferWriter output_buffer(input_frame_size + kStreamConversionOverhead);
+
34 
+
35  const uint8_t* input_ptr(input_frame);
+
36  const uint8_t* input_end(input_ptr + input_frame_size);
+
37  off_t next_start_code_offset;
+
38  off_t next_start_code_size;
+
39  bool first_nalu(true);
+
40  while (H264Parser::FindStartCode(input_ptr,
+
41  input_end - input_ptr,
+
42  &next_start_code_offset,
+
43  &next_start_code_size)) {
+
44  if (first_nalu) {
+
45  if (next_start_code_offset != 0) {
+
46  LOG(ERROR) << "H.264 byte stream frame did not begin with start code.";
+
47  return false;
+
48  }
+
49  first_nalu = false;
+
50  } else {
+
51  ProcessNalu(input_ptr, next_start_code_offset, &output_buffer);
+
52  }
+
53  input_ptr += next_start_code_offset + next_start_code_size;
+
54  }
+
55 
+
56  if (first_nalu) {
+
57  LOG(ERROR) << "H.264 byte stream frame did not contain start codes.";
+
58  return false;
+
59  } else {
+
60  ProcessNalu(input_ptr, input_end - input_ptr, &output_buffer);
+
61  }
+
62 
+
63  output_buffer.SwapBuffer(output_frame);
+
64  return true;
+
65 }
+
66 
+
67 void H264ByteToUnitStreamConverter::ProcessNalu(const uint8_t* nalu_ptr,
+
68  size_t nalu_size,
+
69  BufferWriter* output_buffer) {
+
70  DCHECK(nalu_ptr);
+
71  DCHECK(output_buffer);
+
72 
+
73  if (!nalu_size)
+
74  return; // Edge case.
+
75 
+
76  uint8_t nalu_type = *nalu_ptr & 0x0f;
+
77  switch (nalu_type) {
+
78  case H264NALU::kSPS:
+
79  // Grab SPS NALU.
+
80  last_sps_.assign(nalu_ptr, nalu_ptr + nalu_size);
+
81  return;
+
82  case H264NALU::kPPS:
+
83  // Grab PPS NALU.
+
84  last_pps_.assign(nalu_ptr, nalu_ptr + nalu_size);
+
85  return;
+
86  case H264NALU::kAUD:
+
87  // Ignore AUD NALU.
+
88  return;
+
89  default:
+
90  // Copy all other NALUs.
+
91  break;
+
92  }
+
93 
+
94  // Append 4-byte length and NAL unit data to the buffer.
+
95  output_buffer->AppendInt(static_cast<uint32_t>(nalu_size));
+
96  output_buffer->AppendArray(nalu_ptr, nalu_size);
+
97 }
+
98 
+ +
100  std::vector<uint8_t>* decoder_config) {
+
101  DCHECK(decoder_config);
+
102 
+
103  if ((last_sps_.size() < 4) || last_pps_.empty()) {
+
104  // No data available to construct AVCDecoderConfigurationRecord.
+
105  return false;
+
106  }
+
107 
+
108  // Construct an AVCDecoderConfigurationRecord containing a single SPS and a
+
109  // single PPS NALU. Please refer to ISO/IEC 14496-15 for format specifics.
+
110  BufferWriter buffer(last_sps_.size() + last_pps_.size() + 11);
+
111  uint8_t version(1);
+
112  buffer.AppendInt(version);
+
113  buffer.AppendInt(last_sps_[1]);
+
114  buffer.AppendInt(last_sps_[2]);
+
115  buffer.AppendInt(last_sps_[3]);
+
116  uint8_t reserved_and_length_size_minus_one(0xff);
+
117  buffer.AppendInt(reserved_and_length_size_minus_one);
+
118  uint8_t reserved_and_num_sps(0xe1);
+
119  buffer.AppendInt(reserved_and_num_sps);
+
120  buffer.AppendInt(static_cast<uint16_t>(last_sps_.size()));
+
121  buffer.AppendVector(last_sps_);
+
122  uint8_t num_pps(1);
+
123  buffer.AppendInt(num_pps);
+
124  buffer.AppendInt(static_cast<uint16_t>(last_pps_.size()));
+
125  buffer.AppendVector(last_pps_);
+
126  buffer.SwapBuffer(decoder_config);
+
127 
+
128  return true;
+
129 }
+
130 
+
131 } // namespace media
+
132 } // namespace edash_packager
+
bool ConvertByteStreamToNalUnitStream(const uint8_t *input_frame, size_t input_frame_size, std::vector< uint8_t > *output_frame)
+
bool GetAVCDecoderConfigurationRecord(std::vector< uint8_t > *decoder_config)
+ + +
+ + + + diff --git a/sdk/dd/d79/classedash__packager_1_1media_1_1AesCtrEncryptor.html b/sdk/dd/d79/classedash__packager_1_1media_1_1AesCtrEncryptor.html new file mode 100644 index 0000000000..1b4e083a1f --- /dev/null +++ b/sdk/dd/d79/classedash__packager_1_1media_1_1AesCtrEncryptor.html @@ -0,0 +1,263 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::AesCtrEncryptor Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::AesCtrEncryptor Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool InitializeWithRandomIv (const std::vector< uint8_t > &key, uint8_t iv_size)
 
bool InitializeWithIv (const std::vector< uint8_t > &key, const std::vector< uint8_t > &iv)
 
+bool Decrypt (const uint8_t *ciphertext, size_t ciphertext_size, uint8_t *plaintext)
 
+bool Decrypt (const std::vector< uint8_t > &ciphertext, std::vector< uint8_t > *plaintext)
 
+bool Decrypt (const std::string &ciphertext, std::string *plaintext)
 
void UpdateIv ()
 
bool SetIv (const std::vector< uint8_t > &iv)
 
+const std::vector< uint8_t > & iv () const
 
+uint32_t block_offset () const
 
Various forms of encrypt calls.

block_offset() will be updated according to input plaintext size.

+
+bool Encrypt (const uint8_t *plaintext, size_t plaintext_size, uint8_t *ciphertext)
 
+bool Encrypt (const std::vector< uint8_t > &plaintext, std::vector< uint8_t > *ciphertext)
 
+bool Encrypt (const std::string &plaintext, std::string *ciphertext)
 
+

Detailed Description

+
+

Definition at line 25 of file aes_encryptor.h.

+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::AesCtrEncryptor::InitializeWithIv (const std::vector< uint8_t > & key,
const std::vector< uint8_t > & iv 
)
+
+

Initialize the encryptor with specified key and IV. block_offset() is reset to 0 on success.

+
Parameters
+ + + +
keyshould be 16 bytes in size as specified in CENC spec.
ivshould be 8 bytes or 16 bytes in size as specified in CENC spec.
+
+
+
Returns
true on successful initialization, false otherwise.
+ +

Definition at line 64 of file aes_encryptor.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::AesCtrEncryptor::InitializeWithRandomIv (const std::vector< uint8_t > & key,
uint8_t iv_size 
)
+
+

Initialize the encryptor with specified key and a random generated IV of the specified size. block_offset() is reset to 0 on success.

+
Parameters
+ + + +
keyshould be 16 bytes in size as specified in CENC spec.
iv_sizeshould be either 8 or 16 as specified in CENC spec.
+
+
+
Returns
true on successful initialization, false otherwise.
+ +

Definition at line 53 of file aes_encryptor.cc.

+ +
+
+ +
+
+ + + + + + + + +
bool edash_packager::media::AesCtrEncryptor::SetIv (const std::vector< uint8_t > & iv)
+
+

Set IV. block_offset_ is reset to 0 on success.

+
Returns
true if successful, false if the input is invalid.
+ +

Definition at line 133 of file aes_encryptor.cc.

+ +
+
+ +
+
+ + + + + + + +
void edash_packager::media::AesCtrEncryptor::UpdateIv ()
+
+

Update IV for next sample. block_offset_ is reset to 0. As recommended in ISO/IEC FDIS 23001-7: CENC spec, For 64-bit IV size, new_iv = old_iv + 1; For 128-bit IV size, new_iv = old_iv + previous_sample_block_count.

+ +

Definition at line 104 of file aes_encryptor.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/dd/d80/media__sample_8h_source.html b/sdk/dd/d80/media__sample_8h_source.html new file mode 100644 index 0000000000..9b312b56e3 --- /dev/null +++ b/sdk/dd/d80/media__sample_8h_source.html @@ -0,0 +1,253 @@ + + + + + + +DASH Media Packaging SDK: media/base/media_sample.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
media_sample.h
+
+
+
1 // Copyright 2014 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_BASE_MEDIA_SAMPLE_H_
+
8 #define MEDIA_BASE_MEDIA_SAMPLE_H_
+
9 
+
10 #include <deque>
+
11 #include <string>
+
12 #include <vector>
+
13 
+
14 #include "packager/base/logging.h"
+
15 #include "packager/base/memory/ref_counted.h"
+
16 #include "packager/base/memory/scoped_ptr.h"
+
17 
+
18 namespace edash_packager {
+
19 namespace media {
+
20 
+
22 class MediaSample : public base::RefCountedThreadSafe<MediaSample> {
+
23  public:
+
29  static scoped_refptr<MediaSample> CopyFrom(const uint8_t* data,
+
30  size_t size,
+
31  bool is_key_frame);
+
32 
+
43  static scoped_refptr<MediaSample> CopyFrom(const uint8_t* data,
+
44  size_t size,
+
45  const uint8_t* side_data,
+
46  size_t side_data_size,
+
47  bool is_key_frame);
+
48 
+
50  static scoped_refptr<MediaSample> CreateEmptyMediaSample();
+
51 
+
55  static scoped_refptr<MediaSample> CreateEOSBuffer();
+
56 
+
57  int64_t dts() const {
+
58  DCHECK(!end_of_stream());
+
59  return dts_;
+
60  }
+
61 
+
62  void set_dts(int64_t dts) { dts_ = dts; }
+
63 
+
64  int64_t pts() const {
+
65  DCHECK(!end_of_stream());
+
66  return pts_;
+
67  }
+
68 
+
69  void set_pts(int64_t pts) { pts_ = pts; }
+
70 
+
71  int64_t duration() const {
+
72  DCHECK(!end_of_stream());
+
73  return duration_;
+
74  }
+
75 
+
76  void set_duration(int64_t duration) {
+
77  DCHECK(!end_of_stream());
+
78  duration_ = duration;
+
79  }
+
80 
+
81  bool is_key_frame() const {
+
82  DCHECK(!end_of_stream());
+
83  return is_key_frame_;
+
84  }
+
85 
+
86  bool is_encrypted() const {
+
87  DCHECK(!end_of_stream());
+
88  return is_encrypted_;
+
89  }
+
90  const uint8_t* data() const {
+
91  DCHECK(!end_of_stream());
+
92  return &data_[0];
+
93  }
+
94 
+
95  uint8_t* writable_data() {
+
96  DCHECK(!end_of_stream());
+
97  return &data_[0];
+
98  }
+
99 
+
100  size_t data_size() const {
+
101  DCHECK(!end_of_stream());
+
102  return data_.size();
+
103  }
+
104 
+
105  const uint8_t* side_data() const {
+
106  DCHECK(!end_of_stream());
+
107  return &side_data_[0];
+
108  }
+
109 
+
110  size_t side_data_size() const {
+
111  DCHECK(!end_of_stream());
+
112  return side_data_.size();
+
113  }
+
114 
+
115  void set_data(const uint8_t* data, const size_t data_size) {
+
116  data_.assign(data, data + data_size);
+
117  }
+
118 
+
119  void set_is_key_frame(bool value) {
+
120  is_key_frame_ = value;
+
121  }
+
122 
+
123  void set_is_encrypted(bool value) {
+
124  is_encrypted_ = value;
+
125  }
+
126 
+
127  // If there's no data in this buffer, it represents end of stream.
+
128  bool end_of_stream() const { return data_.size() == 0; }
+
129 
+
131  std::string ToString() const;
+
132 
+
133  private:
+
134  friend class base::RefCountedThreadSafe<MediaSample>;
+
135 
+
136  // Create a MediaSample. Buffer will be padded and aligned as necessary.
+
137  // |data|,|side_data| can be NULL, which indicates an empty sample.
+
138  // |size|,|side_data_size| should not be negative.
+
139  MediaSample(const uint8_t* data,
+
140  size_t size,
+
141  const uint8_t* side_data,
+
142  size_t side_data_size,
+
143  bool is_key_frame);
+
144  MediaSample();
+
145  virtual ~MediaSample();
+
146 
+
147  // Decoding time stamp.
+
148  int64_t dts_;
+
149  // Presentation time stamp.
+
150  int64_t pts_;
+
151  int64_t duration_;
+
152  bool is_key_frame_;
+
153  // is sample encrypted ?
+
154  bool is_encrypted_;
+
155 
+
156  // Main buffer data.
+
157  std::vector<uint8_t> data_;
+
158  // Contain additional buffers to complete the main one. Needed by WebM
+
159  // http://www.matroska.org/technical/specs/index.html BlockAdditional[A5].
+
160  // Not used by mp4 and other containers.
+
161  std::vector<uint8_t> side_data_;
+
162 
+
163  DISALLOW_COPY_AND_ASSIGN(MediaSample);
+
164 };
+
165 
+
166 typedef std::deque<scoped_refptr<MediaSample> > BufferQueue;
+
167 
+
168 } // namespace media
+
169 } // namespace edash_packager
+
170 
+
171 #endif // MEDIA_BASE_MEDIA_SAMPLE_H_
+
static scoped_refptr< MediaSample > CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)
Definition: media_sample.cc:47
+
static scoped_refptr< MediaSample > CreateEOSBuffer()
Definition: media_sample.cc:75
+
static scoped_refptr< MediaSample > CreateEmptyMediaSample()
Create a MediaSample object with default members.
Definition: media_sample.cc:69
+
Class to hold a media sample.
Definition: media_sample.h:22
+ +
+ + + + diff --git a/sdk/dd/d85/classedash__packager_1_1xml_1_1XmlNode.html b/sdk/dd/d85/classedash__packager_1_1xml_1_1XmlNode.html new file mode 100644 index 0000000000..3b240cc0df --- /dev/null +++ b/sdk/dd/d85/classedash__packager_1_1xml_1_1XmlNode.html @@ -0,0 +1,427 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::xml::XmlNode Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::xml::XmlNode Class Reference
+
+
+ +

#include <xml_node.h>

+
+Inheritance diagram for edash_packager::xml::XmlNode:
+
+
+ + +edash_packager::xml::RepresentationBaseXmlNode +edash_packager::xml::AdaptationSetXmlNode +edash_packager::xml::RepresentationXmlNode + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 XmlNode (const char *name)
 
bool AddChild (ScopedXmlPtr< xmlNode >::type child)
 
+bool AddElements (const std::vector< Element > &elements)
 Adds Elements to this node using the Element struct.
 
void SetStringAttribute (const char *attribute_name, const std::string &attribute)
 
void SetIntegerAttribute (const char *attribute_name, uint64_t number)
 
void SetFloatingPointAttribute (const char *attribute_name, double number)
 
void SetId (uint32_t id)
 
void SetContent (const std::string &content)
 
ScopedXmlPtr< xmlNode >::type PassScopedPtr ()
 
xmlNodePtr Release ()
 
xmlNodePtr GetRawPtr ()
 
+

Detailed Description

+

These classes are wrapper classes for XML elements for generating MPD. None of the pointer parameters should be NULL. None of the methods are meant to be overridden.

+ +

Definition at line 31 of file xml_node.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
edash_packager::xml::XmlNode::XmlNode (const char * name)
+
+explicit
+
+

Make an XML element.

+
Parameters
+ + +
nameis the name of the element, which should not be NULL.
+
+
+ +

Definition at line 57 of file xml_node.cc.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
bool edash_packager::xml::XmlNode::AddChild (ScopedXmlPtr< xmlNode >::type child)
+
+

Add a child element to this element.

+
Parameters
+ + +
childis a xmlNode to add as a child for this element. Ownership of the child node is transferred.
+
+
+
Returns
true on success, false otherwise.
+ +

Definition at line 64 of file xml_node.cc.

+ +
+
+ +
+
+ + + + + + + +
xmlNodePtr edash_packager::xml::XmlNode::GetRawPtr ()
+
+
Returns
Raw pointer to the element.
+ +

Definition at line 151 of file xml_node.cc.

+ +
+
+ +
+
+ + + + + + + +
ScopedXmlPtr< xmlNode >::type edash_packager::xml::XmlNode::PassScopedPtr ()
+
+

Transfer the ownership of the xmlNodePtr. After calling this method, the behavior of any methods, except the destructor, is undefined.

+
Returns
The resource of this object.
+ +

Definition at line 139 of file xml_node.cc.

+ +
+
+ +
+
+ + + + + + + +
xmlNodePtr edash_packager::xml::XmlNode::Release ()
+
+

Release the xmlNodePtr of this object. After calling this method, the behavior of any methods, except the destructor, is undefined.

+ +

Definition at line 145 of file xml_node.cc.

+ +
+
+ +
+
+ + + + + + + + +
void edash_packager::xml::XmlNode::SetContent (const std::string & content)
+
+

Set the contents of an XML element using a string. This cannot set child elements because <> will become < and This should be used to set the text for the element, e.g. setting a URL for <BaseURL> element.

+
Parameters
+ + +
contentis a string containing the text-encoded child elements to be added to the element.
+
+
+ +

Definition at line 134 of file xml_node.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void edash_packager::xml::XmlNode::SetFloatingPointAttribute (const char * attribute_name,
double number 
)
+
+

Set a floating point number attribute.

+
Parameters
+ + + +
attribute_nameis the name of the attribute to set.
numberis the value (rhs) of the attribute.
+
+
+ +

Definition at line 121 of file xml_node.cc.

+ +
+
+ +
+
+ + + + + + + + +
void edash_packager::xml::XmlNode::SetId (uint32_t id)
+
+

Sets 'id=id' attribute.

+
Parameters
+ + +
idis the ID for this element.
+
+
+ +

Definition at line 130 of file xml_node.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void edash_packager::xml::XmlNode::SetIntegerAttribute (const char * attribute_name,
uint64_t number 
)
+
+

Sets an integer attribute.

+
Parameters
+ + + +
attribute_nameThe name (lhs) of the attribute.
numberThe value (rhs) of the attribute.
+
+
+ +

Definition at line 113 of file xml_node.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void edash_packager::xml::XmlNode::SetStringAttribute (const char * attribute_name,
const std::string & attribute 
)
+
+

Set a string attribute.

+
Parameters
+ + + +
attribute_nameThe name (lhs) of the attribute.
attributeThe value (rhs) of the attribute.
+
+
+ +

Definition at line 106 of file xml_node.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/dd/d85/classedash__packager_1_1xml_1_1XmlNode.png b/sdk/dd/d85/classedash__packager_1_1xml_1_1XmlNode.png new file mode 100644 index 0000000000..06bced4ce3 Binary files /dev/null and b/sdk/dd/d85/classedash__packager_1_1xml_1_1XmlNode.png differ diff --git a/sdk/dd/d85/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader-members.html b/sdk/dd/d85/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader-members.html new file mode 100644 index 0000000000..d4487948b0 --- /dev/null +++ b/sdk/dd/d85/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader-members.html @@ -0,0 +1,139 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::TrackFragmentHeader Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeadervirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::TrackFragmentHeadervirtual
default_sample_duration (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeader
default_sample_flags (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeader
default_sample_size (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeader
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
kBaseDataOffsetPresentMask enum value (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeader
kDefaultBaseIsMoofMask enum value (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeader
kDefaultSampleDurationPresentMask enum value (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeader
kDefaultSampleFlagsPresentMask enum value (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeader
kDefaultSampleSizePresentMask enum value (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeader
kDurationIsEmptyMask enum value (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeader
kNonKeySampleMask enum value (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeader
kReservedMask enum value (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeader
kSampleDegradationPriorityMask enum value (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeader
kSampleDependsOnMask enum value (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeader
kSampleDescriptionIndexPresentMask enum value (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeader
kSampleHasRedundancyMask enum value (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeader
kSampleIsDependedOnMask enum value (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeader
kSamplePaddingValueMask enum value (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeader
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::TrackFragmentHeadervirtual
sample_description_index (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeader
SampleFlagsMasks enum name (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeader
track_id (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeader
TrackFragmentFlagsMasks enum name (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeader
TrackFragmentHeader() (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeader
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~TrackFragmentHeader() (defined in edash_packager::media::mp4::TrackFragmentHeader)edash_packager::media::mp4::TrackFragmentHeadervirtual
+ + + + diff --git a/sdk/dd/d8e/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter-members.html b/sdk/dd/d8e/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter-members.html new file mode 100644 index 0000000000..a380c9d701 --- /dev/null +++ b/sdk/dd/d8e/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter-members.html @@ -0,0 +1,129 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::KeyRotationFragmenter Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
AddSample(scoped_refptr< MediaSample > sample) OVERRIDEedash_packager::media::mp4::EncryptingFragmentervirtual
aux_data() (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinline
CreateEncryptor()edash_packager::media::mp4::EncryptingFragmenterprotected
data() (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinline
earliest_presentation_time() const (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinline
EncryptingFragmenter(TrackFragment *traf, scoped_ptr< EncryptionKey > encryption_key, int64_t clear_time, uint8_t nalu_length_size)edash_packager::media::mp4::EncryptingFragmenter
encryption_key() (defined in edash_packager::media::mp4::EncryptingFragmenter)edash_packager::media::mp4::EncryptingFragmenterinlineprotected
encryptor() (defined in edash_packager::media::mp4::EncryptingFragmenter)edash_packager::media::mp4::EncryptingFragmenterinlineprotected
FinalizeFragment() OVERRIDEedash_packager::media::mp4::EncryptingFragmentervirtual
FinalizeFragmentForEncryption() OVERRIDEedash_packager::media::mp4::KeyRotationFragmenterprotectedvirtual
first_sap_time() const (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinline
fragment_duration() const (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinline
fragment_finalized() const (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinline
fragment_initialized() const (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinline
Fragmenter(TrackFragment *traf)edash_packager::media::mp4::Fragmenter
GenerateSegmentReference(SegmentReference *reference)edash_packager::media::mp4::Fragmenter
InitializeFragment(int64_t first_sample_dts) OVERRIDEedash_packager::media::mp4::EncryptingFragmentervirtual
KeyRotationFragmenter(MovieFragment *moof, TrackFragment *traf, KeySource *encryption_key_source, KeySource::TrackType track_type, int64_t crypto_period_duration, int64_t clear_time, uint8_t nalu_length_size, MuxerListener *muxer_listener)edash_packager::media::mp4::KeyRotationFragmenter
OptimizeSampleEntries(std::vector< T > *entries, T *default_value)edash_packager::media::mp4::Fragmenterprotected
PrepareFragmentForEncryption(bool enable_encryption) OVERRIDEedash_packager::media::mp4::KeyRotationFragmenterprotectedvirtual
set_encryption_key(scoped_ptr< EncryptionKey > encryption_key) (defined in edash_packager::media::mp4::EncryptingFragmenter)edash_packager::media::mp4::EncryptingFragmenterinlineprotected
traf() (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinlineprotected
~EncryptingFragmenter() (defined in edash_packager::media::mp4::EncryptingFragmenter)edash_packager::media::mp4::EncryptingFragmentervirtual
~Fragmenter() (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmentervirtual
~KeyRotationFragmenter() (defined in edash_packager::media::mp4::KeyRotationFragmenter)edash_packager::media::mp4::KeyRotationFragmentervirtual
+ + + + diff --git a/sdk/dd/d96/classedash__packager_1_1media_1_1AesCbcCtsDecryptor.html b/sdk/dd/d96/classedash__packager_1_1media_1_1AesCbcCtsDecryptor.html new file mode 100644 index 0000000000..8a35376bf2 --- /dev/null +++ b/sdk/dd/d96/classedash__packager_1_1media_1_1AesCbcCtsDecryptor.html @@ -0,0 +1,260 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::AesCbcCtsDecryptor Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::AesCbcCtsDecryptor Class Reference
+
+
+ + + + + + + + + + + + +

+Public Member Functions

bool InitializeWithIv (const std::vector< uint8_t > &key, const std::vector< uint8_t > &iv)
 
void Decrypt (const uint8_t *ciphertext, size_t size, uint8_t *plaintext)
 
void Decrypt (const std::vector< uint8_t > &ciphertext, std::vector< uint8_t > *plaintext)
 
bool SetIv (const std::vector< uint8_t > &iv)
 
+const std::vector< uint8_t > & iv () const
 
+

Detailed Description

+
+

Definition at line 219 of file aes_encryptor.h.

+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void edash_packager::media::AesCbcCtsDecryptor::Decrypt (const uint8_t * ciphertext,
size_t size,
uint8_t * plaintext 
)
+
+
Parameters
+ + + + +
ciphertextpoints to the data to be decrypted.
sizeis the number of bytes to be decrypted. If less than 16 bytes, it will be copied in the clear.
plaintextshould not be NULL. The buffer should be at least size bytes in length.
+
+
+ +

Definition at line 374 of file aes_encryptor.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void edash_packager::media::AesCbcCtsDecryptor::Decrypt (const std::vector< uint8_t > & ciphertext,
std::vector< uint8_t > * plaintext 
)
+
+
Parameters
+ + + +
ciphertextcontains the data to be decrypted. If less than 16 bytes in size, it will be copied in the clear.
plaintextshould not be NULL. Caller retains ownership.
+
+
+ +

Definition at line 456 of file aes_encryptor.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::AesCbcCtsDecryptor::InitializeWithIv (const std::vector< uint8_t > & key,
const std::vector< uint8_t > & iv 
)
+
+

Initialize the decryptor with specified key and IV.

+
Parameters
+ + + +
keyshould be 128 bits or 192 bits or 256 bits in size as defined in AES spec.
ivshould be 16 bytes in size.
+
+
+
Returns
true on successful initialization, false otherwise.
+ +

Definition at line 356 of file aes_encryptor.cc.

+ +
+
+ +
+
+ + + + + + + + +
bool edash_packager::media::AesCbcCtsDecryptor::SetIv (const std::vector< uint8_t > & iv)
+
+
Returns
true if successful, false if the input is invalid.
+ +

Definition at line 467 of file aes_encryptor.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/dd/d98/classedash__packager_1_1media_1_1LocalFile.html b/sdk/dd/d98/classedash__packager_1_1media_1_1LocalFile.html new file mode 100644 index 0000000000..c938dec4de --- /dev/null +++ b/sdk/dd/d98/classedash__packager_1_1media_1_1LocalFile.html @@ -0,0 +1,504 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::LocalFile Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::LocalFile Class Reference
+
+
+ +

Implement LocalFile which deals with local storage. + More...

+ +

#include <local_file.h>

+
+Inheritance diagram for edash_packager::media::LocalFile:
+
+
+ + +edash_packager::media::File + +
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 LocalFile (const char *file_name, const char *mode)
 
File implementation overrides.
virtual bool Close () OVERRIDE
 
virtual int64_t Read (void *buffer, uint64_t length) OVERRIDE
 
virtual int64_t Write (const void *buffer, uint64_t length) OVERRIDE
 
virtual int64_t Size () OVERRIDE
 
virtual bool Flush () OVERRIDE
 
virtual bool Seek (uint64_t position) OVERRIDE
 
virtual bool Tell (uint64_t *position) OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::File
const std::string & file_name () const
 
+ + + + + + + + + + + + + + +

+Static Public Member Functions

static bool Delete (const char *file_name)
 
- Static Public Member Functions inherited from edash_packager::media::File
static FileOpen (const char *file_name, const char *mode)
 
static FileOpenWithNoBuffering (const char *file_name, const char *mode)
 
static bool Delete (const char *file_name)
 
static int64_t GetFileSize (const char *file_name)
 
static bool ReadFileToString (const char *file_name, std::string *contents)
 
+ + + + + + + + + +

+Protected Member Functions

+virtual bool Open () OVERRIDE
 Internal open. Should not be used directly.
 
- Protected Member Functions inherited from edash_packager::media::File
File (const std::string &file_name)
 
virtual ~File ()
 
+

Detailed Description

+

Implement LocalFile which deals with local storage.

+ +

Definition at line 21 of file local_file.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
edash_packager::media::LocalFile::LocalFile (const char * file_name,
const char * mode 
)
+
+
Parameters
+ + + +
file_nameC string containing the name of the file to be accessed.
modeC string containing a file access mode, refer to fopen for the available modes.
+
+
+ +

Definition at line 17 of file local_file.cc.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool edash_packager::media::LocalFile::Close ()
+
+virtual
+
+

Flush() and de-allocate resources associated with this file, and delete this File object. THIS IS THE ONE TRUE WAY TO DEALLOCATE THIS OBJECT.

+
Returns
true on success. For writable files, returning false MAY INDICATE DATA LOSS.
+ +

Implements edash_packager::media::File.

+ +

Definition at line 20 of file local_file.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool edash_packager::media::LocalFile::Delete (const char * file_name)
+
+static
+
+

Delete a local file.

+
Parameters
+ + +
file_nameis the path of the file to be deleted.
+
+
+
Returns
true if successful, or false otherwise.
+ +

Definition at line 84 of file local_file.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool edash_packager::media::LocalFile::Flush ()
+
+virtual
+
+

Flush the file so that recently written data will survive an application crash (but not necessarily an OS crash). For instance, in LocalFile the data is flushed into the OS but not necessarily to disk.

+
Returns
true on success, false otherwise.
+ +

Implements edash_packager::media::File.

+ +

Definition at line 59 of file local_file.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int64_t edash_packager::media::LocalFile::Read (void * buffer,
uint64_t length 
)
+
+virtual
+
+

Read data and return it in buffer.

+
Parameters
+ + + +
[out]bufferpoints to a block of memory with a size of at least length bytes.
lengthindicates number of bytes to be read.
+
+
+
Returns
Number of bytes read, or a value < 0 on error. Zero on end-of-file, or if 'length' is zero.
+ +

Implements edash_packager::media::File.

+ +

Definition at line 30 of file local_file.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool edash_packager::media::LocalFile::Seek (uint64_t position)
+
+virtual
+
+

Seek to the specifield position in the file.

+
Parameters
+ + +
positionis the position to seek to.
+
+
+
Returns
true on success, false otherwise.
+ +

Implements edash_packager::media::File.

+ +

Definition at line 64 of file local_file.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int64_t edash_packager::media::LocalFile::Size ()
+
+virtual
+
+
Returns
Size of the file in bytes. A return value less than zero indicates a problem getting the size.
+ +

Implements edash_packager::media::File.

+ +

Definition at line 42 of file local_file.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool edash_packager::media::LocalFile::Tell (uint64_t * position)
+
+virtual
+
+

Get the current file position.

+
Parameters
+ + +
positionis a pointer to contain the current file position upon successful return.
+
+
+
Returns
true on succcess, false otherwise.
+ +

Implements edash_packager::media::File.

+ +

Definition at line 68 of file local_file.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int64_t edash_packager::media::LocalFile::Write (const void * buffer,
uint64_t length 
)
+
+virtual
+
+

Write block of data.

+
Parameters
+ + + +
bufferpoints to a block of memory with at least length bytes.
lengthindicates number of bytes to write.
+
+
+
Returns
Number of bytes written, or a value < 0 on error.
+ +

Implements edash_packager::media::File.

+ +

Definition at line 36 of file local_file.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/dd/d98/classedash__packager_1_1media_1_1LocalFile.png b/sdk/dd/d98/classedash__packager_1_1media_1_1LocalFile.png new file mode 100644 index 0000000000..7478db9231 Binary files /dev/null and b/sdk/dd/d98/classedash__packager_1_1media_1_1LocalFile.png differ diff --git a/sdk/dd/d9a/audio__timestamp__helper_8h_source.html b/sdk/dd/d9a/audio__timestamp__helper_8h_source.html new file mode 100644 index 0000000000..7633ec8db6 --- /dev/null +++ b/sdk/dd/d9a/audio__timestamp__helper_8h_source.html @@ -0,0 +1,175 @@ + + + + + + +DASH Media Packaging SDK: media/base/audio_timestamp_helper.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
audio_timestamp_helper.h
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_BASE_AUDIO_TIMESTAMP_HELPER_H_
+
6 #define MEDIA_BASE_AUDIO_TIMESTAMP_HELPER_H_
+
7 
+
8 #include <stdint.h>
+
9 
+
10 #include "packager/base/macros.h"
+
11 
+
12 namespace edash_packager {
+
13 namespace media {
+
14 
+
15 // Generates timestamps for a sequence of audio sample frames. This class should
+
16 // be used any place timestamps need to be calculated for a sequence of audio
+
17 // samples. It helps avoid timestamps inaccuracies caused by rounding/truncation
+
18 // in repeated sample count to timestamp conversions.
+
19 //
+
20 // The class is constructed with samples_per_second information so that it can
+
21 // convert audio sample frame counts into timestamps. After the object is
+
22 // constructed, SetBaseTimestamp() must be called to specify the starting
+
23 // timestamp of the audio sequence. As audio samples are received, their frame
+
24 // counts are added using AddFrames(). These frame counts are accumulated by
+
25 // this class so GetTimestamp() can be used to determine the timestamp for the
+
26 // samples that have been added. GetDuration() calculates the proper duration
+
27 // values for samples added to the current timestamp. GetFramesToTarget()
+
28 // determines the number of frames that need to be added/removed from the
+
29 // accumulated frames to reach a target timestamp.
+ +
31  public:
+
32  explicit AudioTimestampHelper(uint32_t timescale,
+
33  uint32_t samples_per_second);
+
34 
+
35  // Sets the base timestamp to |base_timestamp| and the sets count to 0.
+
36  void SetBaseTimestamp(int64_t base_timestamp);
+
37 
+
38  int64_t base_timestamp() const;
+
39  int64_t frame_count() const { return frame_count_; }
+
40 
+
41  // Adds |frame_count| to the frame counter.
+
42  // Note: SetBaseTimestamp() must be called with a value other than
+
43  // kNoTimestamp() before this method can be called.
+
44  void AddFrames(int64_t frame_count);
+
45 
+
46  // Get the current timestamp. This value is computed from the base_timestamp()
+
47  // and the number of sample frames that have been added so far.
+
48  int64_t GetTimestamp() const;
+
49 
+
50  // Gets the duration if |frame_count| frames were added to the current
+
51  // timestamp reported by GetTimestamp(). This method ensures that
+
52  // (GetTimestamp() + GetFrameDuration(n)) will equal the timestamp that
+
53  // GetTimestamp() will return if AddFrames(n) is called.
+
54  int64_t GetFrameDuration(int64_t frame_count) const;
+
55 
+
56  // Returns the number of frames needed to reach the target timestamp.
+
57  // Note: |target| must be >= |base_timestamp_|.
+
58  int64_t GetFramesToTarget(int64_t target) const;
+
59 
+
60  private:
+
61  int64_t ComputeTimestamp(int64_t frame_count) const;
+
62 
+
63  double ticks_per_frame_;
+
64 
+
65  int64_t base_timestamp_;
+
66 
+
67  // Number of frames accumulated by AddFrames() calls.
+
68  int64_t frame_count_;
+
69 
+
70  DISALLOW_IMPLICIT_CONSTRUCTORS(AudioTimestampHelper);
+
71 };
+
72 
+
73 } // namespace media
+
74 } // namespace edash_packager
+
75 
+
76 #endif
+ +
+ + + + diff --git a/sdk/dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html b/sdk/dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html new file mode 100644 index 0000000000..da02e2fa5f --- /dev/null +++ b/sdk/dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html @@ -0,0 +1,187 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::MovieFragment Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::MovieFragment Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::MovieFragment:
+
+
+ + +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + +

+Public Attributes

+MovieFragmentHeader header
 
+std::vector< TrackFragmenttracks
 
+std::vector
+< ProtectionSystemSpecificHeader
pssh
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 544 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::MovieFragment::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1866 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.png b/sdk/dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.png new file mode 100644 index 0000000000..50666e01cc Binary files /dev/null and b/sdk/dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.png differ diff --git a/sdk/dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html b/sdk/dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html new file mode 100644 index 0000000000..23a2cc0c58 --- /dev/null +++ b/sdk/dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html @@ -0,0 +1,184 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::SegmentType Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::SegmentType Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::SegmentType:
+
+
+ + +edash_packager::media::mp4::FileType +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from edash_packager::media::mp4::FileType
+FourCC major_brand
 
+uint32_t minor_version
 
+std::vector< FourCC > compatible_brands
 
- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 47 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::SegmentType::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 98 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.png b/sdk/dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.png new file mode 100644 index 0000000000..a47568b7b7 Binary files /dev/null and b/sdk/dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.png differ diff --git a/sdk/dd/da8/classedash__packager_1_1media_1_1RsaRequestSigner.html b/sdk/dd/da8/classedash__packager_1_1media_1_1RsaRequestSigner.html new file mode 100644 index 0000000000..1547d8dd61 --- /dev/null +++ b/sdk/dd/da8/classedash__packager_1_1media_1_1RsaRequestSigner.html @@ -0,0 +1,190 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::RsaRequestSigner Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::RsaRequestSigner Class Reference
+
+
+ +

RsaRequestSigner uses RSA-PSS signing. + More...

+ +

#include <request_signer.h>

+
+Inheritance diagram for edash_packager::media::RsaRequestSigner:
+
+
+ + +edash_packager::media::RequestSigner + +
+ + + + + + + + +

+Public Member Functions

+virtual bool GenerateSignature (const std::string &message, std::string *signature) OVERRIDE
 RequestSigner implementation override.
 
- Public Member Functions inherited from edash_packager::media::RequestSigner
+const std::string & signer_name () const
 
+ + + +

+Static Public Member Functions

static RsaRequestSignerCreateSigner (const std::string &signer_name, const std::string &pkcs1_rsa_key)
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from edash_packager::media::RequestSigner
RequestSigner (const std::string &signer_name)
 
+

Detailed Description

+

RsaRequestSigner uses RSA-PSS signing.

+ +

Definition at line 67 of file request_signer.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
RsaRequestSigner * edash_packager::media::RsaRequestSigner::CreateSigner (const std::string & signer_name,
const std::string & pkcs1_rsa_key 
)
+
+static
+
+

Create an RsaSigner object using a DER encoded PKCS#1 RSAPrivateKey.

+
Returns
The created RsaRequestSigner object on success, NULL otherwise.
+ +

Definition at line 61 of file request_signer.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/dd/da8/classedash__packager_1_1media_1_1RsaRequestSigner.png b/sdk/dd/da8/classedash__packager_1_1media_1_1RsaRequestSigner.png new file mode 100644 index 0000000000..e3f90ee816 Binary files /dev/null and b/sdk/dd/da8/classedash__packager_1_1media_1_1RsaRequestSigner.png differ diff --git a/sdk/dd/daa/vod__media__info__dump__muxer__listener_8h_source.html b/sdk/dd/daa/vod__media__info__dump__muxer__listener_8h_source.html new file mode 100644 index 0000000000..b1e1a77f76 --- /dev/null +++ b/sdk/dd/daa/vod__media__info__dump__muxer__listener_8h_source.html @@ -0,0 +1,184 @@ + + + + + + +DASH Media Packaging SDK: media/event/vod_media_info_dump_muxer_listener.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
vod_media_info_dump_muxer_listener.h
+
+
+
1 // Copyright 2014 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 // Implementation of MuxerListener that converts the info to a MediaInfo
+
8 // protobuf and dumps it to a file.
+
9 // This is specifically for VOD.
+
10 
+
11 #ifndef MEDIA_EVENT_VOD_MEDIA_INFO_DUMP_MUXER_LISTENER_H_
+
12 #define MEDIA_EVENT_VOD_MEDIA_INFO_DUMP_MUXER_LISTENER_H_
+
13 
+
14 #include <string>
+
15 #include <vector>
+
16 
+
17 #include "packager/base/compiler_specific.h"
+
18 #include "packager/base/memory/scoped_ptr.h"
+
19 #include "packager/media/base/muxer_options.h"
+
20 #include "packager/media/event/muxer_listener.h"
+
21 
+
22 namespace edash_packager {
+
23 
+
24 class MediaInfo;
+
25 
+
26 namespace media {
+
27 
+ +
29  public:
+
30  VodMediaInfoDumpMuxerListener(const std::string& output_file_name);
+ +
32 
+
35  void SetContentProtectionSchemeIdUri(const std::string& scheme_id_uri);
+
36 
+
39  virtual void OnEncryptionInfoReady(
+
40  bool is_initial_encryption_info,
+
41  const std::string& content_protection_uuid,
+
42  const std::string& content_protection_name_version,
+
43  const std::vector<uint8_t>& default_key_id,
+
44  const std::vector<uint8_t>& pssh) OVERRIDE;
+
45  virtual void OnMediaStart(
+
46  const MuxerOptions& muxer_options,
+
47  const StreamInfo& stream_info,
+
48  uint32_t time_scale,
+
49  ContainerType container_type) OVERRIDE;
+
50  virtual void OnSampleDurationReady(uint32_t sample_duration) OVERRIDE;
+
51  virtual void OnMediaEnd(bool has_init_range,
+
52  uint64_t init_range_start,
+
53  uint64_t init_range_end,
+
54  bool has_index_range,
+
55  uint64_t index_range_start,
+
56  uint64_t index_range_end,
+
57  float duration_seconds,
+
58  uint64_t file_size) OVERRIDE;
+
59  virtual void OnNewSegment(uint64_t start_time,
+
60  uint64_t duration,
+
61  uint64_t segment_file_size) OVERRIDE;
+
63 
+
64  private:
+
65  // Write |media_info_| to |output_file_name_|.
+
66  bool SerializeMediaInfoToFile();
+
67 
+
68  std::string output_file_name_;
+
69  std::string scheme_id_uri_;
+
70  scoped_ptr<MediaInfo> media_info_;
+
71 
+
72  bool is_encrypted_;
+
73  // Storage for values passed to OnEncryptionInfoReady().
+
74  std::string content_protection_uuid_;
+
75  std::string content_protection_name_version_;
+
76  std::string default_key_id_;
+
77  std::string pssh_;
+
78 
+
79  DISALLOW_COPY_AND_ASSIGN(VodMediaInfoDumpMuxerListener);
+
80 };
+
81 
+
82 } // namespace media
+
83 } // namespace edash_packager
+
84 
+
85 #endif // MEDIA_EVENT_VOD_MEDIA_INFO_DUMP_MUXER_LISTENER_H_
+
Abstract class holds stream information.
Definition: stream_info.h:25
+ +
This structure contains the list of configuration options for Muxer.
Definition: muxer_options.h:18
+
virtual void OnSampleDurationReady(uint32_t sample_duration) OVERRIDE
+ + +
+ + + + diff --git a/sdk/dd/dab/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry.html b/sdk/dd/dab/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry.html new file mode 100644 index 0000000000..2a0ec57b65 --- /dev/null +++ b/sdk/dd/dab/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry.html @@ -0,0 +1,128 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::SampleToGroupEntry Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::SampleToGroupEntry Struct Reference
+
+
+ + + + +

+Public Types

enum  GroupDescriptionIndexBase { kTrackGroupDescriptionIndexBase = 0, +kTrackFragmentGroupDescriptionIndexBase = 0x10000 + }
 
+ + + + + +

+Public Attributes

+uint32_t sample_count
 
+uint32_t group_description_index
 
+

Detailed Description

+
+

Definition at line 497 of file box_definitions.h.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/sdk/dd/dbc/buffer__reader_8cc_source.html b/sdk/dd/dbc/buffer__reader_8cc_source.html new file mode 100644 index 0000000000..802e7e348b --- /dev/null +++ b/sdk/dd/dbc/buffer__reader_8cc_source.html @@ -0,0 +1,195 @@ + + + + + + +DASH Media Packaging SDK: media/base/buffer_reader.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
buffer_reader.cc
+
+
+
1 // Copyright 2014 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/base/buffer_reader.h"
+
8 
+
9 #include "packager/base/logging.h"
+
10 
+
11 namespace edash_packager {
+
12 namespace media {
+
13 
+
14 bool BufferReader::Read1(uint8_t* v) {
+
15  DCHECK(v != NULL);
+
16  if (!HasBytes(1))
+
17  return false;
+
18  *v = buf_[pos_++];
+
19  return true;
+
20 }
+
21 
+
22 bool BufferReader::Read2(uint16_t* v) {
+
23  return Read(v);
+
24 }
+
25 bool BufferReader::Read2s(int16_t* v) {
+
26  return Read(v);
+
27 }
+
28 bool BufferReader::Read4(uint32_t* v) {
+
29  return Read(v);
+
30 }
+
31 bool BufferReader::Read4s(int32_t* v) {
+
32  return Read(v);
+
33 }
+
34 bool BufferReader::Read8(uint64_t* v) {
+
35  return Read(v);
+
36 }
+
37 bool BufferReader::Read8s(int64_t* v) {
+
38  return Read(v);
+
39 }
+
40 bool BufferReader::ReadNBytesInto8(uint64_t* v, size_t num_bytes) {
+
41  return ReadNBytes(v, num_bytes);
+
42 }
+
43 bool BufferReader::ReadNBytesInto8s(int64_t* v, size_t num_bytes) {
+
44  return ReadNBytes(v, num_bytes);
+
45 }
+
46 
+
47 bool BufferReader::ReadToVector(std::vector<uint8_t>* vec, size_t count) {
+
48  DCHECK(vec != NULL);
+
49  if (!HasBytes(count))
+
50  return false;
+
51  vec->assign(buf_ + pos_, buf_ + pos_ + count);
+
52  pos_ += count;
+
53  return true;
+
54 }
+
55 
+
56 bool BufferReader::SkipBytes(size_t num_bytes) {
+
57  if (!HasBytes(num_bytes))
+
58  return false;
+
59  pos_ += num_bytes;
+
60  return true;
+
61 }
+
62 
+
63 template <typename T>
+
64 bool BufferReader::Read(T* v) {
+
65  return ReadNBytes(v, sizeof(*v));
+
66 }
+
67 
+
68 template <typename T>
+
69 bool BufferReader::ReadNBytes(T* v, size_t num_bytes) {
+
70  DCHECK(v != NULL);
+
71  DCHECK_LE(num_bytes, sizeof(*v));
+
72  if (!HasBytes(num_bytes))
+
73  return false;
+
74 
+
75  // Sign extension is required only if
+
76  // |num_bytes| is less than size of T, and
+
77  // T is a signed type.
+
78  const bool sign_extension_required =
+
79  num_bytes < sizeof(*v) && static_cast<T>(-1) < 0;
+
80  // Perform sign extension by casting the byte value to int8_t, which will be
+
81  // sign extended automatically when it is implicitly converted to T.
+
82  T tmp = sign_extension_required ? static_cast<int8_t>(buf_[pos_++])
+
83  : buf_[pos_++];
+
84  for (size_t i = 1; i < num_bytes; ++i) {
+
85  tmp <<= 8;
+
86  tmp |= buf_[pos_++];
+
87  }
+
88  *v = tmp;
+
89  return true;
+
90 }
+
91 
+
92 } // namespace media
+
93 } // namespace edash_packager
+
bool Read1(uint8_t *v) WARN_UNUSED_RESULT
+
bool SkipBytes(size_t num_bytes) WARN_UNUSED_RESULT
+
bool ReadNBytesInto8(uint64_t *v, size_t num_bytes) WARN_UNUSED_RESULT
+ +
+ + + + diff --git a/sdk/dd/dbd/classedash__packager_1_1media_1_1AesCtrEncryptor-members.html b/sdk/dd/dbd/classedash__packager_1_1media_1_1AesCtrEncryptor-members.html new file mode 100644 index 0000000000..96d879bfb5 --- /dev/null +++ b/sdk/dd/dbd/classedash__packager_1_1media_1_1AesCtrEncryptor-members.html @@ -0,0 +1,118 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::AesCtrEncryptor Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + +
AesCtrEncryptor() (defined in edash_packager::media::AesCtrEncryptor)edash_packager::media::AesCtrEncryptor
block_offset() const (defined in edash_packager::media::AesCtrEncryptor)edash_packager::media::AesCtrEncryptorinline
Decrypt(const uint8_t *ciphertext, size_t ciphertext_size, uint8_t *plaintext) (defined in edash_packager::media::AesCtrEncryptor)edash_packager::media::AesCtrEncryptorinline
Decrypt(const std::vector< uint8_t > &ciphertext, std::vector< uint8_t > *plaintext) (defined in edash_packager::media::AesCtrEncryptor)edash_packager::media::AesCtrEncryptorinline
Decrypt(const std::string &ciphertext, std::string *plaintext) (defined in edash_packager::media::AesCtrEncryptor)edash_packager::media::AesCtrEncryptorinline
Encrypt(const uint8_t *plaintext, size_t plaintext_size, uint8_t *ciphertext) (defined in edash_packager::media::AesCtrEncryptor)edash_packager::media::AesCtrEncryptor
Encrypt(const std::vector< uint8_t > &plaintext, std::vector< uint8_t > *ciphertext) (defined in edash_packager::media::AesCtrEncryptor)edash_packager::media::AesCtrEncryptorinline
Encrypt(const std::string &plaintext, std::string *ciphertext) (defined in edash_packager::media::AesCtrEncryptor)edash_packager::media::AesCtrEncryptorinline
InitializeWithIv(const std::vector< uint8_t > &key, const std::vector< uint8_t > &iv)edash_packager::media::AesCtrEncryptor
InitializeWithRandomIv(const std::vector< uint8_t > &key, uint8_t iv_size)edash_packager::media::AesCtrEncryptor
iv() const (defined in edash_packager::media::AesCtrEncryptor)edash_packager::media::AesCtrEncryptorinline
SetIv(const std::vector< uint8_t > &iv)edash_packager::media::AesCtrEncryptor
UpdateIv()edash_packager::media::AesCtrEncryptor
~AesCtrEncryptor() (defined in edash_packager::media::AesCtrEncryptor)edash_packager::media::AesCtrEncryptor
+ + + + diff --git a/sdk/dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html b/sdk/dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html new file mode 100644 index 0000000000..9ea98693da --- /dev/null +++ b/sdk/dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html @@ -0,0 +1,189 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::MediaInformation Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::MediaInformation Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::MediaInformation:
+
+
+ + +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + +

+Public Attributes

+DataInformation dinf
 
+SampleTable sample_table
 
+VideoMediaHeader vmhd
 
+SoundMediaHeader smhd
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 377 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::MediaInformation::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1294 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.png b/sdk/dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.png new file mode 100644 index 0000000000..9d7a265dbe Binary files /dev/null and b/sdk/dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.png differ diff --git a/sdk/dd/dbf/classedash__packager_1_1MpdNotifier-members.html b/sdk/dd/dbf/classedash__packager_1_1MpdNotifier-members.html new file mode 100644 index 0000000000..7d741992bf --- /dev/null +++ b/sdk/dd/dbf/classedash__packager_1_1MpdNotifier-members.html @@ -0,0 +1,114 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::MpdNotifier Member List
+
+
+ +

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

+ + + + + + + + + + + +
AddContentProtectionElement(uint32_t container_id, const ContentProtectionElement &content_protection_element)=0edash_packager::MpdNotifierpure virtual
dash_profile() const edash_packager::MpdNotifierinline
Flush()=0edash_packager::MpdNotifierpure virtual
Init()=0edash_packager::MpdNotifierpure virtual
MpdNotifier(DashProfile dash_profile) (defined in edash_packager::MpdNotifier)edash_packager::MpdNotifierinline
NotifyEncryptionUpdate(uint32_t container_id, const std::string &drm_uuid, const std::vector< uint8_t > &new_key_id, const std::vector< uint8_t > &new_pssh)=0edash_packager::MpdNotifierpure virtual
NotifyNewContainer(const MediaInfo &media_info, uint32_t *container_id)=0edash_packager::MpdNotifierpure virtual
NotifyNewSegment(uint32_t container_id, uint64_t start_time, uint64_t duration, uint64_t size)=0edash_packager::MpdNotifierpure virtual
NotifySampleDuration(uint32_t container_id, uint32_t sample_duration)=0edash_packager::MpdNotifierpure virtual
~MpdNotifier() (defined in edash_packager::MpdNotifier)edash_packager::MpdNotifierinlinevirtual
+ + + + diff --git a/sdk/dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html b/sdk/dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html new file mode 100644 index 0000000000..f2741f5e3d --- /dev/null +++ b/sdk/dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html @@ -0,0 +1,186 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::ProtectionSchemeInfo Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::ProtectionSchemeInfo Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::ProtectionSchemeInfo:
+
+
+ + +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + +

+Public Attributes

+OriginalFormat format
 
+SchemeType type
 
+SchemeInfo info
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 101 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::ProtectionSchemeInfo::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 296 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.png b/sdk/dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.png new file mode 100644 index 0000000000..55636b6e3e Binary files /dev/null and b/sdk/dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.png differ diff --git a/sdk/dd/dcb/classedash__packager_1_1MpdNotifierFactory.html b/sdk/dd/dcb/classedash__packager_1_1MpdNotifierFactory.html new file mode 100644 index 0000000000..455c2dade7 --- /dev/null +++ b/sdk/dd/dcb/classedash__packager_1_1MpdNotifierFactory.html @@ -0,0 +1,120 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::MpdNotifierFactory Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::MpdNotifierFactory Class Referenceabstract
+
+
+ +

#include <mpd_writer.h>

+ + + + +

+Public Member Functions

+virtual scoped_ptr< MpdNotifierCreate (DashProfile dash_profile, const MpdOptions &mpd_options, const std::vector< std::string > &base_urls, const std::string &output_path)=0
 
+

Detailed Description

+

This is mainly for testing, and is implementation detail. No need to worry about this class if you are just using the API. Inject a factory and mock MpdNotifier to test the MpdWriter implementation.

+ +

Definition at line 34 of file mpd_writer.h.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/sdk/dd/dcf/structedash__packager_1_1media_1_1H264PPS.html b/sdk/dd/dcf/structedash__packager_1_1media_1_1H264PPS.html new file mode 100644 index 0000000000..1f2e9005bc --- /dev/null +++ b/sdk/dd/dcf/structedash__packager_1_1media_1_1H264PPS.html @@ -0,0 +1,175 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::H264PPS Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::H264PPS Struct Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+int pic_parameter_set_id
 
+int seq_parameter_set_id
 
+bool entropy_coding_mode_flag
 
+bool bottom_field_pic_order_in_frame_present_flag
 
+int num_slice_groups_minus1
 
+int num_ref_idx_l0_default_active_minus1
 
+int num_ref_idx_l1_default_active_minus1
 
+bool weighted_pred_flag
 
+int weighted_bipred_idc
 
+int pic_init_qp_minus26
 
+int pic_init_qs_minus26
 
+int chroma_qp_index_offset
 
+bool deblocking_filter_control_present_flag
 
+bool constrained_intra_pred_flag
 
+bool redundant_pic_cnt_present_flag
 
+bool transform_8x8_mode_flag
 
+bool pic_scaling_matrix_present_flag
 
+int scaling_list4x4 [6][kH264ScalingList4x4Length]
 
+int scaling_list8x8 [6][kH264ScalingList8x8Length]
 
+int second_chroma_qp_index_offset
 
+

Detailed Description

+
+

Definition at line 136 of file h264_parser.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/dd/dd2/buffer__writer_8h_source.html b/sdk/dd/dd2/buffer__writer_8h_source.html new file mode 100644 index 0000000000..5eae41bf52 --- /dev/null +++ b/sdk/dd/dd2/buffer__writer_8h_source.html @@ -0,0 +1,167 @@ + + + + + + +DASH Media Packaging SDK: media/base/buffer_writer.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
buffer_writer.h
+
+
+
1 // Copyright 2014 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_BASE_BUFFER_WRITER_H_
+
8 #define MEDIA_BASE_BUFFER_WRITER_H_
+
9 
+
10 #include <vector>
+
11 
+
12 #include "packager/base/stl_util.h"
+
13 #include "packager/media/base/status.h"
+
14 
+
15 namespace edash_packager {
+
16 namespace media {
+
17 
+
18 class File;
+
19 
+
22 class BufferWriter {
+
23  public:
+
24  BufferWriter();
+
29  explicit BufferWriter(size_t reserved_size_in_bytes);
+
30  ~BufferWriter();
+
31 
+
35  void AppendInt(uint8_t v);
+
36  void AppendInt(uint16_t v);
+
37  void AppendInt(uint32_t v);
+
38  void AppendInt(uint64_t v);
+
39  void AppendInt(int16_t v);
+
40  void AppendInt(int32_t v);
+
41  void AppendInt(int64_t v);
+
43 
+
47  void AppendNBytes(uint64_t v, size_t num_bytes);
+
48 
+
49  void AppendVector(const std::vector<uint8_t>& v);
+
50  void AppendArray(const uint8_t* buf, size_t size);
+
51  void AppendBuffer(const BufferWriter& buffer);
+
52 
+
53  void Swap(BufferWriter* buffer) { buf_.swap(buffer->buf_); }
+
54  void SwapBuffer(std::vector<uint8_t>* buffer) { buf_.swap(*buffer); }
+
55 
+
56  void Clear() { buf_.clear(); }
+
57  size_t Size() const { return buf_.size(); }
+
59  const uint8_t* Buffer() const { return vector_as_array(&buf_); }
+
60 
+
65  Status WriteToFile(File* file);
+
66 
+
67  private:
+
68  // Internal implementation of multi-byte write.
+
69  template <typename T>
+
70  void AppendInternal(T v);
+
71 
+
72  std::vector<uint8_t> buf_;
+
73 
+
74  DISALLOW_COPY_AND_ASSIGN(BufferWriter);
+
75 };
+
76 
+
77 } // namespace media
+
78 } // namespace edash_packager
+
79 
+
80 #endif // MEDIA_BASE_BUFFER_WRITER_H_
+
void AppendNBytes(uint64_t v, size_t num_bytes)
+
Define an abstract file interface.
Definition: file.h:22
+ + + +
const uint8_t * Buffer() const
Definition: buffer_writer.h:59
+ +
+ + + + diff --git a/sdk/dd/dd3/buffer__writer_8cc_source.html b/sdk/dd/dd3/buffer__writer_8cc_source.html new file mode 100644 index 0000000000..11e29d2893 --- /dev/null +++ b/sdk/dd/dd3/buffer__writer_8cc_source.html @@ -0,0 +1,194 @@ + + + + + + +DASH Media Packaging SDK: media/base/buffer_writer.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
buffer_writer.cc
+
+
+
1 // Copyright 2014 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/base/buffer_writer.h"
+
8 
+
9 #include "packager/base/sys_byteorder.h"
+
10 #include "packager/media/file/file.h"
+
11 
+
12 namespace edash_packager {
+
13 namespace media {
+
14 
+
15 BufferWriter::BufferWriter() {
+
16  const size_t kDefaultReservedCapacity = 0x40000; // 256KB.
+
17  buf_.reserve(kDefaultReservedCapacity);
+
18 }
+
19 BufferWriter::BufferWriter(size_t reserved_size_in_bytes) {
+
20  buf_.reserve(reserved_size_in_bytes);
+
21 }
+
22 BufferWriter::~BufferWriter() {}
+
23 
+
24 void BufferWriter::AppendInt(uint8_t v) {
+
25  buf_.push_back(v);
+
26 }
+
27 void BufferWriter::AppendInt(uint16_t v) {
+
28  AppendInternal(base::HostToNet16(v));
+
29 }
+
30 void BufferWriter::AppendInt(uint32_t v) {
+
31  AppendInternal(base::HostToNet32(v));
+
32 }
+
33 void BufferWriter::AppendInt(uint64_t v) {
+
34  AppendInternal(base::HostToNet64(v));
+
35 }
+
36 void BufferWriter::AppendInt(int16_t v) {
+
37  AppendInternal(base::HostToNet16(v));
+
38 }
+
39 void BufferWriter::AppendInt(int32_t v) {
+
40  AppendInternal(base::HostToNet32(v));
+
41 }
+
42 void BufferWriter::AppendInt(int64_t v) {
+
43  AppendInternal(base::HostToNet64(v));
+
44 }
+
45 
+
46 void BufferWriter::AppendNBytes(uint64_t v, size_t num_bytes) {
+
47  DCHECK_GE(sizeof(v), num_bytes);
+
48  v = base::HostToNet64(v);
+
49  const uint8_t* data = reinterpret_cast<uint8_t*>(&v);
+
50  AppendArray(&data[sizeof(v) - num_bytes], num_bytes);
+
51 }
+
52 
+
53 void BufferWriter::AppendVector(const std::vector<uint8_t>& v) {
+
54  buf_.insert(buf_.end(), v.begin(), v.end());
+
55 }
+
56 
+
57 void BufferWriter::AppendArray(const uint8_t* buf, size_t size) {
+
58  buf_.insert(buf_.end(), buf, buf + size);
+
59 }
+
60 
+
61 void BufferWriter::AppendBuffer(const BufferWriter& buffer) {
+
62  buf_.insert(buf_.end(), buffer.buf_.begin(), buffer.buf_.end());
+
63 }
+
64 
+ +
66  DCHECK(file);
+
67  DCHECK(!buf_.empty());
+
68 
+
69  size_t remaining_size = buf_.size();
+
70  const uint8_t* buf = &buf_[0];
+
71  while (remaining_size > 0) {
+
72  int64_t size_written = file->Write(buf, remaining_size);
+
73  if (size_written <= 0) {
+
74  return Status(error::FILE_FAILURE,
+
75  "Fail to write to file in BufferWriter");
+
76  }
+
77  remaining_size -= size_written;
+
78  buf += size_written;
+
79  }
+
80  buf_.clear();
+
81  return Status::OK;
+
82 }
+
83 
+
84 template <typename T>
+
85 void BufferWriter::AppendInternal(T v) {
+
86  AppendArray(reinterpret_cast<uint8_t*>(&v), sizeof(T));
+
87 }
+
88 
+
89 } // namespace media
+
90 } // namespace edash_packager
+
void AppendNBytes(uint64_t v, size_t num_bytes)
+
Define an abstract file interface.
Definition: file.h:22
+ + + +
virtual int64_t Write(const void *buffer, uint64_t length)=0
+
+ + + + diff --git a/sdk/dd/de7/xml__node_8h_source.html b/sdk/dd/de7/xml__node_8h_source.html new file mode 100644 index 0000000000..6f0aa556ba --- /dev/null +++ b/sdk/dd/de7/xml__node_8h_source.html @@ -0,0 +1,236 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/xml/xml_node.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
xml_node.h
+
+
+
1 // Copyright 2014 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 // Classes to wrap XML operations. XmlNode is a generic wrapper class for
+
8 // XmlNode in libxml2. There are also MPD XML specific classes as well.
+
9 
+
10 #ifndef MPD_BASE_XML_XML_NODE_H_
+
11 #define MPD_BASE_XML_XML_NODE_H_
+
12 
+
13 #include <libxml/tree.h>
+
14 #include <stdint.h>
+
15 
+
16 #include <list>
+
17 
+
18 #include "packager/mpd/base/content_protection_element.h"
+
19 #include "packager/mpd/base/media_info.pb.h"
+
20 #include "packager/mpd/base/xml/scoped_xml_ptr.h"
+
21 
+
22 namespace edash_packager {
+
23 
+
24 struct SegmentInfo;
+
25 
+
26 namespace xml {
+
27 
+
31 class XmlNode {
+
32  public:
+
35  explicit XmlNode(const char* name);
+
36  virtual ~XmlNode();
+
37 
+ +
43 
+
45  bool AddElements(const std::vector<Element>& elements);
+
46 
+
50  void SetStringAttribute(const char* attribute_name,
+
51  const std::string& attribute);
+
52 
+
56  void SetIntegerAttribute(const char* attribute_name, uint64_t number);
+
57 
+
61  void SetFloatingPointAttribute(const char* attribute_name, double number);
+
62 
+
65  void SetId(uint32_t id);
+
66 
+
73  void SetContent(const std::string& content);
+
74 
+ +
79 
+
82  xmlNodePtr Release();
+
83 
+
85  xmlNodePtr GetRawPtr();
+
86 
+
87  private:
+ +
89 
+
90  DISALLOW_COPY_AND_ASSIGN(XmlNode);
+
91 };
+
92 
+ +
97  public:
+
98  virtual ~RepresentationBaseXmlNode();
+
99  bool AddContentProtectionElements(
+
100  const std::list<ContentProtectionElement>& content_protection_elements);
+
101 
+
102  protected:
+
103  explicit RepresentationBaseXmlNode(const char* name);
+
104 
+
105  private:
+
106  bool AddContentProtectionElement(
+
107  const ContentProtectionElement& content_protection_element);
+
108 
+
109  DISALLOW_COPY_AND_ASSIGN(RepresentationBaseXmlNode);
+
110 };
+
111 
+ +
114  public:
+ +
116  virtual ~AdaptationSetXmlNode();
+
117 
+
120  void AddRoleElement(const std::string& scheme_id_uri,
+
121  const std::string& value);
+
122 
+
123  private:
+
124  DISALLOW_COPY_AND_ASSIGN(AdaptationSetXmlNode);
+
125 };
+
126 
+ +
129  public:
+ +
131  virtual ~RepresentationXmlNode();
+
132 
+
137  bool AddVideoInfo(const MediaInfo::VideoInfo& video_info);
+
138 
+
143  bool AddAudioInfo(const MediaInfo::AudioInfo& audio_info);
+
144 
+
149  bool AddVODOnlyInfo(const MediaInfo& media_info);
+
150 
+
153  bool AddLiveOnlyInfo(const MediaInfo& media_info,
+
154  const std::list<SegmentInfo>& segment_infos,
+
155  uint32_t start_number);
+
156 
+
157  private:
+
158  // Add AudioChannelConfiguration element. Note that it is a required element
+
159  // for audio Representations.
+
160  bool AddAudioChannelInfo(const MediaInfo::AudioInfo& audio_info);
+
161 
+
162  // Add audioSamplingRate attribute to this element, if present.
+
163  void AddAudioSamplingRateInfo(const MediaInfo::AudioInfo& audio_info);
+
164 
+
165  DISALLOW_COPY_AND_ASSIGN(RepresentationXmlNode);
+
166 };
+
167 
+
168 } // namespace xml
+
169 } // namespace edash_packager
+
170 #endif // MPD_BASE_XML_XML_NODE_H_
+
bool AddVODOnlyInfo(const MediaInfo &media_info)
Definition: xml_node.cc:246
+
bool AddLiveOnlyInfo(const MediaInfo &media_info, const std::list< SegmentInfo > &segment_infos, uint32_t start_number)
Definition: xml_node.cc:293
+
void SetStringAttribute(const char *attribute_name, const std::string &attribute)
Definition: xml_node.cc:106
+
void SetFloatingPointAttribute(const char *attribute_name, double number)
Definition: xml_node.cc:121
+
bool AddAudioInfo(const MediaInfo::AudioInfo &audio_info)
Definition: xml_node.cc:238
+
void SetId(uint32_t id)
Definition: xml_node.cc:130
+ + +
XmlNode(const char *name)
Definition: xml_node.cc:57
+
void SetIntegerAttribute(const char *attribute_name, uint64_t number)
Definition: xml_node.cc:113
+ +
bool AddElements(const std::vector< Element > &elements)
Adds Elements to this node using the Element struct.
Definition: xml_node.cc:76
+ +
bool AddChild(ScopedXmlPtr< xmlNode >::type child)
Definition: xml_node.cc:64
+
bool AddVideoInfo(const MediaInfo::VideoInfo &video_info)
Definition: xml_node.cc:218
+
RepresentationType in MPD.
Definition: xml_node.h:128
+ +
void SetContent(const std::string &content)
Definition: xml_node.cc:134
+
void AddRoleElement(const std::string &scheme_id_uri, const std::string &value)
Definition: xml_node.cc:206
+
ScopedXmlPtr< xmlNode >::type PassScopedPtr()
Definition: xml_node.cc:139
+
scoped_ptr for libxml2 resources.
+
AdaptationSetType specified in MPD.
Definition: xml_node.h:113
+
+ + + + diff --git a/sdk/dd/dec/structedash__packager_1_1media_1_1OnMediaEndParameters-members.html b/sdk/dd/dec/structedash__packager_1_1media_1_1OnMediaEndParameters-members.html new file mode 100644 index 0000000000..0ceb4776a0 --- /dev/null +++ b/sdk/dd/dec/structedash__packager_1_1media_1_1OnMediaEndParameters-members.html @@ -0,0 +1,112 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::OnMediaEndParameters Member List
+
+
+ +

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

+ + + + + + + + + +
duration_seconds (defined in edash_packager::media::OnMediaEndParameters)edash_packager::media::OnMediaEndParameters
file_size (defined in edash_packager::media::OnMediaEndParameters)edash_packager::media::OnMediaEndParameters
has_index_range (defined in edash_packager::media::OnMediaEndParameters)edash_packager::media::OnMediaEndParameters
has_init_range (defined in edash_packager::media::OnMediaEndParameters)edash_packager::media::OnMediaEndParameters
index_range_end (defined in edash_packager::media::OnMediaEndParameters)edash_packager::media::OnMediaEndParameters
index_range_start (defined in edash_packager::media::OnMediaEndParameters)edash_packager::media::OnMediaEndParameters
init_range_end (defined in edash_packager::media::OnMediaEndParameters)edash_packager::media::OnMediaEndParameters
init_range_start (defined in edash_packager::media::OnMediaEndParameters)edash_packager::media::OnMediaEndParameters
+ + + + diff --git a/sdk/dd/dee/box__definitions_8cc_source.html b/sdk/dd/dee/box__definitions_8cc_source.html new file mode 100644 index 0000000000..4fe55ec7a3 --- /dev/null +++ b/sdk/dd/dee/box__definitions_8cc_source.html @@ -0,0 +1,2179 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/box_definitions.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
box_definitions.cc
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/formats/mp4/box_definitions.h"
+
6 
+
7 #include <limits>
+
8 
+
9 #include "packager/base/logging.h"
+
10 #include "packager/media/base/bit_reader.h"
+
11 #include "packager/media/formats/mp4/box_buffer.h"
+
12 #include "packager/media/formats/mp4/rcheck.h"
+
13 
+
14 namespace {
+
15 const uint32_t kFourCCSize = 4;
+
16 // Additional 32-bit size. We don't support 64-bit size.
+
17 const uint32_t kBoxSize = kFourCCSize + sizeof(uint32_t);
+
18 // Additional 1-byte version and 3-byte flags.
+
19 const uint32_t kFullBoxSize = kBoxSize + 4;
+
20 
+
21 // Key Id size as defined in CENC spec.
+
22 const uint32_t kCencKeyIdSize = 16;
+
23 
+
24 // 9 uint32_t in big endian formatted array.
+
25 const uint8_t kUnityMatrix[] = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
26  0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+
27  0, 0, 0, 0, 0, 0, 0, 0, 0x40, 0, 0, 0};
+
28 
+
29 // Default entries for HandlerReference box.
+
30 const char kVideoHandlerName[] = "VideoHandler";
+
31 const char kAudioHandlerName[] = "SoundHandler";
+
32 
+
33 // Default values for VideoSampleEntry box.
+
34 const uint32_t kVideoResolution = 0x00480000; // 72 dpi.
+
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
+
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; }
+
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_minus_one & 0xfc) == 0xfc);
+
907  length_size = (length_size_minus_one & 0x3) + 1;
+
908 
+
909  uint8_t num_sps;
+
910  RCHECK(reader->Read1(&num_sps) && (num_sps & 0xe0) == 0xe0);
+
911  num_sps &= 0x1f;
+
912 
+
913  sps_list.resize(num_sps);
+
914  for (int i = 0; i < num_sps; i++) {
+
915  uint16_t sps_length;
+
916  RCHECK(reader->Read2(&sps_length) &&
+
917  reader->ReadToVector(&sps_list[i], sps_length));
+
918  }
+
919 
+
920  uint8_t num_pps;
+
921  RCHECK(reader->Read1(&num_pps));
+
922 
+
923  pps_list.resize(num_pps);
+
924  for (int i = 0; i < num_pps; i++) {
+
925  uint16_t pps_length;
+
926  RCHECK(reader->Read2(&pps_length) &&
+
927  reader->ReadToVector(&pps_list[i], pps_length));
+
928  }
+
929 
+
930  return true;
+
931 }
+
932 
+ +
934  atom_size = 0;
+
935  if (!data.empty())
+
936  atom_size = kBoxSize + data.size();
+
937  return atom_size;
+
938 }
+
939 
+
940 PixelAspectRatioBox::PixelAspectRatioBox() : h_spacing(0), v_spacing(0) {}
+
941 PixelAspectRatioBox::~PixelAspectRatioBox() {}
+
942 FourCC PixelAspectRatioBox::BoxType() const { return FOURCC_PASP; }
+
943 
+ +
945  RCHECK(Box::ReadWrite(buffer) &&
+
946  buffer->ReadWriteUInt32(&h_spacing) &&
+
947  buffer->ReadWriteUInt32(&v_spacing));
+
948  return true;
+
949 }
+
950 
+ +
952  // This box is optional. Skip it if it is not initialized.
+
953  atom_size = 0;
+
954  if (h_spacing != 0 || v_spacing != 0) {
+
955  // Both values must be positive.
+
956  DCHECK(h_spacing != 0 && v_spacing != 0);
+
957  atom_size = kBoxSize + sizeof(h_spacing) + sizeof(v_spacing);
+
958  }
+
959  return atom_size;
+
960 }
+
961 
+
962 VideoSampleEntry::VideoSampleEntry()
+
963  : format(FOURCC_NULL), data_reference_index(1), width(0), height(0) {}
+
964 
+
965 VideoSampleEntry::~VideoSampleEntry() {}
+
966 FourCC VideoSampleEntry::BoxType() const {
+
967  LOG(ERROR) << "VideoSampleEntry should be parsed according to the "
+
968  << "handler type recovered in its Media ancestor.";
+
969  return FOURCC_NULL;
+
970 }
+
971 
+ +
973  if (buffer->Reading()) {
+
974  DCHECK(buffer->reader());
+
975  format = buffer->reader()->type();
+
976  } else {
+
977  RCHECK(buffer->ReadWriteUInt32(&atom_size) &&
+
978  buffer->ReadWriteFourCC(&format));
+
979  }
+
980 
+
981  uint32_t video_resolution = kVideoResolution;
+
982  uint16_t video_frame_count = kVideoFrameCount;
+
983  uint16_t video_depth = kVideoDepth;
+
984  int16_t predefined = -1;
+
985  RCHECK(buffer->IgnoreBytes(6) && // reserved.
+
986  buffer->ReadWriteUInt16(&data_reference_index) &&
+
987  buffer->IgnoreBytes(16) && // predefined 0.
+
988  buffer->ReadWriteUInt16(&width) &&
+
989  buffer->ReadWriteUInt16(&height) &&
+
990  buffer->ReadWriteUInt32(&video_resolution) &&
+
991  buffer->ReadWriteUInt32(&video_resolution) &&
+
992  buffer->IgnoreBytes(4) && // reserved.
+
993  buffer->ReadWriteUInt16(&video_frame_count) &&
+
994  buffer->IgnoreBytes(32) && // comparessor_name.
+
995  buffer->ReadWriteUInt16(&video_depth) &&
+
996  buffer->ReadWriteInt16(&predefined));
+
997 
+
998  RCHECK(buffer->PrepareChildren());
+
999 
+
1000  if (format == FOURCC_ENCV) {
+
1001  if (buffer->Reading()) {
+
1002  // Continue scanning until a recognized protection scheme is found,
+
1003  // or until we run out of protection schemes.
+
1004  while (sinf.type.type != FOURCC_CENC) {
+
1005  if (!buffer->ReadWriteChild(&sinf))
+
1006  return false;
+
1007  }
+
1008  } else {
+
1009  RCHECK(buffer->ReadWriteChild(&sinf));
+
1010  }
+
1011  }
+
1012 
+
1013  if (format == FOURCC_AVC1 ||
+
1014  (format == FOURCC_ENCV && sinf.format.format == FOURCC_AVC1)) {
+
1015  RCHECK(buffer->ReadWriteChild(&avcc));
+
1016  }
+
1017  RCHECK(buffer->TryReadWriteChild(&pixel_aspect));
+
1018  return true;
+
1019 }
+
1020 
+ +
1022  atom_size = kBoxSize + sizeof(data_reference_index) + sizeof(width) +
+
1023  sizeof(height) + sizeof(kVideoResolution) * 2 +
+
1024  sizeof(kVideoFrameCount) + sizeof(kVideoDepth) +
+
1025  pixel_aspect.ComputeSize() + sinf.ComputeSize() +
+
1026  avcc.ComputeSize() + 32 + // 32 bytes comparessor_name.
+
1027  6 + 4 + 16 + 2; // 6 + 4 bytes reserved, 16 + 2 bytes predefined.
+
1028  return atom_size;
+
1029 }
+
1030 
+
1031 ElementaryStreamDescriptor::ElementaryStreamDescriptor() {}
+
1032 ElementaryStreamDescriptor::~ElementaryStreamDescriptor() {}
+
1033 FourCC ElementaryStreamDescriptor::BoxType() const { return FOURCC_ESDS; }
+
1034 
+ +
1036  RCHECK(FullBox::ReadWrite(buffer));
+
1037  if (buffer->Reading()) {
+
1038  std::vector<uint8_t> data;
+
1039  RCHECK(buffer->ReadWriteVector(&data, buffer->Size() - buffer->Pos()));
+
1040  RCHECK(es_descriptor.Parse(data));
+
1041  if (es_descriptor.IsAAC()) {
+
1042  RCHECK(aac_audio_specific_config.Parse(
+
1043  es_descriptor.decoder_specific_info()));
+
1044  }
+
1045  } else {
+
1046  DCHECK(buffer->writer());
+
1047  es_descriptor.Write(buffer->writer());
+
1048  }
+
1049  return true;
+
1050 }
+
1051 
+ +
1053  // This box is optional. Skip it if not initialized.
+
1054  atom_size = 0;
+
1055  if (es_descriptor.object_type() != kForbidden)
+
1056  atom_size = kFullBoxSize + es_descriptor.ComputeSize();
+
1057  return atom_size;
+
1058 }
+
1059 
+
1060 AudioSampleEntry::AudioSampleEntry()
+
1061  : format(FOURCC_NULL),
+
1062  data_reference_index(1),
+
1063  channelcount(2),
+
1064  samplesize(16),
+
1065  samplerate(0) {}
+
1066 
+
1067 AudioSampleEntry::~AudioSampleEntry() {}
+
1068 
+
1069 FourCC AudioSampleEntry::BoxType() const {
+
1070  LOG(ERROR) << "AudioSampleEntry should be parsed according to the "
+
1071  << "handler type recovered in its Media ancestor.";
+
1072  return FOURCC_NULL;
+
1073 }
+
1074 
+ +
1076  if (buffer->Reading()) {
+
1077  DCHECK(buffer->reader());
+
1078  format = buffer->reader()->type();
+
1079  } else {
+
1080  RCHECK(buffer->ReadWriteUInt32(&atom_size) &&
+
1081  buffer->ReadWriteFourCC(&format));
+
1082  }
+
1083 
+
1084  // Convert from integer to 16.16 fixed point for writing.
+
1085  samplerate <<= 16;
+
1086  RCHECK(buffer->IgnoreBytes(6) && // reserved.
+
1087  buffer->ReadWriteUInt16(&data_reference_index) &&
+
1088  buffer->IgnoreBytes(8) && // reserved.
+
1089  buffer->ReadWriteUInt16(&channelcount) &&
+
1090  buffer->ReadWriteUInt16(&samplesize) &&
+
1091  buffer->IgnoreBytes(4) && // predefined.
+
1092  buffer->ReadWriteUInt32(&samplerate));
+
1093  // Convert from 16.16 fixed point to integer.
+
1094  samplerate >>= 16;
+
1095 
+
1096  RCHECK(buffer->PrepareChildren());
+
1097  if (format == FOURCC_ENCA) {
+
1098  if (buffer->Reading()) {
+
1099  // Continue scanning until a recognized protection scheme is found,
+
1100  // or until we run out of protection schemes.
+
1101  while (sinf.type.type != FOURCC_CENC) {
+
1102  if (!buffer->ReadWriteChild(&sinf))
+
1103  return false;
+
1104  }
+
1105  } else {
+
1106  RCHECK(buffer->ReadWriteChild(&sinf));
+
1107  }
+
1108  }
+
1109 
+
1110  // ESDS is not valid in case of EAC3.
+
1111  RCHECK(buffer->TryReadWriteChild(&esds));
+
1112  return true;
+
1113 }
+
1114 
+ +
1116  atom_size = kBoxSize + sizeof(data_reference_index) + sizeof(channelcount) +
+
1117  sizeof(samplesize) + sizeof(samplerate) + sinf.ComputeSize() +
+
1118  esds.ComputeSize() + 6 + 8 + // 6 + 8 bytes reserved.
+
1119  4; // 4 bytes predefined.
+
1120  return atom_size;
+
1121 }
+
1122 
+
1123 MediaHeader::MediaHeader()
+
1124  : creation_time(0), modification_time(0), timescale(0), duration(0) {
+
1125  language[0] = 0;
+
1126 }
+
1127 MediaHeader::~MediaHeader() {}
+
1128 FourCC MediaHeader::BoxType() const { return FOURCC_MDHD; }
+
1129 
+ +
1131  RCHECK(FullBox::ReadWrite(buffer));
+
1132 
+
1133  uint8_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
+
1134  RCHECK(buffer->ReadWriteUInt64NBytes(&creation_time, num_bytes) &&
+
1135  buffer->ReadWriteUInt64NBytes(&modification_time, num_bytes) &&
+
1136  buffer->ReadWriteUInt32(&timescale) &&
+
1137  buffer->ReadWriteUInt64NBytes(&duration, num_bytes));
+
1138 
+
1139  if (buffer->Reading()) {
+
1140  // Read language codes into temp first then use BitReader to read the
+
1141  // values. ISO-639-2/T language code: unsigned int(5)[3] language (2 bytes).
+
1142  std::vector<uint8_t> temp;
+
1143  RCHECK(buffer->ReadWriteVector(&temp, 2));
+
1144 
+
1145  BitReader bit_reader(&temp[0], 2);
+
1146  bit_reader.SkipBits(1);
+
1147  for (int i = 0; i < 3; ++i) {
+
1148  CHECK(bit_reader.ReadBits(5, &language[i]));
+
1149  language[i] += 0x60;
+
1150  }
+
1151  language[3] = '\0';
+
1152  } else {
+
1153  // Set up default language if it is not set.
+
1154  const char kUndefinedLanguage[] = "und";
+
1155  if (language[0] == 0)
+
1156  strcpy(language, kUndefinedLanguage);
+
1157 
+
1158  // Lang format: bit(1) pad, unsigned int(5)[3] language.
+
1159  uint16_t lang = 0;
+
1160  for (int i = 0; i < 3; ++i)
+
1161  lang |= (language[i] - 0x60) << ((2 - i) * 5);
+
1162  RCHECK(buffer->ReadWriteUInt16(&lang));
+
1163  }
+
1164 
+
1165  RCHECK(buffer->IgnoreBytes(2)); // predefined.
+
1166  return true;
+
1167 }
+
1168 
+ +
1170  version = IsFitIn32Bits(creation_time, modification_time, duration) ? 0 : 1;
+
1171  atom_size = kFullBoxSize + sizeof(timescale) +
+
1172  sizeof(uint32_t) * (1 + version) * 3 + 2 + // 2 bytes language.
+
1173  2; // 2 bytes predefined.
+
1174  return atom_size;
+
1175 }
+
1176 
+
1177 VideoMediaHeader::VideoMediaHeader()
+
1178  : graphicsmode(0), opcolor_red(0), opcolor_green(0), opcolor_blue(0) {
+
1179  const uint32_t kVideoMediaHeaderFlags = 1;
+
1180  flags = kVideoMediaHeaderFlags;
+
1181 }
+
1182 VideoMediaHeader::~VideoMediaHeader() {}
+
1183 FourCC VideoMediaHeader::BoxType() const { return FOURCC_VMHD; }
+ +
1185  RCHECK(FullBox::ReadWrite(buffer) &&
+
1186  buffer->ReadWriteUInt16(&graphicsmode) &&
+
1187  buffer->ReadWriteUInt16(&opcolor_red) &&
+
1188  buffer->ReadWriteUInt16(&opcolor_green) &&
+
1189  buffer->ReadWriteUInt16(&opcolor_blue));
+
1190  return true;
+
1191 }
+
1192 
+ +
1194  atom_size = kFullBoxSize + sizeof(graphicsmode) + sizeof(opcolor_red) +
+
1195  sizeof(opcolor_green) + sizeof(opcolor_blue);
+
1196  return atom_size;
+
1197 }
+
1198 
+
1199 SoundMediaHeader::SoundMediaHeader() : balance(0) {}
+
1200 SoundMediaHeader::~SoundMediaHeader() {}
+
1201 FourCC SoundMediaHeader::BoxType() const { return FOURCC_SMHD; }
+ +
1203  RCHECK(FullBox::ReadWrite(buffer) &&
+
1204  buffer->ReadWriteUInt16(&balance) &&
+
1205  buffer->IgnoreBytes(2)); // reserved.
+
1206  return true;
+
1207 }
+
1208 
+ +
1210  atom_size = kFullBoxSize + sizeof(balance) + sizeof(uint16_t);
+
1211  return atom_size;
+
1212 }
+
1213 
+
1214 DataEntryUrl::DataEntryUrl() {
+
1215  const uint32_t kDataEntryUrlFlags = 1;
+
1216  flags = kDataEntryUrlFlags;
+
1217 }
+
1218 DataEntryUrl::~DataEntryUrl() {}
+
1219 FourCC DataEntryUrl::BoxType() const { return FOURCC_URL; }
+ +
1221  RCHECK(FullBox::ReadWrite(buffer));
+
1222  if (buffer->Reading()) {
+
1223  RCHECK(buffer->ReadWriteVector(&location, buffer->Size() - buffer->Pos()));
+
1224  } else {
+
1225  RCHECK(buffer->ReadWriteVector(&location, location.size()));
+
1226  }
+
1227  return true;
+
1228 }
+
1229 
+ +
1231  atom_size = kBoxSize + sizeof(flags) + location.size();
+
1232  return atom_size;
+
1233 }
+
1234 
+
1235 DataReference::DataReference() {
+
1236  // Default 1 entry.
+
1237  data_entry.resize(1);
+
1238 }
+
1239 DataReference::~DataReference() {}
+
1240 FourCC DataReference::BoxType() const { return FOURCC_DREF; }
+ +
1242  uint32_t entry_count = data_entry.size();
+
1243  RCHECK(FullBox::ReadWrite(buffer) &&
+
1244  buffer->ReadWriteUInt32(&entry_count));
+
1245  data_entry.resize(entry_count);
+
1246  RCHECK(buffer->PrepareChildren());
+
1247  for (uint32_t i = 0; i < entry_count; ++i)
+
1248  RCHECK(buffer->ReadWriteChild(&data_entry[i]));
+
1249  return true;
+
1250 }
+
1251 
+ +
1253  uint32_t count = data_entry.size();
+
1254  atom_size = kFullBoxSize + sizeof(count);
+
1255  for (uint32_t i = 0; i < count; ++i)
+
1256  atom_size += data_entry[i].ComputeSize();
+
1257  return atom_size;
+
1258 }
+
1259 
+
1260 DataInformation::DataInformation() {}
+
1261 DataInformation::~DataInformation() {}
+
1262 FourCC DataInformation::BoxType() const { return FOURCC_DINF; }
+
1263 
+ +
1265  return Box::ReadWrite(buffer) &&
+
1266  buffer->PrepareChildren() &&
+
1267  buffer->ReadWriteChild(&dref);
+
1268 }
+
1269 
+ +
1271  atom_size = kBoxSize + dref.ComputeSize();
+
1272  return atom_size;
+
1273 }
+
1274 
+
1275 MediaInformation::MediaInformation() {}
+
1276 MediaInformation::~MediaInformation() {}
+
1277 FourCC MediaInformation::BoxType() const { return FOURCC_MINF; }
+
1278 
+ +
1280  RCHECK(Box::ReadWrite(buffer) &&
+
1281  buffer->PrepareChildren() &&
+
1282  buffer->ReadWriteChild(&dinf) &&
+
1283  buffer->ReadWriteChild(&sample_table));
+
1284  if (sample_table.description.type == kVideo)
+
1285  RCHECK(buffer->ReadWriteChild(&vmhd));
+
1286  else if (sample_table.description.type == kAudio)
+
1287  RCHECK(buffer->ReadWriteChild(&smhd));
+
1288  else
+
1289  NOTIMPLEMENTED();
+
1290  // Hint is not supported for now.
+
1291  return true;
+
1292 }
+
1293 
+ +
1295  atom_size = kBoxSize + dinf.ComputeSize() + sample_table.ComputeSize();
+
1296  if (sample_table.description.type == kVideo)
+
1297  atom_size += vmhd.ComputeSize();
+
1298  else if (sample_table.description.type == kAudio)
+
1299  atom_size += smhd.ComputeSize();
+
1300  return atom_size;
+
1301 }
+
1302 
+
1303 Media::Media() {}
+
1304 Media::~Media() {}
+
1305 FourCC Media::BoxType() const { return FOURCC_MDIA; }
+
1306 
+ +
1308  RCHECK(Box::ReadWrite(buffer) &&
+
1309  buffer->PrepareChildren() &&
+
1310  buffer->ReadWriteChild(&header) &&
+
1311  buffer->ReadWriteChild(&handler));
+
1312  if (buffer->Reading()) {
+
1313  // Maddeningly, the HandlerReference box specifies how to parse the
+
1314  // SampleDescription box, making the latter the only box (of those that we
+
1315  // support) which cannot be parsed correctly on its own (or even with
+
1316  // information from its strict ancestor tree). We thus copy the handler type
+
1317  // to the sample description box *before* parsing it to provide this
+
1318  // information while parsing.
+
1319  information.sample_table.description.type = handler.type;
+
1320  } else {
+
1321  DCHECK_EQ(information.sample_table.description.type, handler.type);
+
1322  }
+
1323  RCHECK(buffer->ReadWriteChild(&information));
+
1324  return true;
+
1325 }
+
1326 
+ +
1328  atom_size = kBoxSize + header.ComputeSize() + handler.ComputeSize() +
+
1329  information.ComputeSize();
+
1330  return atom_size;
+
1331 }
+
1332 
+
1333 Track::Track() {}
+
1334 Track::~Track() {}
+
1335 FourCC Track::BoxType() const { return FOURCC_TRAK; }
+
1336 
+ +
1338  RCHECK(Box::ReadWrite(buffer) &&
+
1339  buffer->PrepareChildren() &&
+
1340  buffer->ReadWriteChild(&header) &&
+
1341  buffer->ReadWriteChild(&media) &&
+
1342  buffer->TryReadWriteChild(&edit));
+
1343  return true;
+
1344 }
+
1345 
+ +
1347  atom_size = kBoxSize + header.ComputeSize() + media.ComputeSize() +
+
1348  edit.ComputeSize();
+
1349  return atom_size;
+
1350 }
+
1351 
+
1352 MovieExtendsHeader::MovieExtendsHeader() : fragment_duration(0) {}
+
1353 MovieExtendsHeader::~MovieExtendsHeader() {}
+
1354 FourCC MovieExtendsHeader::BoxType() const { return FOURCC_MEHD; }
+
1355 
+ +
1357  RCHECK(FullBox::ReadWrite(buffer));
+
1358  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
+
1359  RCHECK(buffer->ReadWriteUInt64NBytes(&fragment_duration, num_bytes));
+
1360  return true;
+
1361 }
+
1362 
+ +
1364  atom_size = 0;
+
1365  // This box is optional. Skip it if it is not used.
+
1366  if (fragment_duration != 0) {
+
1367  version = IsFitIn32Bits(fragment_duration) ? 0 : 1;
+
1368  atom_size = kFullBoxSize + sizeof(uint32_t) * (1 + version);
+
1369  }
+
1370  return atom_size;
+
1371 }
+
1372 
+
1373 TrackExtends::TrackExtends()
+
1374  : track_id(0),
+
1375  default_sample_description_index(0),
+
1376  default_sample_duration(0),
+
1377  default_sample_size(0),
+
1378  default_sample_flags(0) {}
+
1379 TrackExtends::~TrackExtends() {}
+
1380 FourCC TrackExtends::BoxType() const { return FOURCC_TREX; }
+
1381 
+ +
1383  RCHECK(FullBox::ReadWrite(buffer) &&
+
1384  buffer->ReadWriteUInt32(&track_id) &&
+
1385  buffer->ReadWriteUInt32(&default_sample_description_index) &&
+
1386  buffer->ReadWriteUInt32(&default_sample_duration) &&
+
1387  buffer->ReadWriteUInt32(&default_sample_size) &&
+
1388  buffer->ReadWriteUInt32(&default_sample_flags));
+
1389  return true;
+
1390 }
+
1391 
+ +
1393  atom_size = kFullBoxSize + sizeof(track_id) +
+
1394  sizeof(default_sample_description_index) +
+
1395  sizeof(default_sample_duration) + sizeof(default_sample_size) +
+
1396  sizeof(default_sample_flags);
+
1397  return atom_size;
+
1398 }
+
1399 
+
1400 MovieExtends::MovieExtends() {}
+
1401 MovieExtends::~MovieExtends() {}
+
1402 FourCC MovieExtends::BoxType() const { return FOURCC_MVEX; }
+
1403 
+ +
1405  RCHECK(Box::ReadWrite(buffer) &&
+
1406  buffer->PrepareChildren() &&
+
1407  buffer->TryReadWriteChild(&header));
+
1408  if (buffer->Reading()) {
+
1409  DCHECK(buffer->reader());
+
1410  RCHECK(buffer->reader()->ReadChildren(&tracks));
+
1411  } else {
+
1412  for (uint32_t i = 0; i < tracks.size(); ++i)
+
1413  RCHECK(tracks[i].ReadWrite(buffer));
+
1414  }
+
1415  return true;
+
1416 }
+
1417 
+ +
1419  // This box is optional. Skip it if it does not contain any track.
+
1420  atom_size = 0;
+
1421  if (tracks.size() != 0) {
+
1422  atom_size = kBoxSize + header.ComputeSize();
+
1423  for (uint32_t i = 0; i < tracks.size(); ++i)
+
1424  atom_size += tracks[i].ComputeSize();
+
1425  }
+
1426  return atom_size;
+
1427 }
+
1428 
+
1429 Movie::Movie() {}
+
1430 Movie::~Movie() {}
+
1431 FourCC Movie::BoxType() const { return FOURCC_MOOV; }
+
1432 
+ +
1434  RCHECK(Box::ReadWrite(buffer) &&
+
1435  buffer->PrepareChildren() &&
+
1436  buffer->ReadWriteChild(&header) &&
+
1437  buffer->TryReadWriteChild(&extends));
+
1438  if (buffer->Reading()) {
+
1439  BoxReader* reader = buffer->reader();
+
1440  DCHECK(reader);
+
1441  RCHECK(reader->ReadChildren(&tracks) &&
+
1442  reader->TryReadChildren(&pssh));
+
1443  } else {
+
1444  for (uint32_t i = 0; i < tracks.size(); ++i)
+
1445  RCHECK(tracks[i].ReadWrite(buffer));
+
1446  for (uint32_t i = 0; i < pssh.size(); ++i)
+
1447  RCHECK(pssh[i].ReadWrite(buffer));
+
1448  }
+
1449  return true;
+
1450 }
+
1451 
+ +
1453  atom_size = kBoxSize + header.ComputeSize() + extends.ComputeSize();
+
1454  for (uint32_t i = 0; i < tracks.size(); ++i)
+
1455  atom_size += tracks[i].ComputeSize();
+
1456  for (uint32_t i = 0; i < pssh.size(); ++i)
+
1457  atom_size += pssh[i].ComputeSize();
+
1458  return atom_size;
+
1459 }
+
1460 
+
1461 TrackFragmentDecodeTime::TrackFragmentDecodeTime() : decode_time(0) {}
+
1462 TrackFragmentDecodeTime::~TrackFragmentDecodeTime() {}
+
1463 FourCC TrackFragmentDecodeTime::BoxType() const { return FOURCC_TFDT; }
+
1464 
+ +
1466  RCHECK(FullBox::ReadWrite(buffer));
+
1467  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
+
1468  RCHECK(buffer->ReadWriteUInt64NBytes(&decode_time, num_bytes));
+
1469  return true;
+
1470 }
+
1471 
+ +
1473  version = IsFitIn32Bits(decode_time) ? 0 : 1;
+
1474  atom_size = kFullBoxSize + sizeof(uint32_t) * (1 + version);
+
1475  return atom_size;
+
1476 }
+
1477 
+
1478 MovieFragmentHeader::MovieFragmentHeader() : sequence_number(0) {}
+
1479 MovieFragmentHeader::~MovieFragmentHeader() {}
+
1480 FourCC MovieFragmentHeader::BoxType() const { return FOURCC_MFHD; }
+
1481 
+ +
1483  return FullBox::ReadWrite(buffer) &&
+
1484  buffer->ReadWriteUInt32(&sequence_number);
+
1485 }
+
1486 
+ +
1488  atom_size = kFullBoxSize + sizeof(sequence_number);
+
1489  return atom_size;
+
1490 }
+
1491 
+
1492 TrackFragmentHeader::TrackFragmentHeader()
+
1493  : track_id(0),
+
1494  sample_description_index(0),
+
1495  default_sample_duration(0),
+
1496  default_sample_size(0),
+
1497  default_sample_flags(0) {}
+
1498 
+
1499 TrackFragmentHeader::~TrackFragmentHeader() {}
+
1500 FourCC TrackFragmentHeader::BoxType() const { return FOURCC_TFHD; }
+
1501 
+ +
1503  RCHECK(FullBox::ReadWrite(buffer) &&
+
1504  buffer->ReadWriteUInt32(&track_id));
+
1505 
+
1506  if (flags & kBaseDataOffsetPresentMask) {
+
1507  // MSE requires 'default-base-is-moof' to be set and
+
1508  // 'base-data-offset-present' not to be set. We omit these checks as some
+
1509  // valid files in the wild don't follow these rules, though they use moof as
+
1510  // base.
+
1511  uint64_t base_data_offset;
+
1512  RCHECK(buffer->ReadWriteUInt64(&base_data_offset));
+
1513  DLOG(WARNING) << "base-data-offset-present is not expected. Assumes "
+
1514  "default-base-is-moof.";
+
1515  }
+
1516 
+
1517  if (flags & kSampleDescriptionIndexPresentMask) {
+
1518  RCHECK(buffer->ReadWriteUInt32(&sample_description_index));
+
1519  } else if (buffer->Reading()) {
+
1520  sample_description_index = 0;
+
1521  }
+
1522 
+
1523  if (flags & kDefaultSampleDurationPresentMask) {
+
1524  RCHECK(buffer->ReadWriteUInt32(&default_sample_duration));
+
1525  } else if (buffer->Reading()) {
+
1526  default_sample_duration = 0;
+
1527  }
+
1528 
+
1529  if (flags & kDefaultSampleSizePresentMask) {
+
1530  RCHECK(buffer->ReadWriteUInt32(&default_sample_size));
+
1531  } else if (buffer->Reading()) {
+
1532  default_sample_size = 0;
+
1533  }
+
1534 
+
1535  if (flags & kDefaultSampleFlagsPresentMask)
+
1536  RCHECK(buffer->ReadWriteUInt32(&default_sample_flags));
+
1537  return true;
+
1538 }
+
1539 
+ +
1541  atom_size = kFullBoxSize + sizeof(track_id);
+
1542  if (flags & kSampleDescriptionIndexPresentMask)
+
1543  atom_size += sizeof(sample_description_index);
+
1544  if (flags & kDefaultSampleDurationPresentMask)
+
1545  atom_size += sizeof(default_sample_duration);
+
1546  if (flags & kDefaultSampleSizePresentMask)
+
1547  atom_size += sizeof(default_sample_size);
+
1548  if (flags & kDefaultSampleFlagsPresentMask)
+
1549  atom_size += sizeof(default_sample_flags);
+
1550  return atom_size;
+
1551 }
+
1552 
+
1553 TrackFragmentRun::TrackFragmentRun() : sample_count(0), data_offset(0) {}
+
1554 TrackFragmentRun::~TrackFragmentRun() {}
+
1555 FourCC TrackFragmentRun::BoxType() const { return FOURCC_TRUN; }
+
1556 
+ +
1558  if (!buffer->Reading()) {
+
1559  // Determine whether version 0 or version 1 should be used.
+
1560  // Use version 0 if possible, use version 1 if there is a negative
+
1561  // sample_offset value.
+
1562  version = 0;
+
1563  if (flags & kSampleCompTimeOffsetsPresentMask) {
+
1564  for (uint32_t i = 0; i < sample_count; ++i) {
+
1565  if (sample_composition_time_offsets[i] < 0) {
+
1566  version = 1;
+
1567  break;
+
1568  }
+
1569  }
+
1570  }
+
1571  }
+
1572 
+
1573  RCHECK(FullBox::ReadWrite(buffer) &&
+
1574  buffer->ReadWriteUInt32(&sample_count));
+
1575 
+
1576  bool data_offset_present = (flags & kDataOffsetPresentMask) != 0;
+
1577  bool first_sample_flags_present = (flags & kFirstSampleFlagsPresentMask) != 0;
+
1578  bool sample_duration_present = (flags & kSampleDurationPresentMask) != 0;
+
1579  bool sample_size_present = (flags & kSampleSizePresentMask) != 0;
+
1580  bool sample_flags_present = (flags & kSampleFlagsPresentMask) != 0;
+
1581  bool sample_composition_time_offsets_present =
+
1582  (flags & kSampleCompTimeOffsetsPresentMask) != 0;
+
1583 
+
1584  if (data_offset_present) {
+
1585  RCHECK(buffer->ReadWriteUInt32(&data_offset));
+
1586  } else {
+
1587  // NOTE: If the data-offset is not present, then the data for this run
+
1588  // starts immediately after the data of the previous run, or at the
+
1589  // base-data-offset defined by the track fragment header if this is the
+
1590  // first run in a track fragment. If the data-offset is present, it is
+
1591  // relative to the base-data-offset established in the track fragment
+
1592  // header.
+
1593  NOTIMPLEMENTED();
+
1594  }
+
1595 
+
1596  uint32_t first_sample_flags;
+
1597 
+
1598  if (buffer->Reading()) {
+
1599  if (first_sample_flags_present)
+
1600  RCHECK(buffer->ReadWriteUInt32(&first_sample_flags));
+
1601 
+
1602  if (sample_duration_present)
+
1603  sample_durations.resize(sample_count);
+
1604  if (sample_size_present)
+
1605  sample_sizes.resize(sample_count);
+
1606  if (sample_flags_present)
+
1607  sample_flags.resize(sample_count);
+
1608  if (sample_composition_time_offsets_present)
+
1609  sample_composition_time_offsets.resize(sample_count);
+
1610  } else {
+
1611  if (first_sample_flags_present) {
+
1612  first_sample_flags = sample_flags[0];
+
1613  DCHECK(sample_flags.size() == 1);
+
1614  RCHECK(buffer->ReadWriteUInt32(&first_sample_flags));
+
1615  }
+
1616 
+
1617  if (sample_duration_present)
+
1618  DCHECK(sample_durations.size() == sample_count);
+
1619  if (sample_size_present)
+
1620  DCHECK(sample_sizes.size() == sample_count);
+
1621  if (sample_flags_present)
+
1622  DCHECK(sample_flags.size() == sample_count);
+
1623  if (sample_composition_time_offsets_present)
+
1624  DCHECK(sample_composition_time_offsets.size() == sample_count);
+
1625  }
+
1626 
+
1627  for (uint32_t i = 0; i < sample_count; ++i) {
+
1628  if (sample_duration_present)
+
1629  RCHECK(buffer->ReadWriteUInt32(&sample_durations[i]));
+
1630  if (sample_size_present)
+
1631  RCHECK(buffer->ReadWriteUInt32(&sample_sizes[i]));
+
1632  if (sample_flags_present)
+
1633  RCHECK(buffer->ReadWriteUInt32(&sample_flags[i]));
+
1634 
+
1635  if (sample_composition_time_offsets_present) {
+
1636  if (version == 0) {
+
1637  uint32_t sample_offset = sample_composition_time_offsets[i];
+
1638  RCHECK(buffer->ReadWriteUInt32(&sample_offset));
+
1639  sample_composition_time_offsets[i] = sample_offset;
+
1640  } else {
+
1641  int32_t sample_offset = sample_composition_time_offsets[i];
+
1642  RCHECK(buffer->ReadWriteInt32(&sample_offset));
+
1643  sample_composition_time_offsets[i] = sample_offset;
+
1644  }
+
1645  }
+
1646  }
+
1647 
+
1648  if (buffer->Reading()) {
+
1649  if (first_sample_flags_present) {
+
1650  if (sample_flags.size() == 0) {
+
1651  sample_flags.push_back(first_sample_flags);
+
1652  } else {
+
1653  sample_flags[0] = first_sample_flags;
+
1654  }
+
1655  }
+
1656  }
+
1657  return true;
+
1658 }
+
1659 
+ +
1661  atom_size = kFullBoxSize + sizeof(sample_count);
+
1662  if (flags & kDataOffsetPresentMask)
+
1663  atom_size += sizeof(data_offset);
+
1664  if (flags & kFirstSampleFlagsPresentMask)
+
1665  atom_size += sizeof(uint32_t);
+
1666  uint32_t fields = (flags & kSampleDurationPresentMask ? 1 : 0) +
+
1667  (flags & kSampleSizePresentMask ? 1 : 0) +
+
1668  (flags & kSampleFlagsPresentMask ? 1 : 0) +
+
1669  (flags & kSampleCompTimeOffsetsPresentMask ? 1 : 0);
+
1670  atom_size += fields * sizeof(uint32_t) * sample_count;
+
1671  return atom_size;
+
1672 }
+
1673 
+
1674 SampleToGroup::SampleToGroup() : grouping_type(0), grouping_type_parameter(0) {}
+
1675 SampleToGroup::~SampleToGroup() {}
+
1676 FourCC SampleToGroup::BoxType() const { return FOURCC_SBGP; }
+
1677 
+ +
1679  RCHECK(FullBox::ReadWrite(buffer) &&
+
1680  buffer->ReadWriteUInt32(&grouping_type));
+
1681  if (version == 1)
+
1682  RCHECK(buffer->ReadWriteUInt32(&grouping_type_parameter));
+
1683 
+
1684  if (grouping_type != FOURCC_SEIG) {
+
1685  DCHECK(buffer->Reading());
+
1686  DLOG(WARNING) << "Sample group '" << grouping_type << "' is not supported.";
+
1687  return true;
+
1688  }
+
1689 
+
1690  uint32_t count = entries.size();
+
1691  RCHECK(buffer->ReadWriteUInt32(&count));
+
1692  entries.resize(count);
+
1693  for (uint32_t i = 0; i < count; ++i) {
+
1694  RCHECK(buffer->ReadWriteUInt32(&entries[i].sample_count) &&
+
1695  buffer->ReadWriteUInt32(&entries[i].group_description_index));
+
1696  }
+
1697  return true;
+
1698 }
+
1699 
+ +
1701  // This box is optional. Skip it if it is not used.
+
1702  atom_size = 0;
+
1703  if (!entries.empty()) {
+
1704  atom_size = kFullBoxSize + sizeof(grouping_type) +
+
1705  (version == 1 ? sizeof(grouping_type_parameter) : 0) +
+
1706  sizeof(uint32_t) + entries.size() * sizeof(entries[0]);
+
1707  }
+
1708  return atom_size;
+
1709 }
+
1710 
+
1711 CencSampleEncryptionInfoEntry::CencSampleEncryptionInfoEntry()
+
1712  : is_encrypted(false), iv_size(0) {
+
1713 }
+
1714 CencSampleEncryptionInfoEntry::~CencSampleEncryptionInfoEntry() {};
+
1715 
+
1716 SampleGroupDescription::SampleGroupDescription() : grouping_type(0) {}
+
1717 SampleGroupDescription::~SampleGroupDescription() {}
+
1718 FourCC SampleGroupDescription::BoxType() const { return FOURCC_SGPD; }
+
1719 
+ +
1721  RCHECK(FullBox::ReadWrite(buffer) &&
+
1722  buffer->ReadWriteUInt32(&grouping_type));
+
1723 
+
1724  if (grouping_type != FOURCC_SEIG) {
+
1725  DCHECK(buffer->Reading());
+
1726  DLOG(WARNING) << "Sample group '" << grouping_type << "' is not supported.";
+
1727  return true;
+
1728  }
+
1729 
+
1730  const size_t kEntrySize = sizeof(uint32_t) + kCencKeyIdSize;
+
1731  uint32_t default_length = 0;
+
1732  if (version == 1) {
+
1733  if (buffer->Reading()) {
+
1734  RCHECK(buffer->ReadWriteUInt32(&default_length));
+
1735  RCHECK(default_length == 0 || default_length >= kEntrySize);
+
1736  } else {
+
1737  default_length = kEntrySize;
+
1738  RCHECK(buffer->ReadWriteUInt32(&default_length));
+
1739  }
+
1740  }
+
1741 
+
1742  uint32_t count = entries.size();
+
1743  RCHECK(buffer->ReadWriteUInt32(&count));
+
1744  entries.resize(count);
+
1745  for (uint32_t i = 0; i < count; ++i) {
+
1746  if (version == 1) {
+
1747  if (buffer->Reading() && default_length == 0) {
+
1748  uint32_t description_length = 0;
+
1749  RCHECK(buffer->ReadWriteUInt32(&description_length));
+
1750  RCHECK(description_length >= kEntrySize);
+
1751  }
+
1752  }
+
1753 
+
1754  if (!buffer->Reading()) {
+
1755  if (entries[i].key_id.size() != kCencKeyIdSize) {
+
1756  LOG(WARNING) << "CENC defines key id length of " << kCencKeyIdSize
+
1757  << " bytes; got " << entries[i].key_id.size()
+
1758  << ". Resized accordingly.";
+
1759  entries[i].key_id.resize(kCencKeyIdSize);
+
1760  }
+
1761  }
+
1762 
+
1763  uint8_t flag = entries[i].is_encrypted ? 1 : 0;
+
1764  RCHECK(buffer->IgnoreBytes(2) && // reserved.
+
1765  buffer->ReadWriteUInt8(&flag) &&
+
1766  buffer->ReadWriteUInt8(&entries[i].iv_size) &&
+
1767  buffer->ReadWriteVector(&entries[i].key_id, kCencKeyIdSize));
+
1768 
+
1769  if (buffer->Reading()) {
+
1770  entries[i].is_encrypted = (flag != 0);
+
1771  if (entries[i].is_encrypted) {
+
1772  RCHECK(entries[i].iv_size == 8 || entries[i].iv_size == 16);
+
1773  } else {
+
1774  RCHECK(entries[i].iv_size == 0);
+
1775  }
+
1776  }
+
1777  }
+
1778  return true;
+
1779 }
+
1780 
+ +
1782  // Version 0 is obsoleted, so always generate version 1 box.
+
1783  version = 1;
+
1784  // This box is optional. Skip it if it is not used.
+
1785  atom_size = 0;
+
1786  if (!entries.empty()) {
+
1787  const size_t kEntrySize = sizeof(uint32_t) + kCencKeyIdSize;
+
1788  atom_size = kFullBoxSize + sizeof(grouping_type) +
+
1789  (version == 1 ? sizeof(uint32_t) : 0) + sizeof(uint32_t) +
+
1790  entries.size() * kEntrySize;
+
1791  }
+
1792  return atom_size;
+
1793 }
+
1794 
+
1795 TrackFragment::TrackFragment() : decode_time_absent(false) {}
+
1796 TrackFragment::~TrackFragment() {}
+
1797 FourCC TrackFragment::BoxType() const { return FOURCC_TRAF; }
+
1798 
+ +
1800  RCHECK(Box::ReadWrite(buffer) &&
+
1801  buffer->PrepareChildren() &&
+
1802  buffer->ReadWriteChild(&header));
+
1803  if (buffer->Reading()) {
+
1804  DCHECK(buffer->reader());
+
1805  decode_time_absent = !buffer->reader()->ChildExist(&decode_time);
+
1806  if (!decode_time_absent)
+
1807  RCHECK(buffer->ReadWriteChild(&decode_time));
+
1808  RCHECK(buffer->reader()->TryReadChildren(&runs));
+
1809 
+
1810  // There could be multiple SampleGroupDescription and SampleToGroup boxes
+
1811  // with different grouping types. For common encryption, the relevant
+
1812  // grouping type is 'seig'. Continue reading until 'seig' is found, or
+
1813  // until running out of child boxes.
+
1814  while (sample_to_group.grouping_type != FOURCC_SEIG &&
+
1815  buffer->reader()->ChildExist(&sample_to_group)) {
+
1816  RCHECK(buffer->reader()->ReadChild(&sample_to_group));
+
1817  }
+
1818  while (sample_group_description.grouping_type != FOURCC_SEIG &&
+
1819  buffer->reader()->ChildExist(&sample_group_description)) {
+
1820  RCHECK(buffer->reader()->ReadChild(&sample_group_description));
+
1821  }
+
1822  } else {
+
1823  if (!decode_time_absent)
+
1824  RCHECK(buffer->ReadWriteChild(&decode_time));
+
1825  for (uint32_t i = 0; i < runs.size(); ++i)
+
1826  RCHECK(runs[i].ReadWrite(buffer));
+
1827  RCHECK(buffer->TryReadWriteChild(&sample_to_group) &&
+
1828  buffer->TryReadWriteChild(&sample_group_description));
+
1829  }
+
1830  return buffer->TryReadWriteChild(&auxiliary_size) &&
+
1831  buffer->TryReadWriteChild(&auxiliary_offset);
+
1832 }
+
1833 
+ +
1835  atom_size = kBoxSize + header.ComputeSize() + decode_time.ComputeSize() +
+
1836  sample_to_group.ComputeSize() +
+
1837  sample_group_description.ComputeSize() +
+
1838  auxiliary_size.ComputeSize() + auxiliary_offset.ComputeSize();
+
1839  for (uint32_t i = 0; i < runs.size(); ++i)
+
1840  atom_size += runs[i].ComputeSize();
+
1841  return atom_size;
+
1842 }
+
1843 
+
1844 MovieFragment::MovieFragment() {}
+
1845 MovieFragment::~MovieFragment() {}
+
1846 FourCC MovieFragment::BoxType() const { return FOURCC_MOOF; }
+
1847 
+ +
1849  RCHECK(Box::ReadWrite(buffer) &&
+
1850  buffer->PrepareChildren() &&
+
1851  buffer->ReadWriteChild(&header));
+
1852  if (buffer->Reading()) {
+
1853  BoxReader* reader = buffer->reader();
+
1854  DCHECK(reader);
+
1855  RCHECK(reader->ReadChildren(&tracks) &&
+
1856  reader->TryReadChildren(&pssh));
+
1857  } else {
+
1858  for (uint32_t i = 0; i < tracks.size(); ++i)
+
1859  RCHECK(tracks[i].ReadWrite(buffer));
+
1860  for (uint32_t i = 0; i < pssh.size(); ++i)
+
1861  RCHECK(pssh[i].ReadWrite(buffer));
+
1862  }
+
1863  return true;
+
1864 }
+
1865 
+ +
1867  atom_size = kBoxSize + header.ComputeSize();
+
1868  for (uint32_t i = 0; i < tracks.size(); ++i)
+
1869  atom_size += tracks[i].ComputeSize();
+
1870  for (uint32_t i = 0; i < pssh.size(); ++i)
+
1871  atom_size += pssh[i].ComputeSize();
+
1872  return atom_size;
+
1873 }
+
1874 
+
1875 SegmentIndex::SegmentIndex()
+
1876  : reference_id(0),
+
1877  timescale(0),
+
1878  earliest_presentation_time(0),
+
1879  first_offset(0) {}
+
1880 SegmentIndex::~SegmentIndex() {}
+
1881 FourCC SegmentIndex::BoxType() const { return FOURCC_SIDX; }
+
1882 
+ +
1884  RCHECK(FullBox::ReadWrite(buffer) &&
+
1885  buffer->ReadWriteUInt32(&reference_id) &&
+
1886  buffer->ReadWriteUInt32(&timescale));
+
1887 
+
1888  size_t num_bytes = (version == 1) ? sizeof(uint64_t) : sizeof(uint32_t);
+
1889  RCHECK(
+
1890  buffer->ReadWriteUInt64NBytes(&earliest_presentation_time, num_bytes) &&
+
1891  buffer->ReadWriteUInt64NBytes(&first_offset, num_bytes));
+
1892 
+
1893  uint16_t reference_count = references.size();
+
1894  RCHECK(buffer->IgnoreBytes(2) && // reserved.
+
1895  buffer->ReadWriteUInt16(&reference_count));
+
1896  references.resize(reference_count);
+
1897 
+
1898  uint32_t reference_type_size;
+
1899  uint32_t sap;
+
1900  for (uint32_t i = 0; i < reference_count; ++i) {
+
1901  if (!buffer->Reading()) {
+
1902  reference_type_size = references[i].referenced_size;
+
1903  if (references[i].reference_type)
+
1904  reference_type_size |= (1 << 31);
+
1905  sap = (references[i].sap_type << 28) | references[i].sap_delta_time;
+
1906  if (references[i].starts_with_sap)
+
1907  sap |= (1 << 31);
+
1908  }
+
1909  RCHECK(buffer->ReadWriteUInt32(&reference_type_size) &&
+
1910  buffer->ReadWriteUInt32(&references[i].subsegment_duration) &&
+
1911  buffer->ReadWriteUInt32(&sap));
+
1912  if (buffer->Reading()) {
+
1913  references[i].reference_type = (reference_type_size >> 31) ? true : false;
+
1914  references[i].referenced_size = reference_type_size & ~(1 << 31);
+
1915  references[i].starts_with_sap = (sap >> 31) ? true : false;
+
1916  references[i].sap_type =
+
1917  static_cast<SegmentReference::SAPType>((sap >> 28) & 0x07);
+
1918  references[i].sap_delta_time = sap & ~(0xF << 28);
+
1919  }
+
1920  }
+
1921  return true;
+
1922 }
+
1923 
+ +
1925  version = IsFitIn32Bits(earliest_presentation_time, first_offset) ? 0 : 1;
+
1926  atom_size = kFullBoxSize + sizeof(reference_id) + sizeof(timescale) +
+
1927  sizeof(uint32_t) * (1 + version) * 2 + 2 * sizeof(uint16_t) +
+
1928  3 * sizeof(uint32_t) * references.size();
+
1929  return atom_size;
+
1930 }
+
1931 
+
1932 MediaData::MediaData() : data_size(0) {}
+
1933 MediaData::~MediaData() {}
+
1934 FourCC MediaData::BoxType() const { return FOURCC_MDAT; }
+
1935 
+
1936 void MediaData::Write(BufferWriter* buffer) {
+
1937  buffer->AppendInt(ComputeSize());
+
1938  buffer->AppendInt(static_cast<uint32_t>(BoxType()));
+
1939 }
+
1940 
+
1941 uint32_t MediaData::ComputeSize() {
+
1942  return kBoxSize + data_size;
+
1943 }
+
1944 
+
1945 } // namespace mp4
+
1946 } // namespace media
+
1947 } // namespace edash_packager
+ +
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual uint32_t ComputeSize() OVERRIDE
+ +
bool ReadChildren(std::vector< T > *children) WARN_UNUSED_RESULT
Definition: box_reader.h:133
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual 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
+
virtual uint32_t ComputeSize() OVERRIDE
+ + +
virtual uint32_t ComputeSize() OVERRIDE
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual uint32_t ComputeSize() OVERRIDE
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+ +
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+ +
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual uint32_t ComputeSize() OVERRIDE
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+ + +
virtual 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
+ + + +
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+ + + +
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+ + +
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
Definition: box.cc:50
+
virtual uint32_t ComputeSize() OVERRIDE
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+ +
virtual 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
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+ +
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual uint32_t ComputeSize() OVERRIDE
+ + +
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual 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
+ +
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+ +
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual uint32_t ComputeSize() OVERRIDE
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+ +
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual uint32_t ComputeSize() OVERRIDE
+ +
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+ +
virtual uint32_t ComputeSize() OVERRIDE
+ +
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
bool IgnoreBytes(size_t num_bytes)
Definition: box_buffer.h:167
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual uint32_t ComputeSize() OVERRIDE
+
A class to read bit streams.
Definition: bit_reader.h:17
+ + +
virtual uint32_t ComputeSize() OVERRIDE
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+ + +
virtual uint32_t ComputeSize() OVERRIDE
+ +
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+ +
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+ +
virtual uint32_t ComputeSize() OVERRIDE
+
virtual uint32_t ComputeSize() OVERRIDE
+
virtual 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
+ +
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
void Write(BufferWriter *writer)
Definition: box.cc:25
+ + + +
bool TryReadChildren(std::vector< T > *children) WARN_UNUSED_RESULT
Definition: box_reader.h:139
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+ +
Class for reading MP4 boxes.
Definition: box_reader.h:24
+ +
virtual uint32_t ComputeSize() OVERRIDE
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+ +
virtual uint32_t ComputeSize() OVERRIDE
+ + +
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+ +
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
virtual uint32_t ComputeSize() OVERRIDE
+
virtual uint32_t ComputeSize() OVERRIDE
+
virtual uint32_t ComputeSize() OVERRIDE
+
virtual uint32_t ComputeSize() OVERRIDE
+
virtual bool ReadWrite(BoxBuffer *buffer) OVERRIDE
Read/write the mp4 box from/to BoxBuffer.
+
+ + + + diff --git a/sdk/dd/dfa/structedash__packager_1_1media_1_1MuxerOptions-members.html b/sdk/dd/dfa/structedash__packager_1_1media_1_1MuxerOptions-members.html new file mode 100644 index 0000000000..86c81b1e38 --- /dev/null +++ b/sdk/dd/dfa/structedash__packager_1_1media_1_1MuxerOptions-members.html @@ -0,0 +1,116 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::MuxerOptions Member List
+
+
+ +

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

+ + + + + + + + + + + + + +
bandwidthedash_packager::media::MuxerOptions
fragment_durationedash_packager::media::MuxerOptions
fragment_sap_alignededash_packager::media::MuxerOptions
MuxerOptions() (defined in edash_packager::media::MuxerOptions)edash_packager::media::MuxerOptions
num_subsegments_per_sidxedash_packager::media::MuxerOptions
output_file_nameedash_packager::media::MuxerOptions
segment_durationedash_packager::media::MuxerOptions
segment_sap_alignededash_packager::media::MuxerOptions
segment_templateedash_packager::media::MuxerOptions
single_segmentedash_packager::media::MuxerOptions
temp_diredash_packager::media::MuxerOptions
~MuxerOptions() (defined in edash_packager::media::MuxerOptions)edash_packager::media::MuxerOptions
+ + + + diff --git a/sdk/de/d0f/local__file_8h_source.html b/sdk/de/d0f/local__file_8h_source.html new file mode 100644 index 0000000000..a79d442429 --- /dev/null +++ b/sdk/de/d0f/local__file_8h_source.html @@ -0,0 +1,160 @@ + + + + + + +DASH Media Packaging SDK: media/file/local_file.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
local_file.h
+
+
+
1 // Copyright 2014 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 PACKAGER_FILE_LOCAL_FILE_H_
+
8 #define PACKAGER_FILE_LOCAL_FILE_H_
+
9 
+
10 #include <stdint.h>
+
11 
+
12 #include <string>
+
13 
+
14 #include "packager/base/compiler_specific.h"
+
15 #include "packager/media/file/file.h"
+
16 
+
17 namespace edash_packager {
+
18 namespace media {
+
19 
+
21 class LocalFile : public File {
+
22  public:
+
26  LocalFile(const char* file_name, const char* mode);
+
27 
+
30  virtual bool Close() OVERRIDE;
+
31  virtual int64_t Read(void* buffer, uint64_t length) OVERRIDE;
+
32  virtual int64_t Write(const void* buffer, uint64_t length) OVERRIDE;
+
33  virtual int64_t Size() OVERRIDE;
+
34  virtual bool Flush() OVERRIDE;
+
35  virtual bool Seek(uint64_t position) OVERRIDE;
+
36  virtual bool Tell(uint64_t* position) OVERRIDE;
+
38 
+
42  static bool Delete(const char* file_name);
+
43 
+
44  protected:
+
45  virtual ~LocalFile();
+
46 
+
47  virtual bool Open() OVERRIDE;
+
48 
+
49  private:
+
50  std::string file_mode_;
+
51  FILE* internal_file_;
+
52 
+
53  DISALLOW_COPY_AND_ASSIGN(LocalFile);
+
54 };
+
55 
+
56 } // namespace media
+
57 } // namespace edash_packager
+
58 
+
59 #endif // PACKAGER_FILE_LOCAL_FILE_H_
+
virtual int64_t Read(void *buffer, uint64_t length) OVERRIDE
Definition: local_file.cc:30
+
virtual bool Tell(uint64_t *position) OVERRIDE
Definition: local_file.cc:68
+
Define an abstract file interface.
Definition: file.h:22
+
LocalFile(const char *file_name, const char *mode)
Definition: local_file.cc:17
+
virtual bool Close() OVERRIDE
Definition: local_file.cc:20
+
virtual bool Flush() OVERRIDE
Definition: local_file.cc:59
+
const std::string & file_name() const
Definition: file.h:89
+
virtual int64_t Size() OVERRIDE
Definition: local_file.cc:42
+
virtual bool Open() OVERRIDE
Internal open. Should not be used directly.
Definition: local_file.cc:78
+
static bool Delete(const char *file_name)
Definition: local_file.cc:84
+
Implement LocalFile which deals with local storage.
Definition: local_file.h:21
+
virtual bool Seek(uint64_t position) OVERRIDE
Definition: local_file.cc:64
+
virtual int64_t Write(const void *buffer, uint64_t length) OVERRIDE
Definition: local_file.cc:36
+
+ + + + diff --git a/sdk/de/d10/cenc_8h_source.html b/sdk/de/d10/cenc_8h_source.html new file mode 100644 index 0000000000..b40e19256b --- /dev/null +++ b/sdk/de/d10/cenc_8h_source.html @@ -0,0 +1,154 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/cenc.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
cenc.h
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_FORMATS_MP4_CENC_H_
+
6 #define MEDIA_FORMATS_MP4_CENC_H_
+
7 
+
8 #include <stdint.h>
+
9 
+
10 #include <vector>
+
11 
+
12 #include "packager/media/base/decrypt_config.h"
+
13 
+
14 namespace edash_packager {
+
15 namespace media {
+
16 
+
17 class BufferReader;
+
18 class BufferWriter;
+
19 
+
20 namespace mp4 {
+
21 
+ +
23  public:
+
24  FrameCENCInfo();
+
25  explicit FrameCENCInfo(const std::vector<uint8_t>& iv);
+
26  ~FrameCENCInfo();
+
27 
+
28  bool Parse(uint8_t iv_size, BufferReader* reader);
+
29  void Write(BufferWriter* writer) const;
+
30  size_t ComputeSize() const;
+
31  size_t GetTotalSizeOfSubsamples() const;
+
32 
+
33  void AddSubsample(const SubsampleEntry& subsample) {
+
34  subsamples_.push_back(subsample);
+
35  }
+
36 
+
37  const std::vector<uint8_t>& iv() const { return iv_; }
+
38  const std::vector<SubsampleEntry>& subsamples() const { return subsamples_; }
+
39 
+
40  private:
+
41  std::vector<uint8_t> iv_;
+
42  std::vector<SubsampleEntry> subsamples_;
+
43 
+
44  // Not using DISALLOW_COPY_AND_ASSIGN here intentionally to allow the compiler
+
45  // generated copy constructor and assignment operator.
+
46 };
+
47 
+
48 } // namespace mp4
+
49 } // namespace media
+
50 } // namespace edash_packager
+
51 
+
52 #endif // MEDIA_FORMATS_MP4_CENC_H_
+ + + + +
+ + + + diff --git a/sdk/de/d12/container__names_8h_source.html b/sdk/de/d12/container__names_8h_source.html new file mode 100644 index 0000000000..e80ced3371 --- /dev/null +++ b/sdk/de/d12/container__names_8h_source.html @@ -0,0 +1,158 @@ + + + + + + +DASH Media Packaging SDK: media/base/container_names.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
container_names.h
+
+
+
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_BASE_CONTAINER_NAMES_H_
+
6 #define MEDIA_BASE_CONTAINER_NAMES_H_
+
7 
+
8 #include <stdint.h>
+
9 
+
10 namespace edash_packager {
+
11 namespace media {
+
12 
+
15 enum MediaContainerName {
+
16  CONTAINER_UNKNOWN, // Unknown
+
17  CONTAINER_AAC, // AAC (Advanced Audio Coding)
+
18  CONTAINER_AC3, // AC-3
+
19  CONTAINER_AIFF, // AIFF (Audio Interchange File Format)
+
20  CONTAINER_AMR, // AMR (Adaptive Multi-Rate Audio)
+
21  CONTAINER_APE, // APE (Monkey's Audio)
+
22  CONTAINER_ASF, // ASF (Advanced / Active Streaming Format)
+
23  CONTAINER_ASS, // SSA (SubStation Alpha) subtitle
+
24  CONTAINER_AVI, // AVI (Audio Video Interleaved)
+
25  CONTAINER_BINK, // Bink
+
26  CONTAINER_CAF, // CAF (Apple Core Audio Format)
+
27  CONTAINER_DTS, // DTS
+
28  CONTAINER_DTSHD, // DTS-HD
+
29  CONTAINER_DV, // DV (Digital Video)
+
30  CONTAINER_DXA, // DXA
+
31  CONTAINER_EAC3, // Enhanced AC-3
+
32  CONTAINER_FLAC, // FLAC (Free Lossless Audio Codec)
+
33  CONTAINER_FLV, // FLV (Flash Video)
+
34  CONTAINER_GSM, // GSM (Global System for Mobile Audio)
+
35  CONTAINER_H261, // H.261
+
36  CONTAINER_H263, // H.263
+
37  CONTAINER_H264, // H.264
+
38  CONTAINER_HLS, // HLS (Apple HTTP Live Streaming PlayList)
+
39  CONTAINER_IRCAM, // Berkeley/IRCAM/CARL Sound Format
+
40  CONTAINER_MJPEG, // MJPEG video
+
41  CONTAINER_MOV, // QuickTime / MOV / MPEG4
+
42  CONTAINER_MP3, // MP3 (MPEG audio layer 2/3)
+
43  CONTAINER_MPEG2PS, // MPEG-2 Program Stream
+
44  CONTAINER_MPEG2TS, // MPEG-2 Transport Stream
+
45  CONTAINER_MPEG4BS, // MPEG-4 Bitstream
+
46  CONTAINER_OGG, // Ogg
+
47  CONTAINER_RM, // RM (RealMedia)
+
48  CONTAINER_SRT, // SRT (SubRip subtitle)
+
49  CONTAINER_SWF, // SWF (ShockWave Flash)
+
50  CONTAINER_VC1, // VC-1
+
51  CONTAINER_WAV, // WAV / WAVE (Waveform Audio)
+
52  CONTAINER_WEBM, // Matroska / WebM
+
53  CONTAINER_WTV, // WTV (Windows Television)
+
54  CONTAINER_MAX // Must be last
+
55 };
+
56 
+
58 MediaContainerName DetermineContainer(const uint8_t* buffer, int buffer_size);
+
59 
+
60 } // namespace media
+
61 } // namespace edash_packager
+
62 
+
63 #endif // MEDIA_BASE_CONTAINER_NAMES_H_
+
+ + + + diff --git a/sdk/de/d15/media__stream_8cc_source.html b/sdk/de/d15/media__stream_8cc_source.html new file mode 100644 index 0000000000..16649032f0 --- /dev/null +++ b/sdk/de/d15/media__stream_8cc_source.html @@ -0,0 +1,218 @@ + + + + + + +DASH Media Packaging SDK: media/base/media_stream.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
media_stream.cc
+
+
+
1 // Copyright 2014 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/base/media_stream.h"
+
8 
+
9 #include "packager/base/logging.h"
+
10 #include "packager/base/strings/stringprintf.h"
+
11 #include "packager/media/base/demuxer.h"
+
12 #include "packager/media/base/media_sample.h"
+
13 #include "packager/media/base/muxer.h"
+
14 #include "packager/media/base/stream_info.h"
+
15 
+
16 namespace edash_packager {
+
17 namespace media {
+
18 
+
19 MediaStream::MediaStream(scoped_refptr<StreamInfo> info, Demuxer* demuxer)
+
20  : info_(info), demuxer_(demuxer), muxer_(NULL), state_(kIdle) {}
+
21 
+
22 MediaStream::~MediaStream() {}
+
23 
+
24 Status MediaStream::PullSample(scoped_refptr<MediaSample>* sample) {
+
25  DCHECK_EQ(state_, kPulling);
+
26 
+
27  // Trigger a new parse in demuxer if no more samples.
+
28  while (samples_.empty()) {
+
29  Status status = demuxer_->Parse();
+
30  if (!status.ok())
+
31  return status;
+
32  }
+
33 
+
34  *sample = samples_.front();
+
35  samples_.pop_front();
+
36  return Status::OK;
+
37 }
+
38 
+
39 Status MediaStream::PushSample(const scoped_refptr<MediaSample>& sample) {
+
40  switch (state_) {
+
41  case kIdle:
+
42  case kPulling:
+
43  samples_.push_back(sample);
+
44  return Status::OK;
+
45  case kDisconnected:
+
46  return Status::OK;
+
47  case kPushing:
+
48  return muxer_->AddSample(this, sample);
+
49  default:
+
50  NOTREACHED() << "Unexpected State " << state_;
+
51  return Status::UNKNOWN;
+
52  }
+
53 }
+
54 
+ +
56  DCHECK(muxer);
+
57  DCHECK(!muxer_);
+
58  state_ = kConnected;
+
59  muxer_ = muxer;
+
60 }
+
61 
+
62 Status MediaStream::Start(MediaStreamOperation operation) {
+
63  DCHECK(demuxer_);
+
64  DCHECK(operation == kPush || operation == kPull);
+
65 
+
66  switch (state_) {
+
67  case kIdle:
+
68  // Disconnect the stream if it is not connected to a muxer.
+
69  state_ = kDisconnected;
+
70  samples_.clear();
+
71  return Status::OK;
+
72  case kConnected:
+
73  state_ = (operation == kPush) ? kPushing : kPulling;
+
74  if (operation == kPush) {
+
75  // Push samples in the queue to muxer if there is any.
+
76  while (!samples_.empty()) {
+
77  Status status = muxer_->AddSample(this, samples_.front());
+
78  if (!status.ok())
+
79  return status;
+
80  samples_.pop_front();
+
81  }
+
82  } else {
+
83  // We need to disconnect all its peer streams which are not connected
+
84  // to a muxer.
+
85  for (size_t i = 0; i < demuxer_->streams().size(); ++i) {
+
86  Status status = demuxer_->streams()[i]->Start(operation);
+
87  if (!status.ok())
+
88  return status;
+
89  }
+
90  }
+
91  return Status::OK;
+
92  case kPulling:
+
93  DCHECK(operation == kPull);
+
94  return Status::OK;
+
95  default:
+
96  NOTREACHED() << "Unexpected State " << state_;
+
97  return Status::UNKNOWN;
+
98  }
+
99 }
+
100 
+
101 const scoped_refptr<StreamInfo> MediaStream::info() const { return info_; }
+
102 
+
103 std::string MediaStream::ToString() const {
+
104  return base::StringPrintf("state: %d\n samples in the queue: %zu\n %s",
+
105  state_, samples_.size(), info_->ToString().c_str());
+
106 }
+
107 
+
108 } // namespace media
+
109 } // namespace edash_packager
+
Status PullSample(scoped_refptr< MediaSample > *sample)
Pull sample from Demuxer (triggered by Muxer).
Definition: media_stream.cc:24
+
MediaStream(scoped_refptr< StreamInfo > info, Demuxer *demuxer)
Definition: media_stream.cc:19
+
Status Start(MediaStreamOperation operation)
Start the stream for pushing or pulling.
Definition: media_stream.cc:62
+
const std::vector< MediaStream * > & streams()
Definition: demuxer.h:66
+ +
Status PushSample(const scoped_refptr< MediaSample > &sample)
Push sample to Muxer (triggered by Demuxer).
Definition: media_stream.cc:39
+ + + + +
Status Parse()
Read from the source and send it to the parser.
Definition: demuxer.cc:166
+
+ + + + diff --git a/sdk/de/d19/classedash__packager_1_1media_1_1File.html b/sdk/de/d19/classedash__packager_1_1media_1_1File.html new file mode 100644 index 0000000000..1a54b2ee04 --- /dev/null +++ b/sdk/de/d19/classedash__packager_1_1media_1_1File.html @@ -0,0 +1,670 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::File Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::File Class Referenceabstract
+
+
+ +

Define an abstract file interface. + More...

+ +

#include <file.h>

+
+Inheritance diagram for edash_packager::media::File:
+
+
+ + +edash_packager::media::LocalFile +edash_packager::media::ThreadedIoFile +edash_packager::media::UdpFile + +
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual bool Close ()=0
 
virtual int64_t Read (void *buffer, uint64_t length)=0
 
virtual int64_t Write (const void *buffer, uint64_t length)=0
 
virtual int64_t Size ()=0
 
virtual bool Flush ()=0
 
virtual bool Seek (uint64_t position)=0
 
virtual bool Tell (uint64_t *position)=0
 
const std::string & file_name () const
 
+ + + + + + + + + + + +

+Static Public Member Functions

static FileOpen (const char *file_name, const char *mode)
 
static FileOpenWithNoBuffering (const char *file_name, const char *mode)
 
static bool Delete (const char *file_name)
 
static int64_t GetFileSize (const char *file_name)
 
static bool ReadFileToString (const char *file_name, std::string *contents)
 
+ + + + + + + + +

+Protected Member Functions

File (const std::string &file_name)
 
virtual ~File ()
 
+virtual bool Open ()=0
 Internal open. Should not be used directly.
 
+ + + +

+Friends

+class ThreadedIoFile
 
+

Detailed Description

+

Define an abstract file interface.

+ +

Definition at line 22 of file file.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual edash_packager::media::File::~File ()
+
+inlineprotectedvirtual
+
+

Do not call the destructor directly (with the "delete" keyword) nor use scoped_ptr; instead use Close().

+ +

Definition at line 109 of file file.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool edash_packager::media::File::Close ()
+
+pure virtual
+
+

Flush() and de-allocate resources associated with this file, and delete this File object. THIS IS THE ONE TRUE WAY TO DEALLOCATE THIS OBJECT.

+
Returns
true on success. For writable files, returning false MAY INDICATE DATA LOSS.
+ +

Implemented in edash_packager::media::ThreadedIoFile, edash_packager::media::LocalFile, and edash_packager::media::UdpFile.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool edash_packager::media::File::Delete (const char * file_name)
+
+static
+
+

Delete the specified file.

+
Parameters
+ + +
file_namecontains the path of the file to be deleted.
+
+
+
Returns
true if successful, false otherwise.
+ +

Definition at line 138 of file file.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const std::string& edash_packager::media::File::file_name () const
+
+inline
+
+
Returns
The file name.
+ +

Definition at line 89 of file file.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool edash_packager::media::File::Flush ()
+
+pure virtual
+
+

Flush the file so that recently written data will survive an application crash (but not necessarily an OS crash). For instance, in LocalFile the data is flushed into the OS but not necessarily to disk.

+
Returns
true on success, false otherwise.
+ +

Implemented in edash_packager::media::ThreadedIoFile, edash_packager::media::LocalFile, and edash_packager::media::UdpFile.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
int64_t edash_packager::media::File::GetFileSize (const char * file_name)
+
+static
+
+
Returns
The size of a file in bytes on success, a value < 0 otherwise. The file will be opened and closed in the process.
+ +

Definition at line 151 of file file.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
File * edash_packager::media::File::Open (const char * file_name,
const char * mode 
)
+
+static
+
+

Open the specified file. This is a file factory method, it opens a proper file automatically based on prefix, e.g. "file://" for LocalFile.

+
Parameters
+ + + +
file_namecontains the name of the file to be accessed.
modecontains file access mode. Implementation dependent.
+
+
+
Returns
A File pointer on success, false otherwise.
+ +

Definition at line 116 of file file.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
File * edash_packager::media::File::OpenWithNoBuffering (const char * file_name,
const char * mode 
)
+
+static
+
+

Open the specified file in direct-access mode (no buffering). This is a file factory method, it opens a proper file automatically based on prefix, e.g. "file://" for LocalFile.

+
Parameters
+ + + +
file_namecontains the name of the file to be accessed.
modecontains file access mode. Implementation dependent.
+
+
+
Returns
A File pointer on success, false otherwise.
+ +

Definition at line 127 of file file.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual int64_t edash_packager::media::File::Read (void * buffer,
uint64_t length 
)
+
+pure virtual
+
+

Read data and return it in buffer.

+
Parameters
+ + + +
[out]bufferpoints to a block of memory with a size of at least length bytes.
lengthindicates number of bytes to be read.
+
+
+
Returns
Number of bytes read, or a value < 0 on error. Zero on end-of-file, or if 'length' is zero.
+ +

Implemented in edash_packager::media::ThreadedIoFile, edash_packager::media::LocalFile, and edash_packager::media::UdpFile.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::File::ReadFileToString (const char * file_name,
std::string * contents 
)
+
+static
+
+

Read the file into string.

+
Parameters
+ + + +
file_nameis the file to be read. It should be a valid file.
contents[out]points to the output string. Should not be NULL.
+
+
+
Returns
true on success, false otherwise.
+ +

Definition at line 160 of file file.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool edash_packager::media::File::Seek (uint64_t position)
+
+pure virtual
+
+

Seek to the specifield position in the file.

+
Parameters
+ + +
positionis the position to seek to.
+
+
+
Returns
true on success, false otherwise.
+ +

Implemented in edash_packager::media::ThreadedIoFile, edash_packager::media::LocalFile, and edash_packager::media::UdpFile.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual int64_t edash_packager::media::File::Size ()
+
+pure virtual
+
+
Returns
Size of the file in bytes. A return value less than zero indicates a problem getting the size.
+ +

Implemented in edash_packager::media::ThreadedIoFile, edash_packager::media::LocalFile, and edash_packager::media::UdpFile.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool edash_packager::media::File::Tell (uint64_t * position)
+
+pure virtual
+
+

Get the current file position.

+
Parameters
+ + +
positionis a pointer to contain the current file position upon successful return.
+
+
+
Returns
true on succcess, false otherwise.
+ +

Implemented in edash_packager::media::ThreadedIoFile, edash_packager::media::LocalFile, and edash_packager::media::UdpFile.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual int64_t edash_packager::media::File::Write (const void * buffer,
uint64_t length 
)
+
+pure virtual
+
+

Write block of data.

+
Parameters
+ + + +
bufferpoints to a block of memory with at least length bytes.
lengthindicates number of bytes to write.
+
+
+
Returns
Number of bytes written, or a value < 0 on error.
+ +

Implemented in edash_packager::media::ThreadedIoFile, edash_packager::media::LocalFile, and edash_packager::media::UdpFile.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/de/d19/classedash__packager_1_1media_1_1File.png b/sdk/de/d19/classedash__packager_1_1media_1_1File.png new file mode 100644 index 0000000000..2063a0826e Binary files /dev/null and b/sdk/de/d19/classedash__packager_1_1media_1_1File.png differ diff --git a/sdk/de/d1f/structedash__packager_1_1media_1_1StreamDescriptor.html b/sdk/de/d1f/structedash__packager_1_1media_1_1StreamDescriptor.html new file mode 100644 index 0000000000..bc69cc258a --- /dev/null +++ b/sdk/de/d1f/structedash__packager_1_1media_1_1StreamDescriptor.html @@ -0,0 +1,136 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::StreamDescriptor Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::StreamDescriptor Struct Reference
+
+
+ +

#include <stream_descriptor.h>

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

+Public Attributes

+std::string stream_selector
 
+std::string input
 
+std::string output
 
+std::string segment_template
 
+uint32_t bandwidth
 
+std::string language
 
+

Detailed Description

+

Defines a single input/output stream, it's input source, output destination, stream selector, and optional segment template and user-specified bandwidth.

+ +

Definition at line 20 of file stream_descriptor.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/de/d34/offset__byte__queue_8h_source.html b/sdk/de/d34/offset__byte__queue_8h_source.html new file mode 100644 index 0000000000..90a4ddcd86 --- /dev/null +++ b/sdk/de/d34/offset__byte__queue_8h_source.html @@ -0,0 +1,151 @@ + + + + + + +DASH Media Packaging SDK: media/base/offset_byte_queue.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
offset_byte_queue.h
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_BASE_OFFSET_BYTE_QUEUE_H_
+
6 #define MEDIA_BASE_OFFSET_BYTE_QUEUE_H_
+
7 
+
8 #include <stdint.h>
+
9 
+
10 #include "packager/media/base/byte_queue.h"
+
11 
+
12 namespace edash_packager {
+
13 namespace media {
+
14 
+ +
20  public:
+ +
22  ~OffsetByteQueue();
+
23 
+
26  void Reset();
+
27  void Push(const uint8_t* buf, int size);
+
28  void Peek(const uint8_t** buf, int* size);
+
29  void Pop(int count);
+
31 
+
38  void PeekAt(int64_t offset, const uint8_t** buf, int* size);
+
39 
+
49  bool Trim(int64_t max_offset);
+
50 
+
52  int64_t head() { return head_; }
+
55  int64_t tail() { return head_ + size_; }
+
56 
+
57  private:
+
58  // Synchronize |buf_| and |size_| with |queue_|.
+
59  void Sync();
+
60 
+
61  ByteQueue queue_;
+
62  const uint8_t* buf_;
+
63  int size_;
+
64  int64_t head_;
+
65 
+
66  DISALLOW_COPY_AND_ASSIGN(OffsetByteQueue);
+
67 };
+
68 
+
69 } // namespace media
+
70 } // namespace edash_packager
+
71 
+
72 #endif // MEDIA_BASE_OFFSET_BYTE_QUEUE_H_
+ +
void PeekAt(int64_t offset, const uint8_t **buf, int *size)
+ + + + +
+ + + + diff --git a/sdk/de/d3e/buffer__reader_8h_source.html b/sdk/de/d3e/buffer__reader_8h_source.html new file mode 100644 index 0000000000..751ad0ed49 --- /dev/null +++ b/sdk/de/d3e/buffer__reader_8h_source.html @@ -0,0 +1,169 @@ + + + + + + +DASH Media Packaging SDK: media/base/buffer_reader.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
buffer_reader.h
+
+
+
1 // Copyright 2014 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_BASE_BUFFER_READER_H_
+
8 #define MEDIA_BASE_BUFFER_READER_H_
+
9 
+
10 #include <stdint.h>
+
11 
+
12 #include <vector>
+
13 
+
14 #include "packager/base/compiler_specific.h"
+
15 #include "packager/base/macros.h"
+
16 
+
17 namespace edash_packager {
+
18 namespace media {
+
19 
+
22 class BufferReader {
+
23  public:
+
25  BufferReader(const uint8_t* buf, size_t size)
+
26  : buf_(buf), size_(size), pos_(0) {}
+
27  ~BufferReader() {}
+
28 
+
31  bool HasBytes(size_t count) { return pos() + count <= size(); }
+
32 
+
37  bool Read1(uint8_t* v) WARN_UNUSED_RESULT;
+
38  bool Read2(uint16_t* v) WARN_UNUSED_RESULT;
+
39  bool Read2s(int16_t* v) WARN_UNUSED_RESULT;
+
40  bool Read4(uint32_t* v) WARN_UNUSED_RESULT;
+
41  bool Read4s(int32_t* v) WARN_UNUSED_RESULT;
+
42  bool Read8(uint64_t* v) WARN_UNUSED_RESULT;
+
43  bool Read8s(int64_t* v) WARN_UNUSED_RESULT;
+
45 
+
51  bool ReadNBytesInto8(uint64_t* v, size_t num_bytes) WARN_UNUSED_RESULT;
+
52  bool ReadNBytesInto8s(int64_t* v, size_t num_bytes) WARN_UNUSED_RESULT;
+
54 
+
55  bool ReadToVector(std::vector<uint8_t>* t, size_t count) WARN_UNUSED_RESULT;
+
56 
+
59  bool SkipBytes(size_t num_bytes) WARN_UNUSED_RESULT;
+
60 
+
61  const uint8_t* data() const { return buf_; }
+
62  size_t size() const { return size_; }
+
63  void set_size(size_t size) { size_ = size; }
+
64  size_t pos() const { return pos_; }
+
65 
+
66  private:
+
67  // Internal implementation of multi-byte reads.
+
68  template <typename T>
+
69  bool Read(T* t) WARN_UNUSED_RESULT;
+
70  template <typename T>
+
71  bool ReadNBytes(T* t, size_t num_bytes) WARN_UNUSED_RESULT;
+
72 
+
73  const uint8_t* buf_;
+
74  size_t size_;
+
75  size_t pos_;
+
76 
+
77  DISALLOW_COPY_AND_ASSIGN(BufferReader);
+
78 };
+
79 
+
80 } // namespace media
+
81 } // namespace edash_packager
+
82 
+
83 #endif // MEDIA_BASE_BUFFER_READER_H_
+
bool Read1(uint8_t *v) WARN_UNUSED_RESULT
+
bool SkipBytes(size_t num_bytes) WARN_UNUSED_RESULT
+
bool ReadNBytesInto8(uint64_t *v, size_t num_bytes) WARN_UNUSED_RESULT
+ +
BufferReader(const uint8_t *buf, size_t size)
Create a BufferReader from a raw buffer.
Definition: buffer_reader.h:25
+ +
+ + + + diff --git a/sdk/de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html b/sdk/de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html new file mode 100644 index 0000000000..437876ab78 --- /dev/null +++ b/sdk/de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html @@ -0,0 +1,194 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::TrackEncryption Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::TrackEncryption Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::TrackEncryption:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + + + +

+Public Attributes

+bool is_encrypted
 
+uint8_t default_iv_size
 
+std::vector< uint8_t > default_kid
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 86 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::TrackEncryption::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 258 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.png b/sdk/de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.png new file mode 100644 index 0000000000..fa1b1404e9 Binary files /dev/null and b/sdk/de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.png differ diff --git a/sdk/de/d4a/muxer__listener__internal_8h_source.html b/sdk/de/d4a/muxer__listener__internal_8h_source.html new file mode 100644 index 0000000000..ff33e3a8e3 --- /dev/null +++ b/sdk/de/d4a/muxer__listener__internal_8h_source.html @@ -0,0 +1,152 @@ + + + + + + +DASH Media Packaging SDK: media/event/muxer_listener_internal.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
muxer_listener_internal.h
+
+
+
1 // Copyright 2014 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_EVENT_MUXER_LISTENER_INTERNAL_H_
+
8 #define MEDIA_EVENT_MUXER_LISTENER_INTERNAL_H_
+
9 
+
10 #include <stdint.h>
+
11 
+
12 #include <string>
+
13 #include <vector>
+
14 
+
15 #include "packager/media/event/muxer_listener.h"
+
16 
+
17 namespace edash_packager {
+
18 
+
19 class MediaInfo;
+
20 
+
21 namespace media {
+
22 
+
23 class StreamInfo;
+
24 struct MuxerOptions;
+
25 
+
26 namespace internal {
+
27 
+
30 bool GenerateMediaInfo(const MuxerOptions& muxer_options,
+
31  const StreamInfo& stream_info,
+
32  uint32_t reference_time_scale_,
+
33  MuxerListener::ContainerType container_type,
+
34  MediaInfo* media_info);
+
35 
+
38 bool SetVodInformation(bool has_init_range,
+
39  uint64_t init_range_start,
+
40  uint64_t init_range_end,
+
41  bool has_index_range,
+
42  uint64_t index_range_start,
+
43  uint64_t index_range_end,
+
44  float duration_seconds,
+
45  uint64_t file_size,
+
46  MediaInfo* media_info);
+
47 
+
57 void SetContentProtectionFields(
+
58  const std::string& content_protection_uuid,
+
59  const std::string& content_protection_name_version,
+
60  const std::string& default_key_id,
+
61  const std::string& pssh,
+
62  MediaInfo* media_info);
+
63 
+
64 } // namespace internal
+
65 } // namespace media
+
66 } // namespace edash_packager
+
67 #endif // MEDIA_EVENT_MUXER_LISTENER_INTERNAL_H_
+
+ + + + diff --git a/sdk/de/d4c/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat-members.html b/sdk/de/d4c/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat-members.html new file mode 100644 index 0000000000..a8f6372940 --- /dev/null +++ b/sdk/de/d4c/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat-members.html @@ -0,0 +1,121 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp2t::TsSectionPat Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + +
Flush() OVERRIDE (defined in edash_packager::media::mp2t::TsSectionPsi)edash_packager::media::mp2t::TsSectionPsivirtual
kPidCat enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
kPidMax enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
kPidNullPacket enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
kPidPat enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
kPidTsdt enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
Parse(bool payload_unit_start_indicator, const uint8_t *buf, int size) OVERRIDE (defined in edash_packager::media::mp2t::TsSectionPsi)edash_packager::media::mp2t::TsSectionPsivirtual
ParsePsiSection(BitReader *bit_reader) OVERRIDE (defined in edash_packager::media::mp2t::TsSectionPat)edash_packager::media::mp2t::TsSectionPatvirtual
RegisterPmtCb typedef (defined in edash_packager::media::mp2t::TsSectionPat)edash_packager::media::mp2t::TsSectionPat
Reset() OVERRIDE (defined in edash_packager::media::mp2t::TsSectionPsi)edash_packager::media::mp2t::TsSectionPsivirtual
ResetPsiSection() OVERRIDE (defined in edash_packager::media::mp2t::TsSectionPat)edash_packager::media::mp2t::TsSectionPatvirtual
SpecialPid enum name (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
TsSectionPat(const RegisterPmtCb &register_pmt_cb) (defined in edash_packager::media::mp2t::TsSectionPat)edash_packager::media::mp2t::TsSectionPatexplicit
TsSectionPsi() (defined in edash_packager::media::mp2t::TsSectionPsi)edash_packager::media::mp2t::TsSectionPsi
~TsSection() (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSectioninlinevirtual
~TsSectionPat() (defined in edash_packager::media::mp2t::TsSectionPat)edash_packager::media::mp2t::TsSectionPatvirtual
~TsSectionPsi() (defined in edash_packager::media::mp2t::TsSectionPsi)edash_packager::media::mp2t::TsSectionPsivirtual
+ + + + diff --git a/sdk/de/d57/structedash__packager_1_1media_1_1MuxerOptions.html b/sdk/de/d57/structedash__packager_1_1media_1_1MuxerOptions.html new file mode 100644 index 0000000000..b558a0eff6 --- /dev/null +++ b/sdk/de/d57/structedash__packager_1_1media_1_1MuxerOptions.html @@ -0,0 +1,279 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::MuxerOptions Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::MuxerOptions Struct Reference
+
+
+ +

This structure contains the list of configuration options for Muxer. + More...

+ +

#include <muxer_options.h>

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

+Public Attributes

bool single_segment
 
double segment_duration
 
double fragment_duration
 
bool segment_sap_aligned
 
bool fragment_sap_aligned
 
int num_subsegments_per_sidx
 
std::string output_file_name
 
std::string segment_template
 
+std::string temp_dir
 Specify temporary directory for intermediate files.
 
uint32_t bandwidth
 
+

Detailed Description

+

This structure contains the list of configuration options for Muxer.

+ +

Definition at line 18 of file muxer_options.h.

+

Member Data Documentation

+ +
+
+ + + + +
uint32_t edash_packager::media::MuxerOptions::bandwidth
+
+

User-specified bit rate for the media stream. If zero, the muxer will attempt to estimate.

+ +

Definition at line 68 of file muxer_options.h.

+ +
+
+ +
+
+ + + + +
double edash_packager::media::MuxerOptions::fragment_duration
+
+

Fragment duration in seconds. Should not be larger than the segment duration.

+ +

Definition at line 34 of file muxer_options.h.

+ +
+
+ +
+
+ + + + +
bool edash_packager::media::MuxerOptions::fragment_sap_aligned
+
+

Force fragments to begin with stream access points. Fragment duration may not be exactly what specified by segment_duration. Setting to true implies that segment_sap_aligned is true as well.

+ +

Definition at line 43 of file muxer_options.h.

+ +
+
+ +
+
+ + + + +
int edash_packager::media::MuxerOptions::num_subsegments_per_sidx
+
+

For ISO BMFF only. Set the number of subsegments in each SIDX box. If 0, a single SIDX box is used per segment. If -1, no SIDX box is used. Otherwise, the Muxer will pack N subsegments in the root SIDX of the segment, with segment_duration/N/fragment_duration fragments per subsegment.

+ +

Definition at line 50 of file muxer_options.h.

+ +
+
+ +
+
+ + + + +
std::string edash_packager::media::MuxerOptions::output_file_name
+
+

Output file name. If segment_template is not specified, the Muxer generates this single output file with all segments concatenated; Otherwise, it specifies the init segment name.

+ +

Definition at line 55 of file muxer_options.h.

+ +
+
+ +
+
+ + + + +
double edash_packager::media::MuxerOptions::segment_duration
+
+

Segment duration in seconds. If single_segment is specified, this parameter sets the duration of a subsegment; otherwise, this parameter sets the duration of a segment. A segment can contain one or many fragments.

+ +

Definition at line 30 of file muxer_options.h.

+ +
+
+ +
+
+ + + + +
bool edash_packager::media::MuxerOptions::segment_sap_aligned
+
+

Force segments to begin with stream access points. Segment duration may not be exactly what specified by segment_duration.

+ +

Definition at line 38 of file muxer_options.h.

+ +
+
+ +
+
+ + + + +
std::string edash_packager::media::MuxerOptions::segment_template
+
+

Specify output segment name pattern for generated segments. It can furthermore be configured by using a subset of the SegmentTemplate identifiers: $RepresentationID$, $Number$, $Bandwidth$ and $Time. Optional.

+ +

Definition at line 61 of file muxer_options.h.

+ +
+
+ +
+
+ + + + +
bool edash_packager::media::MuxerOptions::single_segment
+
+

Generate a single segment for each media presentation. This option should be set for on demand profile.

+ +

Definition at line 24 of file muxer_options.h.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/de/d59/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts.html b/sdk/de/d59/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts.html new file mode 100644 index 0000000000..5550789477 --- /dev/null +++ b/sdk/de/d59/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts.html @@ -0,0 +1,155 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp2t::EsParserAdts Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp2t::EsParserAdts Class Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp2t::EsParserAdts:
+
+
+ + +edash_packager::media::mp2t::EsParser + +
+ + + + + + + + + + + + + + + +

+Public Member Functions

EsParserAdts (uint32_t pid, const NewStreamInfoCB &new_stream_info_cb, const EmitSampleCB &emit_sample_cb, bool sbr_in_mimetype)
 
+virtual bool Parse (const uint8_t *buf, int size, int64_t pts, int64_t dts) OVERRIDE
 
+virtual void Flush () OVERRIDE
 
+virtual void Reset () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp2t::EsParser
EsParser (uint32_t pid)
 
+uint32_t pid ()
 
+ + + + + + +

+Additional Inherited Members

- Public Types inherited from edash_packager::media::mp2t::EsParser
+typedef base::Callback< void(scoped_refptr
+< StreamInfo > &)> 
NewStreamInfoCB
 
+typedef base::Callback< void(uint32_t,
+scoped_refptr< MediaSample > &)> 
EmitSampleCB
 
+

Detailed Description

+
+

Definition at line 25 of file es_parser_adts.h.

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/de/d59/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts.png b/sdk/de/d59/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts.png new file mode 100644 index 0000000000..e396e58c79 Binary files /dev/null and b/sdk/de/d59/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts.png differ diff --git a/sdk/de/d5a/structedash__packager_1_1media_1_1mp4_1_1SchemeType-members.html b/sdk/de/d5a/structedash__packager_1_1media_1_1mp4_1_1SchemeType-members.html new file mode 100644 index 0000000000..56f39c6a59 --- /dev/null +++ b/sdk/de/d5a/structedash__packager_1_1media_1_1mp4_1_1SchemeType-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::SchemeType Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::SchemeType)edash_packager::media::mp4::SchemeTypevirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::SchemeTypevirtual
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::SchemeTypevirtual
SchemeType() (defined in edash_packager::media::mp4::SchemeType)edash_packager::media::mp4::SchemeType
type (defined in edash_packager::media::mp4::SchemeType)edash_packager::media::mp4::SchemeType
version (defined in edash_packager::media::mp4::SchemeType)edash_packager::media::mp4::SchemeType
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~SchemeType() (defined in edash_packager::media::mp4::SchemeType)edash_packager::media::mp4::SchemeTypevirtual
+ + + + diff --git a/sdk/de/d5b/adts__header_8cc_source.html b/sdk/de/d5b/adts__header_8cc_source.html new file mode 100644 index 0000000000..e1cbf7b343 --- /dev/null +++ b/sdk/de/d5b/adts__header_8cc_source.html @@ -0,0 +1,215 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp2t/adts_header.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
adts_header.cc
+
+
+
1 // Copyright 2014 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/formats/mp2t/adts_header.h"
+
8 
+
9 #include "packager/media/base/bit_reader.h"
+
10 #include "packager/media/formats/mp2t/mp2t_common.h"
+
11 #include "packager/media/formats/mpeg/adts_constants.h"
+
12 
+
13 namespace edash_packager {
+
14 namespace media {
+
15 namespace mp2t {
+
16 
+
17 AdtsHeader::AdtsHeader()
+
18  : valid_config_(false),
+
19  profile_(0),
+
20  sampling_frequency_index_(0),
+
21  channel_configuration_(0) {}
+
22 
+
23 size_t AdtsHeader::GetAdtsFrameSize(const uint8_t* data, size_t num_bytes) {
+
24  if (num_bytes < 6)
+
25  return 0;
+
26  return ((static_cast<int>(data[5]) >> 5) |
+
27  (static_cast<int>(data[4]) << 3) |
+
28  ((static_cast<int>(data[3]) & 0x3) << 11));
+
29 }
+
30 
+
31 size_t AdtsHeader::GetAdtsHeaderSize(const uint8_t* data, size_t num_bytes) {
+
32  if (num_bytes < 2)
+
33  return 0;
+
34  if (data[1] & 0x01)
+
35  return kAdtsHeaderMinSize;
+
36  return kAdtsHeaderMinSize + sizeof(uint16_t); // Header + CRC.
+
37 }
+
38 
+
39 bool AdtsHeader::Parse(const uint8_t* adts_frame, size_t adts_frame_size) {
+
40  CHECK(adts_frame);
+
41 
+
42  valid_config_ = false;
+
43 
+
44  BitReader frame(adts_frame, adts_frame_size);
+
45  // Verify frame starts with sync bits (0xfff).
+
46  uint32_t sync;
+
47  RCHECK(frame.ReadBits(12, &sync));
+
48  RCHECK(sync == 0xfff);
+
49  // Skip MPEG version and layer.
+
50  RCHECK(frame.SkipBits(3));
+
51  // Get "protection absent" flag.
+
52  uint8_t protection_absent;
+
53  RCHECK(frame.ReadBits(1, &protection_absent));
+
54  // Get profile.
+
55  RCHECK(frame.ReadBits(2, &profile_));
+
56  // Get sampling frequency.
+
57  RCHECK(frame.ReadBits(4, &sampling_frequency_index_));
+
58  RCHECK(sampling_frequency_index_ < kAdtsFrequencyTableSize);
+
59  // Skip private stream bit.
+
60  RCHECK(frame.SkipBits(1));
+
61  // Get number of audio channels.
+
62  RCHECK(frame.ReadBits(3, &channel_configuration_));
+
63  RCHECK((channel_configuration_ > 0) &&
+
64  (channel_configuration_ < kAdtsNumChannelsTableSize));
+
65  // Skip originality, home and copyright info.
+
66  RCHECK(frame.SkipBits(4));
+
67  // Verify that the frame size matches input parameters.
+
68  uint16_t frame_size;
+
69  RCHECK(frame.ReadBits(13, &frame_size));
+
70  RCHECK(frame_size == adts_frame_size);
+
71  // Skip buffer fullness indicator.
+
72  RCHECK(frame.SkipBits(11));
+
73  uint8_t num_blocks_minus_1;
+
74  RCHECK(frame.ReadBits(2, &num_blocks_minus_1));
+
75  if (num_blocks_minus_1) {
+
76  NOTIMPLEMENTED() << "ADTS frames with more than one data block "
+
77  "not supported.";
+
78  return false;
+
79  }
+
80 
+
81  valid_config_ = true;
+
82  return true;
+
83 }
+
84 
+
85 bool AdtsHeader::GetAudioSpecificConfig(std::vector<uint8_t>* buffer) const {
+
86  DCHECK(buffer);
+
87  if (!valid_config_)
+
88  return false;
+
89 
+
90  buffer->resize(2);
+
91  (*buffer)[0] = ((profile_ + 1) << 3) | (sampling_frequency_index_ >> 1);
+
92  (*buffer)[1] = ((sampling_frequency_index_ & 1) << 7) |
+
93  (channel_configuration_ << 3);
+
94  return true;
+
95 }
+
96 
+
97 uint8_t AdtsHeader::GetObjectType() const {
+
98  return profile_ + 1;
+
99 }
+
100 
+
101 uint32_t AdtsHeader::GetSamplingFrequency() const {
+
102  DCHECK_LT(sampling_frequency_index_, kAdtsFrequencyTableSize);
+
103  return kAdtsFrequencyTable[sampling_frequency_index_];
+
104 }
+
105 
+
106 uint8_t AdtsHeader::GetNumChannels() const {
+
107  DCHECK_GT(channel_configuration_, 0);
+
108  DCHECK_LT(channel_configuration_, kAdtsNumChannelsTableSize);
+
109  return kAdtsNumChannelsTable[channel_configuration_];
+
110 }
+
111 
+
112 } // namespace mp2t
+
113 } // namespace media
+
114 } // namespace edash_packager
+
bool ReadBits(int num_bits, T *out)
Definition: bit_reader.h:35
+
A class to read bit streams.
Definition: bit_reader.h:17
+
bool SkipBits(int num_bits)
Definition: bit_reader.cc:21
+
+ + + + diff --git a/sdk/de/d5c/mpd__flags_8h_source.html b/sdk/de/d5c/mpd__flags_8h_source.html new file mode 100644 index 0000000000..51e0dce592 --- /dev/null +++ b/sdk/de/d5c/mpd__flags_8h_source.html @@ -0,0 +1,123 @@ + + + + + + +DASH Media Packaging SDK: app/mpd_flags.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mpd_flags.h
+
+
+
1 // Copyright 2014 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 // Defines Mpd flags.
+
8 
+
9 #ifndef APP_MPD_FLAGS_H_
+
10 #define APP_MPD_FLAGS_H_
+
11 
+
12 #include <gflags/gflags.h>
+
13 
+
14 DECLARE_bool(output_media_info);
+
15 DECLARE_string(mpd_output);
+
16 DECLARE_string(scheme_id_uri);
+
17 DECLARE_string(base_urls);
+
18 DECLARE_double(availability_time_offset);
+
19 DECLARE_double(minimum_update_period);
+
20 DECLARE_double(min_buffer_time);
+
21 DECLARE_double(time_shift_buffer_depth);
+
22 DECLARE_double(suggested_presentation_delay);
+
23 DECLARE_bool(generate_dash_if_iop_compliant_mpd);
+
24 
+
25 #endif // APP_MPD_FLAGS_H_
+
+ + + + diff --git a/sdk/de/d68/structedash__packager_1_1media_1_1mp4_1_1Track-members.html b/sdk/de/d68/structedash__packager_1_1media_1_1mp4_1_1Track-members.html new file mode 100644 index 0000000000..debea9d391 --- /dev/null +++ b/sdk/de/d68/structedash__packager_1_1media_1_1mp4_1_1Track-members.html @@ -0,0 +1,117 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::Track Member List
+
+
+ +

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

+ + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::Track)edash_packager::media::mp4::Trackvirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::Trackvirtual
edit (defined in edash_packager::media::mp4::Track)edash_packager::media::mp4::Track
header (defined in edash_packager::media::mp4::Track)edash_packager::media::mp4::Track
media (defined in edash_packager::media::mp4::Track)edash_packager::media::mp4::Track
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::Trackvirtual
Track() (defined in edash_packager::media::mp4::Track)edash_packager::media::mp4::Track
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~Track() (defined in edash_packager::media::mp4::Track)edash_packager::media::mp4::Trackvirtual
+ + + + diff --git a/sdk/de/d6e/language__utils_8h_source.html b/sdk/de/d6e/language__utils_8h_source.html new file mode 100644 index 0000000000..6861bd1acb --- /dev/null +++ b/sdk/de/d6e/language__utils_8h_source.html @@ -0,0 +1,122 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/language_utils.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
language_utils.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 // Funtions used by MpdBuilder class to generate an MPD file.
+
8 
+
9 #ifndef MPD_BASE_LANGUAGE_UTILS_H_
+
10 #define MPD_BASE_LANGUAGE_UTILS_H_
+
11 
+
12 #include <string>
+
13 
+
14 namespace edash_packager {
+
15 
+
19 std::string LanguageToShortestForm(const std::string& language);
+
20 
+
24 std::string LanguageToISO_639_2(const std::string& language);
+
25 
+
26 } // namespace edash_packager
+
27 
+
28 #endif // MPD_BASE_LANGUAGE_UTILS_H_
+
std::string LanguageToShortestForm(const std::string &language)
+
std::string LanguageToISO_639_2(const std::string &language)
+
+ + + + diff --git a/sdk/de/d70/http__key__fetcher_8cc_source.html b/sdk/de/d70/http__key__fetcher_8cc_source.html new file mode 100644 index 0000000000..ca16e63f22 --- /dev/null +++ b/sdk/de/d70/http__key__fetcher_8cc_source.html @@ -0,0 +1,244 @@ + + + + + + +DASH Media Packaging SDK: media/base/http_key_fetcher.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
http_key_fetcher.cc
+
+
+
1 // Copyright 2014 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/base/http_key_fetcher.h"
+
8 
+
9 #include <curl/curl.h>
+
10 #include "packager/base/strings/stringprintf.h"
+
11 #include "packager/base/synchronization/lock.h"
+
12 
+
13 namespace edash_packager {
+
14 
+
15 namespace {
+
16 const char kUserAgentString[] = "edash-packager-http_fetcher/1.0";
+
17 
+
18 // Scoped CURL implementation which cleans up itself when goes out of scope.
+
19 class ScopedCurl {
+
20  public:
+
21  ScopedCurl() { ptr_ = curl_easy_init(); }
+
22  ~ScopedCurl() {
+
23  if (ptr_)
+
24  curl_easy_cleanup(ptr_);
+
25  }
+
26 
+
27  CURL* get() { return ptr_; }
+
28 
+
29  private:
+
30  CURL* ptr_;
+
31  DISALLOW_COPY_AND_ASSIGN(ScopedCurl);
+
32 };
+
33 
+
34 size_t AppendToString(char* ptr, size_t size, size_t nmemb, std::string* response) {
+
35  DCHECK(ptr);
+
36  DCHECK(response);
+
37  const size_t total_size = size * nmemb;
+
38  response->append(ptr, total_size);
+
39  return total_size;
+
40 }
+
41 
+
42 class LibCurlInitializer {
+
43  public:
+
44  LibCurlInitializer() : initialized_(false) {
+
45  base::AutoLock lock(lock_);
+
46  if (!initialized_) {
+
47  curl_global_init(CURL_GLOBAL_DEFAULT);
+
48  initialized_ = true;
+
49  }
+
50  }
+
51 
+
52  ~LibCurlInitializer() {
+
53  base::AutoLock lock(lock_);
+
54  if (initialized_) {
+
55  curl_global_cleanup();
+
56  initialized_ = false;
+
57  }
+
58  }
+
59 
+
60  private:
+
61  base::Lock lock_;
+
62  bool initialized_;
+
63 
+
64  DISALLOW_COPY_AND_ASSIGN(LibCurlInitializer);
+
65 };
+
66 
+
67 } // namespace
+
68 
+
69 namespace media {
+
70 
+
71 HttpKeyFetcher::HttpKeyFetcher() : timeout_in_seconds_(0) {}
+
72 
+
73 HttpKeyFetcher::HttpKeyFetcher(uint32_t timeout_in_seconds)
+
74  : timeout_in_seconds_(timeout_in_seconds) {}
+
75 
+
76 HttpKeyFetcher::~HttpKeyFetcher() {}
+
77 
+
78 Status HttpKeyFetcher::FetchKeys(const std::string& url,
+
79  const std::string& request,
+
80  std::string* response) {
+
81  return Post(url, request, response);
+
82 }
+
83 
+
84 Status HttpKeyFetcher::Get(const std::string& path, std::string* response) {
+
85  return FetchInternal(GET, path, "", response);
+
86 }
+
87 
+
88 Status HttpKeyFetcher::Post(const std::string& path,
+
89  const std::string& data,
+
90  std::string* response) {
+
91  return FetchInternal(POST, path, data, response);
+
92 }
+
93 
+
94 Status HttpKeyFetcher::FetchInternal(HttpMethod method,
+
95  const std::string& path,
+
96  const std::string& data,
+
97  std::string* response) {
+
98  DCHECK(method == GET || method == POST);
+
99 
+
100  static LibCurlInitializer lib_curl_initializer;
+
101 
+
102  ScopedCurl scoped_curl;
+
103  CURL* curl = scoped_curl.get();
+
104  if (!curl) {
+
105  LOG(ERROR) << "curl_easy_init() failed.";
+
106  return Status(error::HTTP_FAILURE, "curl_easy_init() failed.");
+
107  }
+
108  response->clear();
+
109 
+
110  curl_easy_setopt(curl, CURLOPT_URL, path.c_str());
+
111  curl_easy_setopt(curl, CURLOPT_USERAGENT, kUserAgentString);
+
112  curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout_in_seconds_);
+
113  curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1L);
+
114  curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
+
115  curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, AppendToString);
+
116  curl_easy_setopt(curl, CURLOPT_WRITEDATA, response);
+
117  if (method == POST) {
+
118  curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.c_str());
+
119  curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, data.size());
+
120  }
+
121 
+
122  CURLcode res = curl_easy_perform(curl);
+
123  if (res != CURLE_OK) {
+
124  std::string error_message = base::StringPrintf(
+
125  "curl_easy_perform() failed: %s.", curl_easy_strerror(res));
+
126  if (res == CURLE_HTTP_RETURNED_ERROR) {
+
127  long response_code = 0;
+
128  curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
+
129  error_message += base::StringPrintf(" Response code: %ld.", response_code);
+
130  }
+
131 
+
132  LOG(ERROR) << error_message;
+
133  return Status(
+
134  res == CURLE_OPERATION_TIMEDOUT ? error::TIME_OUT : error::HTTP_FAILURE,
+
135  error_message);
+
136  }
+
137  return Status::OK;
+
138 }
+
139 
+
140 } // namespace media
+
141 } // namespace edash_packager
+
HttpKeyFetcher()
Creates a fetcher with no timeout.
+ +
virtual Status Get(const std::string &url, std::string *response)
+
virtual Status Post(const std::string &url, const std::string &data, std::string *response)
+
virtual Status FetchKeys(const std::string &url, const std::string &request, std::string *response) OVERRIDE
+
+ + + + diff --git a/sdk/de/d77/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener-members.html b/sdk/de/d77/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener-members.html new file mode 100644 index 0000000000..22b80ebb5c --- /dev/null +++ b/sdk/de/d77/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::VodMediaInfoDumpMuxerListener Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
ContainerType enum name (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListener
kContainerMp4 enum value (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListener
kContainerMpeg2ts enum value (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListener
kContainerUnknown enum value (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListener
kContainerWebM enum value (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListener
MuxerListener() (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListenerinlineprotected
OnEncryptionInfoReady(bool is_initial_encryption_info, const std::string &content_protection_uuid, const std::string &content_protection_name_version, const std::vector< uint8_t > &default_key_id, const std::vector< uint8_t > &pssh) OVERRIDE (defined in edash_packager::media::VodMediaInfoDumpMuxerListener)edash_packager::media::VodMediaInfoDumpMuxerListenervirtual
OnMediaEnd(bool has_init_range, uint64_t init_range_start, uint64_t init_range_end, bool has_index_range, uint64_t index_range_start, uint64_t index_range_end, float duration_seconds, uint64_t file_size) OVERRIDE (defined in edash_packager::media::VodMediaInfoDumpMuxerListener)edash_packager::media::VodMediaInfoDumpMuxerListenervirtual
OnMediaStart(const MuxerOptions &muxer_options, const StreamInfo &stream_info, uint32_t time_scale, ContainerType container_type) OVERRIDE (defined in edash_packager::media::VodMediaInfoDumpMuxerListener)edash_packager::media::VodMediaInfoDumpMuxerListenervirtual
OnNewSegment(uint64_t start_time, uint64_t duration, uint64_t segment_file_size) OVERRIDE (defined in edash_packager::media::VodMediaInfoDumpMuxerListener)edash_packager::media::VodMediaInfoDumpMuxerListenervirtual
OnSampleDurationReady(uint32_t sample_duration) OVERRIDEedash_packager::media::VodMediaInfoDumpMuxerListenervirtual
SetContentProtectionSchemeIdUri(const std::string &scheme_id_uri)edash_packager::media::VodMediaInfoDumpMuxerListener
VodMediaInfoDumpMuxerListener(const std::string &output_file_name) (defined in edash_packager::media::VodMediaInfoDumpMuxerListener)edash_packager::media::VodMediaInfoDumpMuxerListener
~MuxerListener() (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListenerinlinevirtual
~VodMediaInfoDumpMuxerListener() (defined in edash_packager::media::VodMediaInfoDumpMuxerListener)edash_packager::media::VodMediaInfoDumpMuxerListenervirtual
+ + + + diff --git a/sdk/de/d7b/mp4__media__parser_8h_source.html b/sdk/de/d7b/mp4__media__parser_8h_source.html new file mode 100644 index 0000000000..8aa10b35b6 --- /dev/null +++ b/sdk/de/d7b/mp4__media__parser_8h_source.html @@ -0,0 +1,225 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/mp4_media_parser.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mp4_media_parser.h
+
+
+
1 // Copyright 2014 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_FORMATS_MP4_MP4_MEDIA_PARSER_H_
+
8 #define MEDIA_FORMATS_MP4_MP4_MEDIA_PARSER_H_
+
9 
+
10 #include <stdint.h>
+
11 
+
12 #include <map>
+
13 #include <vector>
+
14 
+
15 #include "packager/base/callback_forward.h"
+
16 #include "packager/base/compiler_specific.h"
+
17 #include "packager/base/memory/scoped_ptr.h"
+
18 #include "packager/base/memory/ref_counted.h"
+
19 #include "packager/base/memory/scoped_ptr.h"
+
20 #include "packager/media/base/media_parser.h"
+
21 #include "packager/media/base/offset_byte_queue.h"
+
22 
+
23 namespace edash_packager {
+
24 namespace media {
+
25 
+
26 class AesCtrEncryptor;
+
27 class DecryptConfig;
+
28 
+
29 namespace mp4 {
+
30 
+
31 class BoxReader;
+
32 class TrackRunIterator;
+
33 struct Movie;
+
34 struct ProtectionSystemSpecificHeader;
+
35 
+
36 class MP4MediaParser : public MediaParser {
+
37  public:
+ +
39  virtual ~MP4MediaParser();
+
40 
+
43  virtual void Init(const InitCB& init_cb,
+
44  const NewSampleCB& new_sample_cb,
+
45  KeySource* decryption_key_source) OVERRIDE;
+
46  virtual void Flush() OVERRIDE;
+
47  virtual bool Parse(const uint8_t* buf, int size) OVERRIDE;
+
49 
+
56  bool LoadMoov(const std::string& file_path);
+
57 
+
58  private:
+
59  enum State {
+
60  kWaitingForInit,
+
61  kParsingBoxes,
+
62  kEmittingSamples,
+
63  kError
+
64  };
+
65 
+
66  bool ParseBox(bool* err);
+
67  bool ParseMoov(mp4::BoxReader* reader);
+
68  bool ParseMoof(mp4::BoxReader* reader);
+
69 
+
70  bool FetchKeysIfNecessary(
+
71  const std::vector<ProtectionSystemSpecificHeader>& headers);
+
72 
+
73  bool DecryptSampleBuffer(const DecryptConfig* decrypt_config,
+
74  uint8_t* buffer,
+
75  size_t buffer_size);
+
76 
+
77  // To retain proper framing, each 'mdat' atom must be read; to limit memory
+
78  // usage, the atom's data needs to be discarded incrementally as frames are
+
79  // extracted from the stream. This function discards data from the stream up
+
80  // to |offset|, updating the |mdat_tail_| value so that framing can be
+
81  // retained after all 'mdat' information has been read.
+
82  // Returns 'true' on success, 'false' if there was an error.
+
83  bool ReadAndDiscardMDATsUntil(const int64_t offset);
+
84 
+
85  void ChangeState(State new_state);
+
86 
+
87  bool EmitConfigs();
+
88 
+
89  bool EnqueueSample(bool* err);
+
90 
+
91  void Reset();
+
92 
+
93  State state_;
+
94  InitCB init_cb_;
+
95  NewSampleCB new_sample_cb_;
+
96  KeySource* decryption_key_source_;
+
97 
+
98  OffsetByteQueue queue_;
+
99 
+
100  // These two parameters are only valid in the |kEmittingSegments| state.
+
101  //
+
102  // |moof_head_| is the offset of the start of the most recently parsed moof
+
103  // block. All byte offsets in sample information are relative to this offset,
+
104  // as mandated by the Media Source spec.
+
105  int64_t moof_head_;
+
106  // |mdat_tail_| is the stream offset of the end of the current 'mdat' box.
+
107  // Valid iff it is greater than the head of the queue.
+
108  int64_t mdat_tail_;
+
109 
+
110  scoped_ptr<Movie> moov_;
+
111  scoped_ptr<TrackRunIterator> runs_;
+
112 
+
113  typedef std::map<std::vector<uint8_t>, AesCtrEncryptor*> DecryptorMap;
+
114  DecryptorMap decryptor_map_;
+
115 
+
116  DISALLOW_COPY_AND_ASSIGN(MP4MediaParser);
+
117 };
+
118 
+
119 } // namespace mp4
+
120 } // namespace media
+
121 } // namespace edash_packager
+
122 
+
123 #endif // MEDIA_FORMATS_MP4_MP4_MEDIA_PARSER_H_
+ + + + +
virtual bool Parse(const uint8_t *buf, int size) OVERRIDE
+
bool LoadMoov(const std::string &file_path)
+ +
base::Callback< bool(uint32_t track_id, const scoped_refptr< MediaSample > &media_sample)> NewSampleCB
Definition: media_parser.h:43
+
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:29
+
base::Callback< void(const std::vector< scoped_refptr< StreamInfo > > &stream_info)> InitCB
Definition: media_parser.h:34
+ +
virtual void Init(const InitCB &init_cb, const NewSampleCB &new_sample_cb, KeySource *decryption_key_source) OVERRIDE
+
Class for reading MP4 boxes.
Definition: box_reader.h:24
+
+ + + + diff --git a/sdk/de/d83/box__definitions__comparison_8h_source.html b/sdk/de/d83/box__definitions__comparison_8h_source.html new file mode 100644 index 0000000000..87d671d2d0 --- /dev/null +++ b/sdk/de/d83/box__definitions__comparison_8h_source.html @@ -0,0 +1,465 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/box_definitions_comparison.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
box_definitions_comparison.h
+
+
+
1 // Copyright 2014 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 // Overloads operator== for mp4 boxes, mainly used for testing.
+
8 
+
9 #ifndef MEDIA_FORMATS_MP4_BOX_DEFINITIONS_COMPARISON_H_
+
10 #define MEDIA_FORMATS_MP4_BOX_DEFINITIONS_COMPARISON_H_
+
11 
+
12 #include "packager/media/formats/mp4/box_definitions.h"
+
13 
+
14 namespace edash_packager {
+
15 namespace media {
+
16 namespace mp4 {
+
17 
+
18 inline bool operator==(const FileType& lhs, const FileType& rhs) {
+
19  return lhs.major_brand == rhs.major_brand &&
+
20  lhs.minor_version == rhs.minor_version &&
+
21  lhs.compatible_brands == rhs.compatible_brands;
+
22 }
+
23 
+
24 inline bool operator==(const ProtectionSystemSpecificHeader& lhs,
+
25  const ProtectionSystemSpecificHeader& rhs) {
+
26  return lhs.system_id == rhs.system_id && lhs.data == rhs.data;
+
27 }
+
28 
+
29 inline bool operator==(const SampleAuxiliaryInformationOffset& lhs,
+
30  const SampleAuxiliaryInformationOffset& rhs) {
+
31  return lhs.offsets == rhs.offsets;
+
32 }
+
33 
+
34 inline bool operator==(const SampleAuxiliaryInformationSize& lhs,
+
35  const SampleAuxiliaryInformationSize& rhs) {
+
36  return lhs.default_sample_info_size == rhs.default_sample_info_size &&
+
37  lhs.sample_count == rhs.sample_count &&
+
38  lhs.sample_info_sizes == rhs.sample_info_sizes;
+
39 }
+
40 
+
41 inline bool operator==(const OriginalFormat& lhs, const OriginalFormat& rhs) {
+
42  return lhs.format == rhs.format;
+
43 }
+
44 
+
45 inline bool operator==(const SchemeType& lhs, const SchemeType& rhs) {
+
46  return lhs.type == rhs.type && lhs.version == rhs.version;
+
47 }
+
48 
+
49 inline bool operator==(const TrackEncryption& lhs, const TrackEncryption& rhs) {
+
50  return lhs.is_encrypted == rhs.is_encrypted &&
+
51  lhs.default_iv_size == rhs.default_iv_size &&
+
52  lhs.default_kid == rhs.default_kid;
+
53 }
+
54 
+
55 inline bool operator==(const SchemeInfo& lhs, const SchemeInfo& rhs) {
+
56  return lhs.track_encryption == rhs.track_encryption;
+
57 }
+
58 
+
59 inline bool operator==(const ProtectionSchemeInfo& lhs,
+
60  const ProtectionSchemeInfo& rhs) {
+
61  return lhs.format == rhs.format && lhs.type == rhs.type &&
+
62  lhs.info == rhs.info;
+
63 }
+
64 
+
65 inline bool operator==(const MovieHeader& lhs, const MovieHeader& rhs) {
+
66  return lhs.creation_time == rhs.creation_time &&
+
67  lhs.modification_time == rhs.modification_time &&
+
68  lhs.timescale == rhs.timescale && lhs.duration == rhs.duration &&
+
69  lhs.rate == rhs.rate && lhs.volume == rhs.volume &&
+
70  lhs.next_track_id == rhs.next_track_id;
+
71 }
+
72 
+
73 inline bool operator==(const TrackHeader& lhs, const TrackHeader& rhs) {
+
74  return lhs.creation_time == rhs.creation_time &&
+
75  lhs.modification_time == rhs.modification_time &&
+
76  lhs.track_id == rhs.track_id && lhs.duration == rhs.duration &&
+
77  lhs.layer == rhs.layer && lhs.alternate_group == rhs.alternate_group &&
+
78  lhs.volume == rhs.volume && lhs.width == rhs.width &&
+
79  lhs.height == rhs.height;
+
80 }
+
81 
+
82 inline bool operator==(const SampleDescription& lhs,
+
83  const SampleDescription& rhs) {
+
84  return lhs.type == rhs.type && lhs.video_entries == rhs.video_entries &&
+
85  lhs.audio_entries == rhs.audio_entries;
+
86 }
+
87 
+
88 inline bool operator==(const DecodingTime& lhs, const DecodingTime& rhs) {
+
89  return lhs.sample_count == rhs.sample_count &&
+
90  lhs.sample_delta == rhs.sample_delta;
+
91 }
+
92 
+
93 inline bool operator==(const DecodingTimeToSample& lhs,
+
94  const DecodingTimeToSample& rhs) {
+
95  return lhs.decoding_time == rhs.decoding_time;
+
96 }
+
97 
+
98 inline bool operator==(const CompositionOffset& lhs,
+
99  const CompositionOffset& rhs) {
+
100  return lhs.sample_count == rhs.sample_count &&
+
101  lhs.sample_offset == rhs.sample_offset;
+
102 }
+
103 
+
104 inline bool operator==(const CompositionTimeToSample& lhs,
+
105  const CompositionTimeToSample& rhs) {
+
106  return lhs.composition_offset == rhs.composition_offset;
+
107 }
+
108 
+
109 inline bool operator==(const ChunkInfo& lhs, const ChunkInfo& rhs) {
+
110  return lhs.first_chunk == rhs.first_chunk &&
+
111  lhs.samples_per_chunk == rhs.samples_per_chunk &&
+
112  lhs.sample_description_index == rhs.sample_description_index;
+
113 }
+
114 
+
115 inline bool operator==(const SampleToChunk& lhs, const SampleToChunk& rhs) {
+
116  return lhs.chunk_info == rhs.chunk_info;
+
117 }
+
118 
+
119 inline bool operator==(const SampleSize& lhs, const SampleSize& rhs) {
+
120  return lhs.sample_size == rhs.sample_size &&
+
121  lhs.sample_count == rhs.sample_count && lhs.sizes == rhs.sizes;
+
122 }
+
123 
+
124 inline bool operator==(const CompactSampleSize& lhs,
+
125  const CompactSampleSize& rhs) {
+
126  return lhs.field_size == rhs.field_size && lhs.sizes == rhs.sizes;
+
127 }
+
128 
+
129 inline bool operator==(const ChunkLargeOffset& lhs,
+
130  const ChunkLargeOffset& rhs) {
+
131  return lhs.offsets == rhs.offsets;
+
132 }
+
133 
+
134 inline bool operator==(const SyncSample& lhs, const SyncSample& rhs) {
+
135  return lhs.sample_number == rhs.sample_number;
+
136 }
+
137 
+
138 inline bool operator==(const SampleTable& lhs, const SampleTable& rhs) {
+
139  return lhs.description == rhs.description &&
+
140  lhs.decoding_time_to_sample == rhs.decoding_time_to_sample &&
+
141  lhs.composition_time_to_sample == rhs.composition_time_to_sample &&
+
142  lhs.sample_to_chunk == rhs.sample_to_chunk &&
+
143  lhs.sample_size == rhs.sample_size &&
+
144  lhs.chunk_large_offset == rhs.chunk_large_offset &&
+
145  lhs.sync_sample == rhs.sync_sample;
+
146 }
+
147 
+
148 inline bool operator==(const EditListEntry& lhs, const EditListEntry& rhs) {
+
149  return lhs.segment_duration == rhs.segment_duration &&
+
150  lhs.media_time == rhs.media_time &&
+
151  lhs.media_rate_integer == rhs.media_rate_integer &&
+
152  lhs.media_rate_fraction == rhs.media_rate_fraction;
+
153 }
+
154 
+
155 inline bool operator==(const EditList& lhs, const EditList& rhs) {
+
156  return lhs.edits == rhs.edits;
+
157 }
+
158 
+
159 inline bool operator==(const Edit& lhs, const Edit& rhs) {
+
160  return lhs.list == rhs.list;
+
161 }
+
162 
+
163 inline bool operator==(const HandlerReference& lhs,
+
164  const HandlerReference& rhs) {
+
165  return lhs.type == rhs.type;
+
166 }
+
167 
+
168 inline bool operator==(const AVCDecoderConfigurationRecord& lhs,
+
169  const AVCDecoderConfigurationRecord& rhs) {
+
170  return lhs.data == rhs.data;
+
171 }
+
172 
+
173 inline bool operator==(const PixelAspectRatioBox& lhs,
+
174  const PixelAspectRatioBox& rhs) {
+
175  return lhs.h_spacing == rhs.h_spacing && lhs.v_spacing == rhs.v_spacing;
+
176 }
+
177 
+
178 inline bool operator==(const VideoSampleEntry& lhs,
+
179  const VideoSampleEntry& rhs) {
+
180  return lhs.format == rhs.format &&
+
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;
+
185 }
+
186 
+
187 inline bool operator==(const ESDescriptor& lhs, const ESDescriptor& rhs) {
+
188  return lhs.esid() == rhs.esid() && lhs.object_type() == rhs.object_type() &&
+
189  lhs.decoder_specific_info() == rhs.decoder_specific_info();
+
190 }
+
191 
+
192 inline bool operator==(const ElementaryStreamDescriptor& lhs,
+
193  const ElementaryStreamDescriptor& rhs) {
+
194  return lhs.es_descriptor == rhs.es_descriptor;
+
195 }
+
196 
+
197 inline bool operator==(const AudioSampleEntry& lhs,
+
198  const AudioSampleEntry& rhs) {
+
199  return lhs.format == rhs.format &&
+
200  lhs.data_reference_index == rhs.data_reference_index &&
+
201  lhs.channelcount == rhs.channelcount &&
+
202  lhs.samplesize == rhs.samplesize && lhs.samplerate == rhs.samplerate &&
+
203  lhs.sinf == rhs.sinf && lhs.esds == rhs.esds;
+
204 }
+
205 
+
206 inline bool operator==(const MediaHeader& lhs, const MediaHeader& rhs) {
+
207  return lhs.creation_time == rhs.creation_time &&
+
208  lhs.modification_time == rhs.modification_time &&
+
209  lhs.timescale == rhs.timescale && lhs.duration == rhs.duration &&
+
210  strcmp(lhs.language, rhs.language) == 0;
+
211 }
+
212 
+
213 inline bool operator==(const VideoMediaHeader& lhs,
+
214  const VideoMediaHeader& rhs) {
+
215  return lhs.graphicsmode == rhs.graphicsmode &&
+
216  lhs.opcolor_red == rhs.opcolor_red &&
+
217  lhs.opcolor_green == rhs.opcolor_green &&
+
218  lhs.opcolor_blue == rhs.opcolor_blue;
+
219 }
+
220 
+
221 inline bool operator==(const SoundMediaHeader& lhs,
+
222  const SoundMediaHeader& rhs) {
+
223  return lhs.balance == rhs.balance;
+
224 }
+
225 
+
226 inline bool operator==(const DataEntryUrl& lhs, const DataEntryUrl& rhs) {
+
227  return lhs.flags == rhs.flags && lhs.location == rhs.location;
+
228 }
+
229 
+
230 inline bool operator==(const DataReference& lhs, const DataReference& rhs) {
+
231  return lhs.data_entry == rhs.data_entry;
+
232 }
+
233 
+
234 inline bool operator==(const DataInformation& lhs, const DataInformation& rhs) {
+
235  return lhs.dref == rhs.dref;
+
236 }
+
237 
+
238 inline bool operator==(const MediaInformation& lhs,
+
239  const MediaInformation& rhs) {
+
240  return lhs.dinf == rhs.dinf && lhs.sample_table == rhs.sample_table &&
+
241  lhs.vmhd == rhs.vmhd && lhs.smhd == rhs.smhd;
+
242 }
+
243 
+
244 inline bool operator==(const Media& lhs, const Media& rhs) {
+
245  return lhs.header == rhs.header && lhs.handler == rhs.handler &&
+
246  lhs.information == rhs.information;
+
247 }
+
248 
+
249 inline bool operator==(const Track& lhs, const Track& rhs) {
+
250  return lhs.header == rhs.header && lhs.media == rhs.media &&
+
251  lhs.edit == rhs.edit;
+
252 }
+
253 
+
254 inline bool operator==(const MovieExtendsHeader& lhs,
+
255  const MovieExtendsHeader& rhs) {
+
256  return lhs.fragment_duration == rhs.fragment_duration;
+
257 }
+
258 
+
259 inline bool operator==(const TrackExtends& lhs, const TrackExtends& rhs) {
+
260  return lhs.track_id == rhs.track_id &&
+
261  lhs.default_sample_description_index ==
+
262  rhs.default_sample_description_index &&
+
263  lhs.default_sample_duration == rhs.default_sample_duration &&
+
264  lhs.default_sample_size == rhs.default_sample_size &&
+
265  lhs.default_sample_flags == rhs.default_sample_flags;
+
266 }
+
267 
+
268 inline bool operator==(const MovieExtends& lhs, const MovieExtends& rhs) {
+
269  return lhs.header == rhs.header && lhs.tracks == rhs.tracks;
+
270 }
+
271 
+
272 inline bool operator==(const Movie& lhs, const Movie& rhs) {
+
273  return lhs.header == rhs.header && lhs.extends == rhs.extends &&
+
274  lhs.tracks == rhs.tracks && lhs.pssh == rhs.pssh;
+
275 }
+
276 
+
277 inline bool operator==(const TrackFragmentDecodeTime& lhs,
+
278  const TrackFragmentDecodeTime& rhs) {
+
279  return lhs.decode_time == rhs.decode_time;
+
280 }
+
281 
+
282 inline bool operator==(const MovieFragmentHeader& lhs,
+
283  const MovieFragmentHeader& rhs) {
+
284  return lhs.sequence_number == rhs.sequence_number;
+
285 }
+
286 
+
287 inline bool operator==(const TrackFragmentHeader& lhs,
+
288  const TrackFragmentHeader& rhs) {
+
289  return lhs.flags == rhs.flags && lhs.track_id == rhs.track_id &&
+
290  lhs.sample_description_index == rhs.sample_description_index &&
+
291  lhs.default_sample_duration == rhs.default_sample_duration &&
+
292  lhs.default_sample_size == rhs.default_sample_size &&
+
293  lhs.default_sample_flags == rhs.default_sample_flags;
+
294 }
+
295 
+
296 inline bool operator==(const TrackFragmentRun& lhs,
+
297  const TrackFragmentRun& rhs) {
+
298  return lhs.flags == rhs.flags && lhs.sample_count == rhs.sample_count &&
+
299  lhs.data_offset == rhs.data_offset &&
+
300  lhs.sample_flags == rhs.sample_flags &&
+
301  lhs.sample_sizes == rhs.sample_sizes &&
+
302  lhs.sample_durations == rhs.sample_durations &&
+
303  lhs.sample_composition_time_offsets ==
+
304  rhs.sample_composition_time_offsets;
+
305 }
+
306 
+
307 inline bool operator==(const SampleToGroupEntry& lhs,
+
308  const SampleToGroupEntry& rhs) {
+
309  return lhs.sample_count == rhs.sample_count &&
+
310  lhs.group_description_index == rhs.group_description_index;
+
311 }
+
312 
+
313 inline bool operator==(const SampleToGroup& lhs,
+
314  const SampleToGroup& rhs) {
+
315  return lhs.grouping_type == rhs.grouping_type &&
+
316  lhs.grouping_type_parameter == rhs.grouping_type_parameter &&
+
317  lhs.entries == rhs.entries;
+
318 }
+
319 
+
320 inline bool operator==(const CencSampleEncryptionInfoEntry& lhs,
+
321  const CencSampleEncryptionInfoEntry& rhs) {
+
322  return lhs.is_encrypted == rhs.is_encrypted &&
+
323  lhs.iv_size == rhs.iv_size &&
+
324  lhs.key_id == rhs.key_id;
+
325 }
+
326 
+
327 inline bool operator==(const SampleGroupDescription& lhs,
+
328  const SampleGroupDescription& rhs) {
+
329  return lhs.grouping_type == rhs.grouping_type &&
+
330  lhs.entries == rhs.entries;
+
331 }
+
332 
+
333 inline bool operator==(const TrackFragment& lhs, const TrackFragment& rhs) {
+
334  return lhs.header == rhs.header && lhs.runs == rhs.runs &&
+
335  lhs.decode_time == rhs.decode_time &&
+
336  lhs.auxiliary_offset == rhs.auxiliary_offset &&
+
337  lhs.auxiliary_size == rhs.auxiliary_size;
+
338 }
+
339 
+
340 inline bool operator==(const MovieFragment& lhs, const MovieFragment& rhs) {
+
341  return lhs.header == rhs.header && lhs.tracks == rhs.tracks &&
+
342  lhs.pssh == rhs.pssh;
+
343 }
+
344 
+
345 inline bool operator==(const SegmentReference& lhs,
+
346  const SegmentReference& rhs) {
+
347  return lhs.reference_type == rhs.reference_type &&
+
348  lhs.referenced_size == rhs.referenced_size &&
+
349  lhs.subsegment_duration == rhs.subsegment_duration &&
+
350  lhs.starts_with_sap == rhs.starts_with_sap &&
+
351  lhs.sap_type == rhs.sap_type &&
+
352  lhs.sap_delta_time == rhs.sap_delta_time;
+
353 }
+
354 
+
355 inline bool operator==(const SegmentIndex& lhs, const SegmentIndex& rhs) {
+
356  return lhs.reference_id == rhs.reference_id &&
+
357  lhs.timescale == rhs.timescale &&
+
358  lhs.earliest_presentation_time == rhs.earliest_presentation_time &&
+
359  lhs.first_offset == rhs.first_offset &&
+
360  lhs.references == rhs.references;
+
361 }
+
362 
+
363 } // namespace mp4
+
364 } // namespace media
+
365 } // namespace edash_packager
+
366 
+
367 #endif // MEDIA_FORMATS_MP4_BOX_DEFINITIONS_COMPARISON_H_
+
+ + + + diff --git a/sdk/de/d87/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo-members.html b/sdk/de/d87/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo-members.html new file mode 100644 index 0000000000..b8580d3a33 --- /dev/null +++ b/sdk/de/d87/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo-members.html @@ -0,0 +1,107 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::ChunkInfo Member List
+
+
+ +

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

+ + + + +
first_chunk (defined in edash_packager::media::mp4::ChunkInfo)edash_packager::media::mp4::ChunkInfo
sample_description_index (defined in edash_packager::media::mp4::ChunkInfo)edash_packager::media::mp4::ChunkInfo
samples_per_chunk (defined in edash_packager::media::mp4::ChunkInfo)edash_packager::media::mp4::ChunkInfo
+ + + + diff --git a/sdk/de/d8b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes.html b/sdk/de/d8b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes.html new file mode 100644 index 0000000000..ebd857e5f3 --- /dev/null +++ b/sdk/de/d8b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes.html @@ -0,0 +1,150 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp2t::TsSectionPes Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp2t::TsSectionPes Class Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp2t::TsSectionPes:
+
+
+ + +edash_packager::media::mp2t::TsSection + +
+ + + + + + + + + + +

+Public Member Functions

TsSectionPes (scoped_ptr< EsParser > es_parser)
 
+virtual bool Parse (bool payload_unit_start_indicator, const uint8_t *buf, int size) OVERRIDE
 
+virtual void Flush () OVERRIDE
 
+virtual void Reset () OVERRIDE
 
+ + + + +

+Additional Inherited Members

- Public Types inherited from edash_packager::media::mp2t::TsSection
enum  SpecialPid {
+  kPidPat = 0x0, +kPidCat = 0x1, +kPidTsdt = 0x2, +kPidNullPacket = 0x1fff, +
+  kPidMax = 0x1fff +
+ }
 
+

Detailed Description

+
+

Definition at line 21 of file ts_section_pes.h.

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/de/d8b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes.png b/sdk/de/d8b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes.png new file mode 100644 index 0000000000..6373071f15 Binary files /dev/null and b/sdk/de/d8b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes.png differ diff --git a/sdk/de/d8d/structedash__packager_1_1media_1_1H264SliceHeader.html b/sdk/de/d8d/structedash__packager_1_1media_1_1H264SliceHeader.html new file mode 100644 index 0000000000..98dbdd8bf7 --- /dev/null +++ b/sdk/de/d8d/structedash__packager_1_1media_1_1H264SliceHeader.html @@ -0,0 +1,284 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::H264SliceHeader Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::H264SliceHeader Struct Reference
+
+
+ + + + + + +

+Public Types

enum  { kRefListSize = 32, +kRefListModSize = kRefListSize + }
 
enum  Type {
+  kPSlice = 0, +kBSlice = 1, +kISlice = 2, +kSPSlice = 3, +
+  kSISlice = 4 +
+ }
 
+ + + + + + + + + + + +

+Public Member Functions

+bool IsPSlice () const
 
+bool IsBSlice () const
 
+bool IsISlice () const
 
+bool IsSPSlice () const
 
+bool IsSISlice () const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+bool idr_pic_flag
 
+int nal_ref_idc
 
+const uint8_t * nalu_data
 
+off_t nalu_size
 
+off_t header_bit_size
 
+int first_mb_in_slice
 
+int slice_type
 
+int pic_parameter_set_id
 
+int colour_plane_id
 
+int frame_num
 
+bool field_pic_flag
 
+bool bottom_field_flag
 
+int idr_pic_id
 
+int pic_order_cnt_lsb
 
+int delta_pic_order_cnt_bottom
 
+int delta_pic_order_cnt [2]
 
+int redundant_pic_cnt
 
+bool direct_spatial_mv_pred_flag
 
+bool num_ref_idx_active_override_flag
 
+int num_ref_idx_l0_active_minus1
 
+int num_ref_idx_l1_active_minus1
 
+bool ref_pic_list_modification_flag_l0
 
+bool ref_pic_list_modification_flag_l1
 
+H264ModificationOfPicNum ref_list_l0_modifications [kRefListModSize]
 
+H264ModificationOfPicNum ref_list_l1_modifications [kRefListModSize]
 
+int luma_log2_weight_denom
 
+int chroma_log2_weight_denom
 
+bool luma_weight_l0_flag
 
+bool chroma_weight_l0_flag
 
+H264WeightingFactors pred_weight_table_l0
 
+bool luma_weight_l1_flag
 
+bool chroma_weight_l1_flag
 
+H264WeightingFactors pred_weight_table_l1
 
+bool no_output_of_prior_pics_flag
 
+bool long_term_reference_flag
 
+bool adaptive_ref_pic_marking_mode_flag
 
+H264DecRefPicMarking ref_pic_marking [kRefListSize]
 
+int cabac_init_idc
 
+int slice_qp_delta
 
+bool sp_for_switch_flag
 
+int slice_qs_delta
 
+int disable_deblocking_filter_idc
 
+int slice_alpha_c0_offset_div2
 
+int slice_beta_offset_div2
 
+

Detailed Description

+
+

Definition at line 188 of file h264_parser.h.

+

The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/de/d93/classedash__packager_1_1media_1_1ByteQueue-members.html b/sdk/de/d93/classedash__packager_1_1media_1_1ByteQueue-members.html new file mode 100644 index 0000000000..f6f02748b0 --- /dev/null +++ b/sdk/de/d93/classedash__packager_1_1media_1_1ByteQueue-members.html @@ -0,0 +1,110 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::ByteQueue Member List
+
+
+ +

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

+ + + + + + + +
ByteQueue() (defined in edash_packager::media::ByteQueue)edash_packager::media::ByteQueue
Peek(const uint8_t **data, int *size) const edash_packager::media::ByteQueue
Pop(int count)edash_packager::media::ByteQueue
Push(const uint8_t *data, int size)edash_packager::media::ByteQueue
Reset()edash_packager::media::ByteQueue
~ByteQueue() (defined in edash_packager::media::ByteQueue)edash_packager::media::ByteQueue
+ + + + diff --git a/sdk/de/d9e/classedash__packager_1_1media_1_1TextTrack.html b/sdk/de/d9e/classedash__packager_1_1media_1_1TextTrack.html new file mode 100644 index 0000000000..b4a0735cfe --- /dev/null +++ b/sdk/de/d9e/classedash__packager_1_1media_1_1TextTrack.html @@ -0,0 +1,117 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::TextTrack Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::TextTrack Class Referenceabstract
+
+
+ + + + +

+Public Member Functions

+virtual void addWebVTTCue (const base::TimeDelta &start, const base::TimeDelta &end, const std::string &id, const std::string &content, const std::string &settings)=0
 
+

Detailed Description

+
+

Definition at line 26 of file text_track.h.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/sdk/de/da0/classedash__packager_1_1media_1_1AesCbcCtsDecryptor-members.html b/sdk/de/da0/classedash__packager_1_1media_1_1AesCbcCtsDecryptor-members.html new file mode 100644 index 0000000000..217476a53c --- /dev/null +++ b/sdk/de/da0/classedash__packager_1_1media_1_1AesCbcCtsDecryptor-members.html @@ -0,0 +1,111 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::AesCbcCtsDecryptor Member List
+
+
+ +

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

+ + + + + + + + +
AesCbcCtsDecryptor() (defined in edash_packager::media::AesCbcCtsDecryptor)edash_packager::media::AesCbcCtsDecryptor
Decrypt(const uint8_t *ciphertext, size_t size, uint8_t *plaintext)edash_packager::media::AesCbcCtsDecryptor
Decrypt(const std::vector< uint8_t > &ciphertext, std::vector< uint8_t > *plaintext)edash_packager::media::AesCbcCtsDecryptor
InitializeWithIv(const std::vector< uint8_t > &key, const std::vector< uint8_t > &iv)edash_packager::media::AesCbcCtsDecryptor
iv() const (defined in edash_packager::media::AesCbcCtsDecryptor)edash_packager::media::AesCbcCtsDecryptorinline
SetIv(const std::vector< uint8_t > &iv)edash_packager::media::AesCbcCtsDecryptor
~AesCbcCtsDecryptor() (defined in edash_packager::media::AesCbcCtsDecryptor)edash_packager::media::AesCbcCtsDecryptor
+ + + + diff --git a/sdk/de/da6/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator-members.html b/sdk/de/da6/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator-members.html new file mode 100644 index 0000000000..1d6102308b --- /dev/null +++ b/sdk/de/da6/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator-members.html @@ -0,0 +1,111 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::DecodingTimeIterator Member List
+
+
+ +

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

+ + + + + + + + +
AdvanceSample()edash_packager::media::mp4::DecodingTimeIterator
DecodingTimeIterator(const DecodingTimeToSample &decoding_time_to_sample)edash_packager::media::mp4::DecodingTimeIteratorexplicit
Duration(uint32_t start_sample, uint32_t end_sample) const edash_packager::media::mp4::DecodingTimeIterator
IsValid() const edash_packager::media::mp4::DecodingTimeIterator
NumSamples() const edash_packager::media::mp4::DecodingTimeIterator
sample_delta() const edash_packager::media::mp4::DecodingTimeIteratorinline
~DecodingTimeIterator() (defined in edash_packager::media::mp4::DecodingTimeIterator)edash_packager::media::mp4::DecodingTimeIterator
+ + + + diff --git a/sdk/de/da7/classedash__packager_1_1media_1_1AudioTimestampHelper-members.html b/sdk/de/da7/classedash__packager_1_1media_1_1AudioTimestampHelper-members.html new file mode 100644 index 0000000000..c808adeb84 --- /dev/null +++ b/sdk/de/da7/classedash__packager_1_1media_1_1AudioTimestampHelper-members.html @@ -0,0 +1,112 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::AudioTimestampHelper Member List
+
+
+ +

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

+ + + + + + + + + +
AddFrames(int64_t frame_count) (defined in edash_packager::media::AudioTimestampHelper)edash_packager::media::AudioTimestampHelper
AudioTimestampHelper(uint32_t timescale, uint32_t samples_per_second) (defined in edash_packager::media::AudioTimestampHelper)edash_packager::media::AudioTimestampHelperexplicit
base_timestamp() const (defined in edash_packager::media::AudioTimestampHelper)edash_packager::media::AudioTimestampHelper
frame_count() const (defined in edash_packager::media::AudioTimestampHelper)edash_packager::media::AudioTimestampHelperinline
GetFrameDuration(int64_t frame_count) const (defined in edash_packager::media::AudioTimestampHelper)edash_packager::media::AudioTimestampHelper
GetFramesToTarget(int64_t target) const (defined in edash_packager::media::AudioTimestampHelper)edash_packager::media::AudioTimestampHelper
GetTimestamp() const (defined in edash_packager::media::AudioTimestampHelper)edash_packager::media::AudioTimestampHelper
SetBaseTimestamp(int64_t base_timestamp) (defined in edash_packager::media::AudioTimestampHelper)edash_packager::media::AudioTimestampHelper
+ + + + diff --git a/sdk/de/dab/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun-members.html b/sdk/de/dab/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun-members.html new file mode 100644 index 0000000000..9d8a59fcd7 --- /dev/null +++ b/sdk/de/dab/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun-members.html @@ -0,0 +1,131 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::TrackFragmentRun Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::TrackFragmentRun)edash_packager::media::mp4::TrackFragmentRunvirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::TrackFragmentRunvirtual
data_offset (defined in edash_packager::media::mp4::TrackFragmentRun)edash_packager::media::mp4::TrackFragmentRun
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
kDataOffsetPresentMask enum value (defined in edash_packager::media::mp4::TrackFragmentRun)edash_packager::media::mp4::TrackFragmentRun
kFirstSampleFlagsPresentMask enum value (defined in edash_packager::media::mp4::TrackFragmentRun)edash_packager::media::mp4::TrackFragmentRun
kSampleCompTimeOffsetsPresentMask enum value (defined in edash_packager::media::mp4::TrackFragmentRun)edash_packager::media::mp4::TrackFragmentRun
kSampleDurationPresentMask enum value (defined in edash_packager::media::mp4::TrackFragmentRun)edash_packager::media::mp4::TrackFragmentRun
kSampleFlagsPresentMask enum value (defined in edash_packager::media::mp4::TrackFragmentRun)edash_packager::media::mp4::TrackFragmentRun
kSampleSizePresentMask enum value (defined in edash_packager::media::mp4::TrackFragmentRun)edash_packager::media::mp4::TrackFragmentRun
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::TrackFragmentRunvirtual
sample_composition_time_offsets (defined in edash_packager::media::mp4::TrackFragmentRun)edash_packager::media::mp4::TrackFragmentRun
sample_count (defined in edash_packager::media::mp4::TrackFragmentRun)edash_packager::media::mp4::TrackFragmentRun
sample_durations (defined in edash_packager::media::mp4::TrackFragmentRun)edash_packager::media::mp4::TrackFragmentRun
sample_flags (defined in edash_packager::media::mp4::TrackFragmentRun)edash_packager::media::mp4::TrackFragmentRun
sample_sizes (defined in edash_packager::media::mp4::TrackFragmentRun)edash_packager::media::mp4::TrackFragmentRun
TrackFragmentFlagsMasks enum name (defined in edash_packager::media::mp4::TrackFragmentRun)edash_packager::media::mp4::TrackFragmentRun
TrackFragmentRun() (defined in edash_packager::media::mp4::TrackFragmentRun)edash_packager::media::mp4::TrackFragmentRun
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~TrackFragmentRun() (defined in edash_packager::media::mp4::TrackFragmentRun)edash_packager::media::mp4::TrackFragmentRunvirtual
+ + + + diff --git a/sdk/de/dad/validate__flag_8cc_source.html b/sdk/de/dad/validate__flag_8cc_source.html new file mode 100644 index 0000000000..6e9238f0a3 --- /dev/null +++ b/sdk/de/dad/validate__flag_8cc_source.html @@ -0,0 +1,140 @@ + + + + + + +DASH Media Packaging SDK: app/validate_flag.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
validate_flag.cc
+
+
+
1 // Copyright 2014 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 // Flag validation help functions.
+
8 
+
9 #include "packager/app/validate_flag.h"
+
10 
+
11 #include <stdio.h>
+
12 
+
13 #include "packager/base/strings/stringprintf.h"
+
14 
+
15 namespace edash_packager {
+
16 
+
17 bool ValidateFlag(const char* flag_name,
+
18  const std::string& flag_value,
+
19  bool condition,
+
20  bool optional,
+
21  const char* label) {
+
22  if (flag_value.empty()) {
+
23  if (!optional && condition) {
+
24  PrintError(
+
25  base::StringPrintf("--%s is required if %s.", flag_name, label));
+
26  return false;
+
27  }
+
28  } else if (!condition) {
+
29  PrintError(base::StringPrintf(
+
30  "--%s should be specified only if %s.", flag_name, label));
+
31  return false;
+
32  }
+
33  return true;
+
34 }
+
35 
+
36 void PrintError(const std::string& error_message) {
+
37  fprintf(stderr, "ERROR: %s\n", error_message.c_str());
+
38 }
+
39 
+
40 } // namespace edash_packager
+
bool ValidateFlag(const char *flag_name, const std::string &flag_value, bool condition, bool optional, const char *label)
+
void PrintError(const std::string &error_message)
+
+ + + + diff --git a/sdk/de/db1/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor.html b/sdk/de/db1/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor.html new file mode 100644 index 0000000000..2267c2cffe --- /dev/null +++ b/sdk/de/db1/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor.html @@ -0,0 +1,174 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::ESDescriptor Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::ESDescriptor Class Reference
+
+
+ +

#include <es_descriptor.h>

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

+Public Member Functions

+bool Parse (const std::vector< uint8_t > &data)
 
+void Write (BufferWriter *writer) const
 
+size_t ComputeSize () const
 
+uint16_t esid () const
 
+void set_esid (uint16_t esid)
 
+ObjectType object_type () const
 
+void set_object_type (ObjectType object_type)
 
+const std::vector< uint8_t > & decoder_specific_info () const
 
+void set_decoder_specific_info (const std::vector< uint8_t > &decoder_specific_info)
 
bool IsAAC () const
 
+

Detailed Description

+

This class parses object type and decoder specific information from an elementary stream descriptor, which is usually contained in an esds box. Please refer to ISO 14496 Part 1 7.2.6.5 for more details.

+ +

Definition at line 33 of file es_descriptor.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool edash_packager::media::mp4::ESDescriptor::IsAAC () const
+
+inline
+
+
Returns
true if the stream is AAC.
+ +

Definition at line 57 of file es_descriptor.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/de/db4/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo-members.html b/sdk/de/db4/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo-members.html new file mode 100644 index 0000000000..0612b2f04d --- /dev/null +++ b/sdk/de/db4/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo-members.html @@ -0,0 +1,115 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::SchemeInfo Member List
+
+
+ +

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

+ + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::SchemeInfo)edash_packager::media::mp4::SchemeInfovirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::SchemeInfovirtual
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::SchemeInfovirtual
SchemeInfo() (defined in edash_packager::media::mp4::SchemeInfo)edash_packager::media::mp4::SchemeInfo
track_encryption (defined in edash_packager::media::mp4::SchemeInfo)edash_packager::media::mp4::SchemeInfo
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~SchemeInfo() (defined in edash_packager::media::mp4::SchemeInfo)edash_packager::media::mp4::SchemeInfovirtual
+ + + + diff --git a/sdk/de/dc1/demuxer_8h_source.html b/sdk/de/dc1/demuxer_8h_source.html new file mode 100644 index 0000000000..905632cb28 --- /dev/null +++ b/sdk/de/dc1/demuxer_8h_source.html @@ -0,0 +1,179 @@ + + + + + + +DASH Media Packaging SDK: media/base/demuxer.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
demuxer.h
+
+
+
1 // Copyright 2014 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_BASE_DEMUXER_H_
+
8 #define MEDIA_BASE_DEMUXER_H_
+
9 
+
10 #include <vector>
+
11 
+
12 #include "packager/base/memory/ref_counted.h"
+
13 #include "packager/base/memory/scoped_ptr.h"
+
14 #include "packager/media/base/container_names.h"
+
15 #include "packager/media/base/status.h"
+
16 
+
17 namespace edash_packager {
+
18 namespace media {
+
19 
+
20 class Decryptor;
+
21 class File;
+
22 class KeySource;
+
23 class MediaParser;
+
24 class MediaSample;
+
25 class MediaStream;
+
26 class StreamInfo;
+
27 
+
30 class Demuxer {
+
31  public:
+
35  explicit Demuxer(const std::string& file_name);
+
36  ~Demuxer();
+
37 
+
42  void SetKeySource(scoped_ptr<KeySource> key_source);
+
43 
+ +
50 
+
53  Status Run();
+
54 
+
56  Status Parse();
+
57 
+
60  void Cancel();
+
61 
+
66  const std::vector<MediaStream*>& streams() { return streams_; }
+
67 
+
70  MediaContainerName container_name() { return container_name_; }
+
71 
+
72  private:
+
73  // Parser event handlers.
+
74  void ParserInitEvent(const std::vector<scoped_refptr<StreamInfo> >& streams);
+
75  bool NewSampleEvent(uint32_t track_id,
+
76  const scoped_refptr<MediaSample>& sample);
+
77 
+
78  std::string file_name_;
+
79  File* media_file_;
+
80  bool init_event_received_;
+
81  Status init_parsing_status_;
+
82  scoped_ptr<MediaParser> parser_;
+
83  std::vector<MediaStream*> streams_;
+
84  MediaContainerName container_name_;
+
85  scoped_ptr<uint8_t[]> buffer_;
+
86  scoped_ptr<KeySource> key_source_;
+
87  bool cancelled_;
+
88 
+
89  DISALLOW_COPY_AND_ASSIGN(Demuxer);
+
90 };
+
91 
+
92 } // namespace media
+
93 } // namespace edash_packager
+
94 
+
95 #endif // MEDIA_BASE_DEMUXER_H_
+ +
MediaContainerName container_name()
Definition: demuxer.h:70
+
void SetKeySource(scoped_ptr< KeySource > key_source)
Definition: demuxer.cc:46
+ +
Define an abstract file interface.
Definition: file.h:22
+
const std::vector< MediaStream * > & streams()
Definition: demuxer.h:66
+ + + +
Status Parse()
Read from the source and send it to the parser.
Definition: demuxer.cc:166
+
Demuxer(const std::string &file_name)
Definition: demuxer.cc:31
+
+ + + + diff --git a/sdk/de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html b/sdk/de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html new file mode 100644 index 0000000000..79f723e7ab --- /dev/null +++ b/sdk/de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html @@ -0,0 +1,188 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::SampleAuxiliaryInformationOffset Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::SampleAuxiliaryInformationOffset Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::SampleAuxiliaryInformationOffset:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + +

+Public Attributes

+std::vector< uint64_t > offsets
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 59 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::SampleAuxiliaryInformationOffset::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 159 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.png b/sdk/de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.png new file mode 100644 index 0000000000..27f160f6b0 Binary files /dev/null and b/sdk/de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.png differ diff --git a/sdk/de/dcc/mock__mpd__notifier_8cc_source.html b/sdk/de/dcc/mock__mpd__notifier_8cc_source.html new file mode 100644 index 0000000000..f24d313672 --- /dev/null +++ b/sdk/de/dcc/mock__mpd__notifier_8cc_source.html @@ -0,0 +1,106 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/mock_mpd_notifier.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mock_mpd_notifier.cc
+
+
+
1 #include "packager/mpd/base/mock_mpd_notifier.h"
+
2 
+
3 namespace edash_packager {
+
4 
+
5 MockMpdNotifier::MockMpdNotifier(DashProfile profile) : MpdNotifier(profile) {}
+
6 MockMpdNotifier::~MockMpdNotifier() {}
+
7 
+
8 } // namespace edash_packager
+
+ + + + diff --git a/sdk/de/dcf/file__closer_8h_source.html b/sdk/de/dcf/file__closer_8h_source.html new file mode 100644 index 0000000000..3e16a6b35e --- /dev/null +++ b/sdk/de/dcf/file__closer_8h_source.html @@ -0,0 +1,130 @@ + + + + + + +DASH Media Packaging SDK: media/file/file_closer.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
file_closer.h
+
+
+
1 // Copyright 2014 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_FILE_FILE_CLOSER_H_
+
8 #define MEDIA_FILE_FILE_CLOSER_H_
+
9 
+
10 #include "packager/base/logging.h"
+
11 #include "packager/media/file/file.h"
+
12 
+
13 namespace edash_packager {
+
14 namespace media {
+
15 
+
18 struct FileCloser {
+
19  inline void operator()(File* file) const {
+
20  if (file != NULL && !file->Close()) {
+
21  LOG(WARNING) << "Failed to close the file properly: "
+
22  << file->file_name();
+
23  }
+
24  }
+
25 };
+
26 
+
27 } // namespace media
+
28 } // namespace edash_packager
+
29 
+
30 #endif // MEDIA_FILE_FILE_CLOSER_H_
+ +
Define an abstract file interface.
Definition: file.h:22
+ +
const std::string & file_name() const
Definition: file.h:89
+
+ + + + diff --git a/sdk/de/dd4/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer-members.html b/sdk/de/dd4/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer-members.html new file mode 100644 index 0000000000..563cdd2674 --- /dev/null +++ b/sdk/de/dd4/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer-members.html @@ -0,0 +1,124 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::MP4Muxer Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + +
AddStream(MediaStream *stream)edash_packager::media::Muxer
Cancel()edash_packager::media::Muxer
clear_lead_in_seconds() const (defined in edash_packager::media::Muxer)edash_packager::media::Muxerinlineprotected
clock() (defined in edash_packager::media::Muxer)edash_packager::media::Muxerinlineprotected
crypto_period_duration_in_seconds() const (defined in edash_packager::media::Muxer)edash_packager::media::Muxerinlineprotected
encryption_key_source() (defined in edash_packager::media::Muxer)edash_packager::media::Muxerinlineprotected
max_sd_pixels() const (defined in edash_packager::media::Muxer)edash_packager::media::Muxerinlineprotected
MP4Muxer(const MuxerOptions &options)edash_packager::media::mp4::MP4Muxerexplicit
Muxer(const MuxerOptions &options) (defined in edash_packager::media::Muxer)edash_packager::media::Muxerexplicit
muxer_listener() (defined in edash_packager::media::Muxer)edash_packager::media::Muxerinlineprotected
options() const (defined in edash_packager::media::Muxer)edash_packager::media::Muxerinlineprotected
progress_listener() (defined in edash_packager::media::Muxer)edash_packager::media::Muxerinlineprotected
Run()edash_packager::media::Muxer
set_clock(base::Clock *clock)edash_packager::media::Muxerinline
SetKeySource(KeySource *encryption_key_source, uint32_t max_sd_pixels, double clear_lead_in_seconds, double crypto_period_duration_in_seconds)edash_packager::media::Muxer
SetMuxerListener(scoped_ptr< MuxerListener > muxer_listener)edash_packager::media::Muxer
SetProgressListener(scoped_ptr< ProgressListener > progress_listener)edash_packager::media::Muxer
streams() const (defined in edash_packager::media::Muxer)edash_packager::media::Muxerinline
~MP4Muxer() (defined in edash_packager::media::mp4::MP4Muxer)edash_packager::media::mp4::MP4Muxervirtual
~Muxer() (defined in edash_packager::media::Muxer)edash_packager::media::Muxervirtual
+ + + + diff --git a/sdk/de/dd6/content__protection__element_8h_source.html b/sdk/de/dd6/content__protection__element_8h_source.html new file mode 100644 index 0000000000..d382a719e6 --- /dev/null +++ b/sdk/de/dd6/content__protection__element_8h_source.html @@ -0,0 +1,150 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/content_protection_element.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
content_protection_element.h
+
+
+
1 // Copyright 2014 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 // ContentProtectionElement is shared a structure that can be passed to
+
8 // MPD generator classes to add ContentProtection element in the resulting MPD
+
9 // file.
+
10 // http://goo.gl/UrsSlF
+
11 
+
12 #ifndef MPD_BASE_CONTENT_PROTECTION_ELEMENT_H_
+
13 #define MPD_BASE_CONTENT_PROTECTION_ELEMENT_H_
+
14 
+
15 #include <map>
+
16 #include <string>
+
17 #include <vector>
+
18 
+
19 namespace edash_packager {
+
20 
+
21 // This is any (XML) element.
+
22 struct Element {
+
23  Element();
+
24  ~Element();
+
25  // Name of this element.
+
26  std::string name;
+
27  // attributes for this element.
+
28  std::map<std::string, std::string> attributes;
+
29  // Content of this element.
+
30  std::string content;
+
31  std::vector<Element> subelements;
+
32 };
+
33 
+ + + +
39 
+
40  std::string value; // Will be set for 'value' attribute.
+
41  std::string scheme_id_uri; // Will be set for 'schemeIdUri' attribute.
+
42 
+
43  // Other attributes for this element.
+
44  std::map<std::string, std::string> additional_attributes;
+
45 
+
46  // The subelements that will be in this element.
+
47  std::vector<Element> subelements;
+
48 };
+
49 
+
50 } // namespace edash_packager
+
51 
+
52 #endif // MPD_BASE_CONTENT_PROTECTION_ELEMENT_H_
+ + +
+ + + + diff --git a/sdk/de/dd6/muxer__listener__test__helper_8cc_source.html b/sdk/de/dd6/muxer__listener__test__helper_8cc_source.html new file mode 100644 index 0000000000..8d4779763c --- /dev/null +++ b/sdk/de/dd6/muxer__listener__test__helper_8cc_source.html @@ -0,0 +1,218 @@ + + + + + + +DASH Media Packaging SDK: media/event/muxer_listener_test_helper.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
muxer_listener_test_helper.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/event/muxer_listener_test_helper.h"
+
8 
+
9 #include <gtest/gtest.h>
+
10 
+
11 #include "packager/base/stl_util.h"
+
12 
+
13 namespace edash_packager {
+
14 namespace media {
+
15 
+
16 VideoStreamInfoParameters::VideoStreamInfoParameters() {}
+
17 VideoStreamInfoParameters::~VideoStreamInfoParameters() {}
+
18 
+
19 scoped_refptr<StreamInfo> CreateVideoStreamInfo(
+
20  const VideoStreamInfoParameters& param) {
+
21  return scoped_refptr<StreamInfo>(
+
22  new VideoStreamInfo(param.track_id,
+
23  param.time_scale,
+
24  param.duration,
+
25  param.codec,
+
26  param.codec_string,
+
27  param.language,
+
28  param.width,
+
29  param.height,
+
30  param.pixel_width,
+
31  param.pixel_height,
+
32  0, // trick_play_rate
+
33  param.nalu_length_size,
+
34  vector_as_array(&param.extra_data),
+
35  param.extra_data.size(),
+
36  param.is_encrypted));
+
37 }
+
38 
+
39 VideoStreamInfoParameters GetDefaultVideoStreamInfoParams() {
+
40  const int kTrackId = 0;
+
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)
+
+ + + + diff --git a/sdk/de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html b/sdk/de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html new file mode 100644 index 0000000000..c25b5cd5d9 --- /dev/null +++ b/sdk/de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html @@ -0,0 +1,186 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::Media Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::Media Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::Media:
+
+
+ + +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + +

+Public Attributes

+MediaHeader header
 
+HandlerReference handler
 
+MediaInformation information
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 387 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::Media::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1327 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.png b/sdk/de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.png new file mode 100644 index 0000000000..f49f948ba1 Binary files /dev/null and b/sdk/de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.png differ diff --git a/sdk/de/de9/classedash__packager_1_1media_1_1LibcryptoThreading.html b/sdk/de/de9/classedash__packager_1_1media_1_1LibcryptoThreading.html new file mode 100644 index 0000000000..ad98e818d7 --- /dev/null +++ b/sdk/de/de9/classedash__packager_1_1media_1_1LibcryptoThreading.html @@ -0,0 +1,116 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::LibcryptoThreading Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::LibcryptoThreading Class Reference
+
+
+ +

Convenience class which initializes and terminates libcrypto threading. + More...

+ +

#include <libcrypto_threading.h>

+

Detailed Description

+

Convenience class which initializes and terminates libcrypto threading.

+ +

Definition at line 16 of file libcrypto_threading.h.

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/de/dfa/muxer__listener_8h_source.html b/sdk/de/dfa/muxer__listener_8h_source.html new file mode 100644 index 0000000000..481f50281a --- /dev/null +++ b/sdk/de/dfa/muxer__listener_8h_source.html @@ -0,0 +1,212 @@ + + + + + + +DASH Media Packaging SDK: media/event/muxer_listener.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
muxer_listener.h
+
+
+
1 // Copyright 2014 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 // Event handler for events fired by Muxer.
+
8 
+
9 // TODO(rkuroiwa): Document using doxygen style comments.
+
10 
+
11 #ifndef MEDIA_EVENT_MUXER_LISTENER_H_
+
12 #define MEDIA_EVENT_MUXER_LISTENER_H_
+
13 
+
14 #include <stdint.h>
+
15 
+
16 #include <string>
+
17 #include <vector>
+
18 
+
19 namespace edash_packager {
+
20 namespace media {
+
21 
+
22 class StreamInfo;
+
23 struct MuxerOptions;
+
24 
+ +
30  public:
+
31  enum ContainerType {
+
32  kContainerUnknown = 0,
+
33  kContainerMp4,
+
34  kContainerMpeg2ts,
+
35  kContainerWebM
+
36  };
+
37 
+
38  virtual ~MuxerListener() {};
+
39 
+
40  // Called when the media's encryption information is ready. This should be
+
41  // called before OnMediaStart(), if the media is encrypted.
+
42  // All the parameters may be empty just to notify that the media is encrypted.
+
43  // |content_protection_uuid| is one of the UUIDs listed here
+
44  // http://dashif.org/identifiers/protection/. This should be in human
+
45  // readable form.
+
46  // |is_initial_encryption_info| is true if this is the first encryption info
+
47  // for the media.
+
48  // In general, this flag should always be true for non-key-rotated media and
+
49  // should be called only once.
+
50  // |content_protection_name_version| is the DRM system and version name.
+
51  // |key_id| is the key ID for the media.
+
52  // The format should be a vector of uint8_t, i.e. not (necessarily) human
+
53  // readable hex string.
+
54  // For ISO BMFF (MP4) media:
+
55  // If |is_initial_encryption_info| is true then |key_id| is the default_KID in
+
56  // 'tenc' box.
+
57  // If |is_initial_encryption_info| is false then |key_id| is the new key ID
+
58  // for the for the next crypto period.
+
59  // |pssh| is the whole 'pssh' box.
+
60  virtual void OnEncryptionInfoReady(
+
61  bool is_initial_encryption_info,
+
62  const std::string& content_protection_uuid,
+
63  const std::string& content_protection_name_version,
+
64  const std::vector<uint8_t>& key_id,
+
65  const std::vector<uint8_t>& pssh) = 0;
+
66 
+
67  // Called when muxing starts.
+
68  // For MPEG DASH Live profile, the initialization segment information is
+
69  // available from StreamInfo.
+
70  // |time_scale| is a reference time scale that overrides the time scale
+
71  // specified in |stream_info|.
+
72  virtual void OnMediaStart(const MuxerOptions& muxer_options,
+
73  const StreamInfo& stream_info,
+
74  uint32_t time_scale,
+
75  ContainerType container_type) = 0;
+
76 
+
79  virtual void OnSampleDurationReady(uint32_t sample_duration) = 0;
+
80 
+
81  // Called when all files are written out and the muxer object does not output
+
82  // any more files.
+
83  // Note: This event might not be very interesting to MPEG DASH Live profile.
+
84  // |init_range_{start,end}| is the byte range of initialization segment, in
+
85  // the media file. If |has_init_range| is false, these values are ignored.
+
86  // |index_range_{start,end}| is the byte range of segment index, in the media
+
87  // file. If |has_index_range| is false, these values are ignored.
+
88  // Both ranges are inclusive.
+
89  // Media length of |duration_seconds|.
+
90  // |file_size| of the media in bytes.
+
91  virtual void OnMediaEnd(bool has_init_range,
+
92  uint64_t init_range_start,
+
93  uint64_t init_range_end,
+
94  bool has_index_range,
+
95  uint64_t index_range_start,
+
96  uint64_t index_range_end,
+
97  float duration_seconds,
+
98  uint64_t file_size) = 0;
+
99 
+
100  // Called when a segment has been muxed and the file has been written.
+
101  // Note: For video on demand (VOD), this would be for subsegments.
+
102  // |start_time| and |duration| are relative to time scale specified
+
103  // OnMediaStart().
+
104  // |segment_file_size| in bytes.
+
105  virtual void OnNewSegment(uint64_t start_time,
+
106  uint64_t duration,
+
107  uint64_t segment_file_size) = 0;
+
108 
+
109  protected:
+
110  MuxerListener() {};
+
111 };
+
112 
+
113 } // namespace media
+
114 } // namespace edash_packager
+
115 
+
116 #endif // MEDIA_EVENT_MUXER_LISTENER_H_
+
Abstract class holds stream information.
Definition: stream_info.h:25
+ +
This structure contains the list of configuration options for Muxer.
Definition: muxer_options.h:18
+
virtual void OnSampleDurationReady(uint32_t sample_duration)=0
+
+ + + + diff --git a/sdk/de/dfb/structedash__packager_1_1media_1_1H264ModificationOfPicNum-members.html b/sdk/de/dfb/structedash__packager_1_1media_1_1H264ModificationOfPicNum-members.html new file mode 100644 index 0000000000..1e528716ce --- /dev/null +++ b/sdk/de/dfb/structedash__packager_1_1media_1_1H264ModificationOfPicNum-members.html @@ -0,0 +1,107 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::H264ModificationOfPicNum Member List
+
+
+ +

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

+ + + + +
abs_diff_pic_num_minus1 (defined in edash_packager::media::H264ModificationOfPicNum)edash_packager::media::H264ModificationOfPicNum
long_term_pic_num (defined in edash_packager::media::H264ModificationOfPicNum)edash_packager::media::H264ModificationOfPicNum
modification_of_pic_nums_idc (defined in edash_packager::media::H264ModificationOfPicNum)edash_packager::media::H264ModificationOfPicNum
+ + + + diff --git a/sdk/de/dfc/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264-members.html b/sdk/de/dfc/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264-members.html new file mode 100644 index 0000000000..69a8ca09c0 --- /dev/null +++ b/sdk/de/dfc/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264-members.html @@ -0,0 +1,114 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp2t::EsParserH264 Member List
+
+
+ +

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

+ + + + + + + + + + + +
EmitSampleCB typedef (defined in edash_packager::media::mp2t::EsParser)edash_packager::media::mp2t::EsParser
EsParser(uint32_t pid) (defined in edash_packager::media::mp2t::EsParser)edash_packager::media::mp2t::EsParserinline
EsParserH264(uint32_t pid, const NewStreamInfoCB &new_stream_info_cb, const EmitSampleCB &emit_sample_cb) (defined in edash_packager::media::mp2t::EsParserH264)edash_packager::media::mp2t::EsParserH264
Flush() OVERRIDE (defined in edash_packager::media::mp2t::EsParserH264)edash_packager::media::mp2t::EsParserH264virtual
NewStreamInfoCB typedef (defined in edash_packager::media::mp2t::EsParser)edash_packager::media::mp2t::EsParser
Parse(const uint8_t *buf, int size, int64_t pts, int64_t dts) OVERRIDE (defined in edash_packager::media::mp2t::EsParserH264)edash_packager::media::mp2t::EsParserH264virtual
pid() (defined in edash_packager::media::mp2t::EsParser)edash_packager::media::mp2t::EsParserinline
Reset() OVERRIDE (defined in edash_packager::media::mp2t::EsParserH264)edash_packager::media::mp2t::EsParserH264virtual
~EsParser() (defined in edash_packager::media::mp2t::EsParser)edash_packager::media::mp2t::EsParserinlinevirtual
~EsParserH264() (defined in edash_packager::media::mp2t::EsParserH264)edash_packager::media::mp2t::EsParserH264virtual
+ + + + diff --git a/sdk/de/dfd/stream__info_8cc_source.html b/sdk/de/dfd/stream__info_8cc_source.html new file mode 100644 index 0000000000..b66aec9321 --- /dev/null +++ b/sdk/de/dfd/stream__info_8cc_source.html @@ -0,0 +1,151 @@ + + + + + + +DASH Media Packaging SDK: media/base/stream_info.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
stream_info.cc
+
+
+
1 // Copyright 2014 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/base/stream_info.h"
+
8 
+
9 #include <inttypes.h>
+
10 
+
11 #include "packager/base/logging.h"
+
12 #include "packager/base/strings/stringprintf.h"
+
13 
+
14 namespace edash_packager {
+
15 namespace media {
+
16 
+
17 StreamInfo::StreamInfo(StreamType stream_type,
+
18  int track_id,
+
19  uint32_t time_scale,
+
20  uint64_t duration,
+
21  const std::string& codec_string,
+
22  const std::string& language,
+
23  const uint8_t* extra_data,
+
24  size_t extra_data_size,
+
25  bool is_encrypted)
+
26  : stream_type_(stream_type),
+
27  track_id_(track_id),
+
28  time_scale_(time_scale),
+
29  duration_(duration),
+
30  codec_string_(codec_string),
+
31  language_(language),
+
32  is_encrypted_(is_encrypted) {
+
33  if (extra_data_size > 0) {
+
34  extra_data_.assign(extra_data, extra_data + extra_data_size);
+
35  }
+
36 }
+
37 
+
38 StreamInfo::~StreamInfo() {}
+
39 
+
40 std::string StreamInfo::ToString() const {
+
41  return base::StringPrintf(
+
42  "type: %s\n codec_string: %s\n time_scale: %d\n duration: "
+
43  "%" PRIu64 " (%.1f seconds)\n is_encrypted: %s\n",
+
44  (stream_type_ == kStreamAudio ? "Audio" : "Video"),
+
45  codec_string_.c_str(),
+
46  time_scale_, duration_,
+
47  static_cast<double>(duration_) / time_scale_,
+
48  is_encrypted_ ? "true" : "false");
+
49 }
+
50 
+
51 } // namespace media
+
52 } // namespace edash_packager
+
virtual std::string ToString() const
Definition: stream_info.cc:40
+
+ + + + diff --git a/sdk/df/d1a/offset__byte__queue_8cc_source.html b/sdk/df/d1a/offset__byte__queue_8cc_source.html new file mode 100644 index 0000000000..98217a200b --- /dev/null +++ b/sdk/df/d1a/offset__byte__queue_8cc_source.html @@ -0,0 +1,172 @@ + + + + + + +DASH Media Packaging SDK: media/base/offset_byte_queue.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
offset_byte_queue.cc
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/base/offset_byte_queue.h"
+
6 
+
7 #include <stdint.h>
+
8 
+
9 #include "packager/base/logging.h"
+
10 
+
11 namespace edash_packager {
+
12 namespace media {
+
13 
+
14 OffsetByteQueue::OffsetByteQueue() : buf_(NULL), size_(0), head_(0) {}
+
15 OffsetByteQueue::~OffsetByteQueue() {}
+
16 
+
17 void OffsetByteQueue::Reset() {
+
18  queue_.Reset();
+
19  buf_ = NULL;
+
20  size_ = 0;
+
21  head_ = 0;
+
22 }
+
23 
+
24 void OffsetByteQueue::Push(const uint8_t* buf, int size) {
+
25  queue_.Push(buf, size);
+
26  Sync();
+
27  DVLOG(4) << "Buffer pushed. head=" << head() << " tail=" << tail();
+
28 }
+
29 
+
30 void OffsetByteQueue::Peek(const uint8_t** buf, int* size) {
+
31  *buf = size_ > 0 ? buf_ : NULL;
+
32  *size = size_;
+
33 }
+
34 
+
35 void OffsetByteQueue::Pop(int count) {
+
36  queue_.Pop(count);
+
37  head_ += count;
+
38  Sync();
+
39 }
+
40 
+
41 void OffsetByteQueue::PeekAt(int64_t offset, const uint8_t** buf, int* size) {
+
42  if (offset < head() || offset >= tail()) {
+
43  *buf = NULL;
+
44  *size = 0;
+
45  return;
+
46  }
+
47  *buf = &buf_[offset - head()];
+
48  *size = tail() - offset;
+
49 }
+
50 
+
51 bool OffsetByteQueue::Trim(int64_t max_offset) {
+
52  if (max_offset < head_) return true;
+
53  if (max_offset > tail()) {
+
54  Pop(size_);
+
55  return false;
+
56  }
+
57  Pop(max_offset - head_);
+
58  return true;
+
59 }
+
60 
+
61 void OffsetByteQueue::Sync() {
+
62  queue_.Peek(&buf_, &size_);
+
63 }
+
64 
+
65 } // namespace media
+
66 } // namespace edash_packager
+ +
void Push(const uint8_t *data, int size)
Append new bytes to the end of the queue.
Definition: byte_queue.cc:29
+ +
void PeekAt(int64_t offset, const uint8_t **buf, int *size)
+ + +
void Reset()
Reset the queue to the empty state.
Definition: byte_queue.cc:24
+
void Peek(const uint8_t **data, int *size) const
Definition: byte_queue.cc:63
+
+ + + + diff --git a/sdk/df/d1c/composition__offset__iterator_8h_source.html b/sdk/df/d1c/composition__offset__iterator_8h_source.html new file mode 100644 index 0000000000..47ec35cc50 --- /dev/null +++ b/sdk/df/d1c/composition__offset__iterator_8h_source.html @@ -0,0 +1,155 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4/composition_offset_iterator.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
composition_offset_iterator.h
+
+
+
1 // Copyright 2014 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_FORMATS_MP4_COMPOSITION_OFFSET_ITERATOR_H_
+
8 #define MEDIA_FORMATS_MP4_COMPOSITION_OFFSET_ITERATOR_H_
+
9 
+
10 #include <stdint.h>
+
11 
+
12 #include <vector>
+
13 
+
14 #include "packager/base/macros.h"
+
15 #include "packager/media/formats/mp4/box_definitions.h"
+
16 
+
17 namespace edash_packager {
+
18 namespace media {
+
19 namespace mp4 {
+
20 
+ +
25  public:
+ +
28  const CompositionTimeToSample& composition_time_to_sample);
+ +
30 
+
33  bool AdvanceSample();
+
34 
+
37  bool IsValid() const;
+
38 
+
40  int64_t sample_offset() const { return iterator_->sample_offset; }
+
41 
+
43  int64_t SampleOffset(uint32_t sample) const;
+
44 
+
46  uint32_t NumSamples() const;
+
47 
+
48  private:
+
49  uint32_t sample_index_;
+
50  const std::vector<CompositionOffset>& composition_offset_table_;
+
51  std::vector<CompositionOffset>::const_iterator iterator_;
+
52 
+
53  DISALLOW_COPY_AND_ASSIGN(CompositionOffsetIterator);
+
54 };
+
55 
+
56 } // namespace mp4
+
57 } // namespace media
+
58 } // namespace edash_packager
+
59 
+
60 #endif // MEDIA_FORMATS_MP4_COMPOSITION_OFFSET_ITERATOR_H_
+ + +
CompositionOffsetIterator(const CompositionTimeToSample &composition_time_to_sample)
Create CompositionOffsetIterator from composition time to sample box.
+ + + + + +
+ + + + diff --git a/sdk/df/d1f/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator-members.html b/sdk/df/d1f/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator-members.html new file mode 100644 index 0000000000..d8c1bfd9c7 --- /dev/null +++ b/sdk/df/d1f/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator-members.html @@ -0,0 +1,130 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::TrackRunIterator Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
AdvanceRun()edash_packager::media::mp4::TrackRunIterator
AdvanceSample()edash_packager::media::mp4::TrackRunIterator
audio_description() const edash_packager::media::mp4::TrackRunIterator
aux_info_offset() const (defined in edash_packager::media::mp4::TrackRunIterator)edash_packager::media::mp4::TrackRunIterator
aux_info_size() const (defined in edash_packager::media::mp4::TrackRunIterator)edash_packager::media::mp4::TrackRunIterator
AuxInfoNeedsToBeCached()edash_packager::media::mp4::TrackRunIterator
CacheAuxInfo(const uint8_t *buf, int size)edash_packager::media::mp4::TrackRunIterator
cts() const (defined in edash_packager::media::mp4::TrackRunIterator)edash_packager::media::mp4::TrackRunIterator
dts() const (defined in edash_packager::media::mp4::TrackRunIterator)edash_packager::media::mp4::TrackRunIterator
duration() const (defined in edash_packager::media::mp4::TrackRunIterator)edash_packager::media::mp4::TrackRunIterator
GetDecryptConfig()edash_packager::media::mp4::TrackRunIterator
GetMaxClearOffset()edash_packager::media::mp4::TrackRunIterator
Init()edash_packager::media::mp4::TrackRunIterator
Init(const MovieFragment &moof)edash_packager::media::mp4::TrackRunIterator
is_audio() const (defined in edash_packager::media::mp4::TrackRunIterator)edash_packager::media::mp4::TrackRunIterator
is_encrypted() const (defined in edash_packager::media::mp4::TrackRunIterator)edash_packager::media::mp4::TrackRunIterator
is_keyframe() const (defined in edash_packager::media::mp4::TrackRunIterator)edash_packager::media::mp4::TrackRunIterator
is_video() const (defined in edash_packager::media::mp4::TrackRunIterator)edash_packager::media::mp4::TrackRunIterator
IsRunValid() const edash_packager::media::mp4::TrackRunIterator
IsSampleValid() const edash_packager::media::mp4::TrackRunIterator
sample_offset() const (defined in edash_packager::media::mp4::TrackRunIterator)edash_packager::media::mp4::TrackRunIterator
sample_size() const (defined in edash_packager::media::mp4::TrackRunIterator)edash_packager::media::mp4::TrackRunIterator
track_id() const (defined in edash_packager::media::mp4::TrackRunIterator)edash_packager::media::mp4::TrackRunIterator
TrackRunIterator(const Movie *moov)edash_packager::media::mp4::TrackRunIteratorexplicit
video_description() const edash_packager::media::mp4::TrackRunIterator
~TrackRunIterator() (defined in edash_packager::media::mp4::TrackRunIterator)edash_packager::media::mp4::TrackRunIterator
+ + + + diff --git a/sdk/df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html b/sdk/df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html new file mode 100644 index 0000000000..1f423219d4 --- /dev/null +++ b/sdk/df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html @@ -0,0 +1,218 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::TrackFragmentRun Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::TrackFragmentRun Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::TrackFragmentRun:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + +

+Public Types

enum  TrackFragmentFlagsMasks {
+  kDataOffsetPresentMask = 0x000001, +kFirstSampleFlagsPresentMask = 0x000004, +kSampleDurationPresentMask = 0x000100, +kSampleSizePresentMask = 0x000200, +
+  kSampleFlagsPresentMask = 0x000400, +kSampleCompTimeOffsetsPresentMask = 0x000800 +
+ }
 
+ + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + + + + + + + + + +

+Public Attributes

+uint32_t sample_count
 
+uint32_t data_offset
 
+std::vector< uint32_t > sample_flags
 
+std::vector< uint32_t > sample_sizes
 
+std::vector< uint32_t > sample_durations
 
+std::vector< int64_t > sample_composition_time_offsets
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 477 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::TrackFragmentRun::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1660 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.png b/sdk/df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.png new file mode 100644 index 0000000000..fd9665ad08 Binary files /dev/null and b/sdk/df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.png differ diff --git a/sdk/df/d22/validate__flag_8h_source.html b/sdk/df/d22/validate__flag_8h_source.html new file mode 100644 index 0000000000..c193988e5d --- /dev/null +++ b/sdk/df/d22/validate__flag_8h_source.html @@ -0,0 +1,128 @@ + + + + + + +DASH Media Packaging SDK: app/validate_flag.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
validate_flag.h
+
+
+
1 // Copyright 2014 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 // Flag validation help functions.
+
8 
+
9 #ifndef APP_VALIDATE_FLAG_H_
+
10 #define APP_VALIDATE_FLAG_H_
+
11 
+
12 #include <string>
+
13 
+
14 namespace edash_packager {
+
15 
+
21 // and cannot be empty; If condition is false, then this flag should
+
22 // not be set.
+
26 bool ValidateFlag(const char* flag_name,
+
27  const std::string& flag_value,
+
28  bool condition,
+
29  bool optional,
+
30  const char* label);
+
31 
+
34 void PrintError(const std::string& error_message);
+
35 
+
36 } // namespace edash_packager
+
37 
+
38 #endif // APP_VALIDATE_FLAG_H_
+
bool ValidateFlag(const char *flag_name, const std::string &flag_value, bool condition, bool optional, const char *label)
+
void PrintError(const std::string &error_message)
+
+ + + + diff --git a/sdk/df/d31/muxer__util_8cc_source.html b/sdk/df/d31/muxer__util_8cc_source.html new file mode 100644 index 0000000000..42479c3739 --- /dev/null +++ b/sdk/df/d31/muxer__util_8cc_source.html @@ -0,0 +1,255 @@ + + + + + + +DASH Media Packaging SDK: media/base/muxer_util.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
muxer_util.cc
+
+
+
1 // Copyright 2014 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/base/muxer_util.h"
+
8 
+
9 #include <inttypes.h>
+
10 
+
11 #include <string>
+
12 #include <vector>
+
13 
+
14 #include "packager/base/logging.h"
+
15 #include "packager/base/strings/string_number_conversions.h"
+
16 #include "packager/base/strings/string_split.h"
+
17 #include "packager/base/strings/stringprintf.h"
+
18 
+
19 namespace edash_packager {
+
20 namespace {
+
21 bool ValidateFormatTag(const std::string& format_tag) {
+
22  DCHECK(!format_tag.empty());
+
23  // Format tag should follow this prototype: %0[width]d.
+
24  if (format_tag.size() > 3 && format_tag[0] == '%' && format_tag[1] == '0' &&
+
25  format_tag[format_tag.size() - 1] == 'd') {
+
26  unsigned out;
+
27  if (base::StringToUint(format_tag.substr(2, format_tag.size() - 3), &out))
+
28  return true;
+
29  }
+
30  LOG(ERROR) << "SegmentTemplate: Format tag should follow this prototype: "
+
31  << "%0[width]d if exist.";
+
32  return false;
+
33 }
+
34 } // namespace
+
35 
+
36 namespace media {
+
37 
+
38 bool ValidateSegmentTemplate(const std::string& segment_template) {
+
39  if (segment_template.empty())
+
40  return false;
+
41 
+
42  std::vector<std::string> splits;
+
43  base::SplitString(segment_template, '$', &splits);
+
44 
+
45  // ISO/IEC 23009-1:2012 5.3.9.4.4 Template-based Segment URL construction.
+
46  // Allowed identifiers: $$, $RepresentationID$, $Number$, $Bandwidth$, $Time$.
+
47  // "$" always appears in pairs, so there should be odd number of splits.
+
48  if (splits.size() % 2 == 0) {
+
49  LOG(ERROR) << "SegmentTemplate: '$' should appear in pairs.";
+
50  return false;
+
51  }
+
52 
+
53  bool has_number = false;
+
54  bool has_time = false;
+
55  // Every second substring in split output should be an identifier.
+
56  for (size_t i = 1; i < splits.size(); i += 2) {
+
57  // Each identifier may be suffixed, within the enclosing ‘$’ characters,
+
58  // with an additional format tag aligned with the printf format tag as
+
59  // defined in IEEE 1003.1-2008 [10] following this prototype: %0[width]d.
+
60  size_t format_pos = splits[i].find('%');
+
61  std::string identifier = splits[i].substr(0, format_pos);
+
62  if (format_pos != std::string::npos) {
+
63  if (!ValidateFormatTag(splits[i].substr(format_pos)))
+
64  return false;
+
65  }
+
66 
+
67  // TODO(kqyang): Support "RepresentationID".
+
68  if (identifier == "RepresentationID") {
+
69  NOTIMPLEMENTED() << "SegmentTemplate: $RepresentationID$ is not supported "
+
70  "yet.";
+
71  return false;
+
72  } else if (identifier == "Number") {
+
73  has_number = true;
+
74  } else if (identifier == "Time") {
+
75  has_time = true;
+
76  } else if (identifier == "") {
+
77  if (format_pos != std::string::npos) {
+
78  LOG(ERROR) << "SegmentTemplate: $$ should not have any format tags.";
+
79  return false;
+
80  }
+
81  } else if (identifier != "Bandwidth") {
+
82  LOG(ERROR) << "SegmentTemplate: '$" << splits[i]
+
83  << "$' is not a valid identifier.";
+
84  return false;
+
85  }
+
86  }
+
87  if (has_number && has_time) {
+
88  LOG(ERROR) << "SegmentTemplate: $Number$ and $Time$ should not co-exist.";
+
89  return false;
+
90  }
+
91  if (!has_number && !has_time) {
+
92  LOG(ERROR) << "SegmentTemplate: $Number$ or $Time$ should exist.";
+
93  return false;
+
94  }
+
95  // Note: The below check is skipped.
+
96  // Strings outside identifiers shall only contain characters that are
+
97  // permitted within URLs according to RFC 1738.
+
98  return true;
+
99 }
+
100 
+
101 std::string GetSegmentName(const std::string& segment_template,
+
102  uint64_t segment_start_time,
+
103  uint32_t segment_index,
+
104  uint32_t bandwidth) {
+
105  DCHECK(ValidateSegmentTemplate(segment_template));
+
106 
+
107  std::vector<std::string> splits;
+
108  base::SplitString(segment_template, '$', &splits);
+
109  // "$" always appears in pairs, so there should be odd number of splits.
+
110  DCHECK_EQ(1u, splits.size() % 2);
+
111 
+
112  std::string segment_name;
+
113  for (size_t i = 0; i < splits.size(); ++i) {
+
114  // Every second substring in split output should be an identifier.
+
115  // Simply copy the non-identifier part.
+
116  if (i % 2 == 0) {
+
117  segment_name += splits[i];
+
118  continue;
+
119  }
+
120  if (splits[i].empty()) {
+
121  // "$$" is an escape sequence, replaced with a single "$".
+
122  segment_name += "$";
+
123  continue;
+
124  }
+
125  size_t format_pos = splits[i].find('%');
+
126  std::string identifier = splits[i].substr(0, format_pos);
+
127  DCHECK(identifier == "Number" || identifier == "Time" ||
+
128  identifier == "Bandwidth");
+
129 
+
130  std::string format_tag;
+
131  if (format_pos != std::string::npos) {
+
132  format_tag = splits[i].substr(format_pos);
+
133  DCHECK(ValidateFormatTag(format_tag));
+
134  // Replace %d formatting to correctly format uint64_t.
+
135  format_tag = format_tag.substr(0, format_tag.size() - 1) + PRIu64;
+
136  } else {
+
137  // Default format tag "%01d", modified to format uint64_t correctly.
+
138  format_tag = "%01" PRIu64;
+
139  }
+
140 
+
141  if (identifier == "Number") {
+
142  // SegmentNumber starts from 1.
+
143  segment_name += base::StringPrintf(
+
144  format_tag.c_str(), static_cast<uint64_t>(segment_index + 1));
+
145  } else if (identifier == "Time") {
+
146  segment_name +=
+
147  base::StringPrintf(format_tag.c_str(), segment_start_time);
+
148  } else if (identifier == "Bandwidth") {
+
149  segment_name += base::StringPrintf(format_tag.c_str(),
+
150  static_cast<uint64_t>(bandwidth));
+
151  }
+
152  }
+
153  return segment_name;
+
154 }
+
155 
+
156 } // namespace media
+
157 } // namespace edash_packager
+
+ + + + diff --git a/sdk/df/d32/audio__stream__info_8h_source.html b/sdk/df/d32/audio__stream__info_8h_source.html new file mode 100644 index 0000000000..36b9174f3d --- /dev/null +++ b/sdk/df/d32/audio__stream__info_8h_source.html @@ -0,0 +1,191 @@ + + + + + + +DASH Media Packaging SDK: media/base/audio_stream_info.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
audio_stream_info.h
+
+
+
1 // Copyright 2014 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_BASE_AUDIO_STREAM_INFO_H_
+
8 #define MEDIA_BASE_AUDIO_STREAM_INFO_H_
+
9 
+
10 #include <vector>
+
11 
+
12 #include "packager/media/base/stream_info.h"
+
13 
+
14 namespace edash_packager {
+
15 namespace media {
+
16 
+
17 enum AudioCodec {
+
18  kUnknownAudioCodec = 0,
+
19  kCodecAAC,
+
20  kCodecMP3,
+
21  kCodecPCM,
+
22  kCodecVorbis,
+
23  kCodecFLAC,
+
24  kCodecAMR_NB,
+
25  kCodecAMR_WB,
+
26  kCodecPCM_MULAW,
+
27  kCodecGSM_MS,
+
28  kCodecPCM_S16BE,
+
29  kCodecPCM_S24BE,
+
30  kCodecOpus,
+
31  kCodecEAC3,
+
32 
+
33  kNumAudioCodec
+
34 };
+
35 
+
37 class AudioStreamInfo : public StreamInfo {
+
38  public:
+
40  AudioStreamInfo(int track_id,
+
41  uint32_t time_scale,
+
42  uint64_t duration,
+
43  AudioCodec codec,
+
44  const std::string& codec_string,
+
45  const std::string& language,
+
46  uint8_t sample_bits,
+
47  uint8_t num_channels,
+
48  uint32_t sampling_frequency,
+
49  const uint8_t* extra_data,
+
50  size_t extra_data_size,
+
51  bool is_encrypted);
+
52 
+
55  virtual bool IsValidConfig() const OVERRIDE;
+
56  virtual std::string ToString() const OVERRIDE;
+
58 
+
59  AudioCodec codec() const { return codec_; }
+
60  uint8_t sample_bits() const { return sample_bits_; }
+
61  uint8_t sample_bytes() const { return sample_bits_ / 8; }
+
62  uint8_t num_channels() const { return num_channels_; }
+
63  uint32_t sampling_frequency() const { return sampling_frequency_; }
+
64  uint32_t bytes_per_frame() const {
+
65  return static_cast<uint32_t>(num_channels_) * sample_bits_ / 8;
+
66  }
+
67 
+
68  void set_sampling_frequency(const uint32_t sampling_frequency) {
+
69  sampling_frequency_ = sampling_frequency;
+
70  }
+
71 
+
72 
+
75  static std::string GetCodecString(AudioCodec codec,
+
76  uint8_t audio_object_type);
+
77 
+
78  private:
+
79  virtual ~AudioStreamInfo();
+
80 
+
81  AudioCodec codec_;
+
82  uint8_t sample_bits_;
+
83  uint8_t num_channels_;
+
84  uint32_t sampling_frequency_;
+
85 
+
86  // Not using DISALLOW_COPY_AND_ASSIGN here intentionally to allow the compiler
+
87  // generated copy constructor and assignment operator. Since the extra data is
+
88  // typically small, the performance impact is minimal.
+
89 };
+
90 
+
91 } // namespace media
+
92 } // namespace edash_packager
+
93 
+
94 #endif // MEDIA_BASE_AUDIO_STREAM_INFO_H_
+
Holds audio stream information.
+
Abstract class holds stream information.
Definition: stream_info.h:25
+
AudioStreamInfo(int track_id, uint32_t time_scale, uint64_t duration, AudioCodec codec, const std::string &codec_string, const std::string &language, uint8_t sample_bits, uint8_t num_channels, uint32_t sampling_frequency, const uint8_t *extra_data, size_t extra_data_size, bool is_encrypted)
Construct an initialized audio stream info object.
+
virtual std::string ToString() const OVERRIDE
+
virtual bool IsValidConfig() const OVERRIDE
+
static std::string GetCodecString(AudioCodec codec, uint8_t audio_object_type)
+
+ + + + diff --git a/sdk/df/d3c/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime-members.html b/sdk/df/d3c/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime-members.html new file mode 100644 index 0000000000..469b8591de --- /dev/null +++ b/sdk/df/d3c/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::TrackFragmentDecodeTime Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::TrackFragmentDecodeTime)edash_packager::media::mp4::TrackFragmentDecodeTimevirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::TrackFragmentDecodeTimevirtual
decode_time (defined in edash_packager::media::mp4::TrackFragmentDecodeTime)edash_packager::media::mp4::TrackFragmentDecodeTime
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::TrackFragmentDecodeTimevirtual
TrackFragmentDecodeTime() (defined in edash_packager::media::mp4::TrackFragmentDecodeTime)edash_packager::media::mp4::TrackFragmentDecodeTime
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~TrackFragmentDecodeTime() (defined in edash_packager::media::mp4::TrackFragmentDecodeTime)edash_packager::media::mp4::TrackFragmentDecodeTimevirtual
+ + + + diff --git a/sdk/df/d43/classedash__packager_1_1media_1_1mp4_1_1Segmenter-members.html b/sdk/df/d43/classedash__packager_1_1media_1_1mp4_1_1Segmenter-members.html new file mode 100644 index 0000000000..f5d352ef7c --- /dev/null +++ b/sdk/df/d43/classedash__packager_1_1media_1_1mp4_1_1Segmenter-members.html @@ -0,0 +1,124 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::Segmenter Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + +
AddSample(const MediaStream *stream, scoped_refptr< MediaSample > sample)edash_packager::media::mp4::Segmenter
Finalize()edash_packager::media::mp4::Segmenter
fragment_buffer() (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
ftyp() (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
GetDuration() const edash_packager::media::mp4::Segmenter
GetIndexRange(size_t *offset, size_t *size)=0edash_packager::media::mp4::Segmenterpure virtual
GetInitRange(size_t *offset, size_t *size)=0edash_packager::media::mp4::Segmenterpure virtual
GetReferenceTimeScale() const (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenter
Initialize(const std::vector< MediaStream * > &streams, MuxerListener *muxer_listener, ProgressListener *progress_listener, KeySource *encryption_key_source, uint32_t max_sd_pixels, double clear_lead_in_seconds, double crypto_period_duration_in_seconds)edash_packager::media::mp4::Segmenter
moov() (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
muxer_listener() (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
options() const (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
progress_target() (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
sample_duration() const edash_packager::media::mp4::Segmenterinline
Segmenter(const MuxerOptions &options, scoped_ptr< FileType > ftyp, scoped_ptr< Movie > moov) (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenter
set_progress_target(uint64_t progress_target) (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
SetComplete()edash_packager::media::mp4::Segmenterprotected
sidx() (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmenterinlineprotected
UpdateProgress(uint64_t progress)edash_packager::media::mp4::Segmenterprotected
~Segmenter() (defined in edash_packager::media::mp4::Segmenter)edash_packager::media::mp4::Segmentervirtual
+ + + + diff --git a/sdk/df/d5b/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts-members.html b/sdk/df/d5b/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts-members.html new file mode 100644 index 0000000000..9435dd19cd --- /dev/null +++ b/sdk/df/d5b/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts-members.html @@ -0,0 +1,114 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp2t::EsParserAdts Member List
+
+
+ +

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

+ + + + + + + + + + + +
EmitSampleCB typedef (defined in edash_packager::media::mp2t::EsParser)edash_packager::media::mp2t::EsParser
EsParser(uint32_t pid) (defined in edash_packager::media::mp2t::EsParser)edash_packager::media::mp2t::EsParserinline
EsParserAdts(uint32_t pid, const NewStreamInfoCB &new_stream_info_cb, const EmitSampleCB &emit_sample_cb, bool sbr_in_mimetype) (defined in edash_packager::media::mp2t::EsParserAdts)edash_packager::media::mp2t::EsParserAdts
Flush() OVERRIDE (defined in edash_packager::media::mp2t::EsParserAdts)edash_packager::media::mp2t::EsParserAdtsvirtual
NewStreamInfoCB typedef (defined in edash_packager::media::mp2t::EsParser)edash_packager::media::mp2t::EsParser
Parse(const uint8_t *buf, int size, int64_t pts, int64_t dts) OVERRIDE (defined in edash_packager::media::mp2t::EsParserAdts)edash_packager::media::mp2t::EsParserAdtsvirtual
pid() (defined in edash_packager::media::mp2t::EsParser)edash_packager::media::mp2t::EsParserinline
Reset() OVERRIDE (defined in edash_packager::media::mp2t::EsParserAdts)edash_packager::media::mp2t::EsParserAdtsvirtual
~EsParser() (defined in edash_packager::media::mp2t::EsParser)edash_packager::media::mp2t::EsParserinlinevirtual
~EsParserAdts() (defined in edash_packager::media::mp2t::EsParserAdts)edash_packager::media::mp2t::EsParserAdtsvirtual
+ + + + diff --git a/sdk/df/d5e/classedash__packager_1_1media_1_1mp2t_1_1TsSection-members.html b/sdk/df/d5e/classedash__packager_1_1media_1_1mp2t_1_1TsSection-members.html new file mode 100644 index 0000000000..a9c2ed18fb --- /dev/null +++ b/sdk/df/d5e/classedash__packager_1_1media_1_1mp2t_1_1TsSection-members.html @@ -0,0 +1,114 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp2t::TsSection Member List
+
+
+ +

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

+ + + + + + + + + + + +
Flush()=0 (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSectionpure virtual
kPidCat enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
kPidMax enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
kPidNullPacket enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
kPidPat enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
kPidTsdt enum value (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
Parse(bool payload_unit_start_indicator, const uint8_t *buf, int size)=0 (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSectionpure virtual
Reset()=0 (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSectionpure virtual
SpecialPid enum name (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSection
~TsSection() (defined in edash_packager::media::mp2t::TsSection)edash_packager::media::mp2t::TsSectioninlinevirtual
+ + + + diff --git a/sdk/df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html b/sdk/df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html new file mode 100644 index 0000000000..67c0111c73 --- /dev/null +++ b/sdk/df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html @@ -0,0 +1,198 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::AudioSampleEntry Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::AudioSampleEntry Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::AudioSampleEntry:
+
+
+ + +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + + + + + + +

+Public Attributes

+FourCC format
 
+uint16_t data_reference_index
 
+uint16_t channelcount
 
+uint16_t samplesize
 
+uint32_t samplerate
 
+ProtectionSchemeInfo sinf
 
+ElementaryStreamDescriptor esds
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 220 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::AudioSampleEntry::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1115 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.png b/sdk/df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.png new file mode 100644 index 0000000000..e1a6d68f44 Binary files /dev/null and b/sdk/df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.png differ diff --git a/sdk/df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html b/sdk/df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html new file mode 100644 index 0000000000..4dde53c8fa --- /dev/null +++ b/sdk/df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html @@ -0,0 +1,198 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::VideoSampleEntry Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::VideoSampleEntry Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::VideoSampleEntry:
+
+
+ + +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + + + + + + + + +

+Public Attributes

+FourCC format
 
+uint16_t data_reference_index
 
+uint16_t width
 
+uint16_t height
 
+PixelAspectRatioBox pixel_aspect
 
+ProtectionSchemeInfo sinf
 
+AVCDecoderConfigurationRecord avcc
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 198 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::VideoSampleEntry::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1021 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.png b/sdk/df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.png new file mode 100644 index 0000000000..de87b5b88b Binary files /dev/null and b/sdk/df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.png differ diff --git a/sdk/df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html b/sdk/df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html new file mode 100644 index 0000000000..817b40f1cb --- /dev/null +++ b/sdk/df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html @@ -0,0 +1,188 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::SampleToChunk Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::SampleToChunk Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::SampleToChunk:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + +

+Public Attributes

+std::vector< ChunkInfochunk_info
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 275 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::SampleToChunk::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 549 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.png b/sdk/df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.png new file mode 100644 index 0000000000..e773ed7274 Binary files /dev/null and b/sdk/df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.png differ diff --git a/sdk/df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html b/sdk/df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html new file mode 100644 index 0000000000..d843e03156 --- /dev/null +++ b/sdk/df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html @@ -0,0 +1,188 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::mp4::MovieFragmentHeader Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::mp4::MovieFragmentHeader Struct Reference
+
+
+
+Inheritance diagram for edash_packager::media::mp4::MovieFragmentHeader:
+
+
+ + +edash_packager::media::mp4::FullBox +edash_packager::media::mp4::Box + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool ReadWrite (BoxBuffer *buffer) OVERRIDE
 Read/write the mp4 box from/to BoxBuffer.
 
+virtual FourCC BoxType () const OVERRIDE
 
virtual uint32_t ComputeSize () OVERRIDE
 
- Public Member Functions inherited from edash_packager::media::mp4::Box
bool Parse (BoxReader *reader)
 
void Write (BufferWriter *writer)
 
+ + + + + + + + +

+Public Attributes

+uint32_t sequence_number
 
- Public Attributes inherited from edash_packager::media::mp4::FullBox
+uint8_t version
 
+uint32_t flags
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from edash_packager::media::mp4::Box
uint32_t atom_size
 
+

Detailed Description

+
+

Definition at line 441 of file box_definitions.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t edash_packager::media::mp4::MovieFragmentHeader::ComputeSize ()
+
+virtual
+
+

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

+ +

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

+ +

Definition at line 1487 of file box_definitions.cc.

+ +
+
+
The documentation for this struct was generated from the following files: +
+ + + + diff --git a/sdk/df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.png b/sdk/df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.png new file mode 100644 index 0000000000..175a7d43f8 Binary files /dev/null and b/sdk/df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.png differ diff --git a/sdk/df/d96/xml__node_8cc_source.html b/sdk/df/d96/xml__node_8cc_source.html new file mode 100644 index 0000000000..39a797e4bc --- /dev/null +++ b/sdk/df/d96/xml__node_8cc_source.html @@ -0,0 +1,477 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/xml/xml_node.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
xml_node.cc
+
+
+
1 // Copyright 2014 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/mpd/base/xml/xml_node.h"
+
8 
+
9 #include <limits>
+
10 #include <set>
+
11 
+
12 #include "packager/base/logging.h"
+
13 #include "packager/base/macros.h"
+
14 #include "packager/base/stl_util.h"
+
15 #include "packager/base/strings/string_number_conversions.h"
+
16 #include "packager/mpd/base/media_info.pb.h"
+
17 #include "packager/mpd/base/segment_info.h"
+
18 
+ +
20 
+
21 using edash_packager::MediaInfo;
+
22 typedef edash_packager::MediaInfo::AudioInfo AudioInfo;
+
23 typedef edash_packager::MediaInfo::VideoInfo VideoInfo;
+
24 typedef MediaInfo::ContentProtectionXml ContentProtectionXml;
+
25 typedef ContentProtectionXml::AttributeNameValuePair AttributeNameValuePair;
+
26 
+
27 namespace edash_packager {
+
28 
+
29 namespace {
+
30 
+
31 std::string RangeToString(const Range& range) {
+
32  return base::Uint64ToString(range.begin()) + "-" +
+
33  base::Uint64ToString(range.end());
+
34 }
+
35 
+
36 bool PopulateSegmentTimeline(const std::list<SegmentInfo>& segment_infos,
+
37  XmlNode* segment_timeline) {
+
38  for (std::list<SegmentInfo>::const_iterator it = segment_infos.begin();
+
39  it != segment_infos.end();
+
40  ++it) {
+
41  XmlNode s_element("S");
+
42  s_element.SetIntegerAttribute("t", it->start_time);
+
43  s_element.SetIntegerAttribute("d", it->duration);
+
44  if (it->repeat > 0)
+
45  s_element.SetIntegerAttribute("r", it->repeat);
+
46 
+
47  CHECK(segment_timeline->AddChild(s_element.PassScopedPtr()));
+
48  }
+
49 
+
50  return true;
+
51 }
+
52 
+
53 } // namespace
+
54 
+
55 namespace xml {
+
56 
+
57 XmlNode::XmlNode(const char* name) : node_(xmlNewNode(NULL, BAD_CAST name)) {
+
58  DCHECK(name);
+
59  DCHECK(node_);
+
60 }
+
61 
+
62 XmlNode::~XmlNode() {}
+
63 
+ +
65  DCHECK(node_);
+
66  DCHECK(child);
+
67  if (!xmlAddChild(node_.get(), child.get()))
+
68  return false;
+
69 
+
70  // Reaching here means the ownership of |child| transfered to |node_|.
+
71  // Release the pointer so that it doesn't get destructed in this scope.
+
72  ignore_result(child.release());
+
73  return true;
+
74 }
+
75 
+
76 bool XmlNode::AddElements(const std::vector<Element>& elements) {
+
77  for (size_t element_index = 0; element_index < elements.size();
+
78  ++element_index) {
+
79  const Element& child_element = elements[element_index];
+
80  XmlNode child_node(child_element.name.c_str());
+
81  for (std::map<std::string, std::string>::const_iterator attribute_it =
+
82  child_element.attributes.begin();
+
83  attribute_it != child_element.attributes.end(); ++attribute_it) {
+
84  child_node.SetStringAttribute(attribute_it->first.c_str(),
+
85  attribute_it->second);
+
86  }
+
87  // Recursively set children for the child.
+
88  if (!child_node.AddElements(child_element.subelements))
+
89  return false;
+
90 
+
91  child_node.SetContent(child_element.content);
+
92 
+
93  if (!xmlAddChild(node_.get(), child_node.GetRawPtr())) {
+
94  LOG(ERROR) << "Failed to set child " << child_element.name
+
95  << " to parent element "
+
96  << reinterpret_cast<const char*>(node_->name);
+
97  return false;
+
98  }
+
99  // Reaching here means the ownership of |child_node| transfered to |node_|.
+
100  // Release the pointer so that it doesn't get destructed in this scope.
+
101  ignore_result(child_node.Release());
+
102  }
+
103  return true;
+
104 }
+
105 
+
106 void XmlNode::SetStringAttribute(const char* attribute_name,
+
107  const std::string& attribute) {
+
108  DCHECK(node_);
+
109  DCHECK(attribute_name);
+
110  xmlSetProp(node_.get(), BAD_CAST attribute_name, BAD_CAST attribute.c_str());
+
111 }
+
112 
+
113 void XmlNode::SetIntegerAttribute(const char* attribute_name, uint64_t number) {
+
114  DCHECK(node_);
+
115  DCHECK(attribute_name);
+
116  xmlSetProp(node_.get(),
+
117  BAD_CAST attribute_name,
+
118  BAD_CAST (base::Uint64ToString(number).c_str()));
+
119 }
+
120 
+
121 void XmlNode::SetFloatingPointAttribute(const char* attribute_name,
+
122  double number) {
+
123  DCHECK(node_);
+
124  DCHECK(attribute_name);
+
125  xmlSetProp(node_.get(),
+
126  BAD_CAST attribute_name,
+
127  BAD_CAST (base::DoubleToString(number).c_str()));
+
128 }
+
129 
+
130 void XmlNode::SetId(uint32_t id) {
+
131  SetIntegerAttribute("id", id);
+
132 }
+
133 
+
134 void XmlNode::SetContent(const std::string& content) {
+
135  DCHECK(node_);
+
136  xmlNodeSetContent(node_.get(), BAD_CAST content.c_str());
+
137 }
+
138 
+ +
140  DVLOG(2) << "Passing node_.";
+
141  DCHECK(node_);
+
142  return node_.Pass();
+
143 }
+
144 
+
145 xmlNodePtr XmlNode::Release() {
+
146  DVLOG(2) << "Releasing node_.";
+
147  DCHECK(node_);
+
148  return node_.release();
+
149 }
+
150 
+
151 xmlNodePtr XmlNode::GetRawPtr() {
+
152  return node_.get();
+
153 }
+
154 
+
155 RepresentationBaseXmlNode::RepresentationBaseXmlNode(const char* name)
+
156  : XmlNode(name) {}
+
157 RepresentationBaseXmlNode::~RepresentationBaseXmlNode() {}
+
158 
+
159 bool RepresentationBaseXmlNode::AddContentProtectionElements(
+
160  const std::list<ContentProtectionElement>& content_protection_elements) {
+
161  std::list<ContentProtectionElement>::const_iterator content_protection_it =
+
162  content_protection_elements.begin();
+
163  for (; content_protection_it != content_protection_elements.end();
+
164  ++content_protection_it) {
+
165  if (!AddContentProtectionElement(*content_protection_it))
+
166  return false;
+
167  }
+
168 
+
169  return true;
+
170 }
+
171 
+
172 bool RepresentationBaseXmlNode::AddContentProtectionElement(
+
173  const ContentProtectionElement& content_protection_element) {
+
174  XmlNode content_protection_node("ContentProtection");
+
175 
+
176  // @value is an optional attribute.
+
177  if (!content_protection_element.value.empty()) {
+
178  content_protection_node.SetStringAttribute(
+
179  "value", content_protection_element.value);
+
180  }
+
181  content_protection_node.SetStringAttribute(
+
182  "schemeIdUri", content_protection_element.scheme_id_uri);
+
183 
+
184  typedef std::map<std::string, std::string> AttributesMapType;
+
185  const AttributesMapType& additional_attributes =
+
186  content_protection_element.additional_attributes;
+
187 
+
188  AttributesMapType::const_iterator attributes_it =
+
189  additional_attributes.begin();
+
190  for (; attributes_it != additional_attributes.end(); ++attributes_it) {
+
191  content_protection_node.SetStringAttribute(attributes_it->first.c_str(),
+
192  attributes_it->second);
+
193  }
+
194 
+
195  if (!content_protection_node.AddElements(
+
196  content_protection_element.subelements)) {
+
197  return false;
+
198  }
+
199  return AddChild(content_protection_node.PassScopedPtr());
+
200 }
+
201 
+
202 AdaptationSetXmlNode::AdaptationSetXmlNode()
+
203  : RepresentationBaseXmlNode("AdaptationSet") {}
+
204 AdaptationSetXmlNode::~AdaptationSetXmlNode() {}
+
205 
+
206 void AdaptationSetXmlNode::AddRoleElement(const std::string& scheme_id_uri,
+
207  const std::string& value) {
+
208  XmlNode role("Role");
+
209  role.SetStringAttribute("schemeIdUri", scheme_id_uri);
+
210  role.SetStringAttribute("value", value);
+
211  AddChild(role.PassScopedPtr());
+
212 }
+
213 
+
214 RepresentationXmlNode::RepresentationXmlNode()
+
215  : RepresentationBaseXmlNode("Representation") {}
+
216 RepresentationXmlNode::~RepresentationXmlNode() {}
+
217 
+
218 bool RepresentationXmlNode::AddVideoInfo(const VideoInfo& video_info) {
+
219  if (!video_info.has_width() || !video_info.has_height()) {
+
220  LOG(ERROR) << "Missing width or height for adding a video info.";
+
221  return false;
+
222  }
+
223 
+
224  if (video_info.has_pixel_width() && video_info.has_pixel_height()) {
+
225  SetStringAttribute("sar", base::IntToString(video_info.pixel_width()) +
+
226  ":" +
+
227  base::IntToString(video_info.pixel_height()));
+
228  }
+
229 
+
230  SetIntegerAttribute("width", video_info.width());
+
231  SetIntegerAttribute("height", video_info.height());
+
232  SetStringAttribute("frameRate",
+
233  base::IntToString(video_info.time_scale()) + "/" +
+
234  base::IntToString(video_info.frame_duration()));
+
235  return true;
+
236 }
+
237 
+
238 bool RepresentationXmlNode::AddAudioInfo(const AudioInfo& audio_info) {
+
239  if (!AddAudioChannelInfo(audio_info))
+
240  return false;
+
241 
+
242  AddAudioSamplingRateInfo(audio_info);
+
243  return true;
+
244 }
+
245 
+
246 bool RepresentationXmlNode::AddVODOnlyInfo(const MediaInfo& media_info) {
+
247  if (media_info.has_media_file_name()) {
+
248  XmlNode base_url("BaseURL");
+
249  base_url.SetContent(media_info.media_file_name());
+
250 
+
251  if (!AddChild(base_url.PassScopedPtr()))
+
252  return false;
+
253  }
+
254 
+
255  const bool need_segment_base = media_info.has_index_range() ||
+
256  media_info.has_init_range() ||
+
257  media_info.has_reference_time_scale();
+
258 
+
259  if (need_segment_base) {
+
260  XmlNode segment_base("SegmentBase");
+
261  if (media_info.has_index_range()) {
+
262  segment_base.SetStringAttribute("indexRange",
+
263  RangeToString(media_info.index_range()));
+
264  }
+
265 
+
266  if (media_info.has_reference_time_scale()) {
+
267  segment_base.SetIntegerAttribute("timescale",
+
268  media_info.reference_time_scale());
+
269  }
+
270 
+
271  if (media_info.has_init_range()) {
+
272  XmlNode initialization("Initialization");
+
273  initialization.SetStringAttribute("range",
+
274  RangeToString(media_info.init_range()));
+
275 
+
276  if (!segment_base.AddChild(initialization.PassScopedPtr()))
+
277  return false;
+
278  }
+
279 
+
280  if (!AddChild(segment_base.PassScopedPtr()))
+
281  return false;
+
282  }
+
283 
+
284  if (media_info.has_media_duration_seconds()) {
+
285  // Adding 'duration' attribute, so that this information can be used when
+
286  // generating one MPD file. This should be removed from the final MPD.
+
287  SetFloatingPointAttribute("duration", media_info.media_duration_seconds());
+
288  }
+
289 
+
290  return true;
+
291 }
+
292 
+ +
294  const MediaInfo& media_info,
+
295  const std::list<SegmentInfo>& segment_infos,
+
296  uint32_t start_number) {
+
297  XmlNode segment_template("SegmentTemplate");
+
298  if (media_info.has_reference_time_scale()) {
+
299  segment_template.SetIntegerAttribute("timescale",
+
300  media_info.reference_time_scale());
+
301  }
+
302 
+
303  if (media_info.has_init_segment_name()) {
+
304  // The spec does not allow '$Number$' and '$Time$' in initialization
+
305  // attribute.
+
306  // TODO(rkuroiwa, kqyang): Swap this check out with a better check. These
+
307  // templates allow formatting as well.
+
308  const std::string& init_segment_name = media_info.init_segment_name();
+
309  if (init_segment_name.find("$Number$") != std::string::npos ||
+
310  init_segment_name.find("$Time$") != std::string::npos) {
+
311  LOG(ERROR) << "$Number$ and $Time$ cannot be used for "
+
312  "SegmentTemplate@initialization";
+
313  return false;
+
314  }
+
315  segment_template.SetStringAttribute("initialization",
+
316  media_info.init_segment_name());
+
317  }
+
318 
+
319  if (media_info.has_segment_template()) {
+
320  segment_template.SetStringAttribute("media", media_info.segment_template());
+
321 
+
322  // TODO(rkuroiwa): Need a better check. $$Number is legitimate but not a
+
323  // template.
+
324  if (media_info.segment_template().find("$Number") != std::string::npos) {
+
325  DCHECK_GE(start_number, 1u);
+
326  segment_template.SetIntegerAttribute("startNumber", start_number);
+
327  }
+
328  }
+
329 
+
330  // TODO(rkuroiwa): Find out when a live MPD doesn't require SegmentTimeline.
+
331  XmlNode segment_timeline("SegmentTimeline");
+
332 
+
333  return PopulateSegmentTimeline(segment_infos, &segment_timeline) &&
+
334  segment_template.AddChild(segment_timeline.PassScopedPtr()) &&
+
335  AddChild(segment_template.PassScopedPtr());
+
336 }
+
337 
+
338 bool RepresentationXmlNode::AddAudioChannelInfo(const AudioInfo& audio_info) {
+
339  const uint32_t num_channels = audio_info.num_channels();
+
340  XmlNode audio_channel_config("AudioChannelConfiguration");
+
341  const char kAudioChannelConfigScheme[] =
+
342  "urn:mpeg:dash:23003:3:audio_channel_configuration:2011";
+
343  audio_channel_config.SetStringAttribute("schemeIdUri",
+
344  kAudioChannelConfigScheme);
+
345  audio_channel_config.SetIntegerAttribute("value", num_channels);
+
346 
+
347  return AddChild(audio_channel_config.PassScopedPtr());
+
348 }
+
349 
+
350 // MPD expects one number for sampling frequency, or if it is a range it should
+
351 // be space separated.
+
352 void RepresentationXmlNode::AddAudioSamplingRateInfo(
+
353  const AudioInfo& audio_info) {
+
354  if (audio_info.has_sampling_frequency())
+
355  SetIntegerAttribute("audioSamplingRate", audio_info.sampling_frequency());
+
356 }
+
357 
+
358 } // namespace xml
+
359 } // namespace edash_packager
+
bool AddVODOnlyInfo(const MediaInfo &media_info)
Definition: xml_node.cc:246
+
bool AddLiveOnlyInfo(const MediaInfo &media_info, const std::list< SegmentInfo > &segment_infos, uint32_t start_number)
Definition: xml_node.cc:293
+
void SetStringAttribute(const char *attribute_name, const std::string &attribute)
Definition: xml_node.cc:106
+
void SetFloatingPointAttribute(const char *attribute_name, double number)
Definition: xml_node.cc:121
+
bool AddAudioInfo(const MediaInfo::AudioInfo &audio_info)
Definition: xml_node.cc:238
+
void SetId(uint32_t id)
Definition: xml_node.cc:130
+ + +
XmlNode(const char *name)
Definition: xml_node.cc:57
+
void SetIntegerAttribute(const char *attribute_name, uint64_t number)
Definition: xml_node.cc:113
+ +
bool AddElements(const std::vector< Element > &elements)
Adds Elements to this node using the Element struct.
Definition: xml_node.cc:76
+ +
bool AddChild(ScopedXmlPtr< xmlNode >::type child)
Definition: xml_node.cc:64
+ +
bool AddVideoInfo(const MediaInfo::VideoInfo &video_info)
Definition: xml_node.cc:218
+
void SetContent(const std::string &content)
Definition: xml_node.cc:134
+
void AddRoleElement(const std::string &scheme_id_uri, const std::string &value)
Definition: xml_node.cc:206
+
ScopedXmlPtr< xmlNode >::type PassScopedPtr()
Definition: xml_node.cc:139
+
scoped_ptr for libxml2 resources.
+
+ + + + diff --git a/sdk/df/da9/classedash__packager_1_1media_1_1mp4_1_1Fragmenter-members.html b/sdk/df/da9/classedash__packager_1_1media_1_1mp4_1_1Fragmenter-members.html new file mode 100644 index 0000000000..dfe505c283 --- /dev/null +++ b/sdk/df/da9/classedash__packager_1_1media_1_1mp4_1_1Fragmenter-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::Fragmenter Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
AddSample(scoped_refptr< MediaSample > sample)edash_packager::media::mp4::Fragmentervirtual
aux_data() (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinline
data() (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinline
earliest_presentation_time() const (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinline
FinalizeFragment()edash_packager::media::mp4::Fragmentervirtual
first_sap_time() const (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinline
fragment_duration() const (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinline
fragment_finalized() const (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinline
fragment_initialized() const (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinline
Fragmenter(TrackFragment *traf)edash_packager::media::mp4::Fragmenter
GenerateSegmentReference(SegmentReference *reference)edash_packager::media::mp4::Fragmenter
InitializeFragment(int64_t first_sample_dts)edash_packager::media::mp4::Fragmentervirtual
OptimizeSampleEntries(std::vector< T > *entries, T *default_value)edash_packager::media::mp4::Fragmenterprotected
traf() (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmenterinlineprotected
~Fragmenter() (defined in edash_packager::media::mp4::Fragmenter)edash_packager::media::mp4::Fragmentervirtual
+ + + + diff --git a/sdk/df/dad/decrypt__config_8h_source.html b/sdk/df/dad/decrypt__config_8h_source.html new file mode 100644 index 0000000000..61b360f20d --- /dev/null +++ b/sdk/df/dad/decrypt__config_8h_source.html @@ -0,0 +1,159 @@ + + + + + + +DASH Media Packaging SDK: media/base/decrypt_config.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
decrypt_config.h
+
+
+
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #ifndef MEDIA_BASE_DECRYPT_CONFIG_H_
+
6 #define MEDIA_BASE_DECRYPT_CONFIG_H_
+
7 
+
8 #include <stdint.h>
+
9 
+
10 #include <string>
+
11 #include <vector>
+
12 
+
13 #include "packager/base/memory/scoped_ptr.h"
+
14 
+
15 namespace edash_packager {
+
16 namespace media {
+
17 
+ +
28  uint16_t clear_bytes;
+
29  uint32_t cipher_bytes;
+
30 };
+
31 
+ +
35  public:
+
37  static const size_t kDecryptionKeySize = 16;
+
38 
+
48  DecryptConfig(const std::vector<uint8_t>& key_id,
+
49  const std::vector<uint8_t>& iv,
+
50  const int data_offset,
+
51  const std::vector<SubsampleEntry>& subsamples);
+
52  ~DecryptConfig();
+
53 
+
54  const std::vector<uint8_t>& key_id() const { return key_id_; }
+
55  const std::vector<uint8_t>& iv() const { return iv_; }
+
56  int data_offset() const { return data_offset_; }
+
57  const std::vector<SubsampleEntry>& subsamples() const { return subsamples_; }
+
58 
+
59  private:
+
60  const std::vector<uint8_t> key_id_;
+
61 
+
62  // Initialization vector.
+
63  const std::vector<uint8_t> iv_;
+
64 
+
65  // Amount of data to be discarded before applying subsample information.
+
66  const int data_offset_;
+
67 
+
68  // Subsample information. May be empty for some formats, meaning entire frame
+
69  // (less data ignored by data_offset_) is encrypted.
+
70  const std::vector<SubsampleEntry> subsamples_;
+
71 
+
72  DISALLOW_COPY_AND_ASSIGN(DecryptConfig);
+
73 };
+
74 
+
75 } // namespace media
+
76 } // namespace edash_packager
+
77 
+
78 #endif // MEDIA_BASE_DECRYPT_CONFIG_H_
+ +
static const size_t kDecryptionKeySize
Keys are always 128 bits.
+ +
DecryptConfig(const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &iv, const int data_offset, const std::vector< SubsampleEntry > &subsamples)
+
+ + + + diff --git a/sdk/df/db4/classedash__packager_1_1media_1_1BitReader.html b/sdk/df/db4/classedash__packager_1_1media_1_1BitReader.html new file mode 100644 index 0000000000..3932543e9c --- /dev/null +++ b/sdk/df/db4/classedash__packager_1_1media_1_1BitReader.html @@ -0,0 +1,259 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::BitReader Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::BitReader Class Reference
+
+
+ +

A class to read bit streams. + More...

+ +

#include <bit_reader.h>

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

+Public Member Functions

 BitReader (const uint8_t *data, off_t size)
 
template<typename T >
bool ReadBits (int num_bits, T *out)
 
bool SkipBits (int num_bits)
 
int bits_available () const
 
+

Detailed Description

+

A class to read bit streams.

+ +

Definition at line 17 of file bit_reader.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
edash_packager::media::BitReader::BitReader (const uint8_t * data,
off_t size 
)
+
+

Initialize the BitReader object to read a data buffer.

+
Parameters
+ + + +
datapoints to the beginning of the buffer.
sizeis the buffer size in bytes.
+
+
+ +

Definition at line 12 of file bit_reader.cc.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
int edash_packager::media::BitReader::bits_available () const
+
+
Returns
The number of bits available for reading.
+ +

Definition at line 53 of file bit_reader.cc.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool edash_packager::media::BitReader::ReadBits (int num_bits,
T * out 
)
+
+inline
+
+

Read a number of bits from stream.

+
Parameters
+ + + +
num_bitsspecifies the number of bits to read. It cannot be larger than the number of bits the type can hold.
[out]outstores the output. The type T has to be a primitive integer type.
+
+
+
Returns
false if the given number of bits cannot be read (not enough bits in the stream), true otherwise. When false is returned, the stream will enter a state where further ReadBits/SkipBits operations will always return false unless num_bits is 0.
+ +

Definition at line 35 of file bit_reader.h.

+ +
+
+ +
+
+ + + + + + + + +
bool edash_packager::media::BitReader::SkipBits (int num_bits)
+
+

Skip a number of bits from stream.

+
Parameters
+ + +
num_bitsspecifies the number of bits to be skipped.
+
+
+
Returns
false if the given number of bits cannot be skipped (not enough bits in the stream), true otherwise. When false is returned, the stream will enter a state where further ReadBits/SkipBits operations will always return false unless |num_bits| is 0.
+ +

Definition at line 21 of file bit_reader.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/df/dbc/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset-members.html b/sdk/df/dbc/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset-members.html new file mode 100644 index 0000000000..35b0536e51 --- /dev/null +++ b/sdk/df/dbc/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::ChunkLargeOffset Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::ChunkLargeOffset)edash_packager::media::mp4::ChunkLargeOffsetvirtual
ChunkLargeOffset() (defined in edash_packager::media::mp4::ChunkLargeOffset)edash_packager::media::mp4::ChunkLargeOffset
ComputeSize() OVERRIDEedash_packager::media::mp4::ChunkLargeOffsetvirtual
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
offsets (defined in edash_packager::media::mp4::ChunkLargeOffset)edash_packager::media::mp4::ChunkLargeOffset
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::ChunkLargeOffsetvirtual
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~ChunkLargeOffset() (defined in edash_packager::media::mp4::ChunkLargeOffset)edash_packager::media::mp4::ChunkLargeOffsetvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
+ + + + diff --git a/sdk/df/dd1/structedash__packager_1_1media_1_1mp4_1_1FileType-members.html b/sdk/df/dd1/structedash__packager_1_1media_1_1mp4_1_1FileType-members.html new file mode 100644 index 0000000000..4ce4b3a8ed --- /dev/null +++ b/sdk/df/dd1/structedash__packager_1_1media_1_1mp4_1_1FileType-members.html @@ -0,0 +1,117 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::FileType Member List
+
+
+ +

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

+ + + + + + + + + + + + + + +
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::FileType)edash_packager::media::mp4::FileTypevirtual
compatible_brands (defined in edash_packager::media::mp4::FileType)edash_packager::media::mp4::FileType
ComputeSize() OVERRIDEedash_packager::media::mp4::FileTypevirtual
FileType() (defined in edash_packager::media::mp4::FileType)edash_packager::media::mp4::FileType
major_brand (defined in edash_packager::media::mp4::FileType)edash_packager::media::mp4::FileType
minor_version (defined in edash_packager::media::mp4::FileType)edash_packager::media::mp4::FileType
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::FileTypevirtual
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FileType() (defined in edash_packager::media::mp4::FileType)edash_packager::media::mp4::FileTypevirtual
+ + + + diff --git a/sdk/df/dd2/classedash__packager_1_1MockMpdBuilder-members.html b/sdk/df/dd2/classedash__packager_1_1MockMpdBuilder-members.html new file mode 100644 index 0000000000..95eb182253 --- /dev/null +++ b/sdk/df/dd2/classedash__packager_1_1MockMpdBuilder-members.html @@ -0,0 +1,119 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::MockMpdBuilder Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
AddAdaptationSet(const std::string &lang)edash_packager::MpdBuildervirtual
AddBaseUrl(const std::string &base_url)edash_packager::MpdBuilder
kDynamic enum value (defined in edash_packager::MpdBuilder)edash_packager::MpdBuilder
kStatic enum value (defined in edash_packager::MpdBuilder)edash_packager::MpdBuilder
MakePathsRelativeToMpd(const std::string &mpd_path, MediaInfo *media_info)edash_packager::MpdBuilderstatic
MOCK_METHOD1(AddAdaptationSet, AdaptationSet *(const std::string &lang)) (defined in edash_packager::MockMpdBuilder)edash_packager::MockMpdBuilder
MOCK_METHOD1(ToString, bool(std::string *output)) (defined in edash_packager::MockMpdBuilder)edash_packager::MockMpdBuilder
MockMpdBuilder(MpdType type) (defined in edash_packager::MockMpdBuilder)edash_packager::MockMpdBuilderexplicit
MpdBuilder(MpdType type, const MpdOptions &mpd_options)edash_packager::MpdBuilder
MpdType enum name (defined in edash_packager::MpdBuilder)edash_packager::MpdBuilder
ToString(std::string *output)edash_packager::MpdBuildervirtual
type() const edash_packager::MpdBuilderinline
WriteMpdToFile(media::File *output_file)edash_packager::MpdBuilder
~MockMpdBuilder() OVERRIDE (defined in edash_packager::MockMpdBuilder)edash_packager::MockMpdBuildervirtual
~MpdBuilder() (defined in edash_packager::MpdBuilder)edash_packager::MpdBuildervirtual
+ + + + diff --git a/sdk/df/dd2/mpd__utils_8h_source.html b/sdk/df/dd2/mpd__utils_8h_source.html new file mode 100644 index 0000000000..f6c8bf6c72 --- /dev/null +++ b/sdk/df/dd2/mpd__utils_8h_source.html @@ -0,0 +1,173 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/mpd_utils.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
mpd_utils.h
+
+
+
1 // Copyright 2014 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 // Funtions used by MpdBuilder class to generate an MPD file.
+
8 
+
9 #ifndef MPD_BASE_MPD_UTILS_H_
+
10 #define MPD_BASE_MPD_UTILS_H_
+
11 
+
12 #include <libxml/tree.h>
+
13 
+
14 #include <list>
+
15 #include <string>
+
16 
+
17 #include "packager/base/base64.h"
+
18 #include "packager/base/strings/string_util.h"
+
19 #include "packager/mpd/base/content_protection_element.h"
+
20 #include "packager/mpd/base/media_info.pb.h"
+
21 #include "packager/mpd/base/mpd_builder.h"
+
22 
+
23 namespace edash_packager {
+
24 
+
25 class MediaInfo;
+
26 struct ContentProtectionElement;
+
27 struct SegmentInfo;
+
28 
+
29 const char kEncryptedMp4Scheme[] = "urn:mpeg:dash:mp4protection:2011";
+
30 const char kPsshElementName[] = "cenc:pssh";
+
31 const char kEncryptedMp4Value[] = "cenc";
+
32 
+
33 bool HasVODOnlyFields(const MediaInfo& media_info);
+
34 
+
35 bool HasLiveOnlyFields(const MediaInfo& media_info);
+
36 
+
37 // If |content_protection_element| has 'value' or 'schemeIdUri' set but it's
+
38 // also in the map, then this removes them from the map.
+
39 // |content_protection_element| cannot be NULL.
+
40 void RemoveDuplicateAttributes(
+
41  ContentProtectionElement* content_protection_element);
+
42 
+
43 // Returns a 'codecs' string that has all the video and audio codecs joined with
+
44 // comma.
+
45 std::string GetCodecs(const MediaInfo& media_info);
+
46 
+
47 std::string SecondsToXmlDuration(double seconds);
+
48 
+
49 // Tries to get "duration" attribute from |node|. On success |duration| is set.
+
50 bool GetDurationAttribute(xmlNodePtr node, float* duration);
+
51 
+
52 bool MoreThanOneTrue(bool b1, bool b2, bool b3);
+
53 bool AtLeastOneTrue(bool b1, bool b2, bool b3);
+
54 bool OnlyOneTrue(bool b1, bool b2, bool b3);
+
55 
+
59 bool HexToUUID(const std::string& data, std::string* uuid_format);
+
60 
+
61 // Update the <cenc:pssh> element for |drm_uuid| ContentProtection element.
+
62 // If the element does not exist, this will add one.
+
63 void UpdateContentProtectionPsshHelper(
+
64  const std::string& drm_uuid,
+
65  const std::string& pssh,
+
66  std::list<ContentProtectionElement>* content_protection_elements);
+
67 
+
74 void AddContentProtectionElements(const MediaInfo& media_info,
+
75  Representation* parent);
+
76 
+
82 void AddContentProtectionElements(const MediaInfo& media_info,
+
83  AdaptationSet* parent);
+
84 
+
85 } // namespace edash_packager
+
86 
+
87 #endif // MPD_BASE_MPD_UTILS_H_
+
void AddContentProtectionElements(const MediaInfo &media_info, Representation *parent)
Definition: mpd_utils.cc:253
+
bool HexToUUID(const std::string &data, std::string *uuid_format)
Definition: mpd_utils.cc:97
+
+ + + + diff --git a/sdk/df/dde/classedash__packager_1_1media_1_1BufferWriter.html b/sdk/df/dde/classedash__packager_1_1media_1_1BufferWriter.html new file mode 100644 index 0000000000..6ab558d489 --- /dev/null +++ b/sdk/df/dde/classedash__packager_1_1media_1_1BufferWriter.html @@ -0,0 +1,309 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::BufferWriter Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::BufferWriter Class Reference
+
+
+ +

#include <buffer_writer.h>

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

+Public Member Functions

 BufferWriter (size_t reserved_size_in_bytes)
 
void AppendNBytes (uint64_t v, size_t num_bytes)
 
+void AppendVector (const std::vector< uint8_t > &v)
 
+void AppendArray (const uint8_t *buf, size_t size)
 
+void AppendBuffer (const BufferWriter &buffer)
 
+void Swap (BufferWriter *buffer)
 
+void SwapBuffer (std::vector< uint8_t > *buffer)
 
+void Clear ()
 
+size_t Size () const
 
const uint8_t * Buffer () const
 
Status WriteToFile (File *file)
 
void AppendInt (uint8_t v)
 
+void AppendInt (uint16_t v)
 
+void AppendInt (uint32_t v)
 
+void AppendInt (uint64_t v)
 
+void AppendInt (int16_t v)
 
+void AppendInt (int32_t v)
 
+void AppendInt (int64_t v)
 
+

Detailed Description

+

A simple buffer writer implementation which appends various data types to buffer.

+ +

Definition at line 22 of file buffer_writer.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
edash_packager::media::BufferWriter::BufferWriter (size_t reserved_size_in_bytes)
+
+explicit
+
+

Construct the object with a reserved capacity.

+
Parameters
+ + +
reserved_size_in_bytesis intended for optimization and is not a hard limit. It does not affect the actual size of the buffer, which still starts from zero.
+
+
+ +

Definition at line 19 of file buffer_writer.cc.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
void edash_packager::media::BufferWriter::AppendInt (uint8_t v)
+
+

These convenience functions append the integers (in network byte order, i.e. big endian) of various size and signedness to the end of the buffer.

+ +

Definition at line 24 of file buffer_writer.cc.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void edash_packager::media::BufferWriter::AppendNBytes (uint64_t v,
size_t num_bytes 
)
+
+

Append the least significant num_bytes of v to buffer.

+
Parameters
+ + +
num_bytesshould not be larger than sizeof(v), i.e. 8 on a 64-bit system.
+
+
+ +

Definition at line 46 of file buffer_writer.cc.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const uint8_t* edash_packager::media::BufferWriter::Buffer () const
+
+inline
+
+
Returns
Underlying buffer. Behavior is undefined if the buffer size is 0.
+ +

Definition at line 59 of file buffer_writer.h.

+ +
+
+ +
+
+ + + + + + + + +
Status edash_packager::media::BufferWriter::WriteToFile (Filefile)
+
+

Write the buffer to file. The internal buffer will be cleared after writing.

+
Parameters
+ + +
fileshould not be NULL.
+
+
+
Returns
OK on success.
+ +

Definition at line 65 of file buffer_writer.cc.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/sdk/df/dde/ts__section__psi_8cc_source.html b/sdk/df/dde/ts__section__psi_8cc_source.html new file mode 100644 index 0000000000..8f967075ca --- /dev/null +++ b/sdk/df/dde/ts__section__psi_8cc_source.html @@ -0,0 +1,236 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp2t/ts_section_psi.cc Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ts_section_psi.cc
+
+
+
1 // Copyright 2014 The Chromium Authors. All rights reserved.
+
2 // Use of this source code is governed by a BSD-style license that can be
+
3 // found in the LICENSE file.
+
4 
+
5 #include "packager/media/formats/mp2t/ts_section_psi.h"
+
6 
+
7 #include <stdint.h>
+
8 
+
9 #include "packager/base/logging.h"
+
10 #include "packager/media/base/bit_reader.h"
+
11 #include "packager/media/formats/mp2t/mp2t_common.h"
+
12 
+
13 static bool IsCrcValid(const uint8_t* buf, int size) {
+
14  uint32_t crc = 0xffffffffu;
+
15  const uint32_t kCrcPoly = 0x4c11db7;
+
16 
+
17  for (int k = 0; k < size; k++) {
+
18  int nbits = 8;
+
19  uint32_t data_msb_aligned = buf[k];
+
20  data_msb_aligned <<= (32 - nbits);
+
21 
+
22  while (nbits > 0) {
+
23  if ((data_msb_aligned ^ crc) & 0x80000000) {
+
24  crc <<= 1;
+
25  crc ^= kCrcPoly;
+
26  } else {
+
27  crc <<= 1;
+
28  }
+
29 
+
30  data_msb_aligned <<= 1;
+
31  nbits--;
+
32  }
+
33  }
+
34 
+
35  return (crc == 0);
+
36 }
+
37 
+
38 namespace edash_packager {
+
39 namespace media {
+
40 namespace mp2t {
+
41 
+
42 TsSectionPsi::TsSectionPsi()
+
43  : wait_for_pusi_(true),
+
44  leading_bytes_to_discard_(0) {
+
45 }
+
46 
+
47 TsSectionPsi::~TsSectionPsi() {
+
48 }
+
49 
+
50 bool TsSectionPsi::Parse(bool payload_unit_start_indicator,
+
51  const uint8_t* buf,
+
52  int size) {
+
53  // Ignore partial PSI.
+
54  if (wait_for_pusi_ && !payload_unit_start_indicator)
+
55  return true;
+
56 
+
57  if (payload_unit_start_indicator) {
+
58  // Reset the state of the PSI section.
+
59  ResetPsiState();
+
60 
+
61  // Update the state.
+
62  wait_for_pusi_ = false;
+
63  DCHECK_GE(size, 1);
+
64  int pointer_field = buf[0];
+
65  leading_bytes_to_discard_ = pointer_field;
+
66  buf++;
+
67  size--;
+
68  }
+
69 
+
70  // Discard some leading bytes if needed.
+
71  if (leading_bytes_to_discard_ > 0) {
+
72  int nbytes_to_discard = std::min(leading_bytes_to_discard_, size);
+
73  buf += nbytes_to_discard;
+
74  size -= nbytes_to_discard;
+
75  leading_bytes_to_discard_ -= nbytes_to_discard;
+
76  }
+
77  if (size == 0)
+
78  return true;
+
79 
+
80  // Add the data to the parser state.
+
81  psi_byte_queue_.Push(buf, size);
+
82  int raw_psi_size;
+
83  const uint8_t* raw_psi;
+
84  psi_byte_queue_.Peek(&raw_psi, &raw_psi_size);
+
85 
+
86  // Check whether we have enough data to start parsing.
+
87  if (raw_psi_size < 3)
+
88  return true;
+
89  int section_length =
+
90  ((static_cast<int>(raw_psi[1]) << 8) |
+
91  (static_cast<int>(raw_psi[2]))) & 0xfff;
+
92  if (section_length >= 1021)
+
93  return false;
+
94  int psi_length = section_length + 3;
+
95  if (raw_psi_size < psi_length) {
+
96  // Don't throw an error when there is not enough data,
+
97  // just wait for more data to come.
+
98  return true;
+
99  }
+
100 
+
101  // There should not be any trailing bytes after a PMT.
+
102  // Instead, the pointer field should be used to stuff bytes.
+
103  DVLOG_IF(1, raw_psi_size > psi_length)
+
104  << "Trailing bytes after a PSI section: "
+
105  << psi_length << " vs " << raw_psi_size;
+
106 
+
107  // Verify the CRC.
+
108  RCHECK(IsCrcValid(raw_psi, psi_length));
+
109 
+
110  // Parse the PSI section.
+
111  BitReader bit_reader(raw_psi, raw_psi_size);
+
112  bool status = ParsePsiSection(&bit_reader);
+
113  if (status)
+
114  ResetPsiState();
+
115 
+
116  return status;
+
117 }
+
118 
+
119 void TsSectionPsi::Flush() {
+
120 }
+
121 
+
122 void TsSectionPsi::Reset() {
+
123  ResetPsiSection();
+
124  ResetPsiState();
+
125 }
+
126 
+
127 void TsSectionPsi::ResetPsiState() {
+
128  wait_for_pusi_ = true;
+
129  psi_byte_queue_.Reset();
+
130  leading_bytes_to_discard_ = 0;
+
131 }
+
132 
+
133 } // namespace mp2t
+
134 } // namespace media
+
135 } // namespace edash_packager
+
void Push(const uint8_t *data, int size)
Append new bytes to the end of the queue.
Definition: byte_queue.cc:29
+
void Reset()
Reset the queue to the empty state.
Definition: byte_queue.cc:24
+
void Peek(const uint8_t **data, int *size) const
Definition: byte_queue.cc:63
+
+ + + + diff --git a/sdk/df/de3/structedash__packager_1_1media_1_1mp4_1_1TrackHeader-members.html b/sdk/df/de3/structedash__packager_1_1media_1_1mp4_1_1TrackHeader-members.html new file mode 100644 index 0000000000..47a7b59f36 --- /dev/null +++ b/sdk/df/de3/structedash__packager_1_1media_1_1mp4_1_1TrackHeader-members.html @@ -0,0 +1,131 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::mp4::TrackHeader Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
alternate_group (defined in edash_packager::media::mp4::TrackHeader)edash_packager::media::mp4::TrackHeader
atom_sizeedash_packager::media::mp4::Boxprotected
Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Box
BoxType() const OVERRIDE (defined in edash_packager::media::mp4::TrackHeader)edash_packager::media::mp4::TrackHeadervirtual
ComputeSize() OVERRIDEedash_packager::media::mp4::TrackHeadervirtual
creation_time (defined in edash_packager::media::mp4::TrackHeader)edash_packager::media::mp4::TrackHeader
duration (defined in edash_packager::media::mp4::TrackHeader)edash_packager::media::mp4::TrackHeader
flags (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
height (defined in edash_packager::media::mp4::TrackHeader)edash_packager::media::mp4::TrackHeader
kTrackEnabled enum value (defined in edash_packager::media::mp4::TrackHeader)edash_packager::media::mp4::TrackHeader
kTrackInMovie enum value (defined in edash_packager::media::mp4::TrackHeader)edash_packager::media::mp4::TrackHeader
kTrackInPreview enum value (defined in edash_packager::media::mp4::TrackHeader)edash_packager::media::mp4::TrackHeader
layer (defined in edash_packager::media::mp4::TrackHeader)edash_packager::media::mp4::TrackHeader
modification_time (defined in edash_packager::media::mp4::TrackHeader)edash_packager::media::mp4::TrackHeader
Parse(BoxReader *reader)edash_packager::media::mp4::Box
ReadWrite(BoxBuffer *buffer) OVERRIDEedash_packager::media::mp4::TrackHeadervirtual
track_id (defined in edash_packager::media::mp4::TrackHeader)edash_packager::media::mp4::TrackHeader
TrackHeader() (defined in edash_packager::media::mp4::TrackHeader)edash_packager::media::mp4::TrackHeader
TrackHeaderFlags enum name (defined in edash_packager::media::mp4::TrackHeader)edash_packager::media::mp4::TrackHeader
version (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBox
volume (defined in edash_packager::media::mp4::TrackHeader)edash_packager::media::mp4::TrackHeader
width (defined in edash_packager::media::mp4::TrackHeader)edash_packager::media::mp4::TrackHeader
Write(BufferWriter *writer)edash_packager::media::mp4::Box
~Box() (defined in edash_packager::media::mp4::Box)edash_packager::media::mp4::Boxvirtual
~FullBox() (defined in edash_packager::media::mp4::FullBox)edash_packager::media::mp4::FullBoxvirtual
~TrackHeader() (defined in edash_packager::media::mp4::TrackHeader)edash_packager::media::mp4::TrackHeadervirtual
+ + + + diff --git a/sdk/df/de7/classedash__packager_1_1media_1_1MuxerListener.html b/sdk/df/de7/classedash__packager_1_1media_1_1MuxerListener.html new file mode 100644 index 0000000000..6d78a0fe8e --- /dev/null +++ b/sdk/df/de7/classedash__packager_1_1media_1_1MuxerListener.html @@ -0,0 +1,185 @@ + + + + + + +DASH Media Packaging SDK: edash_packager::media::MuxerListener Class Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
edash_packager::media::MuxerListener Class Referenceabstract
+
+
+ +

#include <muxer_listener.h>

+
+Inheritance diagram for edash_packager::media::MuxerListener:
+
+
+ + +edash_packager::media::MpdNotifyMuxerListener +edash_packager::media::VodMediaInfoDumpMuxerListener + +
+ + + + +

+Public Types

enum  ContainerType { kContainerUnknown = 0, +kContainerMp4, +kContainerMpeg2ts, +kContainerWebM + }
 
+ + + + + + + + + + + +

+Public Member Functions

+virtual void OnEncryptionInfoReady (bool is_initial_encryption_info, const std::string &content_protection_uuid, const std::string &content_protection_name_version, const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &pssh)=0
 
+virtual void OnMediaStart (const MuxerOptions &muxer_options, const StreamInfo &stream_info, uint32_t time_scale, ContainerType container_type)=0
 
virtual void OnSampleDurationReady (uint32_t sample_duration)=0
 
+virtual void OnMediaEnd (bool has_init_range, uint64_t init_range_start, uint64_t init_range_end, bool has_index_range, uint64_t index_range_start, uint64_t index_range_end, float duration_seconds, uint64_t file_size)=0
 
+virtual void OnNewSegment (uint64_t start_time, uint64_t duration, uint64_t segment_file_size)=0
 
+

Detailed Description

+

MuxerListener is an event handler that can be registered to a muxer. A MuxerListener cannot be shared amongst muxer instances, in other words, every muxer instance either owns a unique MuxerListener instance. This also assumes that there is one media stream per muxer.

+ +

Definition at line 29 of file muxer_listener.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void edash_packager::media::MuxerListener::OnSampleDurationReady (uint32_t sample_duration)
+
+pure virtual
+
+

Called when the average sample duration of the media is determined.

+
Parameters
+ + +
sample_durationin timescale of the media.
+
+
+ +

Implemented in edash_packager::media::MpdNotifyMuxerListener, and edash_packager::media::VodMediaInfoDumpMuxerListener.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/sdk/df/de7/classedash__packager_1_1media_1_1MuxerListener.png b/sdk/df/de7/classedash__packager_1_1media_1_1MuxerListener.png new file mode 100644 index 0000000000..a75d9a13da Binary files /dev/null and b/sdk/df/de7/classedash__packager_1_1media_1_1MuxerListener.png differ diff --git a/sdk/df/de9/segment__info_8h_source.html b/sdk/df/de9/segment__info_8h_source.html new file mode 100644 index 0000000000..1d485d7aed --- /dev/null +++ b/sdk/df/de9/segment__info_8h_source.html @@ -0,0 +1,122 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/segment_info.h Source File + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
segment_info.h
+
+
+
1 // Copyright 2014 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 MPD_BASE_SEGMENT_INFO_H_
+
8 #define MPD_BASE_SEGMENT_INFO_H_
+
9 
+
10 namespace edash_packager {
+
14 struct SegmentInfo {
+
15  uint64_t start_time;
+
16  uint64_t duration;
+
17  // This is the number of times same duration segments are repeated not
+
18  // inclusive. In other words if this is the only one segment that starts at
+
19  // |start_time| and has |duration| but none others have |start_time| * N and
+
20  // |duration|, then this should be set to 0. The semantics is the same as S@r
+
21  // in the DASH MPD spec.
+
22  uint64_t repeat;
+
23 };
+
24 } // namespace edash_packager
+
25 
+
26 #endif // MPD_BASE_SEGMENT_INFO_H_
+ +
+ + + + diff --git a/sdk/df/dec/classedash__packager_1_1media_1_1MuxerListener-members.html b/sdk/df/dec/classedash__packager_1_1media_1_1MuxerListener-members.html new file mode 100644 index 0000000000..56a3015b41 --- /dev/null +++ b/sdk/df/dec/classedash__packager_1_1media_1_1MuxerListener-members.html @@ -0,0 +1,116 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::MuxerListener Member List
+
+
+ +

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

+ + + + + + + + + + + + + +
ContainerType enum name (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListener
kContainerMp4 enum value (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListener
kContainerMpeg2ts enum value (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListener
kContainerUnknown enum value (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListener
kContainerWebM enum value (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListener
MuxerListener() (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListenerinlineprotected
OnEncryptionInfoReady(bool is_initial_encryption_info, const std::string &content_protection_uuid, const std::string &content_protection_name_version, const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &pssh)=0 (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListenerpure virtual
OnMediaEnd(bool has_init_range, uint64_t init_range_start, uint64_t init_range_end, bool has_index_range, uint64_t index_range_start, uint64_t index_range_end, float duration_seconds, uint64_t file_size)=0 (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListenerpure virtual
OnMediaStart(const MuxerOptions &muxer_options, const StreamInfo &stream_info, uint32_t time_scale, ContainerType container_type)=0 (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListenerpure virtual
OnNewSegment(uint64_t start_time, uint64_t duration, uint64_t segment_file_size)=0 (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListenerpure virtual
OnSampleDurationReady(uint32_t sample_duration)=0edash_packager::media::MuxerListenerpure virtual
~MuxerListener() (defined in edash_packager::media::MuxerListener)edash_packager::media::MuxerListenerinlinevirtual
+ + + + diff --git a/sdk/df/dfa/classedash__packager_1_1media_1_1RsaPublicKey-members.html b/sdk/df/dfa/classedash__packager_1_1media_1_1RsaPublicKey-members.html new file mode 100644 index 0000000000..5257745b33 --- /dev/null +++ b/sdk/df/dfa/classedash__packager_1_1media_1_1RsaPublicKey-members.html @@ -0,0 +1,108 @@ + + + + + + +DASH Media Packaging SDK: Member List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
edash_packager::media::RsaPublicKey Member List
+
+
+ +

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

+ + + + + +
Create(const std::string &serialized_key)edash_packager::media::RsaPublicKeystatic
Encrypt(const std::string &clear_message, std::string *encrypted_message)edash_packager::media::RsaPublicKey
VerifySignature(const std::string &message, const std::string &signature)edash_packager::media::RsaPublicKey
~RsaPublicKey() (defined in edash_packager::media::RsaPublicKey)edash_packager::media::RsaPublicKey
+ + + + diff --git a/sdk/dir_2618cd273dea54f184e42d7a562af818.html b/sdk/dir_2618cd273dea54f184e42d7a562af818.html new file mode 100644 index 0000000000..7e82639fa2 --- /dev/null +++ b/sdk/dir_2618cd273dea54f184e42d7a562af818.html @@ -0,0 +1,148 @@ + + + + + + +DASH Media Packaging SDK: mpd/base Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
base Directory Reference
+
+
+ + + + +

+Directories

directory  xml
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  bandwidth_estimator.cc [code]
 
file  bandwidth_estimator.h [code]
 
file  content_protection_element.cc [code]
 
file  content_protection_element.h [code]
 
file  dash_iop_mpd_notifier.cc [code]
 
file  dash_iop_mpd_notifier.h [code]
 
file  language_utils.cc [code]
 
file  language_utils.h [code]
 
file  mock_mpd_builder.cc [code]
 
file  mock_mpd_builder.h [code]
 
file  mock_mpd_notifier.cc [code]
 
file  mock_mpd_notifier.h [code]
 
file  mpd_builder.cc [code]
 
file  mpd_builder.h [code]
 
file  mpd_notifier.h [code]
 
file  mpd_notifier_util.cc [code]
 
file  mpd_notifier_util.h [code]
 
file  mpd_options.h [code]
 
file  mpd_utils.cc [code]
 
file  mpd_utils.h [code]
 
file  segment_info.h [code]
 
file  simple_mpd_notifier.cc [code]
 
file  simple_mpd_notifier.h [code]
 
+
+ + + + diff --git a/sdk/dir_279fd47bebb21302c25cfb685e84c359.html b/sdk/dir_279fd47bebb21302c25cfb685e84c359.html new file mode 100644 index 0000000000..972d57958f --- /dev/null +++ b/sdk/dir_279fd47bebb21302c25cfb685e84c359.html @@ -0,0 +1,121 @@ + + + + + + +DASH Media Packaging SDK: media/file Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
file Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  file.cc [code]
 
file  file.h [code]
 
file  file_closer.h [code]
 
file  io_cache.cc [code]
 
file  io_cache.h [code]
 
file  local_file.cc [code]
 
file  local_file.h [code]
 
file  threaded_io_file.cc [code]
 
file  threaded_io_file.h [code]
 
file  udp_file.h [code]
 
file  udp_file_posix.cc [code]
 
file  udp_file_win.cc [code]
 
+
+ + + + diff --git a/sdk/dir_39dc0668bd5a501998f94e8b4e546c71.html b/sdk/dir_39dc0668bd5a501998f94e8b4e546c71.html new file mode 100644 index 0000000000..c371e7eb92 --- /dev/null +++ b/sdk/dir_39dc0668bd5a501998f94e8b4e546c71.html @@ -0,0 +1,107 @@ + + + + + + +DASH Media Packaging SDK: media Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
media Directory Reference
+
+
+ + + + + + + + + + + + +

+Directories

directory  base
 
directory  event
 
directory  file
 
directory  filters
 
directory  formats
 
+
+ + + + diff --git a/sdk/dir_3e9291fd7a18fdecc763294cb2628910.html b/sdk/dir_3e9291fd7a18fdecc763294cb2628910.html new file mode 100644 index 0000000000..ea5146edba --- /dev/null +++ b/sdk/dir_3e9291fd7a18fdecc763294cb2628910.html @@ -0,0 +1,181 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp4 Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
mp4 Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  aac_audio_specific_config.cc [code]
 
file  aac_audio_specific_config.h [code]
 
file  box.cc [code]
 
file  box.h [code]
 
file  box_buffer.h [code]
 
file  box_definitions.cc [code]
 
file  box_definitions.h [code]
 
file  box_definitions_comparison.h [code]
 
file  box_reader.cc [code]
 
file  box_reader.h [code]
 
file  cenc.cc [code]
 
file  cenc.h [code]
 
file  chunk_info_iterator.cc [code]
 
file  chunk_info_iterator.h [code]
 
file  composition_offset_iterator.cc [code]
 
file  composition_offset_iterator.h [code]
 
file  decoding_time_iterator.cc [code]
 
file  decoding_time_iterator.h [code]
 
file  encrypting_fragmenter.cc [code]
 
file  encrypting_fragmenter.h [code]
 
file  es_descriptor.cc [code]
 
file  es_descriptor.h [code]
 
file  fourccs.h [code]
 
file  fragmenter.cc [code]
 
file  fragmenter.h [code]
 
file  key_rotation_fragmenter.cc [code]
 
file  key_rotation_fragmenter.h [code]
 
file  mp4_media_parser.cc [code]
 
file  mp4_media_parser.h [code]
 
file  mp4_muxer.cc [code]
 
file  mp4_muxer.h [code]
 
file  multi_segment_segmenter.cc [code]
 
file  multi_segment_segmenter.h [code]
 
file  rcheck.h [code]
 
file  segmenter.cc [code]
 
file  segmenter.h [code]
 
file  single_segment_segmenter.cc [code]
 
file  single_segment_segmenter.h [code]
 
file  sync_sample_iterator.cc [code]
 
file  sync_sample_iterator.h [code]
 
file  track_run_iterator.cc [code]
 
file  track_run_iterator.h [code]
 
+
+ + + + diff --git a/sdk/dir_49627ef5ef0630f6cf11dd06344c4cf0.html b/sdk/dir_49627ef5ef0630f6cf11dd06344c4cf0.html new file mode 100644 index 0000000000..cdd3d2bd24 --- /dev/null +++ b/sdk/dir_49627ef5ef0630f6cf11dd06344c4cf0.html @@ -0,0 +1,101 @@ + + + + + + +DASH Media Packaging SDK: mpd/util Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
util Directory Reference
+
+
+ + + + + + +

+Files

file  mpd_writer.cc [code]
 
file  mpd_writer.h [code]
 
+
+ + + + diff --git a/sdk/dir_5eb2e460866db0ed29e32d64402e5c22.html b/sdk/dir_5eb2e460866db0ed29e32d64402e5c22.html new file mode 100644 index 0000000000..7cd8160e46 --- /dev/null +++ b/sdk/dir_5eb2e460866db0ed29e32d64402e5c22.html @@ -0,0 +1,109 @@ + + + + + + +DASH Media Packaging SDK: media/filters Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
filters Directory Reference
+
+
+ + + + + + + + + + + + + + +

+Files

file  h264_bit_reader.cc [code]
 
file  h264_bit_reader.h [code]
 
file  h264_byte_to_unit_stream_converter.cc [code]
 
file  h264_byte_to_unit_stream_converter.h [code]
 
file  h264_parser.cc [code]
 
file  h264_parser.h [code]
 
+
+ + + + diff --git a/sdk/dir_65f7acfa8cf3a5f1edc11faa2428b914.html b/sdk/dir_65f7acfa8cf3a5f1edc11faa2428b914.html new file mode 100644 index 0000000000..2b36f236f3 --- /dev/null +++ b/sdk/dir_65f7acfa8cf3a5f1edc11faa2428b914.html @@ -0,0 +1,105 @@ + + + + + + +DASH Media Packaging SDK: media/formats Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
formats Directory Reference
+
+
+ + + + + + + + + + +

+Directories

directory  mp2t
 
directory  mp4
 
directory  mpeg
 
directory  wvm
 
+
+ + + + diff --git a/sdk/dir_679a6f4e9fa092b388fc986148018f2a.html b/sdk/dir_679a6f4e9fa092b388fc986148018f2a.html new file mode 100644 index 0000000000..d90872fc09 --- /dev/null +++ b/sdk/dir_679a6f4e9fa092b388fc986148018f2a.html @@ -0,0 +1,103 @@ + + + + + + +DASH Media Packaging SDK: mpd/base/xml Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
xml Directory Reference
+
+
+ + + + + + + + +

+Files

file  scoped_xml_ptr.h [code]
 
file  xml_node.cc [code]
 
file  xml_node.h [code]
 
+
+ + + + diff --git a/sdk/dir_7f5e01ba7faf319a30cabd201b6ef121.html b/sdk/dir_7f5e01ba7faf319a30cabd201b6ef121.html new file mode 100644 index 0000000000..710da2866f --- /dev/null +++ b/sdk/dir_7f5e01ba7faf319a30cabd201b6ef121.html @@ -0,0 +1,101 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mpeg Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
mpeg Directory Reference
+
+
+ + + + + + +

+Files

file  adts_constants.cc [code]
 
file  adts_constants.h [code]
 
+
+ + + + diff --git a/sdk/dir_89dd766eb2df7d7257dbe806a34404af.html b/sdk/dir_89dd766eb2df7d7257dbe806a34404af.html new file mode 100644 index 0000000000..505fb966bf --- /dev/null +++ b/sdk/dir_89dd766eb2df7d7257dbe806a34404af.html @@ -0,0 +1,101 @@ + + + + + + +DASH Media Packaging SDK: mpd Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
mpd Directory Reference
+
+
+ + + + + + +

+Directories

directory  base
 
directory  util
 
+
+ + + + diff --git a/sdk/dir_aa73376d632f252584a1c0dfbefab2c4.html b/sdk/dir_aa73376d632f252584a1c0dfbefab2c4.html new file mode 100644 index 0000000000..e4ea61affb --- /dev/null +++ b/sdk/dir_aa73376d632f252584a1c0dfbefab2c4.html @@ -0,0 +1,117 @@ + + + + + + +DASH Media Packaging SDK: media/event Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
event Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + +

+Files

file  mpd_notify_muxer_listener.cc [code]
 
file  mpd_notify_muxer_listener.h [code]
 
file  muxer_listener.h [code]
 
file  muxer_listener_internal.cc [code]
 
file  muxer_listener_internal.h [code]
 
file  muxer_listener_test_helper.cc [code]
 
file  muxer_listener_test_helper.h [code]
 
file  progress_listener.h [code]
 
file  vod_media_info_dump_muxer_listener.cc [code]
 
file  vod_media_info_dump_muxer_listener.h [code]
 
+
+ + + + diff --git a/sdk/dir_c6ada2450b25ab5438a4dba6c9b890af.html b/sdk/dir_c6ada2450b25ab5438a4dba6c9b890af.html new file mode 100644 index 0000000000..28c1602d0c --- /dev/null +++ b/sdk/dir_c6ada2450b25ab5438a4dba6c9b890af.html @@ -0,0 +1,217 @@ + + + + + + +DASH Media Packaging SDK: media/base Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
base Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  aes_encryptor.cc [code]
 
file  aes_encryptor.h [code]
 
file  audio_stream_info.cc [code]
 
file  audio_stream_info.h [code]
 
file  audio_timestamp_helper.cc [code]
 
file  audio_timestamp_helper.h [code]
 
file  bit_reader.cc [code]
 
file  bit_reader.h [code]
 
file  buffer_reader.cc [code]
 
file  buffer_reader.h [code]
 
file  buffer_writer.cc [code]
 
file  buffer_writer.h [code]
 
file  byte_queue.cc [code]
 
file  byte_queue.h [code]
 
file  closure_thread.cc [code]
 
file  closure_thread.h [code]
 
file  container_names.cc [code]
 
file  container_names.h [code]
 
file  decrypt_config.cc [code]
 
file  decrypt_config.h [code]
 
file  decryptor_source.h [code]
 
file  demuxer.cc [code]
 
file  demuxer.h [code]
 
file  http_key_fetcher.cc [code]
 
file  http_key_fetcher.h [code]
 
file  key_fetcher.cc [code]
 
file  key_fetcher.h [code]
 
file  key_source.cc [code]
 
file  key_source.h [code]
 
file  limits.h [code]
 
file  media_parser.h [code]
 
file  media_sample.cc [code]
 
file  media_sample.h [code]
 
file  media_stream.cc [code]
 
file  media_stream.h [code]
 
file  muxer.cc [code]
 
file  muxer.h [code]
 
file  muxer_options.cc [code]
 
file  muxer_options.h [code]
 
file  muxer_util.cc [code]
 
file  muxer_util.h [code]
 
file  network_util.cc [code]
 
file  network_util.h [code]
 
file  offset_byte_queue.cc [code]
 
file  offset_byte_queue.h [code]
 
file  producer_consumer_queue.h [code]
 
file  request_signer.cc [code]
 
file  request_signer.h [code]
 
file  rsa_key.cc [code]
 
file  rsa_key.h [code]
 
file  status.cc [code]
 
file  status.h [code]
 
file  stream_info.cc [code]
 
file  stream_info.h [code]
 
file  text_track.h [code]
 
file  timestamp.h [code]
 
file  video_stream_info.cc [code]
 
file  video_stream_info.h [code]
 
file  widevine_key_source.cc [code]
 
file  widevine_key_source.h [code]
 
+
+ + + + diff --git a/sdk/dir_d422163b96683743ed3963d4aac17747.html b/sdk/dir_d422163b96683743ed3963d4aac17747.html new file mode 100644 index 0000000000..aae401a05a --- /dev/null +++ b/sdk/dir_d422163b96683743ed3963d4aac17747.html @@ -0,0 +1,135 @@ + + + + + + +DASH Media Packaging SDK: app Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
app Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  fixed_key_encryption_flags.cc [code]
 
file  fixed_key_encryption_flags.h [code]
 
file  libcrypto_threading.cc [code]
 
file  libcrypto_threading.h [code]
 
file  mpd_flags.cc [code]
 
file  mpd_flags.h [code]
 
file  mpd_generator.cc [code]
 
file  mpd_generator_flags.h [code]
 
file  muxer_flags.cc [code]
 
file  muxer_flags.h [code]
 
file  packager_main.cc [code]
 
file  packager_util.cc [code]
 
file  packager_util.h [code]
 
file  stream_descriptor.cc [code]
 
file  stream_descriptor.h [code]
 
file  validate_flag.cc [code]
 
file  validate_flag.h [code]
 
file  widevine_encryption_flags.cc [code]
 
file  widevine_encryption_flags.h [code]
 
+
+ + + + diff --git a/sdk/dir_eeaeb49ac3913fcfb450d3ce9cc0141b.html b/sdk/dir_eeaeb49ac3913fcfb450d3ce9cc0141b.html new file mode 100644 index 0000000000..1c5e3d8afa --- /dev/null +++ b/sdk/dir_eeaeb49ac3913fcfb450d3ce9cc0141b.html @@ -0,0 +1,101 @@ + + + + + + +DASH Media Packaging SDK: media/formats/wvm Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
wvm Directory Reference
+
+
+ + + + + + +

+Files

file  wvm_media_parser.cc [code]
 
file  wvm_media_parser.h [code]
 
+
+ + + + diff --git a/sdk/dir_f7dcbe7025bbacfc4b9a7dff6ad41d72.html b/sdk/dir_f7dcbe7025bbacfc4b9a7dff6ad41d72.html new file mode 100644 index 0000000000..9eb27db7f8 --- /dev/null +++ b/sdk/dir_f7dcbe7025bbacfc4b9a7dff6ad41d72.html @@ -0,0 +1,139 @@ + + + + + + +DASH Media Packaging SDK: media/formats/mp2t Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
mp2t Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  adts_header.cc [code]
 
file  adts_header.h [code]
 
file  es_parser.h [code]
 
file  es_parser_adts.cc [code]
 
file  es_parser_adts.h [code]
 
file  es_parser_h264.cc [code]
 
file  es_parser_h264.h [code]
 
file  mp2t_common.h [code]
 
file  mp2t_media_parser.cc [code]
 
file  mp2t_media_parser.h [code]
 
file  ts_packet.cc [code]
 
file  ts_packet.h [code]
 
file  ts_section.h [code]
 
file  ts_section_pat.cc [code]
 
file  ts_section_pat.h [code]
 
file  ts_section_pes.cc [code]
 
file  ts_section_pes.h [code]
 
file  ts_section_pmt.cc [code]
 
file  ts_section_pmt.h [code]
 
file  ts_section_psi.cc [code]
 
file  ts_section_psi.h [code]
 
+
+ + + + diff --git a/sdk/doxygen.css b/sdk/doxygen.css new file mode 100644 index 0000000000..be34fe54ee --- /dev/null +++ b/sdk/doxygen.css @@ -0,0 +1,1440 @@ +/* The standard CSS for doxygen 1.8.6 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 4px 6px; + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: bold; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('ftv2folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('ftv2folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('ftv2doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 20px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + diff --git a/sdk/doxygen.png b/sdk/doxygen.png new file mode 100644 index 0000000000..3ff17d807f Binary files /dev/null and b/sdk/doxygen.png differ diff --git a/sdk/dynsections.js b/sdk/dynsections.js new file mode 100644 index 0000000000..1e6bf07f9f --- /dev/null +++ b/sdk/dynsections.js @@ -0,0 +1,104 @@ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + +DASH Media Packaging SDK: File List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + +
+ + + + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 1234]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  app
 fixed_key_encryption_flags.cc
 fixed_key_encryption_flags.h
 libcrypto_threading.cc
 libcrypto_threading.h
 mpd_flags.cc
 mpd_flags.h
 mpd_generator.cc
 mpd_generator_flags.h
 muxer_flags.cc
 muxer_flags.h
 packager_main.cc
 packager_util.cc
 packager_util.h
 stream_descriptor.cc
 stream_descriptor.h
 validate_flag.cc
 validate_flag.h
 widevine_encryption_flags.cc
 widevine_encryption_flags.h
  media
  base
  event
  file
  filters
  formats
  mpd
  base
  util
+
+
+ + + + diff --git a/sdk/ftv2blank.png b/sdk/ftv2blank.png new file mode 100644 index 0000000000..63c605bb4c Binary files /dev/null and b/sdk/ftv2blank.png differ diff --git a/sdk/ftv2doc.png b/sdk/ftv2doc.png new file mode 100644 index 0000000000..17edabff95 Binary files /dev/null and b/sdk/ftv2doc.png differ diff --git a/sdk/ftv2folderclosed.png b/sdk/ftv2folderclosed.png new file mode 100644 index 0000000000..bb8ab35edc Binary files /dev/null and b/sdk/ftv2folderclosed.png differ diff --git a/sdk/ftv2folderopen.png b/sdk/ftv2folderopen.png new file mode 100644 index 0000000000..d6c7f676a3 Binary files /dev/null and b/sdk/ftv2folderopen.png differ diff --git a/sdk/ftv2lastnode.png b/sdk/ftv2lastnode.png new file mode 100644 index 0000000000..63c605bb4c Binary files /dev/null and b/sdk/ftv2lastnode.png differ diff --git a/sdk/ftv2link.png b/sdk/ftv2link.png new file mode 100644 index 0000000000..17edabff95 Binary files /dev/null and b/sdk/ftv2link.png differ diff --git a/sdk/ftv2mlastnode.png b/sdk/ftv2mlastnode.png new file mode 100644 index 0000000000..0b63f6d38c Binary files /dev/null and b/sdk/ftv2mlastnode.png differ diff --git a/sdk/ftv2mnode.png b/sdk/ftv2mnode.png new file mode 100644 index 0000000000..0b63f6d38c Binary files /dev/null and b/sdk/ftv2mnode.png differ diff --git a/sdk/ftv2node.png b/sdk/ftv2node.png new file mode 100644 index 0000000000..63c605bb4c Binary files /dev/null and b/sdk/ftv2node.png differ diff --git a/sdk/ftv2plastnode.png b/sdk/ftv2plastnode.png new file mode 100644 index 0000000000..c6ee22f937 Binary files /dev/null and b/sdk/ftv2plastnode.png differ diff --git a/sdk/ftv2pnode.png b/sdk/ftv2pnode.png new file mode 100644 index 0000000000..c6ee22f937 Binary files /dev/null and b/sdk/ftv2pnode.png differ diff --git a/sdk/ftv2splitbar.png b/sdk/ftv2splitbar.png new file mode 100644 index 0000000000..fe895f2c58 Binary files /dev/null and b/sdk/ftv2splitbar.png differ diff --git a/sdk/ftv2vertline.png b/sdk/ftv2vertline.png new file mode 100644 index 0000000000..63c605bb4c Binary files /dev/null and b/sdk/ftv2vertline.png differ diff --git a/sdk/functions.html b/sdk/functions.html new file mode 100644 index 0000000000..fae7817277 --- /dev/null +++ b/sdk/functions.html @@ -0,0 +1,220 @@ + + + + + + +DASH Media Packaging SDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- a -

+
+ + + + diff --git a/sdk/functions_b.html b/sdk/functions_b.html new file mode 100644 index 0000000000..525e48da31 --- /dev/null +++ b/sdk/functions_b.html @@ -0,0 +1,162 @@ + + + + + + +DASH Media Packaging SDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- b -

+
+ + + + diff --git a/sdk/functions_c.html b/sdk/functions_c.html new file mode 100644 index 0000000000..2746261211 --- /dev/null +++ b/sdk/functions_c.html @@ -0,0 +1,255 @@ + + + + + + +DASH Media Packaging SDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- c -

+
+ + + + diff --git a/sdk/functions_d.html b/sdk/functions_d.html new file mode 100644 index 0000000000..547f5e1c1a --- /dev/null +++ b/sdk/functions_d.html @@ -0,0 +1,156 @@ + + + + + + +DASH Media Packaging SDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- d -

+
+ + + + diff --git a/sdk/functions_e.html b/sdk/functions_e.html new file mode 100644 index 0000000000..6a088df478 --- /dev/null +++ b/sdk/functions_e.html @@ -0,0 +1,143 @@ + + + + + + +DASH Media Packaging SDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- e -

+
+ + + + diff --git a/sdk/functions_f.html b/sdk/functions_f.html new file mode 100644 index 0000000000..dfcd28aace --- /dev/null +++ b/sdk/functions_f.html @@ -0,0 +1,180 @@ + + + + + + +DASH Media Packaging SDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/sdk/functions_func.html b/sdk/functions_func.html new file mode 100644 index 0000000000..5807536248 --- /dev/null +++ b/sdk/functions_func.html @@ -0,0 +1,217 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- a -

+
+ + + + diff --git a/sdk/functions_func_b.html b/sdk/functions_func_b.html new file mode 100644 index 0000000000..171ca2694d --- /dev/null +++ b/sdk/functions_func_b.html @@ -0,0 +1,159 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- b -

+
+ + + + diff --git a/sdk/functions_func_c.html b/sdk/functions_func_c.html new file mode 100644 index 0000000000..f802e0159f --- /dev/null +++ b/sdk/functions_func_c.html @@ -0,0 +1,255 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- c -

+
+ + + + diff --git a/sdk/functions_func_d.html b/sdk/functions_func_d.html new file mode 100644 index 0000000000..f1a73be870 --- /dev/null +++ b/sdk/functions_func_d.html @@ -0,0 +1,156 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/sdk/functions_func_e.html b/sdk/functions_func_e.html new file mode 100644 index 0000000000..835443ef56 --- /dev/null +++ b/sdk/functions_func_e.html @@ -0,0 +1,143 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/sdk/functions_func_f.html b/sdk/functions_func_f.html new file mode 100644 index 0000000000..2d032d12e2 --- /dev/null +++ b/sdk/functions_func_f.html @@ -0,0 +1,174 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/sdk/functions_func_g.html b/sdk/functions_func_g.html new file mode 100644 index 0000000000..24dd20a170 --- /dev/null +++ b/sdk/functions_func_g.html @@ -0,0 +1,216 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- g -

+
+ + + + diff --git a/sdk/functions_func_h.html b/sdk/functions_func_h.html new file mode 100644 index 0000000000..fe401ae2b5 --- /dev/null +++ b/sdk/functions_func_h.html @@ -0,0 +1,144 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/sdk/functions_func_i.html b/sdk/functions_func_i.html new file mode 100644 index 0000000000..4c2a37e472 --- /dev/null +++ b/sdk/functions_func_i.html @@ -0,0 +1,192 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- i -

+
+ + + + diff --git a/sdk/functions_func_k.html b/sdk/functions_func_k.html new file mode 100644 index 0000000000..b0c2ba83df --- /dev/null +++ b/sdk/functions_func_k.html @@ -0,0 +1,135 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- k -

+
+ + + + diff --git a/sdk/functions_func_l.html b/sdk/functions_func_l.html new file mode 100644 index 0000000000..a061626868 --- /dev/null +++ b/sdk/functions_func_l.html @@ -0,0 +1,141 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/sdk/functions_func_m.html b/sdk/functions_func_m.html new file mode 100644 index 0000000000..33922860c5 --- /dev/null +++ b/sdk/functions_func_m.html @@ -0,0 +1,150 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- m -

+
+ + + + diff --git a/sdk/functions_func_n.html b/sdk/functions_func_n.html new file mode 100644 index 0000000000..085f57bc7e --- /dev/null +++ b/sdk/functions_func_n.html @@ -0,0 +1,160 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/sdk/functions_func_o.html b/sdk/functions_func_o.html new file mode 100644 index 0000000000..dcdfd122a8 --- /dev/null +++ b/sdk/functions_func_o.html @@ -0,0 +1,163 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/sdk/functions_func_p.html b/sdk/functions_func_p.html new file mode 100644 index 0000000000..3805494810 --- /dev/null +++ b/sdk/functions_func_p.html @@ -0,0 +1,191 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/sdk/functions_func_r.html b/sdk/functions_func_r.html new file mode 100644 index 0000000000..c8885f01ff --- /dev/null +++ b/sdk/functions_func_r.html @@ -0,0 +1,245 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- r -

+
+ + + + diff --git a/sdk/functions_func_s.html b/sdk/functions_func_s.html new file mode 100644 index 0000000000..fa9c721725 --- /dev/null +++ b/sdk/functions_func_s.html @@ -0,0 +1,254 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- s -

+
+ + + + diff --git a/sdk/functions_func_t.html b/sdk/functions_func_t.html new file mode 100644 index 0000000000..07815ee3bb --- /dev/null +++ b/sdk/functions_func_t.html @@ -0,0 +1,174 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/sdk/functions_func_u.html b/sdk/functions_func_u.html new file mode 100644 index 0000000000..13f175837a --- /dev/null +++ b/sdk/functions_func_u.html @@ -0,0 +1,152 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/sdk/functions_func_v.html b/sdk/functions_func_v.html new file mode 100644 index 0000000000..96431e2369 --- /dev/null +++ b/sdk/functions_func_v.html @@ -0,0 +1,141 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- v -

+
+ + + + diff --git a/sdk/functions_func_w.html b/sdk/functions_func_w.html new file mode 100644 index 0000000000..5c8f321f8f --- /dev/null +++ b/sdk/functions_func_w.html @@ -0,0 +1,155 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/sdk/functions_func_x.html b/sdk/functions_func_x.html new file mode 100644 index 0000000000..57252cbcfb --- /dev/null +++ b/sdk/functions_func_x.html @@ -0,0 +1,135 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- x -

+
+ + + + diff --git a/sdk/functions_func_~.html b/sdk/functions_func_~.html new file mode 100644 index 0000000000..b30ee9b1bc --- /dev/null +++ b/sdk/functions_func_~.html @@ -0,0 +1,138 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- ~ -

+
+ + + + diff --git a/sdk/functions_g.html b/sdk/functions_g.html new file mode 100644 index 0000000000..e44312293f --- /dev/null +++ b/sdk/functions_g.html @@ -0,0 +1,216 @@ + + + + + + +DASH Media Packaging SDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- g -

+
+ + + + diff --git a/sdk/functions_h.html b/sdk/functions_h.html new file mode 100644 index 0000000000..48802ec26d --- /dev/null +++ b/sdk/functions_h.html @@ -0,0 +1,144 @@ + + + + + + +DASH Media Packaging SDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- h -

+
+ + + + diff --git a/sdk/functions_i.html b/sdk/functions_i.html new file mode 100644 index 0000000000..6a648c52a1 --- /dev/null +++ b/sdk/functions_i.html @@ -0,0 +1,195 @@ + + + + + + +DASH Media Packaging SDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- i -

+
+ + + + diff --git a/sdk/functions_k.html b/sdk/functions_k.html new file mode 100644 index 0000000000..763031e4b5 --- /dev/null +++ b/sdk/functions_k.html @@ -0,0 +1,141 @@ + + + + + + +DASH Media Packaging SDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- k -

+
+ + + + diff --git a/sdk/functions_l.html b/sdk/functions_l.html new file mode 100644 index 0000000000..6419c050e0 --- /dev/null +++ b/sdk/functions_l.html @@ -0,0 +1,141 @@ + + + + + + +DASH Media Packaging SDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- l -

+
+ + + + diff --git a/sdk/functions_m.html b/sdk/functions_m.html new file mode 100644 index 0000000000..eb9539737a --- /dev/null +++ b/sdk/functions_m.html @@ -0,0 +1,150 @@ + + + + + + +DASH Media Packaging SDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- m -

+
+ + + + diff --git a/sdk/functions_n.html b/sdk/functions_n.html new file mode 100644 index 0000000000..0baeb6fd7f --- /dev/null +++ b/sdk/functions_n.html @@ -0,0 +1,166 @@ + + + + + + +DASH Media Packaging SDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/sdk/functions_o.html b/sdk/functions_o.html new file mode 100644 index 0000000000..287cbdadbe --- /dev/null +++ b/sdk/functions_o.html @@ -0,0 +1,166 @@ + + + + + + +DASH Media Packaging SDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/sdk/functions_p.html b/sdk/functions_p.html new file mode 100644 index 0000000000..9369b74d5c --- /dev/null +++ b/sdk/functions_p.html @@ -0,0 +1,191 @@ + + + + + + +DASH Media Packaging SDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- p -

+
+ + + + diff --git a/sdk/functions_r.html b/sdk/functions_r.html new file mode 100644 index 0000000000..8802b4abcb --- /dev/null +++ b/sdk/functions_r.html @@ -0,0 +1,245 @@ + + + + + + +DASH Media Packaging SDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- r -

+
+ + + + diff --git a/sdk/functions_s.html b/sdk/functions_s.html new file mode 100644 index 0000000000..a0e03abc7a --- /dev/null +++ b/sdk/functions_s.html @@ -0,0 +1,266 @@ + + + + + + +DASH Media Packaging SDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- s -

+
+ + + + diff --git a/sdk/functions_t.html b/sdk/functions_t.html new file mode 100644 index 0000000000..368283ed9b --- /dev/null +++ b/sdk/functions_t.html @@ -0,0 +1,177 @@ + + + + + + +DASH Media Packaging SDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/sdk/functions_type.html b/sdk/functions_type.html new file mode 100644 index 0000000000..672c4da785 --- /dev/null +++ b/sdk/functions_type.html @@ -0,0 +1,109 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Typedefs + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/sdk/functions_u.html b/sdk/functions_u.html new file mode 100644 index 0000000000..29d99d5149 --- /dev/null +++ b/sdk/functions_u.html @@ -0,0 +1,152 @@ + + + + + + +DASH Media Packaging SDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- u -

+
+ + + + diff --git a/sdk/functions_v.html b/sdk/functions_v.html new file mode 100644 index 0000000000..be3e68dfaf --- /dev/null +++ b/sdk/functions_v.html @@ -0,0 +1,141 @@ + + + + + + +DASH Media Packaging SDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- v -

+
+ + + + diff --git a/sdk/functions_vars.html b/sdk/functions_vars.html new file mode 100644 index 0000000000..82a779e325 --- /dev/null +++ b/sdk/functions_vars.html @@ -0,0 +1,142 @@ + + + + + + +DASH Media Packaging SDK: Class Members - Variables + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+
+ + + + diff --git a/sdk/functions_w.html b/sdk/functions_w.html new file mode 100644 index 0000000000..3788569415 --- /dev/null +++ b/sdk/functions_w.html @@ -0,0 +1,155 @@ + + + + + + +DASH Media Packaging SDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- w -

+
+ + + + diff --git a/sdk/functions_x.html b/sdk/functions_x.html new file mode 100644 index 0000000000..0f0586da3a --- /dev/null +++ b/sdk/functions_x.html @@ -0,0 +1,135 @@ + + + + + + +DASH Media Packaging SDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- x -

+
+ + + + diff --git a/sdk/functions_~.html b/sdk/functions_~.html new file mode 100644 index 0000000000..91f3b475d8 --- /dev/null +++ b/sdk/functions_~.html @@ -0,0 +1,138 @@ + + + + + + +DASH Media Packaging SDK: Class Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- ~ -

+
+ + + + diff --git a/sdk/hierarchy.html b/sdk/hierarchy.html new file mode 100644 index 0000000000..80f99ac9f3 --- /dev/null +++ b/sdk/hierarchy.html @@ -0,0 +1,286 @@ + + + + + + +DASH Media Packaging SDK: Class Hierarchy + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + +
+ + + + +
+ +
+ +
+
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 1234]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Cedash_packager::media::mp4::AACAudioSpecificConfig
 Cedash_packager::AdaptationSet
 Cedash_packager::media::mp2t::AdtsHeader
 Cedash_packager::media::AesCbcCtsDecryptor
 Cedash_packager::media::AesCbcCtsEncryptor
 Cedash_packager::media::AesCbcPkcs5Decryptor
 Cedash_packager::media::AesCbcPkcs5Encryptor
 Cedash_packager::media::AesCtrEncryptor
 Cedash_packager::media::AudioTimestampHelper
 CBandwidthEstimator
 Cedash_packager::media::BitReaderA class to read bit streams
 Cedash_packager::media::mp4::Box
 Cedash_packager::media::mp4::BoxBuffer
 Cedash_packager::media::BufferReader
 Cedash_packager::media::BufferWriter
 Cedash_packager::media::ByteQueue
 Cedash_packager::media::mp4::CencSampleEncryptionInfoEntry
 Cedash_packager::media::mp4::ChunkInfo
 Cedash_packager::media::mp4::ChunkInfoIterator
 Cedash_packager::media::mp4::CompositionOffset
 Cedash_packager::media::mp4::CompositionOffsetIterator
 Cedash_packager::ContentProtectionElement
 Cedash_packager::media::mp4::DecodingTime
 Cedash_packager::media::mp4::DecodingTimeIterator
 Cedash_packager::media::DecryptConfig
 Cedash_packager::media::DecryptorSourceDecryptorSource is responsible for decryption key acquisition
 Cedash_packager::media::Demuxer
 Cedash_packager::media::wvm::DemuxStreamIdMediaSample
 Cedash_packager::media::mp4::EditListEntry
 Cedash_packager::Element
 Cedash_packager::media::EncryptionKey
 Cedash_packager::media::mp4::ESDescriptor
 Cedash_packager::media::mp2t::EsParser
 Cedash_packager::media::FileDefine an abstract file interface
 Cedash_packager::media::FileCloser
 Cedash_packager::media::mp4::Fragmenter
 Cedash_packager::media::mp4::FrameCENCInfo
 Cedash_packager::media::H264BitReader
 Cedash_packager::media::H264ByteToUnitStreamConverter
 Cedash_packager::media::H264DecRefPicMarking
 Cedash_packager::media::H264ModificationOfPicNum
 Cedash_packager::media::H264NALU
 Cedash_packager::media::H264Parser
 Cedash_packager::media::H264PPS
 Cedash_packager::media::H264SEIMessage
 Cedash_packager::media::H264SEIRecoveryPoint
 Cedash_packager::media::H264SliceHeader
 Cedash_packager::media::H264SPS
 Cedash_packager::media::H264WeightingFactors
 Cedash_packager::media::IoCacheDeclaration of class which implements a thread-safe circular buffer
 Cedash_packager::media::KeyFetcherBase class for fetching keys from the license service
 Cedash_packager::media::KeySourceKeySource is responsible for encryption key acquisition
 Cedash_packager::media::LibcryptoThreadingConvenience class which initializes and terminates libcrypto threading
 Cedash_packager::media::mp4::MediaData
 Cedash_packager::media::MediaParser
 Cedash_packager::media::MediaStream
 Cedash_packager::MpdBuilderThis class generates DASH MPDs (Media Presentation Descriptions)
 Cedash_packager::MpdNotifier
 Cedash_packager::MpdNotifierFactory
 Cedash_packager::MpdOptionsDefines Mpd Options
 Cedash_packager::MpdWriter
 Cedash_packager::media::Muxer
 Cedash_packager::media::MuxerListener
 Cedash_packager::media::MuxerOptionsThis structure contains the list of configuration options for Muxer
 Cedash_packager::media::OffsetByteQueue
 Cedash_packager::media::OnMediaEndParameters
 Cedash_packager::media::wvm::PrevSampleData
 Cedash_packager::media::ProducerConsumerQueue< T >
 Cedash_packager::media::ProgressListenerThis class listens to progress updates events
 CRefCountedThreadSafe
 Cedash_packager::Representation
 Cedash_packager::RepresentationStateChangeListener
 Cedash_packager::media::RequestSignerAbstract class used for signature generation
 Cedash_packager::media::RsaPrivateKeyRsa private key, used for message signing and decryption
 Cedash_packager::media::RsaPublicKeyRsa public key, used for signature verification and encryption
 Cedash_packager::media::mp4::SampleToGroupEntry
 Cedash_packager::xml::ScopedXmlPtr< XmlType >Scoped_ptr for libxml2 resources
 Cedash_packager::xml::ScopedXmlPtr< xmlNode >
 Cedash_packager::media::mp4::Segmenter
 Cedash_packager::SegmentInfo
 Cedash_packager::media::mp4::SegmentReference
 CSimpleThread
 Cedash_packager::media::Status
 Cedash_packager::media::StreamDescriptor
 Cedash_packager::media::StreamDescriptorCompareFn
 Cedash_packager::media::SubsampleEntry
 Cedash_packager::media::mp4::SyncSampleIterator
 Cedash_packager::media::TextTrack
 Cedash_packager::media::mp4::TrackRunIterator
 Cedash_packager::media::mp2t::TsPacket
 Cedash_packager::media::mp2t::TsSection
 Cedash_packager::media::VideoStreamInfoParameters
 Cedash_packager::xml::XmlDeleter
 Cedash_packager::xml::XmlNode
+
+
+ + + + diff --git a/sdk/index.html b/sdk/index.html new file mode 100644 index 0000000000..d37925ae12 --- /dev/null +++ b/sdk/index.html @@ -0,0 +1,89 @@ + + + + + + +DASH Media Packaging SDK: Main Page + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + +
+ + + + +
+ +
+ +
+
+
DASH Media Packaging SDK Documentation
+
+
+
+ + + + diff --git a/sdk/jquery.js b/sdk/jquery.js new file mode 100644 index 0000000000..6aa2e4c22a --- /dev/null +++ b/sdk/jquery.js @@ -0,0 +1,39 @@ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType; +if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1 +},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av); +ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length; +if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b +})}})(window); +/*! + PowerTip - v1.2.0 - 2013-04-03 + http://stevenbenner.github.com/jquery-powertip/ + Copyright (c) 2013 Steven Benner (http://stevenbenner.com/). + Released under MIT license. + https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt +*/ +(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k("body");var n="displayController",e="hasActiveHover",d="forcedOpen",u="hasMouseMove",f="mouseOnToPopup",g="originalTitle",y="powertip",o="powertipjq",l="powertiptarget",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var p={none:0,top:1,bottom:2,left:4,right:8};k.fn.powerTip=function(F,N){if(!this.length){return this}if(k.type(F)==="string"&&k.powerTip[F]){return k.powerTip[F].call(this,this,N)}var O=k.extend({},k.fn.powerTip.defaults,F),G=new x(O);h();this.each(function M(){var R=k(this),Q=R.data(y),P=R.data(o),T=R.data(l),S;if(R.data(n)){k.powerTip.destroy(R)}S=R.attr("title");if(!Q&&!T&&!P&&S){R.data(y,S);R.data(g,S);R.removeAttr("title")}R.data(n,new t(R,O,G))});if(!O.manual){this.on({"mouseenter.powertip":function J(P){k.powerTip.show(this,P)},"mouseleave.powertip":function L(){k.powerTip.hide(this)},"focus.powertip":function K(){k.powerTip.show(this)},"blur.powertip":function H(){k.powerTip.hide(this,true)},"keydown.powertip":function I(P){if(P.keyCode===27){k.powerTip.hide(this,true)}}})}return this};k.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false};k.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};k.powerTip={show:function z(F,G){if(G){i(G);c.previousX=G.pageX;c.previousY=G.pageY;k(F).data(n).show()}else{k(F).first().data(n).show(true,true)}return F},reposition:function r(F){k(F).first().data(n).resetPosition();return F},hide:function D(G,F){if(G){k(G).first().data(n).hide(F)}else{if(c.activeHover){c.activeHover.data(n).hide(true)}}return G},destroy:function C(G){k(G).off(".powertip").each(function F(){var I=k(this),H=[g,n,e,d];if(I.data(g)){I.attr("title",I.data(g));H.push(y)}I.removeData(H)});return G}};k.powerTip.showTip=k.powerTip.show;k.powerTip.closeTip=k.powerTip.hide;function b(){var F=this;F.top="auto";F.left="auto";F.right="auto";F.bottom="auto";F.set=function(H,G){if(k.isNumeric(G)){F[H]=Math.round(G)}}}function t(K,N,F){var J=null;function L(P,Q){M();if(!K.data(e)){if(!P){c.tipOpenImminent=true;J=setTimeout(function O(){J=null;I()},N.intentPollInterval)}else{if(Q){K.data(d,true)}F.showTip(K)}}}function G(P){M();c.tipOpenImminent=false;if(K.data(e)){K.data(d,false);if(!P){c.delayInProgress=true;J=setTimeout(function O(){J=null;F.hideTip(K);c.delayInProgress=false},N.closeDelay)}else{F.hideTip(K)}}}function I(){var Q=Math.abs(c.previousX-c.currentX),O=Math.abs(c.previousY-c.currentY),P=Q+O;if(P",{id:Q.popupId});if(w.length===0){w=k("body")}w.append(O)}if(Q.followMouse){if(!O.data(u)){A.on("mousemove",M);s.on("scroll",M);O.data(u,true)}}if(Q.mouseOnToPopup){O.on({mouseenter:function L(){if(O.data(f)){if(c.activeHover){c.activeHover.data(n).cancel()}}},mouseleave:function N(){if(c.activeHover){c.activeHover.data(n).hide()}}})}function I(S){S.data(e,true);O.queue(function R(T){H(S);T()})}function H(S){var U;if(!S.data(e)){return}if(c.isTipOpen){if(!c.isClosing){K(c.activeHover)}O.delay(100).queue(function R(V){H(S);V()});return}S.trigger("powerTipPreRender");U=B(S);if(U){O.empty().append(U)}else{return}S.trigger("powerTipRender");c.activeHover=S;c.isTipOpen=true;O.data(f,Q.mouseOnToPopup);if(!Q.followMouse){G(S);c.isFixedTipOpen=true}else{M()}O.fadeIn(Q.fadeInTime,function T(){if(!c.desyncTimeout){c.desyncTimeout=setInterval(J,500)}S.trigger("powerTipOpen")})}function K(R){c.isClosing=true;c.activeHover=null;c.isTipOpen=false;c.desyncTimeout=clearInterval(c.desyncTimeout);R.data(e,false);R.data(d,false);O.fadeOut(Q.fadeOutTime,function S(){var T=new b();c.isClosing=false;c.isFixedTipOpen=false;O.removeClass();T.set("top",c.currentY+Q.offset);T.set("left",c.currentX+Q.offset);O.css(T);R.trigger("powerTipClose")})}function M(){if(!c.isFixedTipOpen&&(c.isTipOpen||(c.tipOpenImminent&&O.data(u)))){var R=O.outerWidth(),V=O.outerHeight(),U=new b(),S,T;U.set("top",c.currentY+Q.offset);U.set("left",c.currentX+Q.offset);S=m(U,R,V);if(S!==p.none){T=a(S);if(T===1){if(S===p.right){U.set("left",c.windowWidth-R)}else{if(S===p.bottom){U.set("top",c.scrollTop+c.windowHeight-V)}}}else{U.set("left",c.currentX-R-Q.offset);U.set("top",c.currentY-V-Q.offset)}}O.css(U)}}function G(S){var R,T;if(Q.smartPlacement){R=k.fn.powerTip.smartPlacementLists[Q.placement];k.each(R,function(U,W){var V=m(F(S,W),O.outerWidth(),O.outerHeight());T=W;if(V===p.none){return false}})}else{F(S,Q.placement);T=Q.placement}O.addClass(T)}function F(U,T){var R=0,S,W,V=new b();V.set("top",0);V.set("left",0);O.css(V);do{S=O.outerWidth();W=O.outerHeight();V=P.compute(U,T,S,W,Q.offset);O.css(V)}while(++R<=5&&(S!==O.outerWidth()||W!==O.outerHeight()));return V}function J(){var R=false;if(c.isTipOpen&&!c.isClosing&&!c.delayInProgress){if(c.activeHover.data(e)===false||c.activeHover.is(":disabled")){R=true}else{if(!v(c.activeHover)&&!c.activeHover.is(":focus")&&!c.activeHover.data(d)){if(O.data(f)){if(!v(O)){R=true}}else{R=true}}}if(R){K(c.activeHover)}}}this.showTip=I;this.hideTip=K;this.resetPosition=G}function q(F){return window.SVGElement&&F[0] instanceof SVGElement}function h(){if(!c.mouseTrackingActive){c.mouseTrackingActive=true;k(function H(){c.scrollLeft=s.scrollLeft();c.scrollTop=s.scrollTop();c.windowWidth=s.width();c.windowHeight=s.height()});A.on("mousemove",i);s.on({resize:function G(){c.windowWidth=s.width();c.windowHeight=s.height()},scroll:function F(){var I=s.scrollLeft(),J=s.scrollTop();if(I!==c.scrollLeft){c.currentX+=I-c.scrollLeft;c.scrollLeft=I}if(J!==c.scrollTop){c.currentY+=J-c.scrollTop;c.scrollTop=J}}})}}function i(F){c.currentX=F.pageX;c.currentY=F.pageY}function v(F){var H=F.offset(),J=F[0].getBoundingClientRect(),I=J.right-J.left,G=J.bottom-J.top;return c.currentX>=H.left&&c.currentX<=H.left+I&&c.currentY>=H.top&&c.currentY<=H.top+G}function B(I){var G=I.data(y),F=I.data(o),K=I.data(l),H,J;if(G){if(k.isFunction(G)){G=G.call(I[0])}J=G}else{if(F){if(k.isFunction(F)){F=F.call(I[0])}if(F.length>0){J=F.clone(true,true)}}else{if(K){H=k("#"+K);if(H.length>0){J=H.html()}}}}return J}function m(M,L,K){var G=c.scrollTop,J=c.scrollLeft,I=G+c.windowHeight,F=J+c.windowWidth,H=p.none;if(M.topI||Math.abs(M.bottom-c.windowHeight)>I){H|=p.bottom}if(M.leftF){H|=p.left}if(M.left+L>F||M.right + + + + + +DASH Media Packaging SDK: Namespace Members + + + + + + + + + +
+
+
+ + + + + +
+
DASH Media Packaging SDK +
+
+ + + + + + + + + + + + +
+ +
+ +
+
Here is a list of all documented namespace members with links to the namespaces they belong to:
+
+ + + + diff --git a/sdk/namespacemembers_func.html b/sdk/namespacemembers_func.html new file mode 100644 index 0000000000..332e9aa6d1 --- /dev/null +++ b/sdk/namespacemembers_func.html @@ -0,0 +1,132 @@ + + + + + + +DASH Media Packaging SDK: Namespace Members + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+
+ + + + diff --git a/sdk/namespaces.html b/sdk/namespaces.html new file mode 100644 index 0000000000..0ddcb8c6f2 --- /dev/null +++ b/sdk/namespaces.html @@ -0,0 +1,100 @@ + + + + + + +DASH Media Packaging SDK: Namespace List + + + + + + + + + +
+
+ + + + + + +
+
DASH Media Packaging SDK +
+
+
+ + + + + +
+ + + + +
+ +
+ +
+
+
Namespace List
+
+
+
Here is a list of all documented namespaces with brief descriptions:
+ + +
 Nedash_packager
+
+
+ + + + diff --git a/sdk/nav_f.png b/sdk/nav_f.png new file mode 100644 index 0000000000..72a58a529e Binary files /dev/null and b/sdk/nav_f.png differ diff --git a/sdk/nav_g.png b/sdk/nav_g.png new file mode 100644 index 0000000000..2093a237a9 Binary files /dev/null and b/sdk/nav_g.png differ diff --git a/sdk/nav_h.png b/sdk/nav_h.png new file mode 100644 index 0000000000..33389b101d Binary files /dev/null and b/sdk/nav_h.png differ diff --git a/sdk/open.png b/sdk/open.png new file mode 100644 index 0000000000..30f75c7efe Binary files /dev/null and b/sdk/open.png differ diff --git a/sdk/search/all_0.html b/sdk/search/all_0.html new file mode 100644 index 0000000000..17b6da85df --- /dev/null +++ b/sdk/search/all_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/all_0.js b/sdk/search/all_0.js new file mode 100644 index 0000000000..3417657c00 --- /dev/null +++ b/sdk/search/all_0.js @@ -0,0 +1,44 @@ +var searchData= +[ + ['aacaudiospecificconfig',['AACAudioSpecificConfig',['../dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html',1,'edash_packager::media::mp4']]], + ['adaptationset',['AdaptationSet',['../db/de4/classedash__packager_1_1AdaptationSet.html',1,'edash_packager']]], + ['adaptationset',['AdaptationSet',['../db/de4/classedash__packager_1_1AdaptationSet.html#a21ce7ce804532a95f9aea7e2a9c3570e',1,'edash_packager::AdaptationSet']]], + ['adaptationsetxmlnode',['AdaptationSetXmlNode',['../d6/d37/classedash__packager_1_1xml_1_1AdaptationSetXmlNode.html',1,'edash_packager::xml']]], + ['addadaptationset',['AddAdaptationSet',['../d3/dfa/classedash__packager_1_1MpdBuilder.html#a301a9b49e15371117e2c050c4e5b038c',1,'edash_packager::MpdBuilder']]], + ['addaudioinfo',['AddAudioInfo',['../dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.html#a1a3d8d8831e19ae010841704c07238c6',1,'edash_packager::xml::RepresentationXmlNode']]], + ['addbaseurl',['AddBaseUrl',['../d3/dfa/classedash__packager_1_1MpdBuilder.html#a5318f500aa6a5b3db7b7925c08d78d91',1,'edash_packager::MpdBuilder']]], + ['addchild',['AddChild',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html#ab823db3ce661b4a967574f1534fc5b95',1,'edash_packager::xml::XmlNode']]], + ['addcontentprotectionelement',['AddContentProtectionElement',['../da/d49/classedash__packager_1_1DashIopMpdNotifier.html#aea9b720de64f38256aeb3cce3ef67ae5',1,'edash_packager::DashIopMpdNotifier::AddContentProtectionElement()'],['../db/de4/classedash__packager_1_1AdaptationSet.html#a419e5b2dc27fef47fb0fcaa17ea09314',1,'edash_packager::AdaptationSet::AddContentProtectionElement()'],['../d7/d15/classedash__packager_1_1Representation.html#a8cb3729f52457e7df08cd05b8f19090e',1,'edash_packager::Representation::AddContentProtectionElement()'],['../da/d38/classedash__packager_1_1MpdNotifier.html#a56969f6d7c09e0aa131ba01d5c880773',1,'edash_packager::MpdNotifier::AddContentProtectionElement()'],['../db/d56/classedash__packager_1_1SimpleMpdNotifier.html#a0fd697605b3ff2ffdb8c892af2fc2e0d',1,'edash_packager::SimpleMpdNotifier::AddContentProtectionElement()']]], + ['addcontentprotectionelements',['AddContentProtectionElements',['../db/d09/namespaceedash__packager.html#a6f62cefcc7cf1a95f19bbea3b310fbab',1,'edash_packager::AddContentProtectionElements(const MediaInfo &media_info, Representation *parent)'],['../db/d09/namespaceedash__packager.html#a63896c3ea3c207506f18095624f2ed84',1,'edash_packager::AddContentProtectionElements(const MediaInfo &media_info, AdaptationSet *parent)']]], + ['addelements',['AddElements',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html#a9d6fa2317a063fb69cfa00c0d5ff3ec7',1,'edash_packager::xml::XmlNode']]], + ['addliveonlyinfo',['AddLiveOnlyInfo',['../dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.html#aef4b41002294b95cba4ed9b2fbb536d6',1,'edash_packager::xml::RepresentationXmlNode']]], + ['addnewsegment',['AddNewSegment',['../d7/d15/classedash__packager_1_1Representation.html#ad40b7da1667aeb77c84958ec4ec0d9eb',1,'edash_packager::Representation']]], + ['addrepresentation',['AddRepresentation',['../db/de4/classedash__packager_1_1AdaptationSet.html#a9a15647b565f9898a5a0e1d3176ff935',1,'edash_packager::AdaptationSet']]], + ['addrole',['AddRole',['../db/de4/classedash__packager_1_1AdaptationSet.html#a3bfc3e2de3eaafc61a4dc2e23c698956',1,'edash_packager::AdaptationSet']]], + ['addroleelement',['AddRoleElement',['../d6/d37/classedash__packager_1_1xml_1_1AdaptationSetXmlNode.html#a40c48f2ed2ac0f550bf019d7e650be94',1,'edash_packager::xml::AdaptationSetXmlNode']]], + ['addsample',['AddSample',['../d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html#a825b7ca051f38ad14f4c6c6241ae443a',1,'edash_packager::media::mp4::EncryptingFragmenter::AddSample()'],['../db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html#a81d8b1f324bdd2bc9cc2e5a469243926',1,'edash_packager::media::mp4::Fragmenter::AddSample()'],['../dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html#a5c21059ee9a533caec81491bdb751c57',1,'edash_packager::media::mp4::Segmenter::AddSample()']]], + ['addstream',['AddStream',['../d4/d1d/classedash__packager_1_1media_1_1Muxer.html#a77c7a214383f64f822d479d226750bf5',1,'edash_packager::media::Muxer']]], + ['addvideoinfo',['AddVideoInfo',['../dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.html#a2b00f576154e002f067849129cff4c4a',1,'edash_packager::xml::RepresentationXmlNode']]], + ['addvodonlyinfo',['AddVODOnlyInfo',['../dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.html#a2afa0f4b92900936e2eb97a218d119a2',1,'edash_packager::xml::RepresentationXmlNode']]], + ['adtsheader',['AdtsHeader',['../db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html',1,'edash_packager::media::mp2t']]], + ['advancechunk',['AdvanceChunk',['../d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html#a9472a31149417750f39cd3aa78ab2562',1,'edash_packager::media::mp4::ChunkInfoIterator']]], + ['advancerun',['AdvanceRun',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#a73b4ffaf8c1bba665c475729c2c9e22f',1,'edash_packager::media::mp4::TrackRunIterator']]], + ['advancesample',['AdvanceSample',['../d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html#abef0d18263efb1ae8b601a88e05fd6cc',1,'edash_packager::media::mp4::ChunkInfoIterator::AdvanceSample()'],['../d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html#a545c773305ae13ef89ab1cef3a7fc1e6',1,'edash_packager::media::mp4::CompositionOffsetIterator::AdvanceSample()'],['../d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html#a147cf702aaaef56bce32ca91c45bc071',1,'edash_packager::media::mp4::DecodingTimeIterator::AdvanceSample()'],['../db/d01/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator.html#af185ed71d28bfb56940821165e4cbef4',1,'edash_packager::media::mp4::SyncSampleIterator::AdvanceSample()'],['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#a0414b608c3dbfb42074fd0d18a792b6c',1,'edash_packager::media::mp4::TrackRunIterator::AdvanceSample()']]], + ['aescbcctsdecryptor',['AesCbcCtsDecryptor',['../dd/d96/classedash__packager_1_1media_1_1AesCbcCtsDecryptor.html',1,'edash_packager::media']]], + ['aescbcctsencryptor',['AesCbcCtsEncryptor',['../d6/da2/classedash__packager_1_1media_1_1AesCbcCtsEncryptor.html',1,'edash_packager::media']]], + ['aescbcpkcs5decryptor',['AesCbcPkcs5Decryptor',['../db/dfe/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor.html',1,'edash_packager::media']]], + ['aescbcpkcs5encryptor',['AesCbcPkcs5Encryptor',['../d6/dc4/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor.html',1,'edash_packager::media']]], + ['aesctrencryptor',['AesCtrEncryptor',['../dd/d79/classedash__packager_1_1media_1_1AesCtrEncryptor.html',1,'edash_packager::media']]], + ['aesrequestsigner',['AesRequestSigner',['../d8/dcc/classedash__packager_1_1media_1_1AesRequestSigner.html',1,'edash_packager::media']]], + ['appendint',['AppendInt',['../df/dde/classedash__packager_1_1media_1_1BufferWriter.html#afd1449487750c41331a2d91ac417f115',1,'edash_packager::media::BufferWriter']]], + ['appendnbytes',['AppendNBytes',['../df/dde/classedash__packager_1_1media_1_1BufferWriter.html#ac929211fc97bc8ec880109775757bb81',1,'edash_packager::media::BufferWriter']]], + ['atom_5fsize',['atom_size',['../d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html#a767571cecbc37bedb05d1ea84716a005',1,'edash_packager::media::mp4::Box']]], + ['audio_5fdescription',['audio_description',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#a2c58182a77817e4ed4a2860ae3be73df',1,'edash_packager::media::mp4::TrackRunIterator']]], + ['audio_5fobject_5ftype',['audio_object_type',['../dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html#a12bcda441f7745bd70cb9b4fdfb4b9b5',1,'edash_packager::media::mp4::AACAudioSpecificConfig']]], + ['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']]], + ['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']]] +]; diff --git a/sdk/search/all_1.html b/sdk/search/all_1.html new file mode 100644 index 0000000000..e2906449f2 --- /dev/null +++ b/sdk/search/all_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/all_1.js b/sdk/search/all_1.js new file mode 100644 index 0000000000..60fb60d7e0 --- /dev/null +++ b/sdk/search/all_1.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['bandwidth',['bandwidth',['../de/d57/structedash__packager_1_1media_1_1MuxerOptions.html#a94fa00f788f9c39cba593004a1cd8849',1,'edash_packager::media::MuxerOptions']]], + ['bandwidthestimator',['BandwidthEstimator',['../d2/d6f/classBandwidthEstimator.html',1,'BandwidthEstimator'],['../d2/d6f/classBandwidthEstimator.html#aaae9573785ee9d62e0927f806537ea97',1,'BandwidthEstimator::BandwidthEstimator()']]], + ['bitreader',['BitReader',['../df/db4/classedash__packager_1_1media_1_1BitReader.html',1,'edash_packager::media']]], + ['bitreader',['BitReader',['../df/db4/classedash__packager_1_1media_1_1BitReader.html#a7cfecfaf6169a0c9286d62b24e7b934e',1,'edash_packager::media::BitReader']]], + ['bits_5favailable',['bits_available',['../df/db4/classedash__packager_1_1media_1_1BitReader.html#a1409a0968749ca5a55ba823cd718065b',1,'edash_packager::media::BitReader']]], + ['box',['Box',['../d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html',1,'edash_packager::media::mp4']]], + ['boxbuffer',['BoxBuffer',['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html',1,'edash_packager::media::mp4']]], + ['boxbuffer',['BoxBuffer',['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#aa1144b8d6912a983d65ff97f44ffeb51',1,'edash_packager::media::mp4::BoxBuffer::BoxBuffer(BoxReader *reader)'],['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#a1ecfb419ea348ad684bf3c1556d1570c',1,'edash_packager::media::mp4::BoxBuffer::BoxBuffer(BufferWriter *writer)']]], + ['boxreader',['BoxReader',['../db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html',1,'edash_packager::media::mp4']]], + ['buffer',['Buffer',['../df/dde/classedash__packager_1_1media_1_1BufferWriter.html#a8849c495e9e5cb0c33d7633fecbe0643',1,'edash_packager::media::BufferWriter']]], + ['bufferreader',['BufferReader',['../d9/d46/classedash__packager_1_1media_1_1BufferReader.html',1,'edash_packager::media']]], + ['bufferreader',['BufferReader',['../d9/d46/classedash__packager_1_1media_1_1BufferReader.html#a7354b7da262fd2cd4680346d4ae871d8',1,'edash_packager::media::BufferReader']]], + ['bufferwriter',['BufferWriter',['../df/dde/classedash__packager_1_1media_1_1BufferWriter.html',1,'edash_packager::media']]], + ['bufferwriter',['BufferWriter',['../df/dde/classedash__packager_1_1media_1_1BufferWriter.html#abffefbaff39469927deaaa97fec636a4',1,'edash_packager::media::BufferWriter']]], + ['bytequeue',['ByteQueue',['../d8/d2e/classedash__packager_1_1media_1_1ByteQueue.html',1,'edash_packager::media']]], + ['bytescached',['BytesCached',['../d3/d6b/classedash__packager_1_1media_1_1IoCache.html#a0fe59125434e46c2ea5474cfc9f0e95c',1,'edash_packager::media::IoCache']]], + ['bytesfree',['BytesFree',['../d3/d6b/classedash__packager_1_1media_1_1IoCache.html#ab5f7b9c5bc61e33f91cef7726f222586',1,'edash_packager::media::IoCache']]] +]; diff --git a/sdk/search/all_10.html b/sdk/search/all_10.html new file mode 100644 index 0000000000..c55c8367e4 --- /dev/null +++ b/sdk/search/all_10.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/all_10.js b/sdk/search/all_10.js new file mode 100644 index 0000000000..e5741bc331 --- /dev/null +++ b/sdk/search/all_10.js @@ -0,0 +1,71 @@ +var searchData= +[ + ['sample_5fdelta',['sample_delta',['../d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html#ab7b1c20038d9bb2912cf2cf403d46a92',1,'edash_packager::media::mp4::DecodingTimeIterator']]], + ['sample_5fdescription_5findex',['sample_description_index',['../d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html#ac45e00a98de1ea01bd8c41a9f02fdfbe',1,'edash_packager::media::mp4::ChunkInfoIterator']]], + ['sample_5fduration',['sample_duration',['../dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html#ac2883a5eb0bd7abb50bc3968ac417901',1,'edash_packager::media::mp4::Segmenter']]], + ['sample_5foffset',['sample_offset',['../d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html#a9abe77c82033bb5db017dc889f17b974',1,'edash_packager::media::mp4::CompositionOffsetIterator']]], + ['sampleauxiliaryinformationoffset',['SampleAuxiliaryInformationOffset',['../de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html',1,'edash_packager::media::mp4']]], + ['sampleauxiliaryinformationsize',['SampleAuxiliaryInformationSize',['../d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html',1,'edash_packager::media::mp4']]], + ['sampledescription',['SampleDescription',['../d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html',1,'edash_packager::media::mp4']]], + ['samplegroupdescription',['SampleGroupDescription',['../d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html',1,'edash_packager::media::mp4']]], + ['sampleoffset',['SampleOffset',['../d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html#afa796801fb0e716b82cb7d708d1db871',1,'edash_packager::media::mp4::CompositionOffsetIterator']]], + ['samples_5fper_5fchunk',['samples_per_chunk',['../d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html#a57bb736f64a9ab08b1f1957bedf621b6',1,'edash_packager::media::mp4::ChunkInfoIterator']]], + ['samplesize',['SampleSize',['../d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html',1,'edash_packager::media::mp4']]], + ['sampletable',['SampleTable',['../d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html',1,'edash_packager::media::mp4']]], + ['sampletochunk',['SampleToChunk',['../df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html',1,'edash_packager::media::mp4']]], + ['sampletogroup',['SampleToGroup',['../d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html',1,'edash_packager::media::mp4']]], + ['sampletogroupentry',['SampleToGroupEntry',['../dd/dab/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry.html',1,'edash_packager::media::mp4']]], + ['scanchildren',['ScanChildren',['../db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html#a6c660acb6864f70ee1125c3f4c809e02',1,'edash_packager::media::mp4::BoxReader']]], + ['schemeinfo',['SchemeInfo',['../d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html',1,'edash_packager::media::mp4']]], + ['schemetype',['SchemeType',['../d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html',1,'edash_packager::media::mp4']]], + ['scopedxmlptr',['ScopedXmlPtr',['../d8/df3/structedash__packager_1_1xml_1_1ScopedXmlPtr.html',1,'edash_packager::xml']]], + ['scopedxmlptr_3c_20xmlnode_20_3e',['ScopedXmlPtr< xmlNode >',['../d8/df3/structedash__packager_1_1xml_1_1ScopedXmlPtr.html',1,'edash_packager::xml']]], + ['seek',['Seek',['../de/d19/classedash__packager_1_1media_1_1File.html#a28da55565be854b866bf223aa4232042',1,'edash_packager::media::File::Seek()'],['../dd/d98/classedash__packager_1_1media_1_1LocalFile.html#a824c0538b239159c611d8e9eddc59e2d',1,'edash_packager::media::LocalFile::Seek()'],['../dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html#a8779e872a7e9f3f7a060b40e0b1b3049',1,'edash_packager::media::ThreadedIoFile::Seek()'],['../d8/dc7/classedash__packager_1_1media_1_1UdpFile.html#ae4420b53b065a3f11e73f4ae77567087',1,'edash_packager::media::UdpFile::Seek()']]], + ['segment_5fduration',['segment_duration',['../de/d57/structedash__packager_1_1media_1_1MuxerOptions.html#ad6f281dfd832bd073f5fb5fc46342f9f',1,'edash_packager::media::MuxerOptions']]], + ['segment_5fsap_5faligned',['segment_sap_aligned',['../de/d57/structedash__packager_1_1media_1_1MuxerOptions.html#af0403298bf08392bb3009061cd8de2b0',1,'edash_packager::media::MuxerOptions']]], + ['segment_5ftemplate',['segment_template',['../de/d57/structedash__packager_1_1media_1_1MuxerOptions.html#a1303b2f8efb19af4728513ba2eeea2d1',1,'edash_packager::media::MuxerOptions']]], + ['segmenter',['Segmenter',['../dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html',1,'edash_packager::media::mp4']]], + ['segmentindex',['SegmentIndex',['../d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html',1,'edash_packager::media::mp4']]], + ['segmentinfo',['SegmentInfo',['../d9/d9b/structedash__packager_1_1SegmentInfo.html',1,'edash_packager']]], + ['segmentreference',['SegmentReference',['../d4/dce/structedash__packager_1_1media_1_1mp4_1_1SegmentReference.html',1,'edash_packager::media::mp4']]], + ['segmenttype',['SegmentType',['../dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html',1,'edash_packager::media::mp4']]], + ['set_5fclock',['set_clock',['../d4/d1d/classedash__packager_1_1media_1_1Muxer.html#ae22512b48793cb5c91186bc698966bfa',1,'edash_packager::media::Muxer']]], + ['set_5fkey_5ffetcher',['set_key_fetcher',['../db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html#ab483fd321e0f8681c232ac4fbaacb00c',1,'edash_packager::media::WidevineKeySource']]], + ['set_5fsigner',['set_signer',['../db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html#a60554ce4bf32572d8be08d2bc4c63a9b',1,'edash_packager::media::WidevineKeySource']]], + ['setcomplete',['SetComplete',['../dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html#a4e58a007d4daafe1b49a70d39e52e339',1,'edash_packager::media::mp4::Segmenter']]], + ['setcontent',['SetContent',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html#a6eee68b8b44c092e0d923593bb1001d6',1,'edash_packager::xml::XmlNode']]], + ['setcontentprotectionschemeiduri',['SetContentProtectionSchemeIdUri',['../d3/d0e/classedash__packager_1_1media_1_1MpdNotifyMuxerListener.html#a4af24c3e145e7219b27de3bf9623a073',1,'edash_packager::media::MpdNotifyMuxerListener::SetContentProtectionSchemeIdUri()'],['../d9/db4/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener.html#abd5d22401650155842d519bcd17cec5d',1,'edash_packager::media::VodMediaInfoDumpMuxerListener::SetContentProtectionSchemeIdUri()']]], + ['seterror',['SetError',['../d2/d90/classedash__packager_1_1media_1_1Status.html#a9df7f5c60dbb8c1269f499d0cba5bcf5',1,'edash_packager::media::Status']]], + ['setfloatingpointattribute',['SetFloatingPointAttribute',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html#af401948a6377cb12a37afca016f1a733',1,'edash_packager::xml::XmlNode']]], + ['setgroup',['SetGroup',['../db/de4/classedash__packager_1_1AdaptationSet.html#a3bea0954dfe1781afc1c7a624965bc84',1,'edash_packager::AdaptationSet']]], + ['setid',['SetId',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html#ab2ce769958718ef73a580e87e296a470',1,'edash_packager::xml::XmlNode']]], + ['setintegerattribute',['SetIntegerAttribute',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html#a54d635320973dec76f63cf696db3cf2a',1,'edash_packager::xml::XmlNode']]], + ['setiv',['SetIv',['../dd/d79/classedash__packager_1_1media_1_1AesCtrEncryptor.html#a9c68238a73c834fd795d3e4d5e8cfd10',1,'edash_packager::media::AesCtrEncryptor::SetIv()'],['../d6/dc4/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor.html#aca87525a4f8b27efc3e6eefcbe26f55f',1,'edash_packager::media::AesCbcPkcs5Encryptor::SetIv()'],['../db/dfe/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor.html#a0944b9d110e89fa9d63b03060059954e',1,'edash_packager::media::AesCbcPkcs5Decryptor::SetIv()'],['../d6/da2/classedash__packager_1_1media_1_1AesCbcCtsEncryptor.html#a797a78aad46c2b148398c6d15f2b39e3',1,'edash_packager::media::AesCbcCtsEncryptor::SetIv()'],['../dd/d96/classedash__packager_1_1media_1_1AesCbcCtsDecryptor.html#abcb9af2123d5ae47b2c89cf3feb67e06',1,'edash_packager::media::AesCbcCtsDecryptor::SetIv()']]], + ['setkeysource',['SetKeySource',['../d5/dce/classedash__packager_1_1media_1_1Demuxer.html#aec6a0b843399e2bf752e6fe1f56f02ee',1,'edash_packager::media::Demuxer::SetKeySource()'],['../d4/d1d/classedash__packager_1_1media_1_1Muxer.html#a5452ae82c2f8a0df8f855fc35e717f04',1,'edash_packager::media::Muxer::SetKeySource()']]], + ['setmuxerlistener',['SetMuxerListener',['../d4/d1d/classedash__packager_1_1media_1_1Muxer.html#aa8ea4384b819187c51f67ad901aca148',1,'edash_packager::media::Muxer']]], + ['setprogresslistener',['SetProgressListener',['../d4/d1d/classedash__packager_1_1media_1_1Muxer.html#a04959bfe66cdb16053326938df9d445a',1,'edash_packager::media::Muxer']]], + ['setsampleduration',['SetSampleDuration',['../d7/d15/classedash__packager_1_1Representation.html#a4a81a2db7ec245892334ad927621909c',1,'edash_packager::Representation']]], + ['setstringattribute',['SetStringAttribute',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html#a13806def844e3fd8e8cc0e690f292aab',1,'edash_packager::xml::XmlNode']]], + ['simplempdnotifier',['SimpleMpdNotifier',['../db/d56/classedash__packager_1_1SimpleMpdNotifier.html',1,'edash_packager']]], + ['single_5fsegment',['single_segment',['../de/d57/structedash__packager_1_1media_1_1MuxerOptions.html#a7542af69b834f3a72e5c5b25f4f0f474',1,'edash_packager::media::MuxerOptions']]], + ['singlesegmentsegmenter',['SingleSegmentSegmenter',['../da/d75/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html',1,'edash_packager::media::mp4']]], + ['size',['Size',['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html#aa502e5cfc6159ded7abb3672cdab8cd5',1,'edash_packager::media::ProducerConsumerQueue::Size()'],['../de/d19/classedash__packager_1_1media_1_1File.html#a1bb2a295cb69b3e51b9cc14969848632',1,'edash_packager::media::File::Size()'],['../dd/d98/classedash__packager_1_1media_1_1LocalFile.html#a8be2c9f77a073682d8ebc6808a2bfa94',1,'edash_packager::media::LocalFile::Size()'],['../dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html#a9724a923f813e99f223d52ddf8e65556',1,'edash_packager::media::ThreadedIoFile::Size()'],['../d8/dc7/classedash__packager_1_1media_1_1UdpFile.html#acd47dd4e3169ee396b721d0c0e00b7dd',1,'edash_packager::media::UdpFile::Size()'],['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#aef7267aa7963866d3dcef4f051f84674',1,'edash_packager::media::mp4::BoxBuffer::Size()']]], + ['skipbits',['SkipBits',['../df/db4/classedash__packager_1_1media_1_1BitReader.html#acacb97d71aaae01796b90d27e7cdca0a',1,'edash_packager::media::BitReader']]], + ['skipbytes',['SkipBytes',['../d9/d46/classedash__packager_1_1media_1_1BufferReader.html#a2b7075e5a47a823b9f66c0ba702f26bf',1,'edash_packager::media::BufferReader']]], + ['soundmediaheader',['SoundMediaHeader',['../da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html',1,'edash_packager::media::mp4']]], + ['start',['Start',['../d2/dfd/classedash__packager_1_1media_1_1MediaStream.html#aaf43ae1836aadcc912298c30bc71838a',1,'edash_packager::media::MediaStream']]], + ['starttoplevelbox',['StartTopLevelBox',['../db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html#a61fc23759071d1445b81cbcc9564c6a4',1,'edash_packager::media::mp4::BoxReader']]], + ['status',['Status',['../d2/d90/classedash__packager_1_1media_1_1Status.html#ab3b32018b2666a73432b860ed27ec4e2',1,'edash_packager::media::Status::Status()'],['../d2/d90/classedash__packager_1_1media_1_1Status.html#a9688991aab3f7b1db8acc5341b81d160',1,'edash_packager::media::Status::Status(error::Code error_code, const std::string &error_message)']]], + ['status',['Status',['../d2/d90/classedash__packager_1_1media_1_1Status.html',1,'edash_packager::media']]], + ['stop',['Stop',['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html#a04f78e0c31398c66f19a24e6a563436b',1,'edash_packager::media::ProducerConsumerQueue']]], + ['stopped',['Stopped',['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html#ad36a861f53f0b58d398a14ce2d93d793',1,'edash_packager::media::ProducerConsumerQueue']]], + ['streamdescriptor',['StreamDescriptor',['../de/d1f/structedash__packager_1_1media_1_1StreamDescriptor.html',1,'edash_packager::media']]], + ['streamdescriptorcomparefn',['StreamDescriptorCompareFn',['../da/d7d/classedash__packager_1_1media_1_1StreamDescriptorCompareFn.html',1,'edash_packager::media']]], + ['streaminfo',['StreamInfo',['../d6/d06/classedash__packager_1_1media_1_1StreamInfo.html',1,'edash_packager::media']]], + ['streams',['streams',['../d5/dce/classedash__packager_1_1media_1_1Demuxer.html#ae8182d61264096c811f457f50009fe3d',1,'edash_packager::media::Demuxer']]], + ['subsampleentry',['SubsampleEntry',['../d4/de4/structedash__packager_1_1media_1_1SubsampleEntry.html',1,'edash_packager::media']]], + ['syncsample',['SyncSample',['../d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html',1,'edash_packager::media::mp4']]], + ['syncsampleiterator',['SyncSampleIterator',['../db/d01/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator.html#aa96fc4d3705ea3e25b97266675aa9e01',1,'edash_packager::media::mp4::SyncSampleIterator']]], + ['syncsampleiterator',['SyncSampleIterator',['../db/d01/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator.html',1,'edash_packager::media::mp4']]], + ['systemname',['SystemName',['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#aa73dacef997e7700b8669bb2db5f8f31',1,'edash_packager::media::KeySource']]] +]; diff --git a/sdk/search/all_11.html b/sdk/search/all_11.html new file mode 100644 index 0000000000..6f3943a941 --- /dev/null +++ b/sdk/search/all_11.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/all_11.js b/sdk/search/all_11.js new file mode 100644 index 0000000000..e375f19782 --- /dev/null +++ b/sdk/search/all_11.js @@ -0,0 +1,32 @@ +var searchData= +[ + ['tail',['tail',['../d1/d92/classedash__packager_1_1media_1_1OffsetByteQueue.html#add7aef56ce4f162c047ad7fcf64cf603',1,'edash_packager::media::OffsetByteQueue']]], + ['tailpos',['TailPos',['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html#a860bb54f9c53a25c27b1510b0e21eac9',1,'edash_packager::media::ProducerConsumerQueue']]], + ['tell',['Tell',['../de/d19/classedash__packager_1_1media_1_1File.html#a19409dd7d63022f34aee85640460428e',1,'edash_packager::media::File::Tell()'],['../dd/d98/classedash__packager_1_1media_1_1LocalFile.html#abc713b14716779b3320b69c528fbaaa8',1,'edash_packager::media::LocalFile::Tell()'],['../dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html#a8f460efd19e204bcb04c1feb808ac0cc',1,'edash_packager::media::ThreadedIoFile::Tell()'],['../d8/dc7/classedash__packager_1_1media_1_1UdpFile.html#aeef553c179ac9a645ff766ac03ce71d6',1,'edash_packager::media::UdpFile::Tell()']]], + ['temp_5fdir',['temp_dir',['../de/d57/structedash__packager_1_1media_1_1MuxerOptions.html#a014464b78ba37f978da8290db2f2414e',1,'edash_packager::media::MuxerOptions']]], + ['texttrack',['TextTrack',['../de/d9e/classedash__packager_1_1media_1_1TextTrack.html',1,'edash_packager::media']]], + ['threadediofile',['ThreadedIoFile',['../dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html',1,'edash_packager::media']]], + ['tostring',['ToString',['../da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html#af7d609b21b4ef1a537ceea7511133e1a',1,'edash_packager::media::AudioStreamInfo::ToString()'],['../d8/d6c/classedash__packager_1_1media_1_1MediaSample.html#ad68efaffb542c373364794d1c17e3b8c',1,'edash_packager::media::MediaSample::ToString()'],['../d2/dfd/classedash__packager_1_1media_1_1MediaStream.html#af731dd749053f9650ee8dd2800338750',1,'edash_packager::media::MediaStream::ToString()'],['../d2/d90/classedash__packager_1_1media_1_1Status.html#a590cad3d305a36c1cf05e6770b728187',1,'edash_packager::media::Status::ToString()'],['../d6/d06/classedash__packager_1_1media_1_1StreamInfo.html#ac09810e16cf5cee2f87987bfcc70fece',1,'edash_packager::media::StreamInfo::ToString()'],['../d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html#a6301e6683e6c457e1155d0b1f6dd3baf',1,'edash_packager::media::VideoStreamInfo::ToString()'],['../d3/dfa/classedash__packager_1_1MpdBuilder.html#a1c0fd80514f6f1d90f70bb9e96e744a1',1,'edash_packager::MpdBuilder::ToString()']]], + ['track',['Track',['../d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html',1,'edash_packager::media::mp4']]], + ['trackencryption',['TrackEncryption',['../de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html',1,'edash_packager::media::mp4']]], + ['trackextends',['TrackExtends',['../d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html',1,'edash_packager::media::mp4']]], + ['trackfragment',['TrackFragment',['../d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html',1,'edash_packager::media::mp4']]], + ['trackfragmentdecodetime',['TrackFragmentDecodeTime',['../d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html',1,'edash_packager::media::mp4']]], + ['trackfragmentheader',['TrackFragmentHeader',['../d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html',1,'edash_packager::media::mp4']]], + ['trackfragmentrun',['TrackFragmentRun',['../df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html',1,'edash_packager::media::mp4']]], + ['trackheader',['TrackHeader',['../dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html',1,'edash_packager::media::mp4']]], + ['trackruniterator',['TrackRunIterator',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html',1,'edash_packager::media::mp4']]], + ['trackruniterator',['TrackRunIterator',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#a2cfa01eaed61581122199666536c4bed',1,'edash_packager::media::mp4::TrackRunIterator']]], + ['tracktypetostring',['TrackTypeToString',['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#a8bab239dd17b01ed607c483c536d1321',1,'edash_packager::media::KeySource']]], + ['trim',['Trim',['../d1/d92/classedash__packager_1_1media_1_1OffsetByteQueue.html#af2a41afe5b213be301b7b9f7ca555fae',1,'edash_packager::media::OffsetByteQueue']]], + ['tryreadchild',['TryReadChild',['../db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html#ae697ff0b40b4aa9feecb45d303f8f6bc',1,'edash_packager::media::mp4::BoxReader']]], + ['tryreadchildren',['TryReadChildren',['../db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html#a1e30404fe509e750023ae39a093b4e6a',1,'edash_packager::media::mp4::BoxReader']]], + ['tryreadwritechild',['TryReadWriteChild',['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#a0573809c43c576c1835f5b8aa0e57191',1,'edash_packager::media::mp4::BoxBuffer']]], + ['tspacket',['TsPacket',['../d1/d4b/classedash__packager_1_1media_1_1mp2t_1_1TsPacket.html',1,'edash_packager::media::mp2t']]], + ['tssection',['TsSection',['../d8/d8e/classedash__packager_1_1media_1_1mp2t_1_1TsSection.html',1,'edash_packager::media::mp2t']]], + ['tssectionpat',['TsSectionPat',['../dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat.html',1,'edash_packager::media::mp2t']]], + ['tssectionpes',['TsSectionPes',['../de/d8b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes.html',1,'edash_packager::media::mp2t']]], + ['tssectionpmt',['TsSectionPmt',['../d2/d5b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt.html',1,'edash_packager::media::mp2t']]], + ['tssectionpsi',['TsSectionPsi',['../db/d4e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi.html',1,'edash_packager::media::mp2t']]], + ['type',['type',['../d3/dfa/classedash__packager_1_1MpdBuilder.html#ab23432768423d4489380f45c292c7648',1,'edash_packager::MpdBuilder']]] +]; diff --git a/sdk/search/all_12.html b/sdk/search/all_12.html new file mode 100644 index 0000000000..3c7c89ef60 --- /dev/null +++ b/sdk/search/all_12.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/all_12.js b/sdk/search/all_12.js new file mode 100644 index 0000000000..f2e40de27c --- /dev/null +++ b/sdk/search/all_12.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['udpfile',['UdpFile',['../d8/dc7/classedash__packager_1_1media_1_1UdpFile.html',1,'edash_packager::media']]], + ['udpfile',['UdpFile',['../d8/dc7/classedash__packager_1_1media_1_1UdpFile.html#ad52585a56c199c3f5887d5dd77be9142',1,'edash_packager::media::UdpFile']]], + ['uint8vectortobase64',['Uint8VectorToBase64',['../db/d09/namespaceedash__packager.html#ac77ba3cf9242f2a678ec0ba7c61e5d0a',1,'edash_packager']]], + ['update',['Update',['../d2/d90/classedash__packager_1_1media_1_1Status.html#a1c46d74b2d15c4bbcba6d742e82fce34',1,'edash_packager::media::Status']]], + ['updatecontentprotectionpssh',['UpdateContentProtectionPssh',['../db/de4/classedash__packager_1_1AdaptationSet.html#a6630f9954b604bee7f90c11778336fdc',1,'edash_packager::AdaptationSet::UpdateContentProtectionPssh()'],['../d7/d15/classedash__packager_1_1Representation.html#a7fc0e59f273082ccf654025486af79ae',1,'edash_packager::Representation::UpdateContentProtectionPssh()']]], + ['updateiv',['UpdateIv',['../dd/d79/classedash__packager_1_1media_1_1AesCtrEncryptor.html#a8310ce3e9ef83a899173bbd1e6ac5583',1,'edash_packager::media::AesCtrEncryptor']]], + ['updateprogress',['UpdateProgress',['../dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html#a287d51571c92704274550d9f1d246cf9',1,'edash_packager::media::mp4::Segmenter']]], + ['uuid',['UUID',['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#afbb7d084395a1426eb0143ae8357b2fc',1,'edash_packager::media::KeySource::UUID()'],['../db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html#aa917c7570c4010734451bb63d7dc061d',1,'edash_packager::media::WidevineKeySource::UUID()']]] +]; diff --git a/sdk/search/all_13.html b/sdk/search/all_13.html new file mode 100644 index 0000000000..0bd629b86b --- /dev/null +++ b/sdk/search/all_13.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/all_13.js b/sdk/search/all_13.js new file mode 100644 index 0000000000..2fc164779c --- /dev/null +++ b/sdk/search/all_13.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['validatefixedcryptoflags',['ValidateFixedCryptoFlags',['../db/d09/namespaceedash__packager.html#a87cbb414bc89b31dc8ba8de91ac9c438',1,'edash_packager']]], + ['validateflag',['ValidateFlag',['../db/d09/namespaceedash__packager.html#a5836ddf029d56f4a8dd43a7b4d8dbaff',1,'edash_packager']]], + ['validatewidevinecryptoflags',['ValidateWidevineCryptoFlags',['../db/d09/namespaceedash__packager.html#a95bb52262b99e97fd7f8f9f0075fe1e6',1,'edash_packager']]], + ['verifysignature',['VerifySignature',['../d1/d86/classedash__packager_1_1media_1_1RsaPublicKey.html#ae83681d1c03c880b4a0e95e7efe61673',1,'edash_packager::media::RsaPublicKey']]], + ['video_5fdescription',['video_description',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#a981f52a2e185f5b9f0bf7bb17ff6f3d8',1,'edash_packager::media::mp4::TrackRunIterator']]], + ['videomediaheader',['VideoMediaHeader',['../db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html',1,'edash_packager::media::mp4']]], + ['videosampleentry',['VideoSampleEntry',['../df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html',1,'edash_packager::media::mp4']]], + ['videostreaminfo',['VideoStreamInfo',['../d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html#a75ccfbc06b8458390e1672968eb9bd96',1,'edash_packager::media::VideoStreamInfo']]], + ['videostreaminfo',['VideoStreamInfo',['../d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html',1,'edash_packager::media']]], + ['videostreaminfoparameters',['VideoStreamInfoParameters',['../d2/dd9/structedash__packager_1_1media_1_1VideoStreamInfoParameters.html',1,'edash_packager::media']]], + ['vodmediainfodumpmuxerlistener',['VodMediaInfoDumpMuxerListener',['../d9/db4/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener.html',1,'edash_packager::media']]] +]; diff --git a/sdk/search/all_14.html b/sdk/search/all_14.html new file mode 100644 index 0000000000..2ad638b277 --- /dev/null +++ b/sdk/search/all_14.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/all_14.js b/sdk/search/all_14.js new file mode 100644 index 0000000000..d97dbea64c --- /dev/null +++ b/sdk/search/all_14.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['waituntilemptyorclosed',['WaitUntilEmptyOrClosed',['../d3/d6b/classedash__packager_1_1media_1_1IoCache.html#ace4946f4ecb34f84c4750d276404a3e5',1,'edash_packager::media::IoCache']]], + ['widevinekeysource',['WidevineKeySource',['../db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html#a78ebb07ba8a23086ec81839b16472857',1,'edash_packager::media::WidevineKeySource']]], + ['widevinekeysource',['WidevineKeySource',['../db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html',1,'edash_packager::media']]], + ['write',['Write',['../de/d19/classedash__packager_1_1media_1_1File.html#ad82196743ff131dd81e8f806735eb818',1,'edash_packager::media::File::Write()'],['../d3/d6b/classedash__packager_1_1media_1_1IoCache.html#a4b7ee97ec07a6b2702ae4b58c9df4413',1,'edash_packager::media::IoCache::Write()'],['../dd/d98/classedash__packager_1_1media_1_1LocalFile.html#a5987e35339fed1cdd1b68f787d1721b2',1,'edash_packager::media::LocalFile::Write()'],['../dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html#a20b995241942ec2926b875692b42c13a',1,'edash_packager::media::ThreadedIoFile::Write()'],['../d8/dc7/classedash__packager_1_1media_1_1UdpFile.html#ae2900433ff9a02756a6b3f8e776a3cdb',1,'edash_packager::media::UdpFile::Write()'],['../d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html#aa7a756828b5514fcd3eaf16d86c413c0',1,'edash_packager::media::mp4::Box::Write()']]], + ['writempdtofile',['WriteMpdToFile',['../d3/dfa/classedash__packager_1_1MpdBuilder.html#a9efa414ddfaf48561f3085daada49ebc',1,'edash_packager::MpdBuilder::WriteMpdToFile()'],['../db/d09/namespaceedash__packager.html#a2ecf0fb529eaf5ab21310d309bb9f9e9',1,'edash_packager::WriteMpdToFile()']]], + ['writer',['writer',['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#ac1c1d4d768f8f656f6ac2b5f4873b0a1',1,'edash_packager::media::mp4::BoxBuffer']]], + ['writetofile',['WriteToFile',['../df/dde/classedash__packager_1_1media_1_1BufferWriter.html#aa83fe945386e5a75d3c377904fdddce2',1,'edash_packager::media::BufferWriter']]], + ['wvmmediaparser',['WvmMediaParser',['../d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.html',1,'edash_packager::media::wvm']]] +]; diff --git a/sdk/search/all_15.html b/sdk/search/all_15.html new file mode 100644 index 0000000000..d3b5274ba7 --- /dev/null +++ b/sdk/search/all_15.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/all_15.js b/sdk/search/all_15.js new file mode 100644 index 0000000000..d814b09341 --- /dev/null +++ b/sdk/search/all_15.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['xmldeleter',['XmlDeleter',['../d7/de3/structedash__packager_1_1xml_1_1XmlDeleter.html',1,'edash_packager::xml']]], + ['xmlnode',['XmlNode',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html#a7b66ce185c5b7841580cfc4357e0f0c2',1,'edash_packager::xml::XmlNode']]], + ['xmlnode',['XmlNode',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html',1,'edash_packager::xml']]] +]; diff --git a/sdk/search/all_16.html b/sdk/search/all_16.html new file mode 100644 index 0000000000..b4e3666ffb --- /dev/null +++ b/sdk/search/all_16.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/all_16.js b/sdk/search/all_16.js new file mode 100644 index 0000000000..4bcb0d5122 --- /dev/null +++ b/sdk/search/all_16.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['_7eclosurethread',['~ClosureThread',['../dd/d2b/classedash__packager_1_1media_1_1ClosureThread.html#ad39d7f6d00720f04b86f580118da68a5',1,'edash_packager::media::ClosureThread']]], + ['_7efile',['~File',['../de/d19/classedash__packager_1_1media_1_1File.html#ad1a8b1df388b90def135647a0136b0f7',1,'edash_packager::media::File']]] +]; diff --git a/sdk/search/all_2.html b/sdk/search/all_2.html new file mode 100644 index 0000000000..95ded1222d --- /dev/null +++ b/sdk/search/all_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/all_2.js b/sdk/search/all_2.js new file mode 100644 index 0000000000..5fa21ab6ca --- /dev/null +++ b/sdk/search/all_2.js @@ -0,0 +1,35 @@ +var searchData= +[ + ['cacheauxinfo',['CacheAuxInfo',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#a1eff021eb8dd5177f49cc030acd16e8f',1,'edash_packager::media::mp4::TrackRunIterator']]], + ['cancel',['Cancel',['../d5/dce/classedash__packager_1_1media_1_1Demuxer.html#a0181f7db054f0af820942d62683936ab',1,'edash_packager::media::Demuxer::Cancel()'],['../d4/d1d/classedash__packager_1_1media_1_1Muxer.html#abecb4fbe4bcd5257857e397f7f3d096b',1,'edash_packager::media::Muxer::Cancel()']]], + ['cencsampleencryptioninfoentry',['CencSampleEncryptionInfoEntry',['../d7/d55/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry.html',1,'edash_packager::media::mp4']]], + ['childexist',['ChildExist',['../db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html#a5bc71875b0e8fe70cba17e2fe6f974fa',1,'edash_packager::media::mp4::BoxReader']]], + ['chunkinfo',['ChunkInfo',['../d8/d21/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo.html',1,'edash_packager::media::mp4']]], + ['chunkinfoiterator',['ChunkInfoIterator',['../d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html',1,'edash_packager::media::mp4']]], + ['chunkinfoiterator',['ChunkInfoIterator',['../d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html#a3461373a1fe3eaf1d58e1af93f5ca5aa',1,'edash_packager::media::mp4::ChunkInfoIterator']]], + ['chunklargeoffset',['ChunkLargeOffset',['../da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html',1,'edash_packager::media::mp4']]], + ['chunkoffset',['ChunkOffset',['../d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html',1,'edash_packager::media::mp4']]], + ['clear',['Clear',['../d2/d90/classedash__packager_1_1media_1_1Status.html#a0fbada5284f16152c63ebcdd30c36736',1,'edash_packager::media::Status::Clear()'],['../d3/d6b/classedash__packager_1_1media_1_1IoCache.html#ae8ed4943296a88e5d5356347e63c6a42',1,'edash_packager::media::IoCache::Clear()']]], + ['close',['Close',['../de/d19/classedash__packager_1_1media_1_1File.html#a42290da768cd34316d2f4c5fc3976b38',1,'edash_packager::media::File::Close()'],['../d3/d6b/classedash__packager_1_1media_1_1IoCache.html#a4588dbf505a08da8423b525ce24fee92',1,'edash_packager::media::IoCache::Close()'],['../dd/d98/classedash__packager_1_1media_1_1LocalFile.html#a83fe4f07fe74b3a25c91a96f1f343a29',1,'edash_packager::media::LocalFile::Close()'],['../dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html#aa3fba6bc5c73a04dd7ca7911c79d1be9',1,'edash_packager::media::ThreadedIoFile::Close()'],['../d8/dc7/classedash__packager_1_1media_1_1UdpFile.html#a316e2180c12a1712bbe9473a4597fa2c',1,'edash_packager::media::UdpFile::Close()']]], + ['closurethread',['ClosureThread',['../dd/d2b/classedash__packager_1_1media_1_1ClosureThread.html#a8cbb44ca1f4abd7028ba4602af82de0d',1,'edash_packager::media::ClosureThread']]], + ['closurethread',['ClosureThread',['../dd/d2b/classedash__packager_1_1media_1_1ClosureThread.html',1,'edash_packager::media']]], + ['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']]], + ['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#a70b376bfa3ed7be210497ffa2b456f8c',1,'edash_packager::media::mp4::FileType::ComputeSize()'],['../dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html#af9d01112f531869d030e3361ad758459',1,'edash_packager::media::mp4::SegmentType::ComputeSize()'],['../da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html#acb4b95a6f8281435b68ca2eeefb43497',1,'edash_packager::media::mp4::ProtectionSystemSpecificHeader::ComputeSize()'],['../de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html#a01dc0714530b06b10812e24c5098da95',1,'edash_packager::media::mp4::SampleAuxiliaryInformationOffset::ComputeSize()'],['../d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html#a19a37f76e205541befe3776acc61e786',1,'edash_packager::media::mp4::SampleAuxiliaryInformationSize::ComputeSize()'],['../da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html#a4a705bd9a9bbf57c14845c0a5fb8e404',1,'edash_packager::media::mp4::OriginalFormat::ComputeSize()'],['../d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html#a740144f46b76edcda51ed35043c6e271',1,'edash_packager::media::mp4::SchemeType::ComputeSize()'],['../de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html#aef0a237100a4fc719d2b660f245757b6',1,'edash_packager::media::mp4::TrackEncryption::ComputeSize()'],['../d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html#ae1a7f03cce40a6736ab4af8724c4a224',1,'edash_packager::media::mp4::SchemeInfo::ComputeSize()'],['../dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html#accd13d00375bb7e0e1c36e5c477c9430',1,'edash_packager::media::mp4::ProtectionSchemeInfo::ComputeSize()'],['../dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html#a4f0ceec9e870861a5da85312a063fc1d',1,'edash_packager::media::mp4::MovieHeader::ComputeSize()'],['../dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html#a26d1a0d13cd86332ca4ee47990b1fcad',1,'edash_packager::media::mp4::TrackHeader::ComputeSize()'],['../d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html#a96d1e66ddf00c1c4c746df8bac36ffc6',1,'edash_packager::media::mp4::EditList::ComputeSize()'],['../d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html#aea0ad2214b092cb715eb1fec60e55d83',1,'edash_packager::media::mp4::Edit::ComputeSize()'],['../d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html#aa419538295fb5a48293407c0e2946de7',1,'edash_packager::media::mp4::HandlerReference::ComputeSize()'],['../d8/dbb/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord.html#a9c8d24e4a1a7463bfa7dc0dcf7f5c221',1,'edash_packager::media::mp4::AVCDecoderConfigurationRecord::ComputeSize()'],['../d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.html#acb770d7a721bf6134cd8430b17796f07',1,'edash_packager::media::mp4::PixelAspectRatioBox::ComputeSize()'],['../df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html#aa48cbdc2f85dd231ebff8545f1510246',1,'edash_packager::media::mp4::VideoSampleEntry::ComputeSize()'],['../d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html#a2b9986a0b19fdf4d68f89b28e450cb51',1,'edash_packager::media::mp4::ElementaryStreamDescriptor::ComputeSize()'],['../df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html#a4bbef873e7c8603e63e176197c794ce2',1,'edash_packager::media::mp4::AudioSampleEntry::ComputeSize()'],['../d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html#a4b90f5dd8bcde92a8b52def46a91a966',1,'edash_packager::media::mp4::SampleDescription::ComputeSize()'],['../dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html#a3affc991338288a7387a9aa760d18a8d',1,'edash_packager::media::mp4::DecodingTimeToSample::ComputeSize()'],['../da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html#ae896fdf2beefff0fc5634a70c5c8c823',1,'edash_packager::media::mp4::CompositionTimeToSample::ComputeSize()'],['../df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html#ae68342dbf4090359270712277782174f',1,'edash_packager::media::mp4::SampleToChunk::ComputeSize()'],['../d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html#aa70e74855b1f9376ca919224f756752d',1,'edash_packager::media::mp4::SampleSize::ComputeSize()'],['../db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html#ad5c6ba5fb139808dc02c94736d5458e9',1,'edash_packager::media::mp4::CompactSampleSize::ComputeSize()'],['../da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html#a991b5de79d547de62009b8d0f667ef2e',1,'edash_packager::media::mp4::ChunkLargeOffset::ComputeSize()'],['../d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html#a11c731fb14147399cc0b41c6df86f420',1,'edash_packager::media::mp4::ChunkOffset::ComputeSize()'],['../d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html#add9214f52fa7a772fd90b6cfb46d126e',1,'edash_packager::media::mp4::SyncSample::ComputeSize()'],['../d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html#a9de5d55994064b02da1e15f67f463b8c',1,'edash_packager::media::mp4::SampleTable::ComputeSize()'],['../d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html#a205d8ac5b69bf0c30d96f83612ea7ef5',1,'edash_packager::media::mp4::MediaHeader::ComputeSize()'],['../db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html#a487564c539ae330d105c11d91893e729',1,'edash_packager::media::mp4::VideoMediaHeader::ComputeSize()'],['../da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html#a911d881fd4ddcbd08220636c976131cb',1,'edash_packager::media::mp4::SoundMediaHeader::ComputeSize()'],['../d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html#ab31cbd4b92e85f4818e3c2851273b2b3',1,'edash_packager::media::mp4::DataEntryUrl::ComputeSize()'],['../d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html#ae9d7c3108d067a1877ab78701f6e094f',1,'edash_packager::media::mp4::DataReference::ComputeSize()'],['../d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html#aec8cefe3ee77026442606de05ad9fab2',1,'edash_packager::media::mp4::DataInformation::ComputeSize()'],['../dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html#a778f430be294714dbb1ce046c91a9d90',1,'edash_packager::media::mp4::MediaInformation::ComputeSize()'],['../de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html#abcc1078c48042de9a22c45cf43c57a24',1,'edash_packager::media::mp4::Media::ComputeSize()'],['../d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html#a9e63316b33f60fbbd427151ccc4cf362',1,'edash_packager::media::mp4::Track::ComputeSize()'],['../da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html#a05e1f3bbddd01beeac2fc74c91e7a7b9',1,'edash_packager::media::mp4::MovieExtendsHeader::ComputeSize()'],['../d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html#a901f92e643e717bff9f15d2d60f82263',1,'edash_packager::media::mp4::TrackExtends::ComputeSize()'],['../d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html#a46d5b4563b2bc9ab0bec8c01dfaf8d9e',1,'edash_packager::media::mp4::MovieExtends::ComputeSize()'],['../d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html#ac20ee937a3b3f729c297cee8ca248631',1,'edash_packager::media::mp4::Movie::ComputeSize()'],['../d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html#ae12a6c2e4911ce32ef7329a57c73d6f4',1,'edash_packager::media::mp4::TrackFragmentDecodeTime::ComputeSize()'],['../df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html#abfb490674198f191115062cc323301d9',1,'edash_packager::media::mp4::MovieFragmentHeader::ComputeSize()'],['../d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html#ab37fe3a3aa8e4cbb44d5ef74b017a61b',1,'edash_packager::media::mp4::TrackFragmentHeader::ComputeSize()'],['../df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html#a1990d61f437d6c00b34d24879093dba7',1,'edash_packager::media::mp4::TrackFragmentRun::ComputeSize()'],['../d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html#a299f9846b41dbda38a661a272fb9f193',1,'edash_packager::media::mp4::SampleToGroup::ComputeSize()'],['../d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html#a87cea8f911a5b4aa5878c1a4745e15c8',1,'edash_packager::media::mp4::SampleGroupDescription::ComputeSize()'],['../d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html#aef01b7dd73fe290b1b30d9865ed25384',1,'edash_packager::media::mp4::TrackFragment::ComputeSize()'],['../dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html#abff1d6806ec6a0c1a2c1b28dc9967246',1,'edash_packager::media::mp4::MovieFragment::ComputeSize()'],['../d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html#aeafe332bcb895a90db770f509dac1001',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']]], + ['contentprotectionelement',['ContentProtectionElement',['../d0/d96/structedash__packager_1_1ContentProtectionElement.html',1,'edash_packager']]], + ['convertbytestreamtonalunitstream',['ConvertByteStreamToNalUnitStream',['../d5/d30/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter.html#a63d265a1448b3a3534ba7c9c6c5c4178',1,'edash_packager::media::H264ByteToUnitStreamConverter']]], + ['converttoadts',['ConvertToADTS',['../dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html#a4413882e6649fc144d6ab2c1e9643a93',1,'edash_packager::media::mp4::AACAudioSpecificConfig']]], + ['copyfrom',['CopyFrom',['../d8/d6c/classedash__packager_1_1media_1_1MediaSample.html#ac65ec88fbe6d8b72c65b1ff3f68c5b02',1,'edash_packager::media::MediaSample::CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)'],['../d8/d6c/classedash__packager_1_1media_1_1MediaSample.html#a7803f974ab6cdf542be46332598fef56',1,'edash_packager::media::MediaSample::CopyFrom(const uint8_t *data, size_t size, const uint8_t *side_data, size_t side_data_size, bool is_key_frame)']]], + ['create',['Create',['../d5/d62/classedash__packager_1_1media_1_1RsaPrivateKey.html#a9360becce7c1e7be0bdecf2ce411b871',1,'edash_packager::media::RsaPrivateKey::Create()'],['../d1/d86/classedash__packager_1_1media_1_1RsaPublicKey.html#a21f9009c9654f141676ef05f0436baa4',1,'edash_packager::media::RsaPublicKey::Create()']]], + ['createemptymediasample',['CreateEmptyMediaSample',['../d8/d6c/classedash__packager_1_1media_1_1MediaSample.html#ac30e98c643959047439a3b71baa399ca',1,'edash_packager::media::MediaSample']]], + ['createencryptor',['CreateEncryptor',['../d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html#a5ed5486f22438e20d0d41524a47f4dd3',1,'edash_packager::media::mp4::EncryptingFragmenter']]], + ['createeosbuffer',['CreateEOSBuffer',['../d8/d6c/classedash__packager_1_1media_1_1MediaSample.html#ae449ca4aeea6cacb8c08a56d9652a64e',1,'edash_packager::media::MediaSample']]], + ['createfromhexstrings',['CreateFromHexStrings',['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#ab05172d89513c0d3627502c9cff4535f',1,'edash_packager::media::KeySource']]], + ['createsigner',['CreateSigner',['../d8/dcc/classedash__packager_1_1media_1_1AesRequestSigner.html#a1e43c2e7e3ab4f5e07d442ed59fc1278',1,'edash_packager::media::AesRequestSigner::CreateSigner()'],['../dd/da8/classedash__packager_1_1media_1_1RsaRequestSigner.html#a51517907c457f9f991e1a72ce4355183',1,'edash_packager::media::RsaRequestSigner::CreateSigner()']]], + ['current_5fchunk',['current_chunk',['../d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html#ab3a329468f494ff3143d4c43c94d13ba',1,'edash_packager::media::mp4::ChunkInfoIterator']]] +]; diff --git a/sdk/search/all_3.html b/sdk/search/all_3.html new file mode 100644 index 0000000000..4d312d03dd --- /dev/null +++ b/sdk/search/all_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/all_3.js b/sdk/search/all_3.js new file mode 100644 index 0000000000..2eaf1e83a3 --- /dev/null +++ b/sdk/search/all_3.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['dash_5fprofile',['dash_profile',['../da/d38/classedash__packager_1_1MpdNotifier.html#ad49d92e75fcbb2ad1d5e43cd3d0716f7',1,'edash_packager::MpdNotifier']]], + ['dashiopmpdnotifier',['DashIopMpdNotifier',['../da/d49/classedash__packager_1_1DashIopMpdNotifier.html',1,'edash_packager']]], + ['dataentryurl',['DataEntryUrl',['../d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html',1,'edash_packager::media::mp4']]], + ['datainformation',['DataInformation',['../d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html',1,'edash_packager::media::mp4']]], + ['datareference',['DataReference',['../d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html',1,'edash_packager::media::mp4']]], + ['decodingtime',['DecodingTime',['../d7/d1c/structedash__packager_1_1media_1_1mp4_1_1DecodingTime.html',1,'edash_packager::media::mp4']]], + ['decodingtimeiterator',['DecodingTimeIterator',['../d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html',1,'edash_packager::media::mp4']]], + ['decodingtimeiterator',['DecodingTimeIterator',['../d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html#a23d155e855c769a50114d0a720b6aac0',1,'edash_packager::media::mp4::DecodingTimeIterator']]], + ['decodingtimetosample',['DecodingTimeToSample',['../dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html',1,'edash_packager::media::mp4']]], + ['decrypt',['Decrypt',['../db/dfe/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor.html#a99992a6413029b81074735a74ce392e3',1,'edash_packager::media::AesCbcPkcs5Decryptor::Decrypt()'],['../dd/d96/classedash__packager_1_1media_1_1AesCbcCtsDecryptor.html#ab4401816a4dbae48500ce4e8f011c511',1,'edash_packager::media::AesCbcCtsDecryptor::Decrypt(const uint8_t *ciphertext, size_t size, uint8_t *plaintext)'],['../dd/d96/classedash__packager_1_1media_1_1AesCbcCtsDecryptor.html#a07ead5ae4cff840782578f123a79c5e8',1,'edash_packager::media::AesCbcCtsDecryptor::Decrypt(const std::vector< uint8_t > &ciphertext, std::vector< uint8_t > *plaintext)'],['../d5/d62/classedash__packager_1_1media_1_1RsaPrivateKey.html#a5356e2154dfc0707df39f603932ed96b',1,'edash_packager::media::RsaPrivateKey::Decrypt()']]], + ['decryptconfig',['DecryptConfig',['../d4/da1/classedash__packager_1_1media_1_1DecryptConfig.html',1,'edash_packager::media']]], + ['decryptconfig',['DecryptConfig',['../d4/da1/classedash__packager_1_1media_1_1DecryptConfig.html#a8241c75bb72af0b2de61ae1e276692ed',1,'edash_packager::media::DecryptConfig']]], + ['decryptorsource',['DecryptorSource',['../dc/df1/classedash__packager_1_1media_1_1DecryptorSource.html',1,'edash_packager::media']]], + ['delete',['Delete',['../de/d19/classedash__packager_1_1media_1_1File.html#a7e0fcd3c439e810e8e17baf32dcc75af',1,'edash_packager::media::File::Delete()'],['../dd/d98/classedash__packager_1_1media_1_1LocalFile.html#a95e4a5eff87224c9a156b5e2c7824cb9',1,'edash_packager::media::LocalFile::Delete()']]], + ['demuxer',['Demuxer',['../d5/dce/classedash__packager_1_1media_1_1Demuxer.html',1,'edash_packager::media']]], + ['demuxer',['Demuxer',['../d5/dce/classedash__packager_1_1media_1_1Demuxer.html#a5305b2b16956b7ab973eeded4232226e',1,'edash_packager::media::Demuxer']]], + ['demuxstreamidmediasample',['DemuxStreamIdMediaSample',['../d0/dfa/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample.html',1,'edash_packager::media::wvm']]], + ['duration',['Duration',['../d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html#a20162e42fe14b8135828f2d8d6cdd2ef',1,'edash_packager::media::mp4::DecodingTimeIterator']]] +]; diff --git a/sdk/search/all_4.html b/sdk/search/all_4.html new file mode 100644 index 0000000000..d72a9104cd --- /dev/null +++ b/sdk/search/all_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/all_4.js b/sdk/search/all_4.js new file mode 100644 index 0000000000..57671487fa --- /dev/null +++ b/sdk/search/all_4.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['edash_5fpackager',['edash_packager',['../db/d09/namespaceedash__packager.html',1,'']]], + ['edit',['Edit',['../d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html',1,'edash_packager::media::mp4']]], + ['editlist',['EditList',['../d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html',1,'edash_packager::media::mp4']]], + ['editlistentry',['EditListEntry',['../dc/d0d/structedash__packager_1_1media_1_1mp4_1_1EditListEntry.html',1,'edash_packager::media::mp4']]], + ['element',['Element',['../d5/d7a/structedash__packager_1_1Element.html',1,'edash_packager']]], + ['elementarystreamdescriptor',['ElementaryStreamDescriptor',['../d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html',1,'edash_packager::media::mp4']]], + ['empty',['Empty',['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html#a43aa98358d9f8e0f416a6170ae3cb925',1,'edash_packager::media::ProducerConsumerQueue']]], + ['encrypt',['Encrypt',['../d6/dc4/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor.html#aa9e31be1aef797b9c06e5f3beb524dc8',1,'edash_packager::media::AesCbcPkcs5Encryptor::Encrypt()'],['../d6/da2/classedash__packager_1_1media_1_1AesCbcCtsEncryptor.html#a8bc803d458d2443cb59d20b6d14c3c30',1,'edash_packager::media::AesCbcCtsEncryptor::Encrypt(const uint8_t *plaintext, size_t size, uint8_t *ciphertext)'],['../d6/da2/classedash__packager_1_1media_1_1AesCbcCtsEncryptor.html#acd3e07715507f0edebf92dc14535aa70',1,'edash_packager::media::AesCbcCtsEncryptor::Encrypt(const std::vector< uint8_t > &plaintext, std::vector< uint8_t > *ciphertext)'],['../d1/d86/classedash__packager_1_1media_1_1RsaPublicKey.html#a287216e5bb6ac3781388db23329a8f27',1,'edash_packager::media::RsaPublicKey::Encrypt()']]], + ['encryptingfragmenter',['EncryptingFragmenter',['../d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html',1,'edash_packager::media::mp4']]], + ['encryptingfragmenter',['EncryptingFragmenter',['../d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html#ae4352e452ece69206073274efd855f44',1,'edash_packager::media::mp4::EncryptingFragmenter']]], + ['encryptionkey',['EncryptionKey',['../d0/d86/structedash__packager_1_1media_1_1EncryptionKey.html',1,'edash_packager::media']]], + ['esdescriptor',['ESDescriptor',['../de/db1/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor.html',1,'edash_packager::media::mp4']]], + ['esparser',['EsParser',['../db/df2/classedash__packager_1_1media_1_1mp2t_1_1EsParser.html',1,'edash_packager::media::mp2t']]], + ['esparseradts',['EsParserAdts',['../de/d59/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts.html',1,'edash_packager::media::mp2t']]], + ['esparserh264',['EsParserH264',['../dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264.html',1,'edash_packager::media::mp2t']]] +]; diff --git a/sdk/search/all_5.html b/sdk/search/all_5.html new file mode 100644 index 0000000000..99ef726704 --- /dev/null +++ b/sdk/search/all_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/all_5.js b/sdk/search/all_5.js new file mode 100644 index 0000000000..441ebe40f6 --- /dev/null +++ b/sdk/search/all_5.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['fetchkeys',['FetchKeys',['../d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.html#a4fc91ba68a7ae4bd63c1b36ed859afda',1,'edash_packager::media::HttpKeyFetcher::FetchKeys()'],['../d4/d43/classedash__packager_1_1media_1_1KeyFetcher.html#ae633bbf42ceb4c4c149a2409517047e5',1,'edash_packager::media::KeyFetcher::FetchKeys()'],['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#a4020839c22a550bf71d891bf55087e0b',1,'edash_packager::media::KeySource::FetchKeys(const std::vector< uint8_t > &content_id, const std::string &policy)'],['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#aff319f4d17ed480243469eb8af5fa915',1,'edash_packager::media::KeySource::FetchKeys(const std::vector< uint8_t > &pssh_data)'],['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#a68de1e9682273c2dc9b8db04718d426c',1,'edash_packager::media::KeySource::FetchKeys(uint32_t asset_id)'],['../db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html#ae1c98fdfcd87e43dd66649eaf7803777',1,'edash_packager::media::WidevineKeySource::FetchKeys(const std::vector< uint8_t > &content_id, const std::string &policy) OVERRIDE'],['../db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html#aad9a049ef0b09f7f8144cd7109ae0172',1,'edash_packager::media::WidevineKeySource::FetchKeys(const std::vector< uint8_t > &pssh_data) OVERRIDE'],['../db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html#a51db56855b151c5e52466e226d6350dd',1,'edash_packager::media::WidevineKeySource::FetchKeys(uint32_t asset_id) OVERRIDE']]], + ['file',['File',['../de/d19/classedash__packager_1_1media_1_1File.html',1,'edash_packager::media']]], + ['file_5fname',['file_name',['../de/d19/classedash__packager_1_1media_1_1File.html#ad736ca7bb8da1cec749f51275a87872c',1,'edash_packager::media::File']]], + ['filecloser',['FileCloser',['../d0/ddc/structedash__packager_1_1media_1_1FileCloser.html',1,'edash_packager::media']]], + ['filetype',['FileType',['../d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.html',1,'edash_packager::media::mp4']]], + ['finalize',['Finalize',['../dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html#ad1136a3e7c2e796267fbd3879d108c2a',1,'edash_packager::media::mp4::Segmenter']]], + ['finalizefragment',['FinalizeFragment',['../d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html#a55fb4db47cb106c39a411f8890619d91',1,'edash_packager::media::mp4::EncryptingFragmenter::FinalizeFragment()'],['../db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html#a5f346308fec8fa24cf47cf7ffd21d741',1,'edash_packager::media::mp4::Fragmenter::FinalizeFragment()']]], + ['finalizefragmentforencryption',['FinalizeFragmentForEncryption',['../d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html#a0184deccbe7e99ea7a685cf0de2f9156',1,'edash_packager::media::mp4::EncryptingFragmenter::FinalizeFragmentForEncryption()'],['../dc/d8a/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter.html#ac3e6524b5456598717425c868785c320',1,'edash_packager::media::mp4::KeyRotationFragmenter::FinalizeFragmentForEncryption()']]], + ['flush',['Flush',['../dc/d48/classedash__packager_1_1media_1_1MediaParser.html#ad9906a71035190a798a9aa8aed0a92b8',1,'edash_packager::media::MediaParser::Flush()'],['../de/d19/classedash__packager_1_1media_1_1File.html#ace9275a79c572614ee5d068a04c76392',1,'edash_packager::media::File::Flush()'],['../dd/d98/classedash__packager_1_1media_1_1LocalFile.html#a45443ac38c05ca205cbb1d49a9ed6e7a',1,'edash_packager::media::LocalFile::Flush()'],['../dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html#a41687c598757658a4e81a9aa2542c4d7',1,'edash_packager::media::ThreadedIoFile::Flush()'],['../d8/dc7/classedash__packager_1_1media_1_1UdpFile.html#a0d0b73919bc1f30a0b697dc39e6e9413',1,'edash_packager::media::UdpFile::Flush()'],['../dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.html#a3b4fdfa2e74ea2817c44a23feb714758',1,'edash_packager::media::mp2t::Mp2tMediaParser::Flush()'],['../d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.html#a22f451f9ca693732e0c57e0a46b6a0c6',1,'edash_packager::media::mp4::MP4MediaParser::Flush()'],['../d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.html#a812b6a9ecaf18d4cd5da3b0c4adca5b6',1,'edash_packager::media::wvm::WvmMediaParser::Flush()'],['../da/d49/classedash__packager_1_1DashIopMpdNotifier.html#a952baa36fc361001a1101c39850a160c',1,'edash_packager::DashIopMpdNotifier::Flush()'],['../da/d38/classedash__packager_1_1MpdNotifier.html#aaeba5920a9df8db366f8cf86d64e855c',1,'edash_packager::MpdNotifier::Flush()'],['../db/d56/classedash__packager_1_1SimpleMpdNotifier.html#a39ebf425f66423a336eeca00fbf0be5e',1,'edash_packager::SimpleMpdNotifier::Flush()']]], + ['forcesetsegmentalignment',['ForceSetSegmentAlignment',['../db/de4/classedash__packager_1_1AdaptationSet.html#a949526c833122b9a1ca40b9990224990',1,'edash_packager::AdaptationSet']]], + ['fragment_5fduration',['fragment_duration',['../de/d57/structedash__packager_1_1media_1_1MuxerOptions.html#a1754599c00fdf4c474d3072abf71c1de',1,'edash_packager::media::MuxerOptions']]], + ['fragment_5fsap_5faligned',['fragment_sap_aligned',['../de/d57/structedash__packager_1_1media_1_1MuxerOptions.html#ab70f1d41f9556fa793ec638762d1c584',1,'edash_packager::media::MuxerOptions']]], + ['fragmenter',['Fragmenter',['../db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html',1,'edash_packager::media::mp4']]], + ['fragmenter',['Fragmenter',['../db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html#ae285aba21b3099fe0d5b9e5236583bc8',1,'edash_packager::media::mp4::Fragmenter']]], + ['framecencinfo',['FrameCENCInfo',['../d5/ddf/classedash__packager_1_1media_1_1mp4_1_1FrameCENCInfo.html',1,'edash_packager::media::mp4']]], + ['frequency',['frequency',['../dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html#a67fdc1b4f5787341e27d07c814a01a08',1,'edash_packager::media::mp4::AACAudioSpecificConfig']]], + ['fullbox',['FullBox',['../d6/d8f/structedash__packager_1_1media_1_1mp4_1_1FullBox.html',1,'edash_packager::media::mp4']]] +]; diff --git a/sdk/search/all_6.html b/sdk/search/all_6.html new file mode 100644 index 0000000000..6133ab3af1 --- /dev/null +++ b/sdk/search/all_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/all_6.js b/sdk/search/all_6.js new file mode 100644 index 0000000000..11a5441fe9 --- /dev/null +++ b/sdk/search/all_6.js @@ -0,0 +1,28 @@ +var searchData= +[ + ['generatesegmentreference',['GenerateSegmentReference',['../db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html#a04350ab4d9b2b403d8b150512786b7ec',1,'edash_packager::media::mp4::Fragmenter']]], + ['generatesignature',['GenerateSignature',['../dc/d73/classedash__packager_1_1media_1_1RequestSigner.html#a76278a2339751c4e69876e63cc088ef6',1,'edash_packager::media::RequestSigner::GenerateSignature()'],['../d8/dcc/classedash__packager_1_1media_1_1AesRequestSigner.html#a51991363bcf03d2413021eedb604cec0',1,'edash_packager::media::AesRequestSigner::GenerateSignature()'],['../dd/da8/classedash__packager_1_1media_1_1RsaRequestSigner.html#accde8727716a5ae84cb422efa1d65d0a',1,'edash_packager::media::RsaRequestSigner::GenerateSignature()'],['../d5/d62/classedash__packager_1_1media_1_1RsaPrivateKey.html#ab402109f8456af90f3cc34cee76184d9',1,'edash_packager::media::RsaPrivateKey::GenerateSignature()']]], + ['get',['Get',['../d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.html#a20da7a424dfe7ec7bf198b118a08aacb',1,'edash_packager::media::HttpKeyFetcher']]], + ['getadtsframesize',['GetAdtsFrameSize',['../db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html#aacce540b215432703697c6a1172c3011',1,'edash_packager::media::mp2t::AdtsHeader']]], + ['getadtsheadersize',['GetAdtsHeaderSize',['../db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html#a87affdf0dc61bedb13bafd76c3d5b484',1,'edash_packager::media::mp2t::AdtsHeader']]], + ['getaudiospecificconfig',['GetAudioSpecificConfig',['../db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html#a65c36a606121daa90c44b44632b634ec',1,'edash_packager::media::mp2t::AdtsHeader']]], + ['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()']]], + ['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#a92e7ca7acadd1beed5b301dc092d5d75',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']]], + ['getduration',['GetDuration',['../dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html#a0e5e570d5f82c796ba015ca06c7a676c',1,'edash_packager::media::mp4::Segmenter']]], + ['getfilesize',['GetFileSize',['../de/d19/classedash__packager_1_1media_1_1File.html#a239a76adb5ff5c5340c58f96d7034ec6',1,'edash_packager::media::File']]], + ['getindexrange',['GetIndexRange',['../dc/d7a/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html#ac536e13f4e0940566ac1fe53fb7f4dc6',1,'edash_packager::media::mp4::MultiSegmentSegmenter::GetIndexRange()'],['../dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html#acbb0ad06a2e0effee437c9037970c5b2',1,'edash_packager::media::mp4::Segmenter::GetIndexRange()'],['../da/d75/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html#a4c5ed066a3f37ac24211a8a793d18840',1,'edash_packager::media::mp4::SingleSegmentSegmenter::GetIndexRange()']]], + ['getinitrange',['GetInitRange',['../dc/d7a/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html#aa8a22b2a7e271abed76c25b531a919fd',1,'edash_packager::media::mp4::MultiSegmentSegmenter::GetInitRange()'],['../dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html#ae2b35481b5fd2a0bbbcfb970bbaddf12',1,'edash_packager::media::mp4::Segmenter::GetInitRange()'],['../da/d75/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html#ac66a1ec675201ed886a4470ebc02bbaa',1,'edash_packager::media::mp4::SingleSegmentSegmenter::GetInitRange()']]], + ['getkey',['GetKey',['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#a49ccfe7a61c36ac9818482a7892915d3',1,'edash_packager::media::KeySource::GetKey(TrackType track_type, EncryptionKey *key)'],['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#a2d44267b238a221bb8a7d2bc1bf68ea2',1,'edash_packager::media::KeySource::GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key)'],['../db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html#aa0bb08bc936e7ba6b554214246c71a90',1,'edash_packager::media::WidevineKeySource::GetKey(TrackType track_type, EncryptionKey *key) OVERRIDE'],['../db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html#a57be27cf9214278ae5f911b9fbe7078d',1,'edash_packager::media::WidevineKeySource::GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key) OVERRIDE']]], + ['getmaxclearoffset',['GetMaxClearOffset',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#a0927d4e877f453b00e3eb08230510a6c',1,'edash_packager::media::mp4::TrackRunIterator']]], + ['getnumchannels',['GetNumChannels',['../db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html#aceebc7b088f459286fb3c338fa0b5407',1,'edash_packager::media::mp2t::AdtsHeader::GetNumChannels()'],['../dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html#abc1eea761852eb3d714a2f867f54db76',1,'edash_packager::media::mp4::AACAudioSpecificConfig::GetNumChannels()']]], + ['getobjecttype',['GetObjectType',['../db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html#acadaa27044a3976e210c3dae65bff1a6',1,'edash_packager::media::mp2t::AdtsHeader']]], + ['getoutputsamplespersecond',['GetOutputSamplesPerSecond',['../dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html#acfe6c1dd618394a923c98c354c63fa2b',1,'edash_packager::media::mp4::AACAudioSpecificConfig']]], + ['getrawptr',['GetRawPtr',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html#a05a6a89d477a5a59ed8081a2b1ee2d20',1,'edash_packager::xml::XmlNode']]], + ['getsamplingfrequency',['GetSamplingFrequency',['../db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html#a95e3365db36b2c5c1f4f688631c2a236',1,'edash_packager::media::mp2t::AdtsHeader']]], + ['gettracktypefromstring',['GetTrackTypeFromString',['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#ab15ba8121f76e0945d4f10d722da5cc8',1,'edash_packager::media::KeySource']]], + ['getxml',['GetXml',['../db/de4/classedash__packager_1_1AdaptationSet.html#a44984cfaed799fd6683c6c9d41394dd6',1,'edash_packager::AdaptationSet::GetXml()'],['../d7/d15/classedash__packager_1_1Representation.html#a4eefc1cf0da6ff78806f8d1099cb01d1',1,'edash_packager::Representation::GetXml()']]], + ['group',['Group',['../db/de4/classedash__packager_1_1AdaptationSet.html#ad5efd9add7037cf939c6a48733e38f8f',1,'edash_packager::AdaptationSet']]] +]; diff --git a/sdk/search/all_7.html b/sdk/search/all_7.html new file mode 100644 index 0000000000..574812594f --- /dev/null +++ b/sdk/search/all_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/all_7.js b/sdk/search/all_7.js new file mode 100644 index 0000000000..f54f16ca85 --- /dev/null +++ b/sdk/search/all_7.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['h264bitreader',['H264BitReader',['../d4/d55/classedash__packager_1_1media_1_1H264BitReader.html',1,'edash_packager::media']]], + ['h264bytetounitstreamconverter',['H264ByteToUnitStreamConverter',['../d5/d30/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter.html',1,'edash_packager::media']]], + ['h264decrefpicmarking',['H264DecRefPicMarking',['../d2/d50/structedash__packager_1_1media_1_1H264DecRefPicMarking.html',1,'edash_packager::media']]], + ['h264modificationofpicnum',['H264ModificationOfPicNum',['../d9/d76/structedash__packager_1_1media_1_1H264ModificationOfPicNum.html',1,'edash_packager::media']]], + ['h264nalu',['H264NALU',['../dd/d41/structedash__packager_1_1media_1_1H264NALU.html',1,'edash_packager::media']]], + ['h264parser',['H264Parser',['../d6/da3/classedash__packager_1_1media_1_1H264Parser.html',1,'edash_packager::media']]], + ['h264pps',['H264PPS',['../dd/dcf/structedash__packager_1_1media_1_1H264PPS.html',1,'edash_packager::media']]], + ['h264seimessage',['H264SEIMessage',['../d4/d93/structedash__packager_1_1media_1_1H264SEIMessage.html',1,'edash_packager::media']]], + ['h264seirecoverypoint',['H264SEIRecoveryPoint',['../d4/dca/structedash__packager_1_1media_1_1H264SEIRecoveryPoint.html',1,'edash_packager::media']]], + ['h264sliceheader',['H264SliceHeader',['../de/d8d/structedash__packager_1_1media_1_1H264SliceHeader.html',1,'edash_packager::media']]], + ['h264sps',['H264SPS',['../d8/db0/structedash__packager_1_1media_1_1H264SPS.html',1,'edash_packager::media']]], + ['h264weightingfactors',['H264WeightingFactors',['../d3/dbc/structedash__packager_1_1media_1_1H264WeightingFactors.html',1,'edash_packager::media']]], + ['handlerreference',['HandlerReference',['../d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html',1,'edash_packager::media::mp4']]], + ['hasbytes',['HasBytes',['../d9/d46/classedash__packager_1_1media_1_1BufferReader.html#a61ac255662b847f0ef25a8228c4ba009',1,'edash_packager::media::BufferReader']]], + ['head',['head',['../d1/d92/classedash__packager_1_1media_1_1OffsetByteQueue.html#aa9d018636705cab1759978cd7c6d17da',1,'edash_packager::media::OffsetByteQueue']]], + ['headpos',['HeadPos',['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html#a7af8ad77c837db03402ac0947cc73ebf',1,'edash_packager::media::ProducerConsumerQueue']]], + ['hextouuid',['HexToUUID',['../db/d09/namespaceedash__packager.html#a7015ba137f31c7ae734dc7abb254be64',1,'edash_packager']]], + ['httpkeyfetcher',['HttpKeyFetcher',['../d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.html',1,'edash_packager::media']]], + ['httpkeyfetcher',['HttpKeyFetcher',['../d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.html#a2dc7f2f968a87e5c532d1e3d6516237b',1,'edash_packager::media::HttpKeyFetcher::HttpKeyFetcher()'],['../d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.html#a5fdf1c838667e9280eb71e1682692a80',1,'edash_packager::media::HttpKeyFetcher::HttpKeyFetcher(uint32_t timeout_in_seconds)']]] +]; diff --git a/sdk/search/all_8.html b/sdk/search/all_8.html new file mode 100644 index 0000000000..0179bdd463 --- /dev/null +++ b/sdk/search/all_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/all_8.js b/sdk/search/all_8.js new file mode 100644 index 0000000000..3bfde53b45 --- /dev/null +++ b/sdk/search/all_8.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['id',['id',['../d7/d15/classedash__packager_1_1Representation.html#a0a59920aa8a31f1fb2b30a2ee8cc4e95',1,'edash_packager::Representation']]], + ['ignorebytes',['IgnoreBytes',['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#a7efa53df1ef135edd31d1e1818b9a884',1,'edash_packager::media::mp4::BoxBuffer']]], + ['init',['Init',['../dc/d48/classedash__packager_1_1media_1_1MediaParser.html#a7ac1ee5db298922f094920cd564bfb16',1,'edash_packager::media::MediaParser::Init()'],['../dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.html#a14a6993c335f89e8245f1af47fb9e55a',1,'edash_packager::media::mp2t::Mp2tMediaParser::Init()'],['../d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.html#abe7532e2795f7b08e9663c0c2ba4d5f3',1,'edash_packager::media::mp4::MP4MediaParser::Init()'],['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#a6fd0f1d72f9a31a1c0d26c3b1ae25250',1,'edash_packager::media::mp4::TrackRunIterator::Init()'],['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#a354985cb4f5eed26e91dbb343a6343a0',1,'edash_packager::media::mp4::TrackRunIterator::Init(const MovieFragment &moof)'],['../d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.html#a68d3bba403b0741c7948def9325d5ad1',1,'edash_packager::media::wvm::WvmMediaParser::Init()'],['../da/d49/classedash__packager_1_1DashIopMpdNotifier.html#ad126fe89d3bb63124c48630d39c034f3',1,'edash_packager::DashIopMpdNotifier::Init()'],['../d7/d15/classedash__packager_1_1Representation.html#aac7ad6e54e88b4d31196d54ad5fb4a9d',1,'edash_packager::Representation::Init()'],['../da/d38/classedash__packager_1_1MpdNotifier.html#ae7067d35133b0573a2919fb69195328e',1,'edash_packager::MpdNotifier::Init()'],['../db/d56/classedash__packager_1_1SimpleMpdNotifier.html#a08979abd3c71bb40fa37d24989d84d19',1,'edash_packager::SimpleMpdNotifier::Init()']]], + ['initcb',['InitCB',['../dc/d48/classedash__packager_1_1media_1_1MediaParser.html#af5c74c8723a5306faddcdfdcadb4ab4a',1,'edash_packager::media::MediaParser']]], + ['initialize',['Initialize',['../d5/dce/classedash__packager_1_1media_1_1Demuxer.html#a5b156dbf1d1c86f4d18e137b3f7bc7c9',1,'edash_packager::media::Demuxer::Initialize()'],['../dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html#ae977765092cab9a566b4a5a3e9184370',1,'edash_packager::media::mp4::Segmenter::Initialize()']]], + ['initializefragment',['InitializeFragment',['../d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html#ac7623c16e5a71727e85ac2857a2c025b',1,'edash_packager::media::mp4::EncryptingFragmenter::InitializeFragment()'],['../db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html#ab55cbcb40b4c1308d70052a4b8ccd6af',1,'edash_packager::media::mp4::Fragmenter::InitializeFragment()']]], + ['initializewithiv',['InitializeWithIv',['../dd/d79/classedash__packager_1_1media_1_1AesCtrEncryptor.html#a7e755a2bc06f35c8b3de9a7ab8b538cd',1,'edash_packager::media::AesCtrEncryptor::InitializeWithIv()'],['../d6/dc4/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor.html#a6a960fa0d83359156cfd6e10167a69e2',1,'edash_packager::media::AesCbcPkcs5Encryptor::InitializeWithIv()'],['../db/dfe/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor.html#aaa17492b546264e815971e9f6925a460',1,'edash_packager::media::AesCbcPkcs5Decryptor::InitializeWithIv()'],['../d6/da2/classedash__packager_1_1media_1_1AesCbcCtsEncryptor.html#a5f48de14959ae35fdd9e2e95ab0274b4',1,'edash_packager::media::AesCbcCtsEncryptor::InitializeWithIv()'],['../dd/d96/classedash__packager_1_1media_1_1AesCbcCtsDecryptor.html#a4ae122dc7410cccec81eabbffa7601da',1,'edash_packager::media::AesCbcCtsDecryptor::InitializeWithIv()']]], + ['initializewithrandomiv',['InitializeWithRandomIv',['../dd/d79/classedash__packager_1_1media_1_1AesCtrEncryptor.html#a3d1c0717e1310823bd6827299b6050ef',1,'edash_packager::media::AesCtrEncryptor']]], + ['iocache',['IoCache',['../d3/d6b/classedash__packager_1_1media_1_1IoCache.html',1,'edash_packager::media']]], + ['isaac',['IsAAC',['../de/db1/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor.html#a94db515fdafb0e007981d3c314b7b717',1,'edash_packager::media::mp4::ESDescriptor']]], + ['isrunvalid',['IsRunValid',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#ae06821cd3461cc5b8b6c2c41a286a228',1,'edash_packager::media::mp4::TrackRunIterator']]], + ['issamplevalid',['IsSampleValid',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#aac5201a3e14e410c805f5f9b58e88c22',1,'edash_packager::media::mp4::TrackRunIterator']]], + ['issyncsample',['IsSyncSample',['../db/d01/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator.html#a19c0a90ae6ce549a8826569103bdee1c',1,'edash_packager::media::mp4::SyncSampleIterator::IsSyncSample() const '],['../db/d01/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator.html#a87c6402aa414c9e5f87634d33a9fad6c',1,'edash_packager::media::mp4::SyncSampleIterator::IsSyncSample(uint32_t sample) const ']]], + ['isvalid',['IsValid',['../d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html#a83f8702a396ae63c94e79ae7d32cdcbf',1,'edash_packager::media::mp4::ChunkInfoIterator::IsValid()'],['../d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html#adf687bc7500b4c97f0ae170ea2254c09',1,'edash_packager::media::mp4::CompositionOffsetIterator::IsValid()'],['../d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html#a182b0464b4681a63ac3453b4b5b1aa28',1,'edash_packager::media::mp4::DecodingTimeIterator::IsValid()']]], + ['isvalidconfig',['IsValidConfig',['../da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html#a836ab95546bab0becf5b3ada7cbf59c5',1,'edash_packager::media::AudioStreamInfo::IsValidConfig()'],['../d6/d06/classedash__packager_1_1media_1_1StreamInfo.html#ac2a38c803b8baf748ed66b4cf681518f',1,'edash_packager::media::StreamInfo::IsValidConfig()'],['../d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html#a8565954ad442f347e58996c61ee2dfb9',1,'edash_packager::media::VideoStreamInfo::IsValidConfig()']]], + ['isvalidtoplevelbox',['IsValidTopLevelBox',['../db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html#a8505220e522a9b74a1f40adf3a84d29f',1,'edash_packager::media::mp4::BoxReader']]] +]; diff --git a/sdk/search/all_9.html b/sdk/search/all_9.html new file mode 100644 index 0000000000..cd46d44056 --- /dev/null +++ b/sdk/search/all_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/all_9.js b/sdk/search/all_9.js new file mode 100644 index 0000000000..a1e4f11ea5 --- /dev/null +++ b/sdk/search/all_9.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['kadtsheadersize',['kADTSHeaderSize',['../dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html#a200d0b1a945fed01c2ce92a0b2fa9921',1,'edash_packager::media::mp4::AACAudioSpecificConfig']]], + ['kdecryptionkeysize',['kDecryptionKeySize',['../d4/da1/classedash__packager_1_1media_1_1DecryptConfig.html#a65b9e6b7a1a2308f38e6b435bf8ce5bb',1,'edash_packager::media::DecryptConfig']]], + ['keyfetcher',['KeyFetcher',['../d4/d43/classedash__packager_1_1media_1_1KeyFetcher.html',1,'edash_packager::media']]], + ['keyrotationfragmenter',['KeyRotationFragmenter',['../dc/d8a/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter.html',1,'edash_packager::media::mp4']]], + ['keyrotationfragmenter',['KeyRotationFragmenter',['../dc/d8a/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter.html#a6f44819eefcc2cd0f3ea925ada7dfdb0',1,'edash_packager::media::mp4::KeyRotationFragmenter']]], + ['keysource',['KeySource',['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html',1,'edash_packager::media']]] +]; diff --git a/sdk/search/all_a.html b/sdk/search/all_a.html new file mode 100644 index 0000000000..eab655301b --- /dev/null +++ b/sdk/search/all_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/all_a.js b/sdk/search/all_a.js new file mode 100644 index 0000000000..a2b56d693f --- /dev/null +++ b/sdk/search/all_a.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['languagetoiso_5f639_5f2',['LanguageToISO_639_2',['../db/d09/namespaceedash__packager.html#a1082a6ff7615e61946ce7d6616f21dde',1,'edash_packager']]], + ['languagetoshortestform',['LanguageToShortestForm',['../db/d09/namespaceedash__packager.html#a4f8cf77ef5242943e88811962c2870e5',1,'edash_packager']]], + ['lastfirstchunk',['LastFirstChunk',['../d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html#a378cfea9333aba7b810d1b7a575a28cd',1,'edash_packager::media::mp4::ChunkInfoIterator']]], + ['libcryptothreading',['LibcryptoThreading',['../de/de9/classedash__packager_1_1media_1_1LibcryptoThreading.html',1,'edash_packager::media']]], + ['loadmoov',['LoadMoov',['../d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.html#a6dafe794d755100428ed427791ae0e43',1,'edash_packager::media::mp4::MP4MediaParser']]], + ['localfile',['LocalFile',['../dd/d98/classedash__packager_1_1media_1_1LocalFile.html#a0167e3eb79bc5f86cb1484b8da828fcc',1,'edash_packager::media::LocalFile']]], + ['localfile',['LocalFile',['../dd/d98/classedash__packager_1_1media_1_1LocalFile.html',1,'edash_packager::media']]] +]; diff --git a/sdk/search/all_b.html b/sdk/search/all_b.html new file mode 100644 index 0000000000..a2c161e0bd --- /dev/null +++ b/sdk/search/all_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/all_b.js b/sdk/search/all_b.js new file mode 100644 index 0000000000..0b01ce30d2 --- /dev/null +++ b/sdk/search/all_b.js @@ -0,0 +1,39 @@ +var searchData= +[ + ['makepathsrelativetompd',['MakePathsRelativeToMpd',['../d3/dfa/classedash__packager_1_1MpdBuilder.html#a341e1050c0ae351db7cf0e4d23421a7f',1,'edash_packager::MpdBuilder']]], + ['matches',['Matches',['../d2/d90/classedash__packager_1_1media_1_1Status.html#ac5219fe50f7679fd8448899b4df4e7e6',1,'edash_packager::media::Status']]], + ['media',['Media',['../de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html',1,'edash_packager::media::mp4']]], + ['mediadata',['MediaData',['../d4/d92/structedash__packager_1_1media_1_1mp4_1_1MediaData.html',1,'edash_packager::media::mp4']]], + ['mediaheader',['MediaHeader',['../d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html',1,'edash_packager::media::mp4']]], + ['mediainformation',['MediaInformation',['../dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html',1,'edash_packager::media::mp4']]], + ['mediaparser',['MediaParser',['../dc/d48/classedash__packager_1_1media_1_1MediaParser.html',1,'edash_packager::media']]], + ['mediasample',['MediaSample',['../d8/d6c/classedash__packager_1_1media_1_1MediaSample.html',1,'edash_packager::media']]], + ['mediastream',['MediaStream',['../d2/dfd/classedash__packager_1_1media_1_1MediaStream.html#ad8d8c3322274fadcbe731f2a2e8dc8ef',1,'edash_packager::media::MediaStream']]], + ['mediastream',['MediaStream',['../d2/dfd/classedash__packager_1_1media_1_1MediaStream.html',1,'edash_packager::media']]], + ['mockadaptationset',['MockAdaptationSet',['../d8/d78/classedash__packager_1_1MockAdaptationSet.html',1,'edash_packager']]], + ['mockmpdbuilder',['MockMpdBuilder',['../db/d2e/classedash__packager_1_1MockMpdBuilder.html',1,'edash_packager']]], + ['mockmpdnotifier',['MockMpdNotifier',['../d7/d44/classedash__packager_1_1MockMpdNotifier.html',1,'edash_packager']]], + ['mockrepresentation',['MockRepresentation',['../d0/da9/classedash__packager_1_1MockRepresentation.html',1,'edash_packager']]], + ['movie',['Movie',['../d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html',1,'edash_packager::media::mp4']]], + ['movieextends',['MovieExtends',['../d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html',1,'edash_packager::media::mp4']]], + ['movieextendsheader',['MovieExtendsHeader',['../da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html',1,'edash_packager::media::mp4']]], + ['moviefragment',['MovieFragment',['../dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html',1,'edash_packager::media::mp4']]], + ['moviefragmentheader',['MovieFragmentHeader',['../df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html',1,'edash_packager::media::mp4']]], + ['movieheader',['MovieHeader',['../dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html',1,'edash_packager::media::mp4']]], + ['mp2tmediaparser',['Mp2tMediaParser',['../dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.html',1,'edash_packager::media::mp2t']]], + ['mp4mediaparser',['MP4MediaParser',['../d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.html',1,'edash_packager::media::mp4']]], + ['mp4muxer',['MP4Muxer',['../d1/d78/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer.html#ae787aeba358f95d73edf5b80d4fc43fe',1,'edash_packager::media::mp4::MP4Muxer']]], + ['mp4muxer',['MP4Muxer',['../d1/d78/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer.html',1,'edash_packager::media::mp4']]], + ['mpdbuilder',['MpdBuilder',['../d3/dfa/classedash__packager_1_1MpdBuilder.html#a7c826239ca4611979691fa04a563c49f',1,'edash_packager::MpdBuilder']]], + ['mpdbuilder',['MpdBuilder',['../d3/dfa/classedash__packager_1_1MpdBuilder.html',1,'edash_packager']]], + ['mpdnotifier',['MpdNotifier',['../da/d38/classedash__packager_1_1MpdNotifier.html',1,'edash_packager']]], + ['mpdnotifierfactory',['MpdNotifierFactory',['../dd/dcb/classedash__packager_1_1MpdNotifierFactory.html',1,'edash_packager']]], + ['mpdnotifymuxerlistener',['MpdNotifyMuxerListener',['../d3/d0e/classedash__packager_1_1media_1_1MpdNotifyMuxerListener.html',1,'edash_packager::media']]], + ['mpdnotifymuxerlistener',['MpdNotifyMuxerListener',['../d3/d0e/classedash__packager_1_1media_1_1MpdNotifyMuxerListener.html#a44cbf87035056284013231b1e29fe3c7',1,'edash_packager::media::MpdNotifyMuxerListener']]], + ['mpdoptions',['MpdOptions',['../d1/d5d/structedash__packager_1_1MpdOptions.html',1,'edash_packager']]], + ['mpdwriter',['MpdWriter',['../dc/d81/classedash__packager_1_1MpdWriter.html',1,'edash_packager']]], + ['multisegmentsegmenter',['MultiSegmentSegmenter',['../dc/d7a/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html',1,'edash_packager::media::mp4']]], + ['muxer',['Muxer',['../d4/d1d/classedash__packager_1_1media_1_1Muxer.html',1,'edash_packager::media']]], + ['muxerlistener',['MuxerListener',['../df/de7/classedash__packager_1_1media_1_1MuxerListener.html',1,'edash_packager::media']]], + ['muxeroptions',['MuxerOptions',['../de/d57/structedash__packager_1_1media_1_1MuxerOptions.html',1,'edash_packager::media']]] +]; diff --git a/sdk/search/all_c.html b/sdk/search/all_c.html new file mode 100644 index 0000000000..bdd3ee2c50 --- /dev/null +++ b/sdk/search/all_c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/all_c.js b/sdk/search/all_c.js new file mode 100644 index 0000000000..bff2517f81 --- /dev/null +++ b/sdk/search/all_c.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['newsamplecb',['NewSampleCB',['../dc/d48/classedash__packager_1_1media_1_1MediaParser.html#a1628c19a91f1b8ae123f7350936bfe32',1,'edash_packager::media::MediaParser']]], + ['notifyencryptionupdate',['NotifyEncryptionUpdate',['../da/d49/classedash__packager_1_1DashIopMpdNotifier.html#a611739a432dd2e85a2b689face08909c',1,'edash_packager::DashIopMpdNotifier::NotifyEncryptionUpdate()'],['../da/d38/classedash__packager_1_1MpdNotifier.html#a8eb441286be0f2cb96c4348ff88619c5',1,'edash_packager::MpdNotifier::NotifyEncryptionUpdate()'],['../db/d56/classedash__packager_1_1SimpleMpdNotifier.html#a4b7fa0a53ac352a037247476129a8217',1,'edash_packager::SimpleMpdNotifier::NotifyEncryptionUpdate()']]], + ['notifynewcontainer',['NotifyNewContainer',['../da/d49/classedash__packager_1_1DashIopMpdNotifier.html#a8c4fefd4a54ba8167e3445890a236076',1,'edash_packager::DashIopMpdNotifier::NotifyNewContainer()'],['../da/d38/classedash__packager_1_1MpdNotifier.html#a09e6df8ea9ea8c260199449448d1ea62',1,'edash_packager::MpdNotifier::NotifyNewContainer()'],['../db/d56/classedash__packager_1_1SimpleMpdNotifier.html#a3097c09073328b112c75eb0dab4a1c31',1,'edash_packager::SimpleMpdNotifier::NotifyNewContainer()']]], + ['notifynewsegment',['NotifyNewSegment',['../da/d49/classedash__packager_1_1DashIopMpdNotifier.html#afba7a73655f0ad8ae1be714ff8178c2c',1,'edash_packager::DashIopMpdNotifier::NotifyNewSegment()'],['../da/d38/classedash__packager_1_1MpdNotifier.html#a7bb9cce525d5a4f1076b8d58a7bd07ab',1,'edash_packager::MpdNotifier::NotifyNewSegment()'],['../db/d56/classedash__packager_1_1SimpleMpdNotifier.html#a010adc825af58e2c2448505a261ad26c',1,'edash_packager::SimpleMpdNotifier::NotifyNewSegment()']]], + ['notifysampleduration',['NotifySampleDuration',['../da/d49/classedash__packager_1_1DashIopMpdNotifier.html#aefce631c77b946576ecb9c8d6b95f06e',1,'edash_packager::DashIopMpdNotifier::NotifySampleDuration()'],['../da/d38/classedash__packager_1_1MpdNotifier.html#ab4d97816ead500dc7cafac015f1f4979',1,'edash_packager::MpdNotifier::NotifySampleDuration()'],['../db/d56/classedash__packager_1_1SimpleMpdNotifier.html#a47dab0bc8d51b0e86369288b2b1ce967',1,'edash_packager::SimpleMpdNotifier::NotifySampleDuration()']]], + ['num_5fchannels',['num_channels',['../dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html#a0394e15d7eb62d5a2366e78900b93b40',1,'edash_packager::media::mp4::AACAudioSpecificConfig']]], + ['num_5fsubsegments_5fper_5fsidx',['num_subsegments_per_sidx',['../de/d57/structedash__packager_1_1media_1_1MuxerOptions.html#a93714f081569ea56ed626eb057c1761f',1,'edash_packager::media::MuxerOptions']]], + ['numsamples',['NumSamples',['../d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html#a3c087f45de97888c3c537cec1ab6b940',1,'edash_packager::media::mp4::ChunkInfoIterator::NumSamples()'],['../d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html#a10f25f383ea2b2404dc3cd6f8d87dc71',1,'edash_packager::media::mp4::CompositionOffsetIterator::NumSamples()'],['../d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html#af989a372d83019e0a65e8c850e122e47',1,'edash_packager::media::mp4::DecodingTimeIterator::NumSamples()']]] +]; diff --git a/sdk/search/all_d.html b/sdk/search/all_d.html new file mode 100644 index 0000000000..d51093367e --- /dev/null +++ b/sdk/search/all_d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/all_d.js b/sdk/search/all_d.js new file mode 100644 index 0000000000..6fcbedd981 --- /dev/null +++ b/sdk/search/all_d.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['offsetbytequeue',['OffsetByteQueue',['../d1/d92/classedash__packager_1_1media_1_1OffsetByteQueue.html',1,'edash_packager::media']]], + ['onmediaendparameters',['OnMediaEndParameters',['../d3/de7/structedash__packager_1_1media_1_1OnMediaEndParameters.html',1,'edash_packager::media']]], + ['onneedkey',['OnNeedKey',['../dc/df1/classedash__packager_1_1media_1_1DecryptorSource.html#a635b0367a1903f3a0afb1ca931f1274a',1,'edash_packager::media::DecryptorSource']]], + ['onnewsegmentforrepresentation',['OnNewSegmentForRepresentation',['../db/de4/classedash__packager_1_1AdaptationSet.html#aed9c81cd32d8bbb8ed71d5ab3f16efac',1,'edash_packager::AdaptationSet::OnNewSegmentForRepresentation()'],['../d2/dfa/classedash__packager_1_1RepresentationStateChangeListener.html#a555f268d74e4c70afd067ffe2e6ca64e',1,'edash_packager::RepresentationStateChangeListener::OnNewSegmentForRepresentation()']]], + ['onprogress',['OnProgress',['../d9/d2c/classedash__packager_1_1media_1_1ProgressListener.html#a2e30994077f8798d56f61ee20fd9a776',1,'edash_packager::media::ProgressListener']]], + ['onsampledurationready',['OnSampleDurationReady',['../d3/d0e/classedash__packager_1_1media_1_1MpdNotifyMuxerListener.html#af65a2b4d9599f110ff70134286403c02',1,'edash_packager::media::MpdNotifyMuxerListener::OnSampleDurationReady()'],['../df/de7/classedash__packager_1_1media_1_1MuxerListener.html#a5626ff553138db438c561db2ca0d05f2',1,'edash_packager::media::MuxerListener::OnSampleDurationReady()'],['../d9/db4/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener.html#a122af3cd678be6f82766ecdfd5b95467',1,'edash_packager::media::VodMediaInfoDumpMuxerListener::OnSampleDurationReady()']]], + ['onsetframerateforrepresentation',['OnSetFrameRateForRepresentation',['../db/de4/classedash__packager_1_1AdaptationSet.html#ad9adf17a02fabfd4aa8d91a2d65d52ad',1,'edash_packager::AdaptationSet::OnSetFrameRateForRepresentation()'],['../d2/dfa/classedash__packager_1_1RepresentationStateChangeListener.html#aec87eac5d1aefe55dd8c0483ac4354a5',1,'edash_packager::RepresentationStateChangeListener::OnSetFrameRateForRepresentation()']]], + ['open',['Open',['../de/d19/classedash__packager_1_1media_1_1File.html#a4dfd6f4d8f67d2ee1caff4f4e1717c70',1,'edash_packager::media::File::Open(const char *file_name, const char *mode)'],['../de/d19/classedash__packager_1_1media_1_1File.html#a0933ccd7df76fcf8fbcfe12c15dbf6c5',1,'edash_packager::media::File::Open()=0'],['../dd/d98/classedash__packager_1_1media_1_1LocalFile.html#a18709894b20567c0e3db67ba58b08db1',1,'edash_packager::media::LocalFile::Open()'],['../dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html#a32617fd715b893d2b3a799418ef8b45e',1,'edash_packager::media::ThreadedIoFile::Open()'],['../d8/dc7/classedash__packager_1_1media_1_1UdpFile.html#a436506c1512d2488435180a445af11d0',1,'edash_packager::media::UdpFile::Open()']]], + ['openwithnobuffering',['OpenWithNoBuffering',['../de/d19/classedash__packager_1_1media_1_1File.html#a47194a7cd303640c2a8b689d18ef9701',1,'edash_packager::media::File']]], + ['optimizesampleentries',['OptimizeSampleEntries',['../db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html#ae51bbd5482783890e9843fd3ca61f2bb',1,'edash_packager::media::mp4::Fragmenter']]], + ['originalformat',['OriginalFormat',['../da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html',1,'edash_packager::media::mp4']]], + ['output_5ffile_5fname',['output_file_name',['../de/d57/structedash__packager_1_1media_1_1MuxerOptions.html#addd401a47b287f3c18cbdc4bfa1a6963',1,'edash_packager::media::MuxerOptions']]] +]; diff --git a/sdk/search/all_e.html b/sdk/search/all_e.html new file mode 100644 index 0000000000..3cda0172ed --- /dev/null +++ b/sdk/search/all_e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/all_e.js b/sdk/search/all_e.js new file mode 100644 index 0000000000..bdcdaa5294 --- /dev/null +++ b/sdk/search/all_e.js @@ -0,0 +1,26 @@ +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#a416aaeb6231a46548871a419795d1ffc',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#a6680c3e6aebbecf7a8f9462f0ff703bf',1,'edash_packager::media::mp4::MP4MediaParser::Parse()'],['../d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.html#add788399fd476ba8289958bc8ed4ad0e',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']]], + ['pixel_5fheight',['pixel_height',['../d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html#a378a415c21d171a125e0760f0403eb87',1,'edash_packager::media::VideoStreamInfo']]], + ['pixel_5fwidth',['pixel_width',['../d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html#a560d825dacae19d65a800396f7359645',1,'edash_packager::media::VideoStreamInfo']]], + ['pixelaspectratiobox',['PixelAspectRatioBox',['../d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.html',1,'edash_packager::media::mp4']]], + ['pop',['Pop',['../d8/d2e/classedash__packager_1_1media_1_1ByteQueue.html#acac5c7874703c86ba77a50d3be0671d2',1,'edash_packager::media::ByteQueue::Pop()'],['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html#a5e0c4b4fa932d5ad1154f8b263f76796',1,'edash_packager::media::ProducerConsumerQueue::Pop()']]], + ['pos',['Pos',['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#a0b34f56b01acc899ae44ab9f4cb0b783',1,'edash_packager::media::mp4::BoxBuffer']]], + ['post',['Post',['../d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.html#a651b1c5ef001dc365488829266908691',1,'edash_packager::media::HttpKeyFetcher']]], + ['preparechildren',['PrepareChildren',['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#a2e46c4812ac9c48288a8461c230a375b',1,'edash_packager::media::mp4::BoxBuffer']]], + ['preparefragmentforencryption',['PrepareFragmentForEncryption',['../d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html#a3e66313de4ecb51f23fe438758e0153b',1,'edash_packager::media::mp4::EncryptingFragmenter::PrepareFragmentForEncryption()'],['../dc/d8a/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter.html#a27f17363745efa98d860fb703fd24486',1,'edash_packager::media::mp4::KeyRotationFragmenter::PrepareFragmentForEncryption()']]], + ['prevsampledata',['PrevSampleData',['../d9/d7b/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData.html',1,'edash_packager::media::wvm']]], + ['printerror',['PrintError',['../db/d09/namespaceedash__packager.html#a64d35a221086349dfbd1acefee2aaef1',1,'edash_packager']]], + ['producerconsumerqueue',['ProducerConsumerQueue',['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html#a7e0fa49f53accb47b4fbf15c9495d0d1',1,'edash_packager::media::ProducerConsumerQueue::ProducerConsumerQueue(size_t capacity)'],['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html#aabee571894649365e0982a410703a364',1,'edash_packager::media::ProducerConsumerQueue::ProducerConsumerQueue(size_t capacity, size_t starting_pos)']]], + ['producerconsumerqueue',['ProducerConsumerQueue',['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html',1,'edash_packager::media']]], + ['progresslistener',['ProgressListener',['../d9/d2c/classedash__packager_1_1media_1_1ProgressListener.html',1,'edash_packager::media']]], + ['protectionschemeinfo',['ProtectionSchemeInfo',['../dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html',1,'edash_packager::media::mp4']]], + ['protectionsystemspecificheader',['ProtectionSystemSpecificHeader',['../da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html',1,'edash_packager::media::mp4']]], + ['psshboxfrompsshdata',['PsshBoxFromPsshData',['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#ab5478505cfdb660fa6c680819f17f239',1,'edash_packager::media::KeySource']]], + ['pullsample',['PullSample',['../d2/dfd/classedash__packager_1_1media_1_1MediaStream.html#a664ec77fc670a84bf3bd1cf0abb32dae',1,'edash_packager::media::MediaStream']]], + ['push',['Push',['../d8/d2e/classedash__packager_1_1media_1_1ByteQueue.html#afa47d3dc54862cee101d4be8746de6eb',1,'edash_packager::media::ByteQueue::Push()'],['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html#a6a9fc5405d52cfd4178ee76c22dd7fb6',1,'edash_packager::media::ProducerConsumerQueue::Push()']]], + ['pushsample',['PushSample',['../d2/dfd/classedash__packager_1_1media_1_1MediaStream.html#a1a8abeb0ab7746dbe05087078529d40b',1,'edash_packager::media::MediaStream']]] +]; diff --git a/sdk/search/all_f.html b/sdk/search/all_f.html new file mode 100644 index 0000000000..7419b0297e --- /dev/null +++ b/sdk/search/all_f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/all_f.js b/sdk/search/all_f.js new file mode 100644 index 0000000000..ce8e884ee1 --- /dev/null +++ b/sdk/search/all_f.js @@ -0,0 +1,29 @@ +var searchData= +[ + ['read',['Read',['../de/d19/classedash__packager_1_1media_1_1File.html#a663547ead01b035117429c0bc757aab7',1,'edash_packager::media::File::Read()'],['../d3/d6b/classedash__packager_1_1media_1_1IoCache.html#a462bd5ddce8041eaa109271fd0d155a9',1,'edash_packager::media::IoCache::Read()'],['../dd/d98/classedash__packager_1_1media_1_1LocalFile.html#a488cdd1b73eb609b1e5f9b4e16409f86',1,'edash_packager::media::LocalFile::Read()'],['../dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html#afb7375d719f2a34b7d8f0678241e6065',1,'edash_packager::media::ThreadedIoFile::Read()'],['../d8/dc7/classedash__packager_1_1media_1_1UdpFile.html#a2adf69616970042401262643f43a9199',1,'edash_packager::media::UdpFile::Read()']]], + ['read1',['Read1',['../d9/d46/classedash__packager_1_1media_1_1BufferReader.html#a0375f4997e9c934783f51203c4d1434f',1,'edash_packager::media::BufferReader']]], + ['readallchildren',['ReadAllChildren',['../db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html#abe53f02532597d3bd76dc46820aa0615',1,'edash_packager::media::mp4::BoxReader']]], + ['readbits',['ReadBits',['../df/db4/classedash__packager_1_1media_1_1BitReader.html#a9a66cdd1013eb535e7e1eec60a91bf8c',1,'edash_packager::media::BitReader']]], + ['readchild',['ReadChild',['../db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html#a480fdd0a597a8b77f7613abb2e8f5629',1,'edash_packager::media::mp4::BoxReader']]], + ['readchildren',['ReadChildren',['../db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html#a7ce20788aedb0c790e09b83954545ed3',1,'edash_packager::media::mp4::BoxReader']]], + ['reader',['reader',['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#a2141be2c0c4ec27b458df15e13d7239e',1,'edash_packager::media::mp4::BoxBuffer']]], + ['readfiletostring',['ReadFileToString',['../de/d19/classedash__packager_1_1media_1_1File.html#a9a4f45dcab338be2b6843e0de87ce8f1',1,'edash_packager::media::File']]], + ['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#a95b3377915124537010b42719d33d41f',1,'edash_packager::media::mp4::FullBox::ReadWrite()'],['../d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.html#aee4b59f0c2c79982f286f37d04d317f4',1,'edash_packager::media::mp4::FileType::ReadWrite()'],['../dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html#a0cbee70b4915e0a69237bf4f75c06841',1,'edash_packager::media::mp4::SegmentType::ReadWrite()'],['../da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html#a8717c7108b80278d9d1b0a6997d370c8',1,'edash_packager::media::mp4::ProtectionSystemSpecificHeader::ReadWrite()'],['../de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html#aacc3f25a60441cbeefb5719948b8dde6',1,'edash_packager::media::mp4::SampleAuxiliaryInformationOffset::ReadWrite()'],['../d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html#ad535f362d898f88e3bcb290d316e9d88',1,'edash_packager::media::mp4::SampleAuxiliaryInformationSize::ReadWrite()'],['../da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html#ae0c112698de3e06efc084df0b242caef',1,'edash_packager::media::mp4::OriginalFormat::ReadWrite()'],['../d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html#a31b8ef9b3bc870a124a687f8dff84232',1,'edash_packager::media::mp4::SchemeType::ReadWrite()'],['../de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html#a4ae5adc789a5899f89c0e029fd0068af',1,'edash_packager::media::mp4::TrackEncryption::ReadWrite()'],['../d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html#a0e69e1336e39d07b1825212b14f6faf6',1,'edash_packager::media::mp4::SchemeInfo::ReadWrite()'],['../dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html#a2b4ea22e86bf3f8048c38ba7b0ecf4e0',1,'edash_packager::media::mp4::ProtectionSchemeInfo::ReadWrite()'],['../dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html#a468f653814e6dfced50a740e27041ef1',1,'edash_packager::media::mp4::MovieHeader::ReadWrite()'],['../dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html#a1762a314e7634841f0f845463c8e2039',1,'edash_packager::media::mp4::TrackHeader::ReadWrite()'],['../d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html#ad16d9c64a405a56ce74c1ae0bd983bed',1,'edash_packager::media::mp4::EditList::ReadWrite()'],['../d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html#a789e9be1fdec8ac913a5083ce7881e13',1,'edash_packager::media::mp4::Edit::ReadWrite()'],['../d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html#aed599037539c27a4c6b762c7df8af667',1,'edash_packager::media::mp4::HandlerReference::ReadWrite()'],['../d8/dbb/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord.html#a9e70f2e6c23bb86fa5fe387d45877268',1,'edash_packager::media::mp4::AVCDecoderConfigurationRecord::ReadWrite()'],['../d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.html#aee984d288c1c2ab2217726309dff45f4',1,'edash_packager::media::mp4::PixelAspectRatioBox::ReadWrite()'],['../df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html#af7c0db7c32de77af9441c33adcdf7dc8',1,'edash_packager::media::mp4::VideoSampleEntry::ReadWrite()'],['../d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html#a52365fdcab0226980dbca4f252155c11',1,'edash_packager::media::mp4::ElementaryStreamDescriptor::ReadWrite()'],['../df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html#a25e6faaa3aac8ca177ce719ac86a1230',1,'edash_packager::media::mp4::AudioSampleEntry::ReadWrite()'],['../d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html#af78ad2228bedef0f33dd2a3fe390c264',1,'edash_packager::media::mp4::SampleDescription::ReadWrite()'],['../dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html#a182286af9333024dfcd2180c5f9de83f',1,'edash_packager::media::mp4::DecodingTimeToSample::ReadWrite()'],['../da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html#a768b070dcbc3e0ac4c40580f9a269ba7',1,'edash_packager::media::mp4::CompositionTimeToSample::ReadWrite()'],['../df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html#a214d13dad0b592bad63c5c82c26fc5a8',1,'edash_packager::media::mp4::SampleToChunk::ReadWrite()'],['../d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html#a6f6a998d4365581a882d6aa8dd985353',1,'edash_packager::media::mp4::SampleSize::ReadWrite()'],['../db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html#ac6c287b0bbb46232d99065677c61c03f',1,'edash_packager::media::mp4::CompactSampleSize::ReadWrite()'],['../da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html#a3d7da255698a09c8b91d207968b29826',1,'edash_packager::media::mp4::ChunkLargeOffset::ReadWrite()'],['../d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html#a6fad7db4e1e37ea4e7580a24cba95f52',1,'edash_packager::media::mp4::ChunkOffset::ReadWrite()'],['../d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html#a354762cd47fc84fb71e12bbca3eae4cf',1,'edash_packager::media::mp4::SyncSample::ReadWrite()'],['../d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html#af9e1e01aa6c5df02049947f860918fd4',1,'edash_packager::media::mp4::SampleTable::ReadWrite()'],['../d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html#a2394c8a563f790c5d59c0f411483d373',1,'edash_packager::media::mp4::MediaHeader::ReadWrite()'],['../db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html#afccc426ca48ad8d102121164fbd8043a',1,'edash_packager::media::mp4::VideoMediaHeader::ReadWrite()'],['../da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html#aa072240b04b63d3873c26b6cc7290d22',1,'edash_packager::media::mp4::SoundMediaHeader::ReadWrite()'],['../d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html#aa712c1ad4a552f0f8ecd60fd55762e8e',1,'edash_packager::media::mp4::DataEntryUrl::ReadWrite()'],['../d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html#a196ac67de4711af24e952a51261fe096',1,'edash_packager::media::mp4::DataReference::ReadWrite()'],['../d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html#a74378acb05745fdbf8ca7ffdab288cf5',1,'edash_packager::media::mp4::DataInformation::ReadWrite()'],['../dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html#a03433ebd451315154b8ade741c4b9f5d',1,'edash_packager::media::mp4::MediaInformation::ReadWrite()'],['../de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html#af6eb9d251004ac9dc8e719a13991430e',1,'edash_packager::media::mp4::Media::ReadWrite()'],['../d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html#aecbdcf1304f4e05d4bfe94f033fb4997',1,'edash_packager::media::mp4::Track::ReadWrite()'],['../da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html#ab48d5f505d0370a5588a8bfb84dd3c2b',1,'edash_packager::media::mp4::MovieExtendsHeader::ReadWrite()'],['../d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html#a7134a0c406deaf51c639d2314667bdb0',1,'edash_packager::media::mp4::TrackExtends::ReadWrite()'],['../d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html#a0f4cf9ffc7038d41a80286f78dac0e0e',1,'edash_packager::media::mp4::MovieExtends::ReadWrite()'],['../d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html#ad386903689eca40d9dcb6d3f4990288a',1,'edash_packager::media::mp4::Movie::ReadWrite()'],['../d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html#a561a7efedb5a44d431d297be675587a4',1,'edash_packager::media::mp4::TrackFragmentDecodeTime::ReadWrite()'],['../df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html#ac94a4cb68ff87666c7836eb720581a33',1,'edash_packager::media::mp4::MovieFragmentHeader::ReadWrite()'],['../d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html#ac679f1815001fbde1ea447e2c2cdf414',1,'edash_packager::media::mp4::TrackFragmentHeader::ReadWrite()'],['../df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html#acd6288a45825fd9da7e688624405b9db',1,'edash_packager::media::mp4::TrackFragmentRun::ReadWrite()'],['../d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html#a9f52feee1777e711c82f35afd1f8c234',1,'edash_packager::media::mp4::SampleToGroup::ReadWrite()'],['../d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html#afa87507593131c8ebf9413b65259ceb4',1,'edash_packager::media::mp4::SampleGroupDescription::ReadWrite()'],['../d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html#ad712f20ca37aefb6f92d524d305b8d4d',1,'edash_packager::media::mp4::TrackFragment::ReadWrite()'],['../dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html#a03ad067670d4de600019c03c54f1f337',1,'edash_packager::media::mp4::MovieFragment::ReadWrite()'],['../d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html#ae3ce71370a51d6190c9874536239b2cc',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']]], + ['representation',['Representation',['../d7/d15/classedash__packager_1_1Representation.html#a4fc4d0fd6f240f1c79fac0b68b9d9f0d',1,'edash_packager::Representation']]], + ['representation',['Representation',['../d7/d15/classedash__packager_1_1Representation.html',1,'edash_packager']]], + ['representationbasexmlnode',['RepresentationBaseXmlNode',['../d1/dd5/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode.html',1,'edash_packager::xml']]], + ['representationstatechangelistener',['RepresentationStateChangeListener',['../d2/dfa/classedash__packager_1_1RepresentationStateChangeListener.html',1,'edash_packager']]], + ['representationxmlnode',['RepresentationXmlNode',['../dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.html',1,'edash_packager::xml']]], + ['requestsigner',['RequestSigner',['../dc/d73/classedash__packager_1_1media_1_1RequestSigner.html',1,'edash_packager::media']]], + ['reset',['Reset',['../d8/d2e/classedash__packager_1_1media_1_1ByteQueue.html#a452485879d303d5c8654e1b184bc1235',1,'edash_packager::media::ByteQueue']]], + ['rsaprivatekey',['RsaPrivateKey',['../d5/d62/classedash__packager_1_1media_1_1RsaPrivateKey.html',1,'edash_packager::media']]], + ['rsapublickey',['RsaPublicKey',['../d1/d86/classedash__packager_1_1media_1_1RsaPublicKey.html',1,'edash_packager::media']]], + ['rsarequestsigner',['RsaRequestSigner',['../dd/da8/classedash__packager_1_1media_1_1RsaRequestSigner.html',1,'edash_packager::media']]], + ['run',['Run',['../dd/d2b/classedash__packager_1_1media_1_1ClosureThread.html#a016f08770c94f2e92f66f299ee4a5b04',1,'edash_packager::media::ClosureThread::Run()'],['../d5/dce/classedash__packager_1_1media_1_1Demuxer.html#a7caa5e4ce5b80de4dbae7d967ff71f72',1,'edash_packager::media::Demuxer::Run()'],['../d4/d1d/classedash__packager_1_1media_1_1Muxer.html#aa2ef293cdb921d97bb39d038f29da8c4',1,'edash_packager::media::Muxer::Run()']]] +]; diff --git a/sdk/search/classes_0.html b/sdk/search/classes_0.html new file mode 100644 index 0000000000..fabdc03679 --- /dev/null +++ b/sdk/search/classes_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/classes_0.js b/sdk/search/classes_0.js new file mode 100644 index 0000000000..cc4450c861 --- /dev/null +++ b/sdk/search/classes_0.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['aacaudiospecificconfig',['AACAudioSpecificConfig',['../dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html',1,'edash_packager::media::mp4']]], + ['adaptationset',['AdaptationSet',['../db/de4/classedash__packager_1_1AdaptationSet.html',1,'edash_packager']]], + ['adaptationsetxmlnode',['AdaptationSetXmlNode',['../d6/d37/classedash__packager_1_1xml_1_1AdaptationSetXmlNode.html',1,'edash_packager::xml']]], + ['adtsheader',['AdtsHeader',['../db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html',1,'edash_packager::media::mp2t']]], + ['aescbcctsdecryptor',['AesCbcCtsDecryptor',['../dd/d96/classedash__packager_1_1media_1_1AesCbcCtsDecryptor.html',1,'edash_packager::media']]], + ['aescbcctsencryptor',['AesCbcCtsEncryptor',['../d6/da2/classedash__packager_1_1media_1_1AesCbcCtsEncryptor.html',1,'edash_packager::media']]], + ['aescbcpkcs5decryptor',['AesCbcPkcs5Decryptor',['../db/dfe/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor.html',1,'edash_packager::media']]], + ['aescbcpkcs5encryptor',['AesCbcPkcs5Encryptor',['../d6/dc4/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor.html',1,'edash_packager::media']]], + ['aesctrencryptor',['AesCtrEncryptor',['../dd/d79/classedash__packager_1_1media_1_1AesCtrEncryptor.html',1,'edash_packager::media']]], + ['aesrequestsigner',['AesRequestSigner',['../d8/dcc/classedash__packager_1_1media_1_1AesRequestSigner.html',1,'edash_packager::media']]], + ['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']]] +]; diff --git a/sdk/search/classes_1.html b/sdk/search/classes_1.html new file mode 100644 index 0000000000..800b6ae1bf --- /dev/null +++ b/sdk/search/classes_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/classes_1.js b/sdk/search/classes_1.js new file mode 100644 index 0000000000..fdf7f20d28 --- /dev/null +++ b/sdk/search/classes_1.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['bandwidthestimator',['BandwidthEstimator',['../d2/d6f/classBandwidthEstimator.html',1,'']]], + ['bitreader',['BitReader',['../df/db4/classedash__packager_1_1media_1_1BitReader.html',1,'edash_packager::media']]], + ['box',['Box',['../d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html',1,'edash_packager::media::mp4']]], + ['boxbuffer',['BoxBuffer',['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html',1,'edash_packager::media::mp4']]], + ['boxreader',['BoxReader',['../db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html',1,'edash_packager::media::mp4']]], + ['bufferreader',['BufferReader',['../d9/d46/classedash__packager_1_1media_1_1BufferReader.html',1,'edash_packager::media']]], + ['bufferwriter',['BufferWriter',['../df/dde/classedash__packager_1_1media_1_1BufferWriter.html',1,'edash_packager::media']]], + ['bytequeue',['ByteQueue',['../d8/d2e/classedash__packager_1_1media_1_1ByteQueue.html',1,'edash_packager::media']]] +]; diff --git a/sdk/search/classes_10.html b/sdk/search/classes_10.html new file mode 100644 index 0000000000..e03af79468 --- /dev/null +++ b/sdk/search/classes_10.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/classes_10.js b/sdk/search/classes_10.js new file mode 100644 index 0000000000..55cdcf0727 --- /dev/null +++ b/sdk/search/classes_10.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['udpfile',['UdpFile',['../d8/dc7/classedash__packager_1_1media_1_1UdpFile.html',1,'edash_packager::media']]] +]; diff --git a/sdk/search/classes_11.html b/sdk/search/classes_11.html new file mode 100644 index 0000000000..519b239905 --- /dev/null +++ b/sdk/search/classes_11.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/classes_11.js b/sdk/search/classes_11.js new file mode 100644 index 0000000000..80971773cd --- /dev/null +++ b/sdk/search/classes_11.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['videomediaheader',['VideoMediaHeader',['../db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html',1,'edash_packager::media::mp4']]], + ['videosampleentry',['VideoSampleEntry',['../df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html',1,'edash_packager::media::mp4']]], + ['videostreaminfo',['VideoStreamInfo',['../d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html',1,'edash_packager::media']]], + ['videostreaminfoparameters',['VideoStreamInfoParameters',['../d2/dd9/structedash__packager_1_1media_1_1VideoStreamInfoParameters.html',1,'edash_packager::media']]], + ['vodmediainfodumpmuxerlistener',['VodMediaInfoDumpMuxerListener',['../d9/db4/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener.html',1,'edash_packager::media']]] +]; diff --git a/sdk/search/classes_12.html b/sdk/search/classes_12.html new file mode 100644 index 0000000000..4240e9f563 --- /dev/null +++ b/sdk/search/classes_12.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/classes_12.js b/sdk/search/classes_12.js new file mode 100644 index 0000000000..edef242769 --- /dev/null +++ b/sdk/search/classes_12.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['widevinekeysource',['WidevineKeySource',['../db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html',1,'edash_packager::media']]], + ['wvmmediaparser',['WvmMediaParser',['../d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.html',1,'edash_packager::media::wvm']]] +]; diff --git a/sdk/search/classes_13.html b/sdk/search/classes_13.html new file mode 100644 index 0000000000..3c44c2d636 --- /dev/null +++ b/sdk/search/classes_13.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/classes_13.js b/sdk/search/classes_13.js new file mode 100644 index 0000000000..3c875159d6 --- /dev/null +++ b/sdk/search/classes_13.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['xmldeleter',['XmlDeleter',['../d7/de3/structedash__packager_1_1xml_1_1XmlDeleter.html',1,'edash_packager::xml']]], + ['xmlnode',['XmlNode',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html',1,'edash_packager::xml']]] +]; diff --git a/sdk/search/classes_2.html b/sdk/search/classes_2.html new file mode 100644 index 0000000000..f65d263c0c --- /dev/null +++ b/sdk/search/classes_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/classes_2.js b/sdk/search/classes_2.js new file mode 100644 index 0000000000..16c466d8c4 --- /dev/null +++ b/sdk/search/classes_2.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['cencsampleencryptioninfoentry',['CencSampleEncryptionInfoEntry',['../d7/d55/structedash__packager_1_1media_1_1mp4_1_1CencSampleEncryptionInfoEntry.html',1,'edash_packager::media::mp4']]], + ['chunkinfo',['ChunkInfo',['../d8/d21/structedash__packager_1_1media_1_1mp4_1_1ChunkInfo.html',1,'edash_packager::media::mp4']]], + ['chunkinfoiterator',['ChunkInfoIterator',['../d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html',1,'edash_packager::media::mp4']]], + ['chunklargeoffset',['ChunkLargeOffset',['../da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html',1,'edash_packager::media::mp4']]], + ['chunkoffset',['ChunkOffset',['../d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html',1,'edash_packager::media::mp4']]], + ['closurethread',['ClosureThread',['../dd/d2b/classedash__packager_1_1media_1_1ClosureThread.html',1,'edash_packager::media']]], + ['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']]], + ['compositiontimetosample',['CompositionTimeToSample',['../da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html',1,'edash_packager::media::mp4']]], + ['contentprotectionelement',['ContentProtectionElement',['../d0/d96/structedash__packager_1_1ContentProtectionElement.html',1,'edash_packager']]] +]; diff --git a/sdk/search/classes_3.html b/sdk/search/classes_3.html new file mode 100644 index 0000000000..927e837f11 --- /dev/null +++ b/sdk/search/classes_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/classes_3.js b/sdk/search/classes_3.js new file mode 100644 index 0000000000..d44efdcf7b --- /dev/null +++ b/sdk/search/classes_3.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['dashiopmpdnotifier',['DashIopMpdNotifier',['../da/d49/classedash__packager_1_1DashIopMpdNotifier.html',1,'edash_packager']]], + ['dataentryurl',['DataEntryUrl',['../d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html',1,'edash_packager::media::mp4']]], + ['datainformation',['DataInformation',['../d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html',1,'edash_packager::media::mp4']]], + ['datareference',['DataReference',['../d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html',1,'edash_packager::media::mp4']]], + ['decodingtime',['DecodingTime',['../d7/d1c/structedash__packager_1_1media_1_1mp4_1_1DecodingTime.html',1,'edash_packager::media::mp4']]], + ['decodingtimeiterator',['DecodingTimeIterator',['../d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html',1,'edash_packager::media::mp4']]], + ['decodingtimetosample',['DecodingTimeToSample',['../dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html',1,'edash_packager::media::mp4']]], + ['decryptconfig',['DecryptConfig',['../d4/da1/classedash__packager_1_1media_1_1DecryptConfig.html',1,'edash_packager::media']]], + ['decryptorsource',['DecryptorSource',['../dc/df1/classedash__packager_1_1media_1_1DecryptorSource.html',1,'edash_packager::media']]], + ['demuxer',['Demuxer',['../d5/dce/classedash__packager_1_1media_1_1Demuxer.html',1,'edash_packager::media']]], + ['demuxstreamidmediasample',['DemuxStreamIdMediaSample',['../d0/dfa/structedash__packager_1_1media_1_1wvm_1_1DemuxStreamIdMediaSample.html',1,'edash_packager::media::wvm']]] +]; diff --git a/sdk/search/classes_4.html b/sdk/search/classes_4.html new file mode 100644 index 0000000000..a447290ed6 --- /dev/null +++ b/sdk/search/classes_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/classes_4.js b/sdk/search/classes_4.js new file mode 100644 index 0000000000..dac3b9d998 --- /dev/null +++ b/sdk/search/classes_4.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['edit',['Edit',['../d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html',1,'edash_packager::media::mp4']]], + ['editlist',['EditList',['../d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html',1,'edash_packager::media::mp4']]], + ['editlistentry',['EditListEntry',['../dc/d0d/structedash__packager_1_1media_1_1mp4_1_1EditListEntry.html',1,'edash_packager::media::mp4']]], + ['element',['Element',['../d5/d7a/structedash__packager_1_1Element.html',1,'edash_packager']]], + ['elementarystreamdescriptor',['ElementaryStreamDescriptor',['../d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html',1,'edash_packager::media::mp4']]], + ['encryptingfragmenter',['EncryptingFragmenter',['../d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html',1,'edash_packager::media::mp4']]], + ['encryptionkey',['EncryptionKey',['../d0/d86/structedash__packager_1_1media_1_1EncryptionKey.html',1,'edash_packager::media']]], + ['esdescriptor',['ESDescriptor',['../de/db1/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor.html',1,'edash_packager::media::mp4']]], + ['esparser',['EsParser',['../db/df2/classedash__packager_1_1media_1_1mp2t_1_1EsParser.html',1,'edash_packager::media::mp2t']]], + ['esparseradts',['EsParserAdts',['../de/d59/classedash__packager_1_1media_1_1mp2t_1_1EsParserAdts.html',1,'edash_packager::media::mp2t']]], + ['esparserh264',['EsParserH264',['../dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1EsParserH264.html',1,'edash_packager::media::mp2t']]] +]; diff --git a/sdk/search/classes_5.html b/sdk/search/classes_5.html new file mode 100644 index 0000000000..63484c451e --- /dev/null +++ b/sdk/search/classes_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/classes_5.js b/sdk/search/classes_5.js new file mode 100644 index 0000000000..6ea609e1ff --- /dev/null +++ b/sdk/search/classes_5.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['file',['File',['../de/d19/classedash__packager_1_1media_1_1File.html',1,'edash_packager::media']]], + ['filecloser',['FileCloser',['../d0/ddc/structedash__packager_1_1media_1_1FileCloser.html',1,'edash_packager::media']]], + ['filetype',['FileType',['../d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.html',1,'edash_packager::media::mp4']]], + ['fragmenter',['Fragmenter',['../db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html',1,'edash_packager::media::mp4']]], + ['framecencinfo',['FrameCENCInfo',['../d5/ddf/classedash__packager_1_1media_1_1mp4_1_1FrameCENCInfo.html',1,'edash_packager::media::mp4']]], + ['fullbox',['FullBox',['../d6/d8f/structedash__packager_1_1media_1_1mp4_1_1FullBox.html',1,'edash_packager::media::mp4']]] +]; diff --git a/sdk/search/classes_6.html b/sdk/search/classes_6.html new file mode 100644 index 0000000000..f3d70354c6 --- /dev/null +++ b/sdk/search/classes_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/classes_6.js b/sdk/search/classes_6.js new file mode 100644 index 0000000000..03687318e1 --- /dev/null +++ b/sdk/search/classes_6.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['h264bitreader',['H264BitReader',['../d4/d55/classedash__packager_1_1media_1_1H264BitReader.html',1,'edash_packager::media']]], + ['h264bytetounitstreamconverter',['H264ByteToUnitStreamConverter',['../d5/d30/classedash__packager_1_1media_1_1H264ByteToUnitStreamConverter.html',1,'edash_packager::media']]], + ['h264decrefpicmarking',['H264DecRefPicMarking',['../d2/d50/structedash__packager_1_1media_1_1H264DecRefPicMarking.html',1,'edash_packager::media']]], + ['h264modificationofpicnum',['H264ModificationOfPicNum',['../d9/d76/structedash__packager_1_1media_1_1H264ModificationOfPicNum.html',1,'edash_packager::media']]], + ['h264nalu',['H264NALU',['../dd/d41/structedash__packager_1_1media_1_1H264NALU.html',1,'edash_packager::media']]], + ['h264parser',['H264Parser',['../d6/da3/classedash__packager_1_1media_1_1H264Parser.html',1,'edash_packager::media']]], + ['h264pps',['H264PPS',['../dd/dcf/structedash__packager_1_1media_1_1H264PPS.html',1,'edash_packager::media']]], + ['h264seimessage',['H264SEIMessage',['../d4/d93/structedash__packager_1_1media_1_1H264SEIMessage.html',1,'edash_packager::media']]], + ['h264seirecoverypoint',['H264SEIRecoveryPoint',['../d4/dca/structedash__packager_1_1media_1_1H264SEIRecoveryPoint.html',1,'edash_packager::media']]], + ['h264sliceheader',['H264SliceHeader',['../de/d8d/structedash__packager_1_1media_1_1H264SliceHeader.html',1,'edash_packager::media']]], + ['h264sps',['H264SPS',['../d8/db0/structedash__packager_1_1media_1_1H264SPS.html',1,'edash_packager::media']]], + ['h264weightingfactors',['H264WeightingFactors',['../d3/dbc/structedash__packager_1_1media_1_1H264WeightingFactors.html',1,'edash_packager::media']]], + ['handlerreference',['HandlerReference',['../d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html',1,'edash_packager::media::mp4']]], + ['httpkeyfetcher',['HttpKeyFetcher',['../d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.html',1,'edash_packager::media']]] +]; diff --git a/sdk/search/classes_7.html b/sdk/search/classes_7.html new file mode 100644 index 0000000000..9e5f5c9861 --- /dev/null +++ b/sdk/search/classes_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/classes_7.js b/sdk/search/classes_7.js new file mode 100644 index 0000000000..d7fbd71e0e --- /dev/null +++ b/sdk/search/classes_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['iocache',['IoCache',['../d3/d6b/classedash__packager_1_1media_1_1IoCache.html',1,'edash_packager::media']]] +]; diff --git a/sdk/search/classes_8.html b/sdk/search/classes_8.html new file mode 100644 index 0000000000..82c35b32ef --- /dev/null +++ b/sdk/search/classes_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/classes_8.js b/sdk/search/classes_8.js new file mode 100644 index 0000000000..a28f0d6ac8 --- /dev/null +++ b/sdk/search/classes_8.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['keyfetcher',['KeyFetcher',['../d4/d43/classedash__packager_1_1media_1_1KeyFetcher.html',1,'edash_packager::media']]], + ['keyrotationfragmenter',['KeyRotationFragmenter',['../dc/d8a/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter.html',1,'edash_packager::media::mp4']]], + ['keysource',['KeySource',['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html',1,'edash_packager::media']]] +]; diff --git a/sdk/search/classes_9.html b/sdk/search/classes_9.html new file mode 100644 index 0000000000..4e83ac829b --- /dev/null +++ b/sdk/search/classes_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/classes_9.js b/sdk/search/classes_9.js new file mode 100644 index 0000000000..bb116edc14 --- /dev/null +++ b/sdk/search/classes_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['libcryptothreading',['LibcryptoThreading',['../de/de9/classedash__packager_1_1media_1_1LibcryptoThreading.html',1,'edash_packager::media']]], + ['localfile',['LocalFile',['../dd/d98/classedash__packager_1_1media_1_1LocalFile.html',1,'edash_packager::media']]] +]; diff --git a/sdk/search/classes_a.html b/sdk/search/classes_a.html new file mode 100644 index 0000000000..616feb69a2 --- /dev/null +++ b/sdk/search/classes_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/classes_a.js b/sdk/search/classes_a.js new file mode 100644 index 0000000000..4e9f7f3928 --- /dev/null +++ b/sdk/search/classes_a.js @@ -0,0 +1,33 @@ +var searchData= +[ + ['media',['Media',['../de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html',1,'edash_packager::media::mp4']]], + ['mediadata',['MediaData',['../d4/d92/structedash__packager_1_1media_1_1mp4_1_1MediaData.html',1,'edash_packager::media::mp4']]], + ['mediaheader',['MediaHeader',['../d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html',1,'edash_packager::media::mp4']]], + ['mediainformation',['MediaInformation',['../dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html',1,'edash_packager::media::mp4']]], + ['mediaparser',['MediaParser',['../dc/d48/classedash__packager_1_1media_1_1MediaParser.html',1,'edash_packager::media']]], + ['mediasample',['MediaSample',['../d8/d6c/classedash__packager_1_1media_1_1MediaSample.html',1,'edash_packager::media']]], + ['mediastream',['MediaStream',['../d2/dfd/classedash__packager_1_1media_1_1MediaStream.html',1,'edash_packager::media']]], + ['mockadaptationset',['MockAdaptationSet',['../d8/d78/classedash__packager_1_1MockAdaptationSet.html',1,'edash_packager']]], + ['mockmpdbuilder',['MockMpdBuilder',['../db/d2e/classedash__packager_1_1MockMpdBuilder.html',1,'edash_packager']]], + ['mockmpdnotifier',['MockMpdNotifier',['../d7/d44/classedash__packager_1_1MockMpdNotifier.html',1,'edash_packager']]], + ['mockrepresentation',['MockRepresentation',['../d0/da9/classedash__packager_1_1MockRepresentation.html',1,'edash_packager']]], + ['movie',['Movie',['../d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html',1,'edash_packager::media::mp4']]], + ['movieextends',['MovieExtends',['../d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html',1,'edash_packager::media::mp4']]], + ['movieextendsheader',['MovieExtendsHeader',['../da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html',1,'edash_packager::media::mp4']]], + ['moviefragment',['MovieFragment',['../dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html',1,'edash_packager::media::mp4']]], + ['moviefragmentheader',['MovieFragmentHeader',['../df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html',1,'edash_packager::media::mp4']]], + ['movieheader',['MovieHeader',['../dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html',1,'edash_packager::media::mp4']]], + ['mp2tmediaparser',['Mp2tMediaParser',['../dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.html',1,'edash_packager::media::mp2t']]], + ['mp4mediaparser',['MP4MediaParser',['../d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.html',1,'edash_packager::media::mp4']]], + ['mp4muxer',['MP4Muxer',['../d1/d78/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer.html',1,'edash_packager::media::mp4']]], + ['mpdbuilder',['MpdBuilder',['../d3/dfa/classedash__packager_1_1MpdBuilder.html',1,'edash_packager']]], + ['mpdnotifier',['MpdNotifier',['../da/d38/classedash__packager_1_1MpdNotifier.html',1,'edash_packager']]], + ['mpdnotifierfactory',['MpdNotifierFactory',['../dd/dcb/classedash__packager_1_1MpdNotifierFactory.html',1,'edash_packager']]], + ['mpdnotifymuxerlistener',['MpdNotifyMuxerListener',['../d3/d0e/classedash__packager_1_1media_1_1MpdNotifyMuxerListener.html',1,'edash_packager::media']]], + ['mpdoptions',['MpdOptions',['../d1/d5d/structedash__packager_1_1MpdOptions.html',1,'edash_packager']]], + ['mpdwriter',['MpdWriter',['../dc/d81/classedash__packager_1_1MpdWriter.html',1,'edash_packager']]], + ['multisegmentsegmenter',['MultiSegmentSegmenter',['../dc/d7a/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html',1,'edash_packager::media::mp4']]], + ['muxer',['Muxer',['../d4/d1d/classedash__packager_1_1media_1_1Muxer.html',1,'edash_packager::media']]], + ['muxerlistener',['MuxerListener',['../df/de7/classedash__packager_1_1media_1_1MuxerListener.html',1,'edash_packager::media']]], + ['muxeroptions',['MuxerOptions',['../de/d57/structedash__packager_1_1media_1_1MuxerOptions.html',1,'edash_packager::media']]] +]; diff --git a/sdk/search/classes_b.html b/sdk/search/classes_b.html new file mode 100644 index 0000000000..4461152200 --- /dev/null +++ b/sdk/search/classes_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/classes_b.js b/sdk/search/classes_b.js new file mode 100644 index 0000000000..9e47016939 --- /dev/null +++ b/sdk/search/classes_b.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['offsetbytequeue',['OffsetByteQueue',['../d1/d92/classedash__packager_1_1media_1_1OffsetByteQueue.html',1,'edash_packager::media']]], + ['onmediaendparameters',['OnMediaEndParameters',['../d3/de7/structedash__packager_1_1media_1_1OnMediaEndParameters.html',1,'edash_packager::media']]], + ['originalformat',['OriginalFormat',['../da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html',1,'edash_packager::media::mp4']]] +]; diff --git a/sdk/search/classes_c.html b/sdk/search/classes_c.html new file mode 100644 index 0000000000..8f92c8632a --- /dev/null +++ b/sdk/search/classes_c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/classes_c.js b/sdk/search/classes_c.js new file mode 100644 index 0000000000..b66d32b4fd --- /dev/null +++ b/sdk/search/classes_c.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['pixelaspectratiobox',['PixelAspectRatioBox',['../d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.html',1,'edash_packager::media::mp4']]], + ['prevsampledata',['PrevSampleData',['../d9/d7b/structedash__packager_1_1media_1_1wvm_1_1PrevSampleData.html',1,'edash_packager::media::wvm']]], + ['producerconsumerqueue',['ProducerConsumerQueue',['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html',1,'edash_packager::media']]], + ['progresslistener',['ProgressListener',['../d9/d2c/classedash__packager_1_1media_1_1ProgressListener.html',1,'edash_packager::media']]], + ['protectionschemeinfo',['ProtectionSchemeInfo',['../dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html',1,'edash_packager::media::mp4']]], + ['protectionsystemspecificheader',['ProtectionSystemSpecificHeader',['../da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html',1,'edash_packager::media::mp4']]] +]; diff --git a/sdk/search/classes_d.html b/sdk/search/classes_d.html new file mode 100644 index 0000000000..9690cf0bac --- /dev/null +++ b/sdk/search/classes_d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/classes_d.js b/sdk/search/classes_d.js new file mode 100644 index 0000000000..6e561defb7 --- /dev/null +++ b/sdk/search/classes_d.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['representation',['Representation',['../d7/d15/classedash__packager_1_1Representation.html',1,'edash_packager']]], + ['representationbasexmlnode',['RepresentationBaseXmlNode',['../d1/dd5/classedash__packager_1_1xml_1_1RepresentationBaseXmlNode.html',1,'edash_packager::xml']]], + ['representationstatechangelistener',['RepresentationStateChangeListener',['../d2/dfa/classedash__packager_1_1RepresentationStateChangeListener.html',1,'edash_packager']]], + ['representationxmlnode',['RepresentationXmlNode',['../dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.html',1,'edash_packager::xml']]], + ['requestsigner',['RequestSigner',['../dc/d73/classedash__packager_1_1media_1_1RequestSigner.html',1,'edash_packager::media']]], + ['rsaprivatekey',['RsaPrivateKey',['../d5/d62/classedash__packager_1_1media_1_1RsaPrivateKey.html',1,'edash_packager::media']]], + ['rsapublickey',['RsaPublicKey',['../d1/d86/classedash__packager_1_1media_1_1RsaPublicKey.html',1,'edash_packager::media']]], + ['rsarequestsigner',['RsaRequestSigner',['../dd/da8/classedash__packager_1_1media_1_1RsaRequestSigner.html',1,'edash_packager::media']]] +]; diff --git a/sdk/search/classes_e.html b/sdk/search/classes_e.html new file mode 100644 index 0000000000..24a3ef3aba --- /dev/null +++ b/sdk/search/classes_e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/classes_e.js b/sdk/search/classes_e.js new file mode 100644 index 0000000000..a8c6041207 --- /dev/null +++ b/sdk/search/classes_e.js @@ -0,0 +1,31 @@ +var searchData= +[ + ['sampleauxiliaryinformationoffset',['SampleAuxiliaryInformationOffset',['../de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html',1,'edash_packager::media::mp4']]], + ['sampleauxiliaryinformationsize',['SampleAuxiliaryInformationSize',['../d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html',1,'edash_packager::media::mp4']]], + ['sampledescription',['SampleDescription',['../d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html',1,'edash_packager::media::mp4']]], + ['samplegroupdescription',['SampleGroupDescription',['../d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html',1,'edash_packager::media::mp4']]], + ['samplesize',['SampleSize',['../d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html',1,'edash_packager::media::mp4']]], + ['sampletable',['SampleTable',['../d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html',1,'edash_packager::media::mp4']]], + ['sampletochunk',['SampleToChunk',['../df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html',1,'edash_packager::media::mp4']]], + ['sampletogroup',['SampleToGroup',['../d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html',1,'edash_packager::media::mp4']]], + ['sampletogroupentry',['SampleToGroupEntry',['../dd/dab/structedash__packager_1_1media_1_1mp4_1_1SampleToGroupEntry.html',1,'edash_packager::media::mp4']]], + ['schemeinfo',['SchemeInfo',['../d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html',1,'edash_packager::media::mp4']]], + ['schemetype',['SchemeType',['../d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html',1,'edash_packager::media::mp4']]], + ['scopedxmlptr',['ScopedXmlPtr',['../d8/df3/structedash__packager_1_1xml_1_1ScopedXmlPtr.html',1,'edash_packager::xml']]], + ['scopedxmlptr_3c_20xmlnode_20_3e',['ScopedXmlPtr< xmlNode >',['../d8/df3/structedash__packager_1_1xml_1_1ScopedXmlPtr.html',1,'edash_packager::xml']]], + ['segmenter',['Segmenter',['../dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html',1,'edash_packager::media::mp4']]], + ['segmentindex',['SegmentIndex',['../d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html',1,'edash_packager::media::mp4']]], + ['segmentinfo',['SegmentInfo',['../d9/d9b/structedash__packager_1_1SegmentInfo.html',1,'edash_packager']]], + ['segmentreference',['SegmentReference',['../d4/dce/structedash__packager_1_1media_1_1mp4_1_1SegmentReference.html',1,'edash_packager::media::mp4']]], + ['segmenttype',['SegmentType',['../dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html',1,'edash_packager::media::mp4']]], + ['simplempdnotifier',['SimpleMpdNotifier',['../db/d56/classedash__packager_1_1SimpleMpdNotifier.html',1,'edash_packager']]], + ['singlesegmentsegmenter',['SingleSegmentSegmenter',['../da/d75/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html',1,'edash_packager::media::mp4']]], + ['soundmediaheader',['SoundMediaHeader',['../da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html',1,'edash_packager::media::mp4']]], + ['status',['Status',['../d2/d90/classedash__packager_1_1media_1_1Status.html',1,'edash_packager::media']]], + ['streamdescriptor',['StreamDescriptor',['../de/d1f/structedash__packager_1_1media_1_1StreamDescriptor.html',1,'edash_packager::media']]], + ['streamdescriptorcomparefn',['StreamDescriptorCompareFn',['../da/d7d/classedash__packager_1_1media_1_1StreamDescriptorCompareFn.html',1,'edash_packager::media']]], + ['streaminfo',['StreamInfo',['../d6/d06/classedash__packager_1_1media_1_1StreamInfo.html',1,'edash_packager::media']]], + ['subsampleentry',['SubsampleEntry',['../d4/de4/structedash__packager_1_1media_1_1SubsampleEntry.html',1,'edash_packager::media']]], + ['syncsample',['SyncSample',['../d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html',1,'edash_packager::media::mp4']]], + ['syncsampleiterator',['SyncSampleIterator',['../db/d01/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator.html',1,'edash_packager::media::mp4']]] +]; diff --git a/sdk/search/classes_f.html b/sdk/search/classes_f.html new file mode 100644 index 0000000000..cee523ad6b --- /dev/null +++ b/sdk/search/classes_f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/classes_f.js b/sdk/search/classes_f.js new file mode 100644 index 0000000000..0bf41a9524 --- /dev/null +++ b/sdk/search/classes_f.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['texttrack',['TextTrack',['../de/d9e/classedash__packager_1_1media_1_1TextTrack.html',1,'edash_packager::media']]], + ['threadediofile',['ThreadedIoFile',['../dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html',1,'edash_packager::media']]], + ['track',['Track',['../d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html',1,'edash_packager::media::mp4']]], + ['trackencryption',['TrackEncryption',['../de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html',1,'edash_packager::media::mp4']]], + ['trackextends',['TrackExtends',['../d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html',1,'edash_packager::media::mp4']]], + ['trackfragment',['TrackFragment',['../d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html',1,'edash_packager::media::mp4']]], + ['trackfragmentdecodetime',['TrackFragmentDecodeTime',['../d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html',1,'edash_packager::media::mp4']]], + ['trackfragmentheader',['TrackFragmentHeader',['../d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html',1,'edash_packager::media::mp4']]], + ['trackfragmentrun',['TrackFragmentRun',['../df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html',1,'edash_packager::media::mp4']]], + ['trackheader',['TrackHeader',['../dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html',1,'edash_packager::media::mp4']]], + ['trackruniterator',['TrackRunIterator',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html',1,'edash_packager::media::mp4']]], + ['tspacket',['TsPacket',['../d1/d4b/classedash__packager_1_1media_1_1mp2t_1_1TsPacket.html',1,'edash_packager::media::mp2t']]], + ['tssection',['TsSection',['../d8/d8e/classedash__packager_1_1media_1_1mp2t_1_1TsSection.html',1,'edash_packager::media::mp2t']]], + ['tssectionpat',['TsSectionPat',['../dd/d0e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPat.html',1,'edash_packager::media::mp2t']]], + ['tssectionpes',['TsSectionPes',['../de/d8b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPes.html',1,'edash_packager::media::mp2t']]], + ['tssectionpmt',['TsSectionPmt',['../d2/d5b/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPmt.html',1,'edash_packager::media::mp2t']]], + ['tssectionpsi',['TsSectionPsi',['../db/d4e/classedash__packager_1_1media_1_1mp2t_1_1TsSectionPsi.html',1,'edash_packager::media::mp2t']]] +]; diff --git a/sdk/search/close.png b/sdk/search/close.png new file mode 100644 index 0000000000..9342d3dfee Binary files /dev/null and b/sdk/search/close.png differ diff --git a/sdk/search/functions_0.html b/sdk/search/functions_0.html new file mode 100644 index 0000000000..16a5a527a8 --- /dev/null +++ b/sdk/search/functions_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/functions_0.js b/sdk/search/functions_0.js new file mode 100644 index 0000000000..bcb2bbb4a2 --- /dev/null +++ b/sdk/search/functions_0.js @@ -0,0 +1,29 @@ +var searchData= +[ + ['adaptationset',['AdaptationSet',['../db/de4/classedash__packager_1_1AdaptationSet.html#a21ce7ce804532a95f9aea7e2a9c3570e',1,'edash_packager::AdaptationSet']]], + ['addadaptationset',['AddAdaptationSet',['../d3/dfa/classedash__packager_1_1MpdBuilder.html#a301a9b49e15371117e2c050c4e5b038c',1,'edash_packager::MpdBuilder']]], + ['addaudioinfo',['AddAudioInfo',['../dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.html#a1a3d8d8831e19ae010841704c07238c6',1,'edash_packager::xml::RepresentationXmlNode']]], + ['addbaseurl',['AddBaseUrl',['../d3/dfa/classedash__packager_1_1MpdBuilder.html#a5318f500aa6a5b3db7b7925c08d78d91',1,'edash_packager::MpdBuilder']]], + ['addchild',['AddChild',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html#ab823db3ce661b4a967574f1534fc5b95',1,'edash_packager::xml::XmlNode']]], + ['addcontentprotectionelement',['AddContentProtectionElement',['../da/d49/classedash__packager_1_1DashIopMpdNotifier.html#aea9b720de64f38256aeb3cce3ef67ae5',1,'edash_packager::DashIopMpdNotifier::AddContentProtectionElement()'],['../db/de4/classedash__packager_1_1AdaptationSet.html#a419e5b2dc27fef47fb0fcaa17ea09314',1,'edash_packager::AdaptationSet::AddContentProtectionElement()'],['../d7/d15/classedash__packager_1_1Representation.html#a8cb3729f52457e7df08cd05b8f19090e',1,'edash_packager::Representation::AddContentProtectionElement()'],['../da/d38/classedash__packager_1_1MpdNotifier.html#a56969f6d7c09e0aa131ba01d5c880773',1,'edash_packager::MpdNotifier::AddContentProtectionElement()'],['../db/d56/classedash__packager_1_1SimpleMpdNotifier.html#a0fd697605b3ff2ffdb8c892af2fc2e0d',1,'edash_packager::SimpleMpdNotifier::AddContentProtectionElement()']]], + ['addcontentprotectionelements',['AddContentProtectionElements',['../db/d09/namespaceedash__packager.html#a6f62cefcc7cf1a95f19bbea3b310fbab',1,'edash_packager::AddContentProtectionElements(const MediaInfo &media_info, Representation *parent)'],['../db/d09/namespaceedash__packager.html#a63896c3ea3c207506f18095624f2ed84',1,'edash_packager::AddContentProtectionElements(const MediaInfo &media_info, AdaptationSet *parent)']]], + ['addelements',['AddElements',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html#a9d6fa2317a063fb69cfa00c0d5ff3ec7',1,'edash_packager::xml::XmlNode']]], + ['addliveonlyinfo',['AddLiveOnlyInfo',['../dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.html#aef4b41002294b95cba4ed9b2fbb536d6',1,'edash_packager::xml::RepresentationXmlNode']]], + ['addnewsegment',['AddNewSegment',['../d7/d15/classedash__packager_1_1Representation.html#ad40b7da1667aeb77c84958ec4ec0d9eb',1,'edash_packager::Representation']]], + ['addrepresentation',['AddRepresentation',['../db/de4/classedash__packager_1_1AdaptationSet.html#a9a15647b565f9898a5a0e1d3176ff935',1,'edash_packager::AdaptationSet']]], + ['addrole',['AddRole',['../db/de4/classedash__packager_1_1AdaptationSet.html#a3bfc3e2de3eaafc61a4dc2e23c698956',1,'edash_packager::AdaptationSet']]], + ['addroleelement',['AddRoleElement',['../d6/d37/classedash__packager_1_1xml_1_1AdaptationSetXmlNode.html#a40c48f2ed2ac0f550bf019d7e650be94',1,'edash_packager::xml::AdaptationSetXmlNode']]], + ['addsample',['AddSample',['../d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html#a825b7ca051f38ad14f4c6c6241ae443a',1,'edash_packager::media::mp4::EncryptingFragmenter::AddSample()'],['../db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html#a81d8b1f324bdd2bc9cc2e5a469243926',1,'edash_packager::media::mp4::Fragmenter::AddSample()'],['../dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html#a5c21059ee9a533caec81491bdb751c57',1,'edash_packager::media::mp4::Segmenter::AddSample()']]], + ['addstream',['AddStream',['../d4/d1d/classedash__packager_1_1media_1_1Muxer.html#a77c7a214383f64f822d479d226750bf5',1,'edash_packager::media::Muxer']]], + ['addvideoinfo',['AddVideoInfo',['../dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.html#a2b00f576154e002f067849129cff4c4a',1,'edash_packager::xml::RepresentationXmlNode']]], + ['addvodonlyinfo',['AddVODOnlyInfo',['../dc/d05/classedash__packager_1_1xml_1_1RepresentationXmlNode.html#a2afa0f4b92900936e2eb97a218d119a2',1,'edash_packager::xml::RepresentationXmlNode']]], + ['advancechunk',['AdvanceChunk',['../d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html#a9472a31149417750f39cd3aa78ab2562',1,'edash_packager::media::mp4::ChunkInfoIterator']]], + ['advancerun',['AdvanceRun',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#a73b4ffaf8c1bba665c475729c2c9e22f',1,'edash_packager::media::mp4::TrackRunIterator']]], + ['advancesample',['AdvanceSample',['../d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html#abef0d18263efb1ae8b601a88e05fd6cc',1,'edash_packager::media::mp4::ChunkInfoIterator::AdvanceSample()'],['../d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html#a545c773305ae13ef89ab1cef3a7fc1e6',1,'edash_packager::media::mp4::CompositionOffsetIterator::AdvanceSample()'],['../d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html#a147cf702aaaef56bce32ca91c45bc071',1,'edash_packager::media::mp4::DecodingTimeIterator::AdvanceSample()'],['../db/d01/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator.html#af185ed71d28bfb56940821165e4cbef4',1,'edash_packager::media::mp4::SyncSampleIterator::AdvanceSample()'],['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#a0414b608c3dbfb42074fd0d18a792b6c',1,'edash_packager::media::mp4::TrackRunIterator::AdvanceSample()']]], + ['appendint',['AppendInt',['../df/dde/classedash__packager_1_1media_1_1BufferWriter.html#afd1449487750c41331a2d91ac417f115',1,'edash_packager::media::BufferWriter']]], + ['appendnbytes',['AppendNBytes',['../df/dde/classedash__packager_1_1media_1_1BufferWriter.html#ac929211fc97bc8ec880109775757bb81',1,'edash_packager::media::BufferWriter']]], + ['audio_5fdescription',['audio_description',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#a2c58182a77817e4ed4a2860ae3be73df',1,'edash_packager::media::mp4::TrackRunIterator']]], + ['audio_5fobject_5ftype',['audio_object_type',['../dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html#a12bcda441f7745bd70cb9b4fdfb4b9b5',1,'edash_packager::media::mp4::AACAudioSpecificConfig']]], + ['audiostreaminfo',['AudioStreamInfo',['../da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html#a014cdf015863a200c10cb72c3ec042ab',1,'edash_packager::media::AudioStreamInfo']]], + ['auxinfoneedstobecached',['AuxInfoNeedsToBeCached',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#a3538a0f31238843afd2dfb4e94587f03',1,'edash_packager::media::mp4::TrackRunIterator']]] +]; diff --git a/sdk/search/functions_1.html b/sdk/search/functions_1.html new file mode 100644 index 0000000000..3b4eacfebf --- /dev/null +++ b/sdk/search/functions_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/functions_1.js b/sdk/search/functions_1.js new file mode 100644 index 0000000000..ac4bc0992b --- /dev/null +++ b/sdk/search/functions_1.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['bandwidthestimator',['BandwidthEstimator',['../d2/d6f/classBandwidthEstimator.html#aaae9573785ee9d62e0927f806537ea97',1,'BandwidthEstimator']]], + ['bitreader',['BitReader',['../df/db4/classedash__packager_1_1media_1_1BitReader.html#a7cfecfaf6169a0c9286d62b24e7b934e',1,'edash_packager::media::BitReader']]], + ['bits_5favailable',['bits_available',['../df/db4/classedash__packager_1_1media_1_1BitReader.html#a1409a0968749ca5a55ba823cd718065b',1,'edash_packager::media::BitReader']]], + ['boxbuffer',['BoxBuffer',['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#aa1144b8d6912a983d65ff97f44ffeb51',1,'edash_packager::media::mp4::BoxBuffer::BoxBuffer(BoxReader *reader)'],['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#a1ecfb419ea348ad684bf3c1556d1570c',1,'edash_packager::media::mp4::BoxBuffer::BoxBuffer(BufferWriter *writer)']]], + ['buffer',['Buffer',['../df/dde/classedash__packager_1_1media_1_1BufferWriter.html#a8849c495e9e5cb0c33d7633fecbe0643',1,'edash_packager::media::BufferWriter']]], + ['bufferreader',['BufferReader',['../d9/d46/classedash__packager_1_1media_1_1BufferReader.html#a7354b7da262fd2cd4680346d4ae871d8',1,'edash_packager::media::BufferReader']]], + ['bufferwriter',['BufferWriter',['../df/dde/classedash__packager_1_1media_1_1BufferWriter.html#abffefbaff39469927deaaa97fec636a4',1,'edash_packager::media::BufferWriter']]], + ['bytescached',['BytesCached',['../d3/d6b/classedash__packager_1_1media_1_1IoCache.html#a0fe59125434e46c2ea5474cfc9f0e95c',1,'edash_packager::media::IoCache']]], + ['bytesfree',['BytesFree',['../d3/d6b/classedash__packager_1_1media_1_1IoCache.html#ab5f7b9c5bc61e33f91cef7726f222586',1,'edash_packager::media::IoCache']]] +]; diff --git a/sdk/search/functions_10.html b/sdk/search/functions_10.html new file mode 100644 index 0000000000..52cb0d3c43 --- /dev/null +++ b/sdk/search/functions_10.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/functions_10.js b/sdk/search/functions_10.js new file mode 100644 index 0000000000..75b2d33fc4 --- /dev/null +++ b/sdk/search/functions_10.js @@ -0,0 +1,39 @@ +var searchData= +[ + ['sample_5fdelta',['sample_delta',['../d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html#ab7b1c20038d9bb2912cf2cf403d46a92',1,'edash_packager::media::mp4::DecodingTimeIterator']]], + ['sample_5fdescription_5findex',['sample_description_index',['../d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html#ac45e00a98de1ea01bd8c41a9f02fdfbe',1,'edash_packager::media::mp4::ChunkInfoIterator']]], + ['sample_5fduration',['sample_duration',['../dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html#ac2883a5eb0bd7abb50bc3968ac417901',1,'edash_packager::media::mp4::Segmenter']]], + ['sample_5foffset',['sample_offset',['../d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html#a9abe77c82033bb5db017dc889f17b974',1,'edash_packager::media::mp4::CompositionOffsetIterator']]], + ['sampleoffset',['SampleOffset',['../d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html#afa796801fb0e716b82cb7d708d1db871',1,'edash_packager::media::mp4::CompositionOffsetIterator']]], + ['samples_5fper_5fchunk',['samples_per_chunk',['../d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html#a57bb736f64a9ab08b1f1957bedf621b6',1,'edash_packager::media::mp4::ChunkInfoIterator']]], + ['scanchildren',['ScanChildren',['../db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html#a6c660acb6864f70ee1125c3f4c809e02',1,'edash_packager::media::mp4::BoxReader']]], + ['seek',['Seek',['../de/d19/classedash__packager_1_1media_1_1File.html#a28da55565be854b866bf223aa4232042',1,'edash_packager::media::File::Seek()'],['../dd/d98/classedash__packager_1_1media_1_1LocalFile.html#a824c0538b239159c611d8e9eddc59e2d',1,'edash_packager::media::LocalFile::Seek()'],['../dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html#a8779e872a7e9f3f7a060b40e0b1b3049',1,'edash_packager::media::ThreadedIoFile::Seek()'],['../d8/dc7/classedash__packager_1_1media_1_1UdpFile.html#ae4420b53b065a3f11e73f4ae77567087',1,'edash_packager::media::UdpFile::Seek()']]], + ['set_5fclock',['set_clock',['../d4/d1d/classedash__packager_1_1media_1_1Muxer.html#ae22512b48793cb5c91186bc698966bfa',1,'edash_packager::media::Muxer']]], + ['set_5fkey_5ffetcher',['set_key_fetcher',['../db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html#ab483fd321e0f8681c232ac4fbaacb00c',1,'edash_packager::media::WidevineKeySource']]], + ['set_5fsigner',['set_signer',['../db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html#a60554ce4bf32572d8be08d2bc4c63a9b',1,'edash_packager::media::WidevineKeySource']]], + ['setcomplete',['SetComplete',['../dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html#a4e58a007d4daafe1b49a70d39e52e339',1,'edash_packager::media::mp4::Segmenter']]], + ['setcontent',['SetContent',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html#a6eee68b8b44c092e0d923593bb1001d6',1,'edash_packager::xml::XmlNode']]], + ['setcontentprotectionschemeiduri',['SetContentProtectionSchemeIdUri',['../d3/d0e/classedash__packager_1_1media_1_1MpdNotifyMuxerListener.html#a4af24c3e145e7219b27de3bf9623a073',1,'edash_packager::media::MpdNotifyMuxerListener::SetContentProtectionSchemeIdUri()'],['../d9/db4/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener.html#abd5d22401650155842d519bcd17cec5d',1,'edash_packager::media::VodMediaInfoDumpMuxerListener::SetContentProtectionSchemeIdUri()']]], + ['seterror',['SetError',['../d2/d90/classedash__packager_1_1media_1_1Status.html#a9df7f5c60dbb8c1269f499d0cba5bcf5',1,'edash_packager::media::Status']]], + ['setfloatingpointattribute',['SetFloatingPointAttribute',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html#af401948a6377cb12a37afca016f1a733',1,'edash_packager::xml::XmlNode']]], + ['setgroup',['SetGroup',['../db/de4/classedash__packager_1_1AdaptationSet.html#a3bea0954dfe1781afc1c7a624965bc84',1,'edash_packager::AdaptationSet']]], + ['setid',['SetId',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html#ab2ce769958718ef73a580e87e296a470',1,'edash_packager::xml::XmlNode']]], + ['setintegerattribute',['SetIntegerAttribute',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html#a54d635320973dec76f63cf696db3cf2a',1,'edash_packager::xml::XmlNode']]], + ['setiv',['SetIv',['../dd/d79/classedash__packager_1_1media_1_1AesCtrEncryptor.html#a9c68238a73c834fd795d3e4d5e8cfd10',1,'edash_packager::media::AesCtrEncryptor::SetIv()'],['../d6/dc4/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor.html#aca87525a4f8b27efc3e6eefcbe26f55f',1,'edash_packager::media::AesCbcPkcs5Encryptor::SetIv()'],['../db/dfe/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor.html#a0944b9d110e89fa9d63b03060059954e',1,'edash_packager::media::AesCbcPkcs5Decryptor::SetIv()'],['../d6/da2/classedash__packager_1_1media_1_1AesCbcCtsEncryptor.html#a797a78aad46c2b148398c6d15f2b39e3',1,'edash_packager::media::AesCbcCtsEncryptor::SetIv()'],['../dd/d96/classedash__packager_1_1media_1_1AesCbcCtsDecryptor.html#abcb9af2123d5ae47b2c89cf3feb67e06',1,'edash_packager::media::AesCbcCtsDecryptor::SetIv()']]], + ['setkeysource',['SetKeySource',['../d5/dce/classedash__packager_1_1media_1_1Demuxer.html#aec6a0b843399e2bf752e6fe1f56f02ee',1,'edash_packager::media::Demuxer::SetKeySource()'],['../d4/d1d/classedash__packager_1_1media_1_1Muxer.html#a5452ae82c2f8a0df8f855fc35e717f04',1,'edash_packager::media::Muxer::SetKeySource()']]], + ['setmuxerlistener',['SetMuxerListener',['../d4/d1d/classedash__packager_1_1media_1_1Muxer.html#aa8ea4384b819187c51f67ad901aca148',1,'edash_packager::media::Muxer']]], + ['setprogresslistener',['SetProgressListener',['../d4/d1d/classedash__packager_1_1media_1_1Muxer.html#a04959bfe66cdb16053326938df9d445a',1,'edash_packager::media::Muxer']]], + ['setsampleduration',['SetSampleDuration',['../d7/d15/classedash__packager_1_1Representation.html#a4a81a2db7ec245892334ad927621909c',1,'edash_packager::Representation']]], + ['setstringattribute',['SetStringAttribute',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html#a13806def844e3fd8e8cc0e690f292aab',1,'edash_packager::xml::XmlNode']]], + ['size',['Size',['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html#aa502e5cfc6159ded7abb3672cdab8cd5',1,'edash_packager::media::ProducerConsumerQueue::Size()'],['../de/d19/classedash__packager_1_1media_1_1File.html#a1bb2a295cb69b3e51b9cc14969848632',1,'edash_packager::media::File::Size()'],['../dd/d98/classedash__packager_1_1media_1_1LocalFile.html#a8be2c9f77a073682d8ebc6808a2bfa94',1,'edash_packager::media::LocalFile::Size()'],['../dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html#a9724a923f813e99f223d52ddf8e65556',1,'edash_packager::media::ThreadedIoFile::Size()'],['../d8/dc7/classedash__packager_1_1media_1_1UdpFile.html#acd47dd4e3169ee396b721d0c0e00b7dd',1,'edash_packager::media::UdpFile::Size()'],['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#aef7267aa7963866d3dcef4f051f84674',1,'edash_packager::media::mp4::BoxBuffer::Size()']]], + ['skipbits',['SkipBits',['../df/db4/classedash__packager_1_1media_1_1BitReader.html#acacb97d71aaae01796b90d27e7cdca0a',1,'edash_packager::media::BitReader']]], + ['skipbytes',['SkipBytes',['../d9/d46/classedash__packager_1_1media_1_1BufferReader.html#a2b7075e5a47a823b9f66c0ba702f26bf',1,'edash_packager::media::BufferReader']]], + ['start',['Start',['../d2/dfd/classedash__packager_1_1media_1_1MediaStream.html#aaf43ae1836aadcc912298c30bc71838a',1,'edash_packager::media::MediaStream']]], + ['starttoplevelbox',['StartTopLevelBox',['../db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html#a61fc23759071d1445b81cbcc9564c6a4',1,'edash_packager::media::mp4::BoxReader']]], + ['status',['Status',['../d2/d90/classedash__packager_1_1media_1_1Status.html#ab3b32018b2666a73432b860ed27ec4e2',1,'edash_packager::media::Status::Status()'],['../d2/d90/classedash__packager_1_1media_1_1Status.html#a9688991aab3f7b1db8acc5341b81d160',1,'edash_packager::media::Status::Status(error::Code error_code, const std::string &error_message)']]], + ['stop',['Stop',['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html#a04f78e0c31398c66f19a24e6a563436b',1,'edash_packager::media::ProducerConsumerQueue']]], + ['stopped',['Stopped',['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html#ad36a861f53f0b58d398a14ce2d93d793',1,'edash_packager::media::ProducerConsumerQueue']]], + ['streams',['streams',['../d5/dce/classedash__packager_1_1media_1_1Demuxer.html#ae8182d61264096c811f457f50009fe3d',1,'edash_packager::media::Demuxer']]], + ['syncsampleiterator',['SyncSampleIterator',['../db/d01/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator.html#aa96fc4d3705ea3e25b97266675aa9e01',1,'edash_packager::media::mp4::SyncSampleIterator']]], + ['systemname',['SystemName',['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#aa73dacef997e7700b8669bb2db5f8f31',1,'edash_packager::media::KeySource']]] +]; diff --git a/sdk/search/functions_11.html b/sdk/search/functions_11.html new file mode 100644 index 0000000000..5e91b098a9 --- /dev/null +++ b/sdk/search/functions_11.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/functions_11.js b/sdk/search/functions_11.js new file mode 100644 index 0000000000..b7f896c767 --- /dev/null +++ b/sdk/search/functions_11.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['tail',['tail',['../d1/d92/classedash__packager_1_1media_1_1OffsetByteQueue.html#add7aef56ce4f162c047ad7fcf64cf603',1,'edash_packager::media::OffsetByteQueue']]], + ['tailpos',['TailPos',['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html#a860bb54f9c53a25c27b1510b0e21eac9',1,'edash_packager::media::ProducerConsumerQueue']]], + ['tell',['Tell',['../de/d19/classedash__packager_1_1media_1_1File.html#a19409dd7d63022f34aee85640460428e',1,'edash_packager::media::File::Tell()'],['../dd/d98/classedash__packager_1_1media_1_1LocalFile.html#abc713b14716779b3320b69c528fbaaa8',1,'edash_packager::media::LocalFile::Tell()'],['../dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html#a8f460efd19e204bcb04c1feb808ac0cc',1,'edash_packager::media::ThreadedIoFile::Tell()'],['../d8/dc7/classedash__packager_1_1media_1_1UdpFile.html#aeef553c179ac9a645ff766ac03ce71d6',1,'edash_packager::media::UdpFile::Tell()']]], + ['tostring',['ToString',['../da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html#af7d609b21b4ef1a537ceea7511133e1a',1,'edash_packager::media::AudioStreamInfo::ToString()'],['../d8/d6c/classedash__packager_1_1media_1_1MediaSample.html#ad68efaffb542c373364794d1c17e3b8c',1,'edash_packager::media::MediaSample::ToString()'],['../d2/dfd/classedash__packager_1_1media_1_1MediaStream.html#af731dd749053f9650ee8dd2800338750',1,'edash_packager::media::MediaStream::ToString()'],['../d2/d90/classedash__packager_1_1media_1_1Status.html#a590cad3d305a36c1cf05e6770b728187',1,'edash_packager::media::Status::ToString()'],['../d6/d06/classedash__packager_1_1media_1_1StreamInfo.html#ac09810e16cf5cee2f87987bfcc70fece',1,'edash_packager::media::StreamInfo::ToString()'],['../d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html#a6301e6683e6c457e1155d0b1f6dd3baf',1,'edash_packager::media::VideoStreamInfo::ToString()'],['../d3/dfa/classedash__packager_1_1MpdBuilder.html#a1c0fd80514f6f1d90f70bb9e96e744a1',1,'edash_packager::MpdBuilder::ToString()']]], + ['trackruniterator',['TrackRunIterator',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#a2cfa01eaed61581122199666536c4bed',1,'edash_packager::media::mp4::TrackRunIterator']]], + ['tracktypetostring',['TrackTypeToString',['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#a8bab239dd17b01ed607c483c536d1321',1,'edash_packager::media::KeySource']]], + ['trim',['Trim',['../d1/d92/classedash__packager_1_1media_1_1OffsetByteQueue.html#af2a41afe5b213be301b7b9f7ca555fae',1,'edash_packager::media::OffsetByteQueue']]], + ['tryreadchild',['TryReadChild',['../db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html#ae697ff0b40b4aa9feecb45d303f8f6bc',1,'edash_packager::media::mp4::BoxReader']]], + ['tryreadchildren',['TryReadChildren',['../db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html#a1e30404fe509e750023ae39a093b4e6a',1,'edash_packager::media::mp4::BoxReader']]], + ['tryreadwritechild',['TryReadWriteChild',['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#a0573809c43c576c1835f5b8aa0e57191',1,'edash_packager::media::mp4::BoxBuffer']]], + ['type',['type',['../d3/dfa/classedash__packager_1_1MpdBuilder.html#ab23432768423d4489380f45c292c7648',1,'edash_packager::MpdBuilder']]] +]; diff --git a/sdk/search/functions_12.html b/sdk/search/functions_12.html new file mode 100644 index 0000000000..1ab0742ba6 --- /dev/null +++ b/sdk/search/functions_12.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/functions_12.js b/sdk/search/functions_12.js new file mode 100644 index 0000000000..06b16ad6f4 --- /dev/null +++ b/sdk/search/functions_12.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['udpfile',['UdpFile',['../d8/dc7/classedash__packager_1_1media_1_1UdpFile.html#ad52585a56c199c3f5887d5dd77be9142',1,'edash_packager::media::UdpFile']]], + ['uint8vectortobase64',['Uint8VectorToBase64',['../db/d09/namespaceedash__packager.html#ac77ba3cf9242f2a678ec0ba7c61e5d0a',1,'edash_packager']]], + ['update',['Update',['../d2/d90/classedash__packager_1_1media_1_1Status.html#a1c46d74b2d15c4bbcba6d742e82fce34',1,'edash_packager::media::Status']]], + ['updatecontentprotectionpssh',['UpdateContentProtectionPssh',['../db/de4/classedash__packager_1_1AdaptationSet.html#a6630f9954b604bee7f90c11778336fdc',1,'edash_packager::AdaptationSet::UpdateContentProtectionPssh()'],['../d7/d15/classedash__packager_1_1Representation.html#a7fc0e59f273082ccf654025486af79ae',1,'edash_packager::Representation::UpdateContentProtectionPssh()']]], + ['updateiv',['UpdateIv',['../dd/d79/classedash__packager_1_1media_1_1AesCtrEncryptor.html#a8310ce3e9ef83a899173bbd1e6ac5583',1,'edash_packager::media::AesCtrEncryptor']]], + ['updateprogress',['UpdateProgress',['../dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html#a287d51571c92704274550d9f1d246cf9',1,'edash_packager::media::mp4::Segmenter']]], + ['uuid',['UUID',['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#afbb7d084395a1426eb0143ae8357b2fc',1,'edash_packager::media::KeySource::UUID()'],['../db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html#aa917c7570c4010734451bb63d7dc061d',1,'edash_packager::media::WidevineKeySource::UUID()']]] +]; diff --git a/sdk/search/functions_13.html b/sdk/search/functions_13.html new file mode 100644 index 0000000000..724f5c1089 --- /dev/null +++ b/sdk/search/functions_13.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/functions_13.js b/sdk/search/functions_13.js new file mode 100644 index 0000000000..b5b5e42631 --- /dev/null +++ b/sdk/search/functions_13.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['validatefixedcryptoflags',['ValidateFixedCryptoFlags',['../db/d09/namespaceedash__packager.html#a87cbb414bc89b31dc8ba8de91ac9c438',1,'edash_packager']]], + ['validateflag',['ValidateFlag',['../db/d09/namespaceedash__packager.html#a5836ddf029d56f4a8dd43a7b4d8dbaff',1,'edash_packager']]], + ['validatewidevinecryptoflags',['ValidateWidevineCryptoFlags',['../db/d09/namespaceedash__packager.html#a95bb52262b99e97fd7f8f9f0075fe1e6',1,'edash_packager']]], + ['verifysignature',['VerifySignature',['../d1/d86/classedash__packager_1_1media_1_1RsaPublicKey.html#ae83681d1c03c880b4a0e95e7efe61673',1,'edash_packager::media::RsaPublicKey']]], + ['video_5fdescription',['video_description',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#a981f52a2e185f5b9f0bf7bb17ff6f3d8',1,'edash_packager::media::mp4::TrackRunIterator']]], + ['videostreaminfo',['VideoStreamInfo',['../d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html#a75ccfbc06b8458390e1672968eb9bd96',1,'edash_packager::media::VideoStreamInfo']]] +]; diff --git a/sdk/search/functions_14.html b/sdk/search/functions_14.html new file mode 100644 index 0000000000..396906bd30 --- /dev/null +++ b/sdk/search/functions_14.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/functions_14.js b/sdk/search/functions_14.js new file mode 100644 index 0000000000..fd0fe30cc4 --- /dev/null +++ b/sdk/search/functions_14.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['waituntilemptyorclosed',['WaitUntilEmptyOrClosed',['../d3/d6b/classedash__packager_1_1media_1_1IoCache.html#ace4946f4ecb34f84c4750d276404a3e5',1,'edash_packager::media::IoCache']]], + ['widevinekeysource',['WidevineKeySource',['../db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html#a78ebb07ba8a23086ec81839b16472857',1,'edash_packager::media::WidevineKeySource']]], + ['write',['Write',['../de/d19/classedash__packager_1_1media_1_1File.html#ad82196743ff131dd81e8f806735eb818',1,'edash_packager::media::File::Write()'],['../d3/d6b/classedash__packager_1_1media_1_1IoCache.html#a4b7ee97ec07a6b2702ae4b58c9df4413',1,'edash_packager::media::IoCache::Write()'],['../dd/d98/classedash__packager_1_1media_1_1LocalFile.html#a5987e35339fed1cdd1b68f787d1721b2',1,'edash_packager::media::LocalFile::Write()'],['../dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html#a20b995241942ec2926b875692b42c13a',1,'edash_packager::media::ThreadedIoFile::Write()'],['../d8/dc7/classedash__packager_1_1media_1_1UdpFile.html#ae2900433ff9a02756a6b3f8e776a3cdb',1,'edash_packager::media::UdpFile::Write()'],['../d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html#aa7a756828b5514fcd3eaf16d86c413c0',1,'edash_packager::media::mp4::Box::Write()']]], + ['writempdtofile',['WriteMpdToFile',['../d3/dfa/classedash__packager_1_1MpdBuilder.html#a9efa414ddfaf48561f3085daada49ebc',1,'edash_packager::MpdBuilder::WriteMpdToFile()'],['../db/d09/namespaceedash__packager.html#a2ecf0fb529eaf5ab21310d309bb9f9e9',1,'edash_packager::WriteMpdToFile()']]], + ['writer',['writer',['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#ac1c1d4d768f8f656f6ac2b5f4873b0a1',1,'edash_packager::media::mp4::BoxBuffer']]], + ['writetofile',['WriteToFile',['../df/dde/classedash__packager_1_1media_1_1BufferWriter.html#aa83fe945386e5a75d3c377904fdddce2',1,'edash_packager::media::BufferWriter']]] +]; diff --git a/sdk/search/functions_15.html b/sdk/search/functions_15.html new file mode 100644 index 0000000000..2dee32be29 --- /dev/null +++ b/sdk/search/functions_15.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/functions_15.js b/sdk/search/functions_15.js new file mode 100644 index 0000000000..3f578316b2 --- /dev/null +++ b/sdk/search/functions_15.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['xmlnode',['XmlNode',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html#a7b66ce185c5b7841580cfc4357e0f0c2',1,'edash_packager::xml::XmlNode']]] +]; diff --git a/sdk/search/functions_16.html b/sdk/search/functions_16.html new file mode 100644 index 0000000000..55d2cdaf25 --- /dev/null +++ b/sdk/search/functions_16.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/functions_16.js b/sdk/search/functions_16.js new file mode 100644 index 0000000000..4bcb0d5122 --- /dev/null +++ b/sdk/search/functions_16.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['_7eclosurethread',['~ClosureThread',['../dd/d2b/classedash__packager_1_1media_1_1ClosureThread.html#ad39d7f6d00720f04b86f580118da68a5',1,'edash_packager::media::ClosureThread']]], + ['_7efile',['~File',['../de/d19/classedash__packager_1_1media_1_1File.html#ad1a8b1df388b90def135647a0136b0f7',1,'edash_packager::media::File']]] +]; diff --git a/sdk/search/functions_2.html b/sdk/search/functions_2.html new file mode 100644 index 0000000000..78be8b4198 --- /dev/null +++ b/sdk/search/functions_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/functions_2.js b/sdk/search/functions_2.js new file mode 100644 index 0000000000..4059702389 --- /dev/null +++ b/sdk/search/functions_2.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['cacheauxinfo',['CacheAuxInfo',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#a1eff021eb8dd5177f49cc030acd16e8f',1,'edash_packager::media::mp4::TrackRunIterator']]], + ['cancel',['Cancel',['../d5/dce/classedash__packager_1_1media_1_1Demuxer.html#a0181f7db054f0af820942d62683936ab',1,'edash_packager::media::Demuxer::Cancel()'],['../d4/d1d/classedash__packager_1_1media_1_1Muxer.html#abecb4fbe4bcd5257857e397f7f3d096b',1,'edash_packager::media::Muxer::Cancel()']]], + ['childexist',['ChildExist',['../db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html#a5bc71875b0e8fe70cba17e2fe6f974fa',1,'edash_packager::media::mp4::BoxReader']]], + ['chunkinfoiterator',['ChunkInfoIterator',['../d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html#a3461373a1fe3eaf1d58e1af93f5ca5aa',1,'edash_packager::media::mp4::ChunkInfoIterator']]], + ['clear',['Clear',['../d2/d90/classedash__packager_1_1media_1_1Status.html#a0fbada5284f16152c63ebcdd30c36736',1,'edash_packager::media::Status::Clear()'],['../d3/d6b/classedash__packager_1_1media_1_1IoCache.html#ae8ed4943296a88e5d5356347e63c6a42',1,'edash_packager::media::IoCache::Clear()']]], + ['close',['Close',['../de/d19/classedash__packager_1_1media_1_1File.html#a42290da768cd34316d2f4c5fc3976b38',1,'edash_packager::media::File::Close()'],['../d3/d6b/classedash__packager_1_1media_1_1IoCache.html#a4588dbf505a08da8423b525ce24fee92',1,'edash_packager::media::IoCache::Close()'],['../dd/d98/classedash__packager_1_1media_1_1LocalFile.html#a83fe4f07fe74b3a25c91a96f1f343a29',1,'edash_packager::media::LocalFile::Close()'],['../dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html#aa3fba6bc5c73a04dd7ca7911c79d1be9',1,'edash_packager::media::ThreadedIoFile::Close()'],['../d8/dc7/classedash__packager_1_1media_1_1UdpFile.html#a316e2180c12a1712bbe9473a4597fa2c',1,'edash_packager::media::UdpFile::Close()']]], + ['closurethread',['ClosureThread',['../dd/d2b/classedash__packager_1_1media_1_1ClosureThread.html#a8cbb44ca1f4abd7028ba4602af82de0d',1,'edash_packager::media::ClosureThread']]], + ['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#a70b376bfa3ed7be210497ffa2b456f8c',1,'edash_packager::media::mp4::FileType::ComputeSize()'],['../dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html#af9d01112f531869d030e3361ad758459',1,'edash_packager::media::mp4::SegmentType::ComputeSize()'],['../da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html#acb4b95a6f8281435b68ca2eeefb43497',1,'edash_packager::media::mp4::ProtectionSystemSpecificHeader::ComputeSize()'],['../de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html#a01dc0714530b06b10812e24c5098da95',1,'edash_packager::media::mp4::SampleAuxiliaryInformationOffset::ComputeSize()'],['../d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html#a19a37f76e205541befe3776acc61e786',1,'edash_packager::media::mp4::SampleAuxiliaryInformationSize::ComputeSize()'],['../da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html#a4a705bd9a9bbf57c14845c0a5fb8e404',1,'edash_packager::media::mp4::OriginalFormat::ComputeSize()'],['../d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html#a740144f46b76edcda51ed35043c6e271',1,'edash_packager::media::mp4::SchemeType::ComputeSize()'],['../de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html#aef0a237100a4fc719d2b660f245757b6',1,'edash_packager::media::mp4::TrackEncryption::ComputeSize()'],['../d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html#ae1a7f03cce40a6736ab4af8724c4a224',1,'edash_packager::media::mp4::SchemeInfo::ComputeSize()'],['../dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html#accd13d00375bb7e0e1c36e5c477c9430',1,'edash_packager::media::mp4::ProtectionSchemeInfo::ComputeSize()'],['../dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html#a4f0ceec9e870861a5da85312a063fc1d',1,'edash_packager::media::mp4::MovieHeader::ComputeSize()'],['../dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html#a26d1a0d13cd86332ca4ee47990b1fcad',1,'edash_packager::media::mp4::TrackHeader::ComputeSize()'],['../d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html#a96d1e66ddf00c1c4c746df8bac36ffc6',1,'edash_packager::media::mp4::EditList::ComputeSize()'],['../d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html#aea0ad2214b092cb715eb1fec60e55d83',1,'edash_packager::media::mp4::Edit::ComputeSize()'],['../d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html#aa419538295fb5a48293407c0e2946de7',1,'edash_packager::media::mp4::HandlerReference::ComputeSize()'],['../d8/dbb/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord.html#a9c8d24e4a1a7463bfa7dc0dcf7f5c221',1,'edash_packager::media::mp4::AVCDecoderConfigurationRecord::ComputeSize()'],['../d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.html#acb770d7a721bf6134cd8430b17796f07',1,'edash_packager::media::mp4::PixelAspectRatioBox::ComputeSize()'],['../df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html#aa48cbdc2f85dd231ebff8545f1510246',1,'edash_packager::media::mp4::VideoSampleEntry::ComputeSize()'],['../d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html#a2b9986a0b19fdf4d68f89b28e450cb51',1,'edash_packager::media::mp4::ElementaryStreamDescriptor::ComputeSize()'],['../df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html#a4bbef873e7c8603e63e176197c794ce2',1,'edash_packager::media::mp4::AudioSampleEntry::ComputeSize()'],['../d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html#a4b90f5dd8bcde92a8b52def46a91a966',1,'edash_packager::media::mp4::SampleDescription::ComputeSize()'],['../dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html#a3affc991338288a7387a9aa760d18a8d',1,'edash_packager::media::mp4::DecodingTimeToSample::ComputeSize()'],['../da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html#ae896fdf2beefff0fc5634a70c5c8c823',1,'edash_packager::media::mp4::CompositionTimeToSample::ComputeSize()'],['../df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html#ae68342dbf4090359270712277782174f',1,'edash_packager::media::mp4::SampleToChunk::ComputeSize()'],['../d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html#aa70e74855b1f9376ca919224f756752d',1,'edash_packager::media::mp4::SampleSize::ComputeSize()'],['../db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html#ad5c6ba5fb139808dc02c94736d5458e9',1,'edash_packager::media::mp4::CompactSampleSize::ComputeSize()'],['../da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html#a991b5de79d547de62009b8d0f667ef2e',1,'edash_packager::media::mp4::ChunkLargeOffset::ComputeSize()'],['../d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html#a11c731fb14147399cc0b41c6df86f420',1,'edash_packager::media::mp4::ChunkOffset::ComputeSize()'],['../d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html#add9214f52fa7a772fd90b6cfb46d126e',1,'edash_packager::media::mp4::SyncSample::ComputeSize()'],['../d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html#a9de5d55994064b02da1e15f67f463b8c',1,'edash_packager::media::mp4::SampleTable::ComputeSize()'],['../d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html#a205d8ac5b69bf0c30d96f83612ea7ef5',1,'edash_packager::media::mp4::MediaHeader::ComputeSize()'],['../db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html#a487564c539ae330d105c11d91893e729',1,'edash_packager::media::mp4::VideoMediaHeader::ComputeSize()'],['../da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html#a911d881fd4ddcbd08220636c976131cb',1,'edash_packager::media::mp4::SoundMediaHeader::ComputeSize()'],['../d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html#ab31cbd4b92e85f4818e3c2851273b2b3',1,'edash_packager::media::mp4::DataEntryUrl::ComputeSize()'],['../d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html#ae9d7c3108d067a1877ab78701f6e094f',1,'edash_packager::media::mp4::DataReference::ComputeSize()'],['../d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html#aec8cefe3ee77026442606de05ad9fab2',1,'edash_packager::media::mp4::DataInformation::ComputeSize()'],['../dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html#a778f430be294714dbb1ce046c91a9d90',1,'edash_packager::media::mp4::MediaInformation::ComputeSize()'],['../de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html#abcc1078c48042de9a22c45cf43c57a24',1,'edash_packager::media::mp4::Media::ComputeSize()'],['../d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html#a9e63316b33f60fbbd427151ccc4cf362',1,'edash_packager::media::mp4::Track::ComputeSize()'],['../da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html#a05e1f3bbddd01beeac2fc74c91e7a7b9',1,'edash_packager::media::mp4::MovieExtendsHeader::ComputeSize()'],['../d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html#a901f92e643e717bff9f15d2d60f82263',1,'edash_packager::media::mp4::TrackExtends::ComputeSize()'],['../d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html#a46d5b4563b2bc9ab0bec8c01dfaf8d9e',1,'edash_packager::media::mp4::MovieExtends::ComputeSize()'],['../d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html#ac20ee937a3b3f729c297cee8ca248631',1,'edash_packager::media::mp4::Movie::ComputeSize()'],['../d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html#ae12a6c2e4911ce32ef7329a57c73d6f4',1,'edash_packager::media::mp4::TrackFragmentDecodeTime::ComputeSize()'],['../df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html#abfb490674198f191115062cc323301d9',1,'edash_packager::media::mp4::MovieFragmentHeader::ComputeSize()'],['../d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html#ab37fe3a3aa8e4cbb44d5ef74b017a61b',1,'edash_packager::media::mp4::TrackFragmentHeader::ComputeSize()'],['../df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html#a1990d61f437d6c00b34d24879093dba7',1,'edash_packager::media::mp4::TrackFragmentRun::ComputeSize()'],['../d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html#a299f9846b41dbda38a661a272fb9f193',1,'edash_packager::media::mp4::SampleToGroup::ComputeSize()'],['../d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html#a87cea8f911a5b4aa5878c1a4745e15c8',1,'edash_packager::media::mp4::SampleGroupDescription::ComputeSize()'],['../d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html#aef01b7dd73fe290b1b30d9865ed25384',1,'edash_packager::media::mp4::TrackFragment::ComputeSize()'],['../dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html#abff1d6806ec6a0c1a2c1b28dc9967246',1,'edash_packager::media::mp4::MovieFragment::ComputeSize()'],['../d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html#aeafe332bcb895a90db770f509dac1001',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']]], + ['converttoadts',['ConvertToADTS',['../dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html#a4413882e6649fc144d6ab2c1e9643a93',1,'edash_packager::media::mp4::AACAudioSpecificConfig']]], + ['copyfrom',['CopyFrom',['../d8/d6c/classedash__packager_1_1media_1_1MediaSample.html#ac65ec88fbe6d8b72c65b1ff3f68c5b02',1,'edash_packager::media::MediaSample::CopyFrom(const uint8_t *data, size_t size, bool is_key_frame)'],['../d8/d6c/classedash__packager_1_1media_1_1MediaSample.html#a7803f974ab6cdf542be46332598fef56',1,'edash_packager::media::MediaSample::CopyFrom(const uint8_t *data, size_t size, const uint8_t *side_data, size_t side_data_size, bool is_key_frame)']]], + ['create',['Create',['../d5/d62/classedash__packager_1_1media_1_1RsaPrivateKey.html#a9360becce7c1e7be0bdecf2ce411b871',1,'edash_packager::media::RsaPrivateKey::Create()'],['../d1/d86/classedash__packager_1_1media_1_1RsaPublicKey.html#a21f9009c9654f141676ef05f0436baa4',1,'edash_packager::media::RsaPublicKey::Create()']]], + ['createemptymediasample',['CreateEmptyMediaSample',['../d8/d6c/classedash__packager_1_1media_1_1MediaSample.html#ac30e98c643959047439a3b71baa399ca',1,'edash_packager::media::MediaSample']]], + ['createencryptor',['CreateEncryptor',['../d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html#a5ed5486f22438e20d0d41524a47f4dd3',1,'edash_packager::media::mp4::EncryptingFragmenter']]], + ['createeosbuffer',['CreateEOSBuffer',['../d8/d6c/classedash__packager_1_1media_1_1MediaSample.html#ae449ca4aeea6cacb8c08a56d9652a64e',1,'edash_packager::media::MediaSample']]], + ['createfromhexstrings',['CreateFromHexStrings',['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#ab05172d89513c0d3627502c9cff4535f',1,'edash_packager::media::KeySource']]], + ['createsigner',['CreateSigner',['../d8/dcc/classedash__packager_1_1media_1_1AesRequestSigner.html#a1e43c2e7e3ab4f5e07d442ed59fc1278',1,'edash_packager::media::AesRequestSigner::CreateSigner()'],['../dd/da8/classedash__packager_1_1media_1_1RsaRequestSigner.html#a51517907c457f9f991e1a72ce4355183',1,'edash_packager::media::RsaRequestSigner::CreateSigner()']]], + ['current_5fchunk',['current_chunk',['../d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html#ab3a329468f494ff3143d4c43c94d13ba',1,'edash_packager::media::mp4::ChunkInfoIterator']]] +]; diff --git a/sdk/search/functions_3.html b/sdk/search/functions_3.html new file mode 100644 index 0000000000..ebf2eebd0f --- /dev/null +++ b/sdk/search/functions_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/functions_3.js b/sdk/search/functions_3.js new file mode 100644 index 0000000000..e7b5f77870 --- /dev/null +++ b/sdk/search/functions_3.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['dash_5fprofile',['dash_profile',['../da/d38/classedash__packager_1_1MpdNotifier.html#ad49d92e75fcbb2ad1d5e43cd3d0716f7',1,'edash_packager::MpdNotifier']]], + ['decodingtimeiterator',['DecodingTimeIterator',['../d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html#a23d155e855c769a50114d0a720b6aac0',1,'edash_packager::media::mp4::DecodingTimeIterator']]], + ['decrypt',['Decrypt',['../db/dfe/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor.html#a99992a6413029b81074735a74ce392e3',1,'edash_packager::media::AesCbcPkcs5Decryptor::Decrypt()'],['../dd/d96/classedash__packager_1_1media_1_1AesCbcCtsDecryptor.html#ab4401816a4dbae48500ce4e8f011c511',1,'edash_packager::media::AesCbcCtsDecryptor::Decrypt(const uint8_t *ciphertext, size_t size, uint8_t *plaintext)'],['../dd/d96/classedash__packager_1_1media_1_1AesCbcCtsDecryptor.html#a07ead5ae4cff840782578f123a79c5e8',1,'edash_packager::media::AesCbcCtsDecryptor::Decrypt(const std::vector< uint8_t > &ciphertext, std::vector< uint8_t > *plaintext)'],['../d5/d62/classedash__packager_1_1media_1_1RsaPrivateKey.html#a5356e2154dfc0707df39f603932ed96b',1,'edash_packager::media::RsaPrivateKey::Decrypt()']]], + ['decryptconfig',['DecryptConfig',['../d4/da1/classedash__packager_1_1media_1_1DecryptConfig.html#a8241c75bb72af0b2de61ae1e276692ed',1,'edash_packager::media::DecryptConfig']]], + ['delete',['Delete',['../de/d19/classedash__packager_1_1media_1_1File.html#a7e0fcd3c439e810e8e17baf32dcc75af',1,'edash_packager::media::File::Delete()'],['../dd/d98/classedash__packager_1_1media_1_1LocalFile.html#a95e4a5eff87224c9a156b5e2c7824cb9',1,'edash_packager::media::LocalFile::Delete()']]], + ['demuxer',['Demuxer',['../d5/dce/classedash__packager_1_1media_1_1Demuxer.html#a5305b2b16956b7ab973eeded4232226e',1,'edash_packager::media::Demuxer']]], + ['duration',['Duration',['../d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html#a20162e42fe14b8135828f2d8d6cdd2ef',1,'edash_packager::media::mp4::DecodingTimeIterator']]] +]; diff --git a/sdk/search/functions_4.html b/sdk/search/functions_4.html new file mode 100644 index 0000000000..7317ea9163 --- /dev/null +++ b/sdk/search/functions_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/functions_4.js b/sdk/search/functions_4.js new file mode 100644 index 0000000000..22b3ad95d7 --- /dev/null +++ b/sdk/search/functions_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['empty',['Empty',['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html#a43aa98358d9f8e0f416a6170ae3cb925',1,'edash_packager::media::ProducerConsumerQueue']]], + ['encrypt',['Encrypt',['../d6/dc4/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor.html#aa9e31be1aef797b9c06e5f3beb524dc8',1,'edash_packager::media::AesCbcPkcs5Encryptor::Encrypt()'],['../d6/da2/classedash__packager_1_1media_1_1AesCbcCtsEncryptor.html#a8bc803d458d2443cb59d20b6d14c3c30',1,'edash_packager::media::AesCbcCtsEncryptor::Encrypt(const uint8_t *plaintext, size_t size, uint8_t *ciphertext)'],['../d6/da2/classedash__packager_1_1media_1_1AesCbcCtsEncryptor.html#acd3e07715507f0edebf92dc14535aa70',1,'edash_packager::media::AesCbcCtsEncryptor::Encrypt(const std::vector< uint8_t > &plaintext, std::vector< uint8_t > *ciphertext)'],['../d1/d86/classedash__packager_1_1media_1_1RsaPublicKey.html#a287216e5bb6ac3781388db23329a8f27',1,'edash_packager::media::RsaPublicKey::Encrypt()']]], + ['encryptingfragmenter',['EncryptingFragmenter',['../d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html#ae4352e452ece69206073274efd855f44',1,'edash_packager::media::mp4::EncryptingFragmenter']]] +]; diff --git a/sdk/search/functions_5.html b/sdk/search/functions_5.html new file mode 100644 index 0000000000..1f1d9ce1b7 --- /dev/null +++ b/sdk/search/functions_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/functions_5.js b/sdk/search/functions_5.js new file mode 100644 index 0000000000..8f1c3762af --- /dev/null +++ b/sdk/search/functions_5.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['fetchkeys',['FetchKeys',['../d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.html#a4fc91ba68a7ae4bd63c1b36ed859afda',1,'edash_packager::media::HttpKeyFetcher::FetchKeys()'],['../d4/d43/classedash__packager_1_1media_1_1KeyFetcher.html#ae633bbf42ceb4c4c149a2409517047e5',1,'edash_packager::media::KeyFetcher::FetchKeys()'],['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#a4020839c22a550bf71d891bf55087e0b',1,'edash_packager::media::KeySource::FetchKeys(const std::vector< uint8_t > &content_id, const std::string &policy)'],['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#aff319f4d17ed480243469eb8af5fa915',1,'edash_packager::media::KeySource::FetchKeys(const std::vector< uint8_t > &pssh_data)'],['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#a68de1e9682273c2dc9b8db04718d426c',1,'edash_packager::media::KeySource::FetchKeys(uint32_t asset_id)'],['../db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html#ae1c98fdfcd87e43dd66649eaf7803777',1,'edash_packager::media::WidevineKeySource::FetchKeys(const std::vector< uint8_t > &content_id, const std::string &policy) OVERRIDE'],['../db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html#aad9a049ef0b09f7f8144cd7109ae0172',1,'edash_packager::media::WidevineKeySource::FetchKeys(const std::vector< uint8_t > &pssh_data) OVERRIDE'],['../db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html#a51db56855b151c5e52466e226d6350dd',1,'edash_packager::media::WidevineKeySource::FetchKeys(uint32_t asset_id) OVERRIDE']]], + ['file_5fname',['file_name',['../de/d19/classedash__packager_1_1media_1_1File.html#ad736ca7bb8da1cec749f51275a87872c',1,'edash_packager::media::File']]], + ['finalize',['Finalize',['../dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html#ad1136a3e7c2e796267fbd3879d108c2a',1,'edash_packager::media::mp4::Segmenter']]], + ['finalizefragment',['FinalizeFragment',['../d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html#a55fb4db47cb106c39a411f8890619d91',1,'edash_packager::media::mp4::EncryptingFragmenter::FinalizeFragment()'],['../db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html#a5f346308fec8fa24cf47cf7ffd21d741',1,'edash_packager::media::mp4::Fragmenter::FinalizeFragment()']]], + ['finalizefragmentforencryption',['FinalizeFragmentForEncryption',['../d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html#a0184deccbe7e99ea7a685cf0de2f9156',1,'edash_packager::media::mp4::EncryptingFragmenter::FinalizeFragmentForEncryption()'],['../dc/d8a/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter.html#ac3e6524b5456598717425c868785c320',1,'edash_packager::media::mp4::KeyRotationFragmenter::FinalizeFragmentForEncryption()']]], + ['flush',['Flush',['../dc/d48/classedash__packager_1_1media_1_1MediaParser.html#ad9906a71035190a798a9aa8aed0a92b8',1,'edash_packager::media::MediaParser::Flush()'],['../de/d19/classedash__packager_1_1media_1_1File.html#ace9275a79c572614ee5d068a04c76392',1,'edash_packager::media::File::Flush()'],['../dd/d98/classedash__packager_1_1media_1_1LocalFile.html#a45443ac38c05ca205cbb1d49a9ed6e7a',1,'edash_packager::media::LocalFile::Flush()'],['../dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html#a41687c598757658a4e81a9aa2542c4d7',1,'edash_packager::media::ThreadedIoFile::Flush()'],['../d8/dc7/classedash__packager_1_1media_1_1UdpFile.html#a0d0b73919bc1f30a0b697dc39e6e9413',1,'edash_packager::media::UdpFile::Flush()'],['../dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.html#a3b4fdfa2e74ea2817c44a23feb714758',1,'edash_packager::media::mp2t::Mp2tMediaParser::Flush()'],['../d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.html#a22f451f9ca693732e0c57e0a46b6a0c6',1,'edash_packager::media::mp4::MP4MediaParser::Flush()'],['../d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.html#a812b6a9ecaf18d4cd5da3b0c4adca5b6',1,'edash_packager::media::wvm::WvmMediaParser::Flush()'],['../da/d49/classedash__packager_1_1DashIopMpdNotifier.html#a952baa36fc361001a1101c39850a160c',1,'edash_packager::DashIopMpdNotifier::Flush()'],['../da/d38/classedash__packager_1_1MpdNotifier.html#aaeba5920a9df8db366f8cf86d64e855c',1,'edash_packager::MpdNotifier::Flush()'],['../db/d56/classedash__packager_1_1SimpleMpdNotifier.html#a39ebf425f66423a336eeca00fbf0be5e',1,'edash_packager::SimpleMpdNotifier::Flush()']]], + ['forcesetsegmentalignment',['ForceSetSegmentAlignment',['../db/de4/classedash__packager_1_1AdaptationSet.html#a949526c833122b9a1ca40b9990224990',1,'edash_packager::AdaptationSet']]], + ['fragmenter',['Fragmenter',['../db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html#ae285aba21b3099fe0d5b9e5236583bc8',1,'edash_packager::media::mp4::Fragmenter']]], + ['frequency',['frequency',['../dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html#a67fdc1b4f5787341e27d07c814a01a08',1,'edash_packager::media::mp4::AACAudioSpecificConfig']]] +]; diff --git a/sdk/search/functions_6.html b/sdk/search/functions_6.html new file mode 100644 index 0000000000..c9faaa6a99 --- /dev/null +++ b/sdk/search/functions_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/functions_6.js b/sdk/search/functions_6.js new file mode 100644 index 0000000000..11a5441fe9 --- /dev/null +++ b/sdk/search/functions_6.js @@ -0,0 +1,28 @@ +var searchData= +[ + ['generatesegmentreference',['GenerateSegmentReference',['../db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html#a04350ab4d9b2b403d8b150512786b7ec',1,'edash_packager::media::mp4::Fragmenter']]], + ['generatesignature',['GenerateSignature',['../dc/d73/classedash__packager_1_1media_1_1RequestSigner.html#a76278a2339751c4e69876e63cc088ef6',1,'edash_packager::media::RequestSigner::GenerateSignature()'],['../d8/dcc/classedash__packager_1_1media_1_1AesRequestSigner.html#a51991363bcf03d2413021eedb604cec0',1,'edash_packager::media::AesRequestSigner::GenerateSignature()'],['../dd/da8/classedash__packager_1_1media_1_1RsaRequestSigner.html#accde8727716a5ae84cb422efa1d65d0a',1,'edash_packager::media::RsaRequestSigner::GenerateSignature()'],['../d5/d62/classedash__packager_1_1media_1_1RsaPrivateKey.html#ab402109f8456af90f3cc34cee76184d9',1,'edash_packager::media::RsaPrivateKey::GenerateSignature()']]], + ['get',['Get',['../d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.html#a20da7a424dfe7ec7bf198b118a08aacb',1,'edash_packager::media::HttpKeyFetcher']]], + ['getadtsframesize',['GetAdtsFrameSize',['../db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html#aacce540b215432703697c6a1172c3011',1,'edash_packager::media::mp2t::AdtsHeader']]], + ['getadtsheadersize',['GetAdtsHeaderSize',['../db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html#a87affdf0dc61bedb13bafd76c3d5b484',1,'edash_packager::media::mp2t::AdtsHeader']]], + ['getaudiospecificconfig',['GetAudioSpecificConfig',['../db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html#a65c36a606121daa90c44b44632b634ec',1,'edash_packager::media::mp2t::AdtsHeader']]], + ['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()']]], + ['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#a92e7ca7acadd1beed5b301dc092d5d75',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']]], + ['getduration',['GetDuration',['../dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html#a0e5e570d5f82c796ba015ca06c7a676c',1,'edash_packager::media::mp4::Segmenter']]], + ['getfilesize',['GetFileSize',['../de/d19/classedash__packager_1_1media_1_1File.html#a239a76adb5ff5c5340c58f96d7034ec6',1,'edash_packager::media::File']]], + ['getindexrange',['GetIndexRange',['../dc/d7a/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html#ac536e13f4e0940566ac1fe53fb7f4dc6',1,'edash_packager::media::mp4::MultiSegmentSegmenter::GetIndexRange()'],['../dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html#acbb0ad06a2e0effee437c9037970c5b2',1,'edash_packager::media::mp4::Segmenter::GetIndexRange()'],['../da/d75/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html#a4c5ed066a3f37ac24211a8a793d18840',1,'edash_packager::media::mp4::SingleSegmentSegmenter::GetIndexRange()']]], + ['getinitrange',['GetInitRange',['../dc/d7a/classedash__packager_1_1media_1_1mp4_1_1MultiSegmentSegmenter.html#aa8a22b2a7e271abed76c25b531a919fd',1,'edash_packager::media::mp4::MultiSegmentSegmenter::GetInitRange()'],['../dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html#ae2b35481b5fd2a0bbbcfb970bbaddf12',1,'edash_packager::media::mp4::Segmenter::GetInitRange()'],['../da/d75/classedash__packager_1_1media_1_1mp4_1_1SingleSegmentSegmenter.html#ac66a1ec675201ed886a4470ebc02bbaa',1,'edash_packager::media::mp4::SingleSegmentSegmenter::GetInitRange()']]], + ['getkey',['GetKey',['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#a49ccfe7a61c36ac9818482a7892915d3',1,'edash_packager::media::KeySource::GetKey(TrackType track_type, EncryptionKey *key)'],['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#a2d44267b238a221bb8a7d2bc1bf68ea2',1,'edash_packager::media::KeySource::GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key)'],['../db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html#aa0bb08bc936e7ba6b554214246c71a90',1,'edash_packager::media::WidevineKeySource::GetKey(TrackType track_type, EncryptionKey *key) OVERRIDE'],['../db/da4/classedash__packager_1_1media_1_1WidevineKeySource.html#a57be27cf9214278ae5f911b9fbe7078d',1,'edash_packager::media::WidevineKeySource::GetKey(const std::vector< uint8_t > &key_id, EncryptionKey *key) OVERRIDE']]], + ['getmaxclearoffset',['GetMaxClearOffset',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#a0927d4e877f453b00e3eb08230510a6c',1,'edash_packager::media::mp4::TrackRunIterator']]], + ['getnumchannels',['GetNumChannels',['../db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html#aceebc7b088f459286fb3c338fa0b5407',1,'edash_packager::media::mp2t::AdtsHeader::GetNumChannels()'],['../dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html#abc1eea761852eb3d714a2f867f54db76',1,'edash_packager::media::mp4::AACAudioSpecificConfig::GetNumChannels()']]], + ['getobjecttype',['GetObjectType',['../db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html#acadaa27044a3976e210c3dae65bff1a6',1,'edash_packager::media::mp2t::AdtsHeader']]], + ['getoutputsamplespersecond',['GetOutputSamplesPerSecond',['../dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html#acfe6c1dd618394a923c98c354c63fa2b',1,'edash_packager::media::mp4::AACAudioSpecificConfig']]], + ['getrawptr',['GetRawPtr',['../dd/d85/classedash__packager_1_1xml_1_1XmlNode.html#a05a6a89d477a5a59ed8081a2b1ee2d20',1,'edash_packager::xml::XmlNode']]], + ['getsamplingfrequency',['GetSamplingFrequency',['../db/d69/classedash__packager_1_1media_1_1mp2t_1_1AdtsHeader.html#a95e3365db36b2c5c1f4f688631c2a236',1,'edash_packager::media::mp2t::AdtsHeader']]], + ['gettracktypefromstring',['GetTrackTypeFromString',['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#ab15ba8121f76e0945d4f10d722da5cc8',1,'edash_packager::media::KeySource']]], + ['getxml',['GetXml',['../db/de4/classedash__packager_1_1AdaptationSet.html#a44984cfaed799fd6683c6c9d41394dd6',1,'edash_packager::AdaptationSet::GetXml()'],['../d7/d15/classedash__packager_1_1Representation.html#a4eefc1cf0da6ff78806f8d1099cb01d1',1,'edash_packager::Representation::GetXml()']]], + ['group',['Group',['../db/de4/classedash__packager_1_1AdaptationSet.html#ad5efd9add7037cf939c6a48733e38f8f',1,'edash_packager::AdaptationSet']]] +]; diff --git a/sdk/search/functions_7.html b/sdk/search/functions_7.html new file mode 100644 index 0000000000..ec330da83b --- /dev/null +++ b/sdk/search/functions_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/functions_7.js b/sdk/search/functions_7.js new file mode 100644 index 0000000000..153ccf8606 --- /dev/null +++ b/sdk/search/functions_7.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['hasbytes',['HasBytes',['../d9/d46/classedash__packager_1_1media_1_1BufferReader.html#a61ac255662b847f0ef25a8228c4ba009',1,'edash_packager::media::BufferReader']]], + ['head',['head',['../d1/d92/classedash__packager_1_1media_1_1OffsetByteQueue.html#aa9d018636705cab1759978cd7c6d17da',1,'edash_packager::media::OffsetByteQueue']]], + ['headpos',['HeadPos',['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html#a7af8ad77c837db03402ac0947cc73ebf',1,'edash_packager::media::ProducerConsumerQueue']]], + ['hextouuid',['HexToUUID',['../db/d09/namespaceedash__packager.html#a7015ba137f31c7ae734dc7abb254be64',1,'edash_packager']]], + ['httpkeyfetcher',['HttpKeyFetcher',['../d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.html#a2dc7f2f968a87e5c532d1e3d6516237b',1,'edash_packager::media::HttpKeyFetcher::HttpKeyFetcher()'],['../d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.html#a5fdf1c838667e9280eb71e1682692a80',1,'edash_packager::media::HttpKeyFetcher::HttpKeyFetcher(uint32_t timeout_in_seconds)']]] +]; diff --git a/sdk/search/functions_8.html b/sdk/search/functions_8.html new file mode 100644 index 0000000000..afd4facf81 --- /dev/null +++ b/sdk/search/functions_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/functions_8.js b/sdk/search/functions_8.js new file mode 100644 index 0000000000..57646da524 --- /dev/null +++ b/sdk/search/functions_8.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['id',['id',['../d7/d15/classedash__packager_1_1Representation.html#a0a59920aa8a31f1fb2b30a2ee8cc4e95',1,'edash_packager::Representation']]], + ['ignorebytes',['IgnoreBytes',['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#a7efa53df1ef135edd31d1e1818b9a884',1,'edash_packager::media::mp4::BoxBuffer']]], + ['init',['Init',['../dc/d48/classedash__packager_1_1media_1_1MediaParser.html#a7ac1ee5db298922f094920cd564bfb16',1,'edash_packager::media::MediaParser::Init()'],['../dc/dab/classedash__packager_1_1media_1_1mp2t_1_1Mp2tMediaParser.html#a14a6993c335f89e8245f1af47fb9e55a',1,'edash_packager::media::mp2t::Mp2tMediaParser::Init()'],['../d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.html#abe7532e2795f7b08e9663c0c2ba4d5f3',1,'edash_packager::media::mp4::MP4MediaParser::Init()'],['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#a6fd0f1d72f9a31a1c0d26c3b1ae25250',1,'edash_packager::media::mp4::TrackRunIterator::Init()'],['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#a354985cb4f5eed26e91dbb343a6343a0',1,'edash_packager::media::mp4::TrackRunIterator::Init(const MovieFragment &moof)'],['../d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.html#a68d3bba403b0741c7948def9325d5ad1',1,'edash_packager::media::wvm::WvmMediaParser::Init()'],['../da/d49/classedash__packager_1_1DashIopMpdNotifier.html#ad126fe89d3bb63124c48630d39c034f3',1,'edash_packager::DashIopMpdNotifier::Init()'],['../d7/d15/classedash__packager_1_1Representation.html#aac7ad6e54e88b4d31196d54ad5fb4a9d',1,'edash_packager::Representation::Init()'],['../da/d38/classedash__packager_1_1MpdNotifier.html#ae7067d35133b0573a2919fb69195328e',1,'edash_packager::MpdNotifier::Init()'],['../db/d56/classedash__packager_1_1SimpleMpdNotifier.html#a08979abd3c71bb40fa37d24989d84d19',1,'edash_packager::SimpleMpdNotifier::Init()']]], + ['initialize',['Initialize',['../d5/dce/classedash__packager_1_1media_1_1Demuxer.html#a5b156dbf1d1c86f4d18e137b3f7bc7c9',1,'edash_packager::media::Demuxer::Initialize()'],['../dc/de1/classedash__packager_1_1media_1_1mp4_1_1Segmenter.html#ae977765092cab9a566b4a5a3e9184370',1,'edash_packager::media::mp4::Segmenter::Initialize()']]], + ['initializefragment',['InitializeFragment',['../d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html#ac7623c16e5a71727e85ac2857a2c025b',1,'edash_packager::media::mp4::EncryptingFragmenter::InitializeFragment()'],['../db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html#ab55cbcb40b4c1308d70052a4b8ccd6af',1,'edash_packager::media::mp4::Fragmenter::InitializeFragment()']]], + ['initializewithiv',['InitializeWithIv',['../dd/d79/classedash__packager_1_1media_1_1AesCtrEncryptor.html#a7e755a2bc06f35c8b3de9a7ab8b538cd',1,'edash_packager::media::AesCtrEncryptor::InitializeWithIv()'],['../d6/dc4/classedash__packager_1_1media_1_1AesCbcPkcs5Encryptor.html#a6a960fa0d83359156cfd6e10167a69e2',1,'edash_packager::media::AesCbcPkcs5Encryptor::InitializeWithIv()'],['../db/dfe/classedash__packager_1_1media_1_1AesCbcPkcs5Decryptor.html#aaa17492b546264e815971e9f6925a460',1,'edash_packager::media::AesCbcPkcs5Decryptor::InitializeWithIv()'],['../d6/da2/classedash__packager_1_1media_1_1AesCbcCtsEncryptor.html#a5f48de14959ae35fdd9e2e95ab0274b4',1,'edash_packager::media::AesCbcCtsEncryptor::InitializeWithIv()'],['../dd/d96/classedash__packager_1_1media_1_1AesCbcCtsDecryptor.html#a4ae122dc7410cccec81eabbffa7601da',1,'edash_packager::media::AesCbcCtsDecryptor::InitializeWithIv()']]], + ['initializewithrandomiv',['InitializeWithRandomIv',['../dd/d79/classedash__packager_1_1media_1_1AesCtrEncryptor.html#a3d1c0717e1310823bd6827299b6050ef',1,'edash_packager::media::AesCtrEncryptor']]], + ['isaac',['IsAAC',['../de/db1/classedash__packager_1_1media_1_1mp4_1_1ESDescriptor.html#a94db515fdafb0e007981d3c314b7b717',1,'edash_packager::media::mp4::ESDescriptor']]], + ['isrunvalid',['IsRunValid',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#ae06821cd3461cc5b8b6c2c41a286a228',1,'edash_packager::media::mp4::TrackRunIterator']]], + ['issamplevalid',['IsSampleValid',['../db/d26/classedash__packager_1_1media_1_1mp4_1_1TrackRunIterator.html#aac5201a3e14e410c805f5f9b58e88c22',1,'edash_packager::media::mp4::TrackRunIterator']]], + ['issyncsample',['IsSyncSample',['../db/d01/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator.html#a19c0a90ae6ce549a8826569103bdee1c',1,'edash_packager::media::mp4::SyncSampleIterator::IsSyncSample() const '],['../db/d01/classedash__packager_1_1media_1_1mp4_1_1SyncSampleIterator.html#a87c6402aa414c9e5f87634d33a9fad6c',1,'edash_packager::media::mp4::SyncSampleIterator::IsSyncSample(uint32_t sample) const ']]], + ['isvalid',['IsValid',['../d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html#a83f8702a396ae63c94e79ae7d32cdcbf',1,'edash_packager::media::mp4::ChunkInfoIterator::IsValid()'],['../d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html#adf687bc7500b4c97f0ae170ea2254c09',1,'edash_packager::media::mp4::CompositionOffsetIterator::IsValid()'],['../d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html#a182b0464b4681a63ac3453b4b5b1aa28',1,'edash_packager::media::mp4::DecodingTimeIterator::IsValid()']]], + ['isvalidconfig',['IsValidConfig',['../da/d27/classedash__packager_1_1media_1_1AudioStreamInfo.html#a836ab95546bab0becf5b3ada7cbf59c5',1,'edash_packager::media::AudioStreamInfo::IsValidConfig()'],['../d6/d06/classedash__packager_1_1media_1_1StreamInfo.html#ac2a38c803b8baf748ed66b4cf681518f',1,'edash_packager::media::StreamInfo::IsValidConfig()'],['../d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html#a8565954ad442f347e58996c61ee2dfb9',1,'edash_packager::media::VideoStreamInfo::IsValidConfig()']]], + ['isvalidtoplevelbox',['IsValidTopLevelBox',['../db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html#a8505220e522a9b74a1f40adf3a84d29f',1,'edash_packager::media::mp4::BoxReader']]] +]; diff --git a/sdk/search/functions_9.html b/sdk/search/functions_9.html new file mode 100644 index 0000000000..542b9e0a29 --- /dev/null +++ b/sdk/search/functions_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/functions_9.js b/sdk/search/functions_9.js new file mode 100644 index 0000000000..6f4f8a2539 --- /dev/null +++ b/sdk/search/functions_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['keyrotationfragmenter',['KeyRotationFragmenter',['../dc/d8a/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter.html#a6f44819eefcc2cd0f3ea925ada7dfdb0',1,'edash_packager::media::mp4::KeyRotationFragmenter']]] +]; diff --git a/sdk/search/functions_a.html b/sdk/search/functions_a.html new file mode 100644 index 0000000000..94fd395d6f --- /dev/null +++ b/sdk/search/functions_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/functions_a.js b/sdk/search/functions_a.js new file mode 100644 index 0000000000..567d6b5e77 --- /dev/null +++ b/sdk/search/functions_a.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['languagetoiso_5f639_5f2',['LanguageToISO_639_2',['../db/d09/namespaceedash__packager.html#a1082a6ff7615e61946ce7d6616f21dde',1,'edash_packager']]], + ['languagetoshortestform',['LanguageToShortestForm',['../db/d09/namespaceedash__packager.html#a4f8cf77ef5242943e88811962c2870e5',1,'edash_packager']]], + ['lastfirstchunk',['LastFirstChunk',['../d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html#a378cfea9333aba7b810d1b7a575a28cd',1,'edash_packager::media::mp4::ChunkInfoIterator']]], + ['loadmoov',['LoadMoov',['../d8/d0d/classedash__packager_1_1media_1_1mp4_1_1MP4MediaParser.html#a6dafe794d755100428ed427791ae0e43',1,'edash_packager::media::mp4::MP4MediaParser']]], + ['localfile',['LocalFile',['../dd/d98/classedash__packager_1_1media_1_1LocalFile.html#a0167e3eb79bc5f86cb1484b8da828fcc',1,'edash_packager::media::LocalFile']]] +]; diff --git a/sdk/search/functions_b.html b/sdk/search/functions_b.html new file mode 100644 index 0000000000..1a03617de0 --- /dev/null +++ b/sdk/search/functions_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/functions_b.js b/sdk/search/functions_b.js new file mode 100644 index 0000000000..af05e9a45d --- /dev/null +++ b/sdk/search/functions_b.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['makepathsrelativetompd',['MakePathsRelativeToMpd',['../d3/dfa/classedash__packager_1_1MpdBuilder.html#a341e1050c0ae351db7cf0e4d23421a7f',1,'edash_packager::MpdBuilder']]], + ['matches',['Matches',['../d2/d90/classedash__packager_1_1media_1_1Status.html#ac5219fe50f7679fd8448899b4df4e7e6',1,'edash_packager::media::Status']]], + ['mediastream',['MediaStream',['../d2/dfd/classedash__packager_1_1media_1_1MediaStream.html#ad8d8c3322274fadcbe731f2a2e8dc8ef',1,'edash_packager::media::MediaStream']]], + ['mp4muxer',['MP4Muxer',['../d1/d78/classedash__packager_1_1media_1_1mp4_1_1MP4Muxer.html#ae787aeba358f95d73edf5b80d4fc43fe',1,'edash_packager::media::mp4::MP4Muxer']]], + ['mpdbuilder',['MpdBuilder',['../d3/dfa/classedash__packager_1_1MpdBuilder.html#a7c826239ca4611979691fa04a563c49f',1,'edash_packager::MpdBuilder']]], + ['mpdnotifymuxerlistener',['MpdNotifyMuxerListener',['../d3/d0e/classedash__packager_1_1media_1_1MpdNotifyMuxerListener.html#a44cbf87035056284013231b1e29fe3c7',1,'edash_packager::media::MpdNotifyMuxerListener']]] +]; diff --git a/sdk/search/functions_c.html b/sdk/search/functions_c.html new file mode 100644 index 0000000000..a6536e9419 --- /dev/null +++ b/sdk/search/functions_c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/functions_c.js b/sdk/search/functions_c.js new file mode 100644 index 0000000000..625c8f48bc --- /dev/null +++ b/sdk/search/functions_c.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['notifyencryptionupdate',['NotifyEncryptionUpdate',['../da/d49/classedash__packager_1_1DashIopMpdNotifier.html#a611739a432dd2e85a2b689face08909c',1,'edash_packager::DashIopMpdNotifier::NotifyEncryptionUpdate()'],['../da/d38/classedash__packager_1_1MpdNotifier.html#a8eb441286be0f2cb96c4348ff88619c5',1,'edash_packager::MpdNotifier::NotifyEncryptionUpdate()'],['../db/d56/classedash__packager_1_1SimpleMpdNotifier.html#a4b7fa0a53ac352a037247476129a8217',1,'edash_packager::SimpleMpdNotifier::NotifyEncryptionUpdate()']]], + ['notifynewcontainer',['NotifyNewContainer',['../da/d49/classedash__packager_1_1DashIopMpdNotifier.html#a8c4fefd4a54ba8167e3445890a236076',1,'edash_packager::DashIopMpdNotifier::NotifyNewContainer()'],['../da/d38/classedash__packager_1_1MpdNotifier.html#a09e6df8ea9ea8c260199449448d1ea62',1,'edash_packager::MpdNotifier::NotifyNewContainer()'],['../db/d56/classedash__packager_1_1SimpleMpdNotifier.html#a3097c09073328b112c75eb0dab4a1c31',1,'edash_packager::SimpleMpdNotifier::NotifyNewContainer()']]], + ['notifynewsegment',['NotifyNewSegment',['../da/d49/classedash__packager_1_1DashIopMpdNotifier.html#afba7a73655f0ad8ae1be714ff8178c2c',1,'edash_packager::DashIopMpdNotifier::NotifyNewSegment()'],['../da/d38/classedash__packager_1_1MpdNotifier.html#a7bb9cce525d5a4f1076b8d58a7bd07ab',1,'edash_packager::MpdNotifier::NotifyNewSegment()'],['../db/d56/classedash__packager_1_1SimpleMpdNotifier.html#a010adc825af58e2c2448505a261ad26c',1,'edash_packager::SimpleMpdNotifier::NotifyNewSegment()']]], + ['notifysampleduration',['NotifySampleDuration',['../da/d49/classedash__packager_1_1DashIopMpdNotifier.html#aefce631c77b946576ecb9c8d6b95f06e',1,'edash_packager::DashIopMpdNotifier::NotifySampleDuration()'],['../da/d38/classedash__packager_1_1MpdNotifier.html#ab4d97816ead500dc7cafac015f1f4979',1,'edash_packager::MpdNotifier::NotifySampleDuration()'],['../db/d56/classedash__packager_1_1SimpleMpdNotifier.html#a47dab0bc8d51b0e86369288b2b1ce967',1,'edash_packager::SimpleMpdNotifier::NotifySampleDuration()']]], + ['num_5fchannels',['num_channels',['../dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html#a0394e15d7eb62d5a2366e78900b93b40',1,'edash_packager::media::mp4::AACAudioSpecificConfig']]], + ['numsamples',['NumSamples',['../d8/d71/classedash__packager_1_1media_1_1mp4_1_1ChunkInfoIterator.html#a3c087f45de97888c3c537cec1ab6b940',1,'edash_packager::media::mp4::ChunkInfoIterator::NumSamples()'],['../d4/de5/classedash__packager_1_1media_1_1mp4_1_1CompositionOffsetIterator.html#a10f25f383ea2b2404dc3cd6f8d87dc71',1,'edash_packager::media::mp4::CompositionOffsetIterator::NumSamples()'],['../d4/d90/classedash__packager_1_1media_1_1mp4_1_1DecodingTimeIterator.html#af989a372d83019e0a65e8c850e122e47',1,'edash_packager::media::mp4::DecodingTimeIterator::NumSamples()']]] +]; diff --git a/sdk/search/functions_d.html b/sdk/search/functions_d.html new file mode 100644 index 0000000000..8cdcc06f33 --- /dev/null +++ b/sdk/search/functions_d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/functions_d.js b/sdk/search/functions_d.js new file mode 100644 index 0000000000..80a6b55889 --- /dev/null +++ b/sdk/search/functions_d.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['onneedkey',['OnNeedKey',['../dc/df1/classedash__packager_1_1media_1_1DecryptorSource.html#a635b0367a1903f3a0afb1ca931f1274a',1,'edash_packager::media::DecryptorSource']]], + ['onnewsegmentforrepresentation',['OnNewSegmentForRepresentation',['../db/de4/classedash__packager_1_1AdaptationSet.html#aed9c81cd32d8bbb8ed71d5ab3f16efac',1,'edash_packager::AdaptationSet::OnNewSegmentForRepresentation()'],['../d2/dfa/classedash__packager_1_1RepresentationStateChangeListener.html#a555f268d74e4c70afd067ffe2e6ca64e',1,'edash_packager::RepresentationStateChangeListener::OnNewSegmentForRepresentation()']]], + ['onprogress',['OnProgress',['../d9/d2c/classedash__packager_1_1media_1_1ProgressListener.html#a2e30994077f8798d56f61ee20fd9a776',1,'edash_packager::media::ProgressListener']]], + ['onsampledurationready',['OnSampleDurationReady',['../d3/d0e/classedash__packager_1_1media_1_1MpdNotifyMuxerListener.html#af65a2b4d9599f110ff70134286403c02',1,'edash_packager::media::MpdNotifyMuxerListener::OnSampleDurationReady()'],['../df/de7/classedash__packager_1_1media_1_1MuxerListener.html#a5626ff553138db438c561db2ca0d05f2',1,'edash_packager::media::MuxerListener::OnSampleDurationReady()'],['../d9/db4/classedash__packager_1_1media_1_1VodMediaInfoDumpMuxerListener.html#a122af3cd678be6f82766ecdfd5b95467',1,'edash_packager::media::VodMediaInfoDumpMuxerListener::OnSampleDurationReady()']]], + ['onsetframerateforrepresentation',['OnSetFrameRateForRepresentation',['../db/de4/classedash__packager_1_1AdaptationSet.html#ad9adf17a02fabfd4aa8d91a2d65d52ad',1,'edash_packager::AdaptationSet::OnSetFrameRateForRepresentation()'],['../d2/dfa/classedash__packager_1_1RepresentationStateChangeListener.html#aec87eac5d1aefe55dd8c0483ac4354a5',1,'edash_packager::RepresentationStateChangeListener::OnSetFrameRateForRepresentation()']]], + ['open',['Open',['../de/d19/classedash__packager_1_1media_1_1File.html#a4dfd6f4d8f67d2ee1caff4f4e1717c70',1,'edash_packager::media::File::Open(const char *file_name, const char *mode)'],['../de/d19/classedash__packager_1_1media_1_1File.html#a0933ccd7df76fcf8fbcfe12c15dbf6c5',1,'edash_packager::media::File::Open()=0'],['../dd/d98/classedash__packager_1_1media_1_1LocalFile.html#a18709894b20567c0e3db67ba58b08db1',1,'edash_packager::media::LocalFile::Open()'],['../dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html#a32617fd715b893d2b3a799418ef8b45e',1,'edash_packager::media::ThreadedIoFile::Open()'],['../d8/dc7/classedash__packager_1_1media_1_1UdpFile.html#a436506c1512d2488435180a445af11d0',1,'edash_packager::media::UdpFile::Open()']]], + ['openwithnobuffering',['OpenWithNoBuffering',['../de/d19/classedash__packager_1_1media_1_1File.html#a47194a7cd303640c2a8b689d18ef9701',1,'edash_packager::media::File']]], + ['optimizesampleentries',['OptimizeSampleEntries',['../db/dae/classedash__packager_1_1media_1_1mp4_1_1Fragmenter.html#ae51bbd5482783890e9843fd3ca61f2bb',1,'edash_packager::media::mp4::Fragmenter']]] +]; diff --git a/sdk/search/functions_e.html b/sdk/search/functions_e.html new file mode 100644 index 0000000000..649b2c9af6 --- /dev/null +++ b/sdk/search/functions_e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/functions_e.js b/sdk/search/functions_e.js new file mode 100644 index 0000000000..c477e1abb3 --- /dev/null +++ b/sdk/search/functions_e.js @@ -0,0 +1,20 @@ +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#a416aaeb6231a46548871a419795d1ffc',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#a6680c3e6aebbecf7a8f9462f0ff703bf',1,'edash_packager::media::mp4::MP4MediaParser::Parse()'],['../d8/da0/classedash__packager_1_1media_1_1wvm_1_1WvmMediaParser.html#add788399fd476ba8289958bc8ed4ad0e',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']]], + ['pixel_5fheight',['pixel_height',['../d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html#a378a415c21d171a125e0760f0403eb87',1,'edash_packager::media::VideoStreamInfo']]], + ['pixel_5fwidth',['pixel_width',['../d7/d3a/classedash__packager_1_1media_1_1VideoStreamInfo.html#a560d825dacae19d65a800396f7359645',1,'edash_packager::media::VideoStreamInfo']]], + ['pop',['Pop',['../d8/d2e/classedash__packager_1_1media_1_1ByteQueue.html#acac5c7874703c86ba77a50d3be0671d2',1,'edash_packager::media::ByteQueue::Pop()'],['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html#a5e0c4b4fa932d5ad1154f8b263f76796',1,'edash_packager::media::ProducerConsumerQueue::Pop()']]], + ['pos',['Pos',['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#a0b34f56b01acc899ae44ab9f4cb0b783',1,'edash_packager::media::mp4::BoxBuffer']]], + ['post',['Post',['../d3/d3e/classedash__packager_1_1media_1_1HttpKeyFetcher.html#a651b1c5ef001dc365488829266908691',1,'edash_packager::media::HttpKeyFetcher']]], + ['preparechildren',['PrepareChildren',['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#a2e46c4812ac9c48288a8461c230a375b',1,'edash_packager::media::mp4::BoxBuffer']]], + ['preparefragmentforencryption',['PrepareFragmentForEncryption',['../d8/d1e/classedash__packager_1_1media_1_1mp4_1_1EncryptingFragmenter.html#a3e66313de4ecb51f23fe438758e0153b',1,'edash_packager::media::mp4::EncryptingFragmenter::PrepareFragmentForEncryption()'],['../dc/d8a/classedash__packager_1_1media_1_1mp4_1_1KeyRotationFragmenter.html#a27f17363745efa98d860fb703fd24486',1,'edash_packager::media::mp4::KeyRotationFragmenter::PrepareFragmentForEncryption()']]], + ['printerror',['PrintError',['../db/d09/namespaceedash__packager.html#a64d35a221086349dfbd1acefee2aaef1',1,'edash_packager']]], + ['producerconsumerqueue',['ProducerConsumerQueue',['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html#a7e0fa49f53accb47b4fbf15c9495d0d1',1,'edash_packager::media::ProducerConsumerQueue::ProducerConsumerQueue(size_t capacity)'],['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html#aabee571894649365e0982a410703a364',1,'edash_packager::media::ProducerConsumerQueue::ProducerConsumerQueue(size_t capacity, size_t starting_pos)']]], + ['psshboxfrompsshdata',['PsshBoxFromPsshData',['../d9/d8b/classedash__packager_1_1media_1_1KeySource.html#ab5478505cfdb660fa6c680819f17f239',1,'edash_packager::media::KeySource']]], + ['pullsample',['PullSample',['../d2/dfd/classedash__packager_1_1media_1_1MediaStream.html#a664ec77fc670a84bf3bd1cf0abb32dae',1,'edash_packager::media::MediaStream']]], + ['push',['Push',['../d8/d2e/classedash__packager_1_1media_1_1ByteQueue.html#afa47d3dc54862cee101d4be8746de6eb',1,'edash_packager::media::ByteQueue::Push()'],['../d5/d02/classedash__packager_1_1media_1_1ProducerConsumerQueue.html#a6a9fc5405d52cfd4178ee76c22dd7fb6',1,'edash_packager::media::ProducerConsumerQueue::Push()']]], + ['pushsample',['PushSample',['../d2/dfd/classedash__packager_1_1media_1_1MediaStream.html#a1a8abeb0ab7746dbe05087078529d40b',1,'edash_packager::media::MediaStream']]] +]; diff --git a/sdk/search/functions_f.html b/sdk/search/functions_f.html new file mode 100644 index 0000000000..386c7d46b1 --- /dev/null +++ b/sdk/search/functions_f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/functions_f.js b/sdk/search/functions_f.js new file mode 100644 index 0000000000..652e8e7203 --- /dev/null +++ b/sdk/search/functions_f.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['read',['Read',['../de/d19/classedash__packager_1_1media_1_1File.html#a663547ead01b035117429c0bc757aab7',1,'edash_packager::media::File::Read()'],['../d3/d6b/classedash__packager_1_1media_1_1IoCache.html#a462bd5ddce8041eaa109271fd0d155a9',1,'edash_packager::media::IoCache::Read()'],['../dd/d98/classedash__packager_1_1media_1_1LocalFile.html#a488cdd1b73eb609b1e5f9b4e16409f86',1,'edash_packager::media::LocalFile::Read()'],['../dc/dfa/classedash__packager_1_1media_1_1ThreadedIoFile.html#afb7375d719f2a34b7d8f0678241e6065',1,'edash_packager::media::ThreadedIoFile::Read()'],['../d8/dc7/classedash__packager_1_1media_1_1UdpFile.html#a2adf69616970042401262643f43a9199',1,'edash_packager::media::UdpFile::Read()']]], + ['read1',['Read1',['../d9/d46/classedash__packager_1_1media_1_1BufferReader.html#a0375f4997e9c934783f51203c4d1434f',1,'edash_packager::media::BufferReader']]], + ['readallchildren',['ReadAllChildren',['../db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html#abe53f02532597d3bd76dc46820aa0615',1,'edash_packager::media::mp4::BoxReader']]], + ['readbits',['ReadBits',['../df/db4/classedash__packager_1_1media_1_1BitReader.html#a9a66cdd1013eb535e7e1eec60a91bf8c',1,'edash_packager::media::BitReader']]], + ['readchild',['ReadChild',['../db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html#a480fdd0a597a8b77f7613abb2e8f5629',1,'edash_packager::media::mp4::BoxReader']]], + ['readchildren',['ReadChildren',['../db/d6c/classedash__packager_1_1media_1_1mp4_1_1BoxReader.html#a7ce20788aedb0c790e09b83954545ed3',1,'edash_packager::media::mp4::BoxReader']]], + ['reader',['reader',['../dd/d4f/classedash__packager_1_1media_1_1mp4_1_1BoxBuffer.html#a2141be2c0c4ec27b458df15e13d7239e',1,'edash_packager::media::mp4::BoxBuffer']]], + ['readfiletostring',['ReadFileToString',['../de/d19/classedash__packager_1_1media_1_1File.html#a9a4f45dcab338be2b6843e0de87ce8f1',1,'edash_packager::media::File']]], + ['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#a95b3377915124537010b42719d33d41f',1,'edash_packager::media::mp4::FullBox::ReadWrite()'],['../d1/dcd/structedash__packager_1_1media_1_1mp4_1_1FileType.html#aee4b59f0c2c79982f286f37d04d317f4',1,'edash_packager::media::mp4::FileType::ReadWrite()'],['../dd/da6/structedash__packager_1_1media_1_1mp4_1_1SegmentType.html#a0cbee70b4915e0a69237bf4f75c06841',1,'edash_packager::media::mp4::SegmentType::ReadWrite()'],['../da/d2a/structedash__packager_1_1media_1_1mp4_1_1ProtectionSystemSpecificHeader.html#a8717c7108b80278d9d1b0a6997d370c8',1,'edash_packager::media::mp4::ProtectionSystemSpecificHeader::ReadWrite()'],['../de/dc4/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationOffset.html#aacc3f25a60441cbeefb5719948b8dde6',1,'edash_packager::media::mp4::SampleAuxiliaryInformationOffset::ReadWrite()'],['../d2/d51/structedash__packager_1_1media_1_1mp4_1_1SampleAuxiliaryInformationSize.html#ad535f362d898f88e3bcb290d316e9d88',1,'edash_packager::media::mp4::SampleAuxiliaryInformationSize::ReadWrite()'],['../da/d4b/structedash__packager_1_1media_1_1mp4_1_1OriginalFormat.html#ae0c112698de3e06efc084df0b242caef',1,'edash_packager::media::mp4::OriginalFormat::ReadWrite()'],['../d4/dcc/structedash__packager_1_1media_1_1mp4_1_1SchemeType.html#a31b8ef9b3bc870a124a687f8dff84232',1,'edash_packager::media::mp4::SchemeType::ReadWrite()'],['../de/d44/structedash__packager_1_1media_1_1mp4_1_1TrackEncryption.html#a4ae5adc789a5899f89c0e029fd0068af',1,'edash_packager::media::mp4::TrackEncryption::ReadWrite()'],['../d2/d6f/structedash__packager_1_1media_1_1mp4_1_1SchemeInfo.html#a0e69e1336e39d07b1825212b14f6faf6',1,'edash_packager::media::mp4::SchemeInfo::ReadWrite()'],['../dd/dc9/structedash__packager_1_1media_1_1mp4_1_1ProtectionSchemeInfo.html#a2b4ea22e86bf3f8048c38ba7b0ecf4e0',1,'edash_packager::media::mp4::ProtectionSchemeInfo::ReadWrite()'],['../dd/d14/structedash__packager_1_1media_1_1mp4_1_1MovieHeader.html#a468f653814e6dfced50a740e27041ef1',1,'edash_packager::media::mp4::MovieHeader::ReadWrite()'],['../dd/d15/structedash__packager_1_1media_1_1mp4_1_1TrackHeader.html#a1762a314e7634841f0f845463c8e2039',1,'edash_packager::media::mp4::TrackHeader::ReadWrite()'],['../d8/d4a/structedash__packager_1_1media_1_1mp4_1_1EditList.html#ad16d9c64a405a56ce74c1ae0bd983bed',1,'edash_packager::media::mp4::EditList::ReadWrite()'],['../d7/d4f/structedash__packager_1_1media_1_1mp4_1_1Edit.html#a789e9be1fdec8ac913a5083ce7881e13',1,'edash_packager::media::mp4::Edit::ReadWrite()'],['../d3/dbd/structedash__packager_1_1media_1_1mp4_1_1HandlerReference.html#aed599037539c27a4c6b762c7df8af667',1,'edash_packager::media::mp4::HandlerReference::ReadWrite()'],['../d8/dbb/structedash__packager_1_1media_1_1mp4_1_1AVCDecoderConfigurationRecord.html#a9e70f2e6c23bb86fa5fe387d45877268',1,'edash_packager::media::mp4::AVCDecoderConfigurationRecord::ReadWrite()'],['../d1/dc8/structedash__packager_1_1media_1_1mp4_1_1PixelAspectRatioBox.html#aee984d288c1c2ab2217726309dff45f4',1,'edash_packager::media::mp4::PixelAspectRatioBox::ReadWrite()'],['../df/d6a/structedash__packager_1_1media_1_1mp4_1_1VideoSampleEntry.html#af7c0db7c32de77af9441c33adcdf7dc8',1,'edash_packager::media::mp4::VideoSampleEntry::ReadWrite()'],['../d9/dcc/structedash__packager_1_1media_1_1mp4_1_1ElementaryStreamDescriptor.html#a52365fdcab0226980dbca4f252155c11',1,'edash_packager::media::mp4::ElementaryStreamDescriptor::ReadWrite()'],['../df/d62/structedash__packager_1_1media_1_1mp4_1_1AudioSampleEntry.html#a25e6faaa3aac8ca177ce719ac86a1230',1,'edash_packager::media::mp4::AudioSampleEntry::ReadWrite()'],['../d3/d74/structedash__packager_1_1media_1_1mp4_1_1SampleDescription.html#af78ad2228bedef0f33dd2a3fe390c264',1,'edash_packager::media::mp4::SampleDescription::ReadWrite()'],['../dc/db7/structedash__packager_1_1media_1_1mp4_1_1DecodingTimeToSample.html#a182286af9333024dfcd2180c5f9de83f',1,'edash_packager::media::mp4::DecodingTimeToSample::ReadWrite()'],['../da/d54/structedash__packager_1_1media_1_1mp4_1_1CompositionTimeToSample.html#a768b070dcbc3e0ac4c40580f9a269ba7',1,'edash_packager::media::mp4::CompositionTimeToSample::ReadWrite()'],['../df/d76/structedash__packager_1_1media_1_1mp4_1_1SampleToChunk.html#a214d13dad0b592bad63c5c82c26fc5a8',1,'edash_packager::media::mp4::SampleToChunk::ReadWrite()'],['../d7/da5/structedash__packager_1_1media_1_1mp4_1_1SampleSize.html#a6f6a998d4365581a882d6aa8dd985353',1,'edash_packager::media::mp4::SampleSize::ReadWrite()'],['../db/d89/structedash__packager_1_1media_1_1mp4_1_1CompactSampleSize.html#ac6c287b0bbb46232d99065677c61c03f',1,'edash_packager::media::mp4::CompactSampleSize::ReadWrite()'],['../da/d81/structedash__packager_1_1media_1_1mp4_1_1ChunkLargeOffset.html#a3d7da255698a09c8b91d207968b29826',1,'edash_packager::media::mp4::ChunkLargeOffset::ReadWrite()'],['../d6/d79/structedash__packager_1_1media_1_1mp4_1_1ChunkOffset.html#a6fad7db4e1e37ea4e7580a24cba95f52',1,'edash_packager::media::mp4::ChunkOffset::ReadWrite()'],['../d9/d18/structedash__packager_1_1media_1_1mp4_1_1SyncSample.html#a354762cd47fc84fb71e12bbca3eae4cf',1,'edash_packager::media::mp4::SyncSample::ReadWrite()'],['../d3/d77/structedash__packager_1_1media_1_1mp4_1_1SampleTable.html#af9e1e01aa6c5df02049947f860918fd4',1,'edash_packager::media::mp4::SampleTable::ReadWrite()'],['../d7/dec/structedash__packager_1_1media_1_1mp4_1_1MediaHeader.html#a2394c8a563f790c5d59c0f411483d373',1,'edash_packager::media::mp4::MediaHeader::ReadWrite()'],['../db/df7/structedash__packager_1_1media_1_1mp4_1_1VideoMediaHeader.html#afccc426ca48ad8d102121164fbd8043a',1,'edash_packager::media::mp4::VideoMediaHeader::ReadWrite()'],['../da/db0/structedash__packager_1_1media_1_1mp4_1_1SoundMediaHeader.html#aa072240b04b63d3873c26b6cc7290d22',1,'edash_packager::media::mp4::SoundMediaHeader::ReadWrite()'],['../d6/d6c/structedash__packager_1_1media_1_1mp4_1_1DataEntryUrl.html#aa712c1ad4a552f0f8ecd60fd55762e8e',1,'edash_packager::media::mp4::DataEntryUrl::ReadWrite()'],['../d7/d0d/structedash__packager_1_1media_1_1mp4_1_1DataReference.html#a196ac67de4711af24e952a51261fe096',1,'edash_packager::media::mp4::DataReference::ReadWrite()'],['../d6/d59/structedash__packager_1_1media_1_1mp4_1_1DataInformation.html#a74378acb05745fdbf8ca7ffdab288cf5',1,'edash_packager::media::mp4::DataInformation::ReadWrite()'],['../dd/dbd/structedash__packager_1_1media_1_1mp4_1_1MediaInformation.html#a03433ebd451315154b8ade741c4b9f5d',1,'edash_packager::media::mp4::MediaInformation::ReadWrite()'],['../de/de7/structedash__packager_1_1media_1_1mp4_1_1Media.html#af6eb9d251004ac9dc8e719a13991430e',1,'edash_packager::media::mp4::Media::ReadWrite()'],['../d3/de1/structedash__packager_1_1media_1_1mp4_1_1Track.html#aecbdcf1304f4e05d4bfe94f033fb4997',1,'edash_packager::media::mp4::Track::ReadWrite()'],['../da/d17/structedash__packager_1_1media_1_1mp4_1_1MovieExtendsHeader.html#ab48d5f505d0370a5588a8bfb84dd3c2b',1,'edash_packager::media::mp4::MovieExtendsHeader::ReadWrite()'],['../d3/d2c/structedash__packager_1_1media_1_1mp4_1_1TrackExtends.html#a7134a0c406deaf51c639d2314667bdb0',1,'edash_packager::media::mp4::TrackExtends::ReadWrite()'],['../d6/d8b/structedash__packager_1_1media_1_1mp4_1_1MovieExtends.html#a0f4cf9ffc7038d41a80286f78dac0e0e',1,'edash_packager::media::mp4::MovieExtends::ReadWrite()'],['../d6/dec/structedash__packager_1_1media_1_1mp4_1_1Movie.html#ad386903689eca40d9dcb6d3f4990288a',1,'edash_packager::media::mp4::Movie::ReadWrite()'],['../d0/d92/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentDecodeTime.html#a561a7efedb5a44d431d297be675587a4',1,'edash_packager::media::mp4::TrackFragmentDecodeTime::ReadWrite()'],['../df/d86/structedash__packager_1_1media_1_1mp4_1_1MovieFragmentHeader.html#ac94a4cb68ff87666c7836eb720581a33',1,'edash_packager::media::mp4::MovieFragmentHeader::ReadWrite()'],['../d9/d47/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentHeader.html#ac679f1815001fbde1ea447e2c2cdf414',1,'edash_packager::media::mp4::TrackFragmentHeader::ReadWrite()'],['../df/d21/structedash__packager_1_1media_1_1mp4_1_1TrackFragmentRun.html#acd6288a45825fd9da7e688624405b9db',1,'edash_packager::media::mp4::TrackFragmentRun::ReadWrite()'],['../d1/d65/structedash__packager_1_1media_1_1mp4_1_1SampleToGroup.html#a9f52feee1777e711c82f35afd1f8c234',1,'edash_packager::media::mp4::SampleToGroup::ReadWrite()'],['../d2/d26/structedash__packager_1_1media_1_1mp4_1_1SampleGroupDescription.html#afa87507593131c8ebf9413b65259ceb4',1,'edash_packager::media::mp4::SampleGroupDescription::ReadWrite()'],['../d4/dd9/structedash__packager_1_1media_1_1mp4_1_1TrackFragment.html#ad712f20ca37aefb6f92d524d305b8d4d',1,'edash_packager::media::mp4::TrackFragment::ReadWrite()'],['../dd/da2/structedash__packager_1_1media_1_1mp4_1_1MovieFragment.html#a03ad067670d4de600019c03c54f1f337',1,'edash_packager::media::mp4::MovieFragment::ReadWrite()'],['../d1/d81/structedash__packager_1_1media_1_1mp4_1_1SegmentIndex.html#ae3ce71370a51d6190c9874536239b2cc',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']]], + ['representation',['Representation',['../d7/d15/classedash__packager_1_1Representation.html#a4fc4d0fd6f240f1c79fac0b68b9d9f0d',1,'edash_packager::Representation']]], + ['reset',['Reset',['../d8/d2e/classedash__packager_1_1media_1_1ByteQueue.html#a452485879d303d5c8654e1b184bc1235',1,'edash_packager::media::ByteQueue']]], + ['run',['Run',['../dd/d2b/classedash__packager_1_1media_1_1ClosureThread.html#a016f08770c94f2e92f66f299ee4a5b04',1,'edash_packager::media::ClosureThread::Run()'],['../d5/dce/classedash__packager_1_1media_1_1Demuxer.html#a7caa5e4ce5b80de4dbae7d967ff71f72',1,'edash_packager::media::Demuxer::Run()'],['../d4/d1d/classedash__packager_1_1media_1_1Muxer.html#aa2ef293cdb921d97bb39d038f29da8c4',1,'edash_packager::media::Muxer::Run()']]] +]; diff --git a/sdk/search/mag_sel.png b/sdk/search/mag_sel.png new file mode 100644 index 0000000000..81f6040a20 Binary files /dev/null and b/sdk/search/mag_sel.png differ diff --git a/sdk/search/namespaces_0.html b/sdk/search/namespaces_0.html new file mode 100644 index 0000000000..dc6068615d --- /dev/null +++ b/sdk/search/namespaces_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/namespaces_0.js b/sdk/search/namespaces_0.js new file mode 100644 index 0000000000..9101b4e886 --- /dev/null +++ b/sdk/search/namespaces_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['edash_5fpackager',['edash_packager',['../db/d09/namespaceedash__packager.html',1,'']]] +]; diff --git a/sdk/search/nomatches.html b/sdk/search/nomatches.html new file mode 100644 index 0000000000..b1ded27e9a --- /dev/null +++ b/sdk/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
+
No Matches
+
+ + diff --git a/sdk/search/search.css b/sdk/search/search.css new file mode 100644 index 0000000000..4d7612ff63 --- /dev/null +++ b/sdk/search/search.css @@ -0,0 +1,271 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + position: absolute; + float: none; + display: inline; + margin-top: 8px; + right: 0px; + width: 170px; + z-index: 102; + background-color: white; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:111px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:0px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 1; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/sdk/search/search.js b/sdk/search/search.js new file mode 100644 index 0000000000..39bc58c098 --- /dev/null +++ b/sdk/search/search.js @@ -0,0 +1,803 @@ +// Search script generated by doxygen +// Copyright (C) 2009 by Dimitri van Heesch. + +// The code in this file is loosly based on main.js, part of Natural Docs, +// which is Copyright (C) 2003-2008 Greg Valure +// Natural Docs is licensed under the GPL. + +var indexSectionsWithContent = +{ + 0: "abcdefghiklmnoprstuvwx~", + 1: "abcdefhiklmoprstuvwx", + 2: "e", + 3: "abcdefghiklmnoprstuvwx~", + 4: "abfknost", + 5: "in" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "classes", + 2: "namespaces", + 3: "functions", + 4: "variables", + 5: "typedefs" +}; + +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/typedefs_0.js b/sdk/search/typedefs_0.js new file mode 100644 index 0000000000..57cf9f2876 --- /dev/null +++ b/sdk/search/typedefs_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['initcb',['InitCB',['../dc/d48/classedash__packager_1_1media_1_1MediaParser.html#af5c74c8723a5306faddcdfdcadb4ab4a',1,'edash_packager::media::MediaParser']]] +]; diff --git a/sdk/search/typedefs_1.html b/sdk/search/typedefs_1.html new file mode 100644 index 0000000000..455fe2b2b9 --- /dev/null +++ b/sdk/search/typedefs_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/typedefs_1.js b/sdk/search/typedefs_1.js new file mode 100644 index 0000000000..10798af66d --- /dev/null +++ b/sdk/search/typedefs_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['newsamplecb',['NewSampleCB',['../dc/d48/classedash__packager_1_1media_1_1MediaParser.html#a1628c19a91f1b8ae123f7350936bfe32',1,'edash_packager::media::MediaParser']]] +]; diff --git a/sdk/search/variables_0.html b/sdk/search/variables_0.html new file mode 100644 index 0000000000..1b8adc9b33 --- /dev/null +++ b/sdk/search/variables_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/variables_0.js b/sdk/search/variables_0.js new file mode 100644 index 0000000000..7606c2fd3e --- /dev/null +++ b/sdk/search/variables_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['atom_5fsize',['atom_size',['../d7/d8a/structedash__packager_1_1media_1_1mp4_1_1Box.html#a767571cecbc37bedb05d1ea84716a005',1,'edash_packager::media::mp4::Box']]] +]; diff --git a/sdk/search/variables_1.html b/sdk/search/variables_1.html new file mode 100644 index 0000000000..78f63cd1eb --- /dev/null +++ b/sdk/search/variables_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/variables_1.js b/sdk/search/variables_1.js new file mode 100644 index 0000000000..ce088ee00d --- /dev/null +++ b/sdk/search/variables_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['bandwidth',['bandwidth',['../de/d57/structedash__packager_1_1media_1_1MuxerOptions.html#a94fa00f788f9c39cba593004a1cd8849',1,'edash_packager::media::MuxerOptions']]] +]; diff --git a/sdk/search/variables_2.html b/sdk/search/variables_2.html new file mode 100644 index 0000000000..ea80d20140 --- /dev/null +++ b/sdk/search/variables_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/variables_2.js b/sdk/search/variables_2.js new file mode 100644 index 0000000000..a3d5553810 --- /dev/null +++ b/sdk/search/variables_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['fragment_5fduration',['fragment_duration',['../de/d57/structedash__packager_1_1media_1_1MuxerOptions.html#a1754599c00fdf4c474d3072abf71c1de',1,'edash_packager::media::MuxerOptions']]], + ['fragment_5fsap_5faligned',['fragment_sap_aligned',['../de/d57/structedash__packager_1_1media_1_1MuxerOptions.html#ab70f1d41f9556fa793ec638762d1c584',1,'edash_packager::media::MuxerOptions']]] +]; diff --git a/sdk/search/variables_3.html b/sdk/search/variables_3.html new file mode 100644 index 0000000000..0dca26f47b --- /dev/null +++ b/sdk/search/variables_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/variables_3.js b/sdk/search/variables_3.js new file mode 100644 index 0000000000..3cbfaa95c1 --- /dev/null +++ b/sdk/search/variables_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['kadtsheadersize',['kADTSHeaderSize',['../dc/dc6/classedash__packager_1_1media_1_1mp4_1_1AACAudioSpecificConfig.html#a200d0b1a945fed01c2ce92a0b2fa9921',1,'edash_packager::media::mp4::AACAudioSpecificConfig']]], + ['kdecryptionkeysize',['kDecryptionKeySize',['../d4/da1/classedash__packager_1_1media_1_1DecryptConfig.html#a65b9e6b7a1a2308f38e6b435bf8ce5bb',1,'edash_packager::media::DecryptConfig']]] +]; diff --git a/sdk/search/variables_4.html b/sdk/search/variables_4.html new file mode 100644 index 0000000000..400e8e9b41 --- /dev/null +++ b/sdk/search/variables_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/variables_4.js b/sdk/search/variables_4.js new file mode 100644 index 0000000000..2e6525b26f --- /dev/null +++ b/sdk/search/variables_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['num_5fsubsegments_5fper_5fsidx',['num_subsegments_per_sidx',['../de/d57/structedash__packager_1_1media_1_1MuxerOptions.html#a93714f081569ea56ed626eb057c1761f',1,'edash_packager::media::MuxerOptions']]] +]; diff --git a/sdk/search/variables_5.html b/sdk/search/variables_5.html new file mode 100644 index 0000000000..7f1241f94b --- /dev/null +++ b/sdk/search/variables_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/variables_5.js b/sdk/search/variables_5.js new file mode 100644 index 0000000000..bbf7b609d1 --- /dev/null +++ b/sdk/search/variables_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['output_5ffile_5fname',['output_file_name',['../de/d57/structedash__packager_1_1media_1_1MuxerOptions.html#addd401a47b287f3c18cbdc4bfa1a6963',1,'edash_packager::media::MuxerOptions']]] +]; diff --git a/sdk/search/variables_6.html b/sdk/search/variables_6.html new file mode 100644 index 0000000000..7536df8d5a --- /dev/null +++ b/sdk/search/variables_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/variables_6.js b/sdk/search/variables_6.js new file mode 100644 index 0000000000..50065c734e --- /dev/null +++ b/sdk/search/variables_6.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['segment_5fduration',['segment_duration',['../de/d57/structedash__packager_1_1media_1_1MuxerOptions.html#ad6f281dfd832bd073f5fb5fc46342f9f',1,'edash_packager::media::MuxerOptions']]], + ['segment_5fsap_5faligned',['segment_sap_aligned',['../de/d57/structedash__packager_1_1media_1_1MuxerOptions.html#af0403298bf08392bb3009061cd8de2b0',1,'edash_packager::media::MuxerOptions']]], + ['segment_5ftemplate',['segment_template',['../de/d57/structedash__packager_1_1media_1_1MuxerOptions.html#a1303b2f8efb19af4728513ba2eeea2d1',1,'edash_packager::media::MuxerOptions']]], + ['single_5fsegment',['single_segment',['../de/d57/structedash__packager_1_1media_1_1MuxerOptions.html#a7542af69b834f3a72e5c5b25f4f0f474',1,'edash_packager::media::MuxerOptions']]] +]; diff --git a/sdk/search/variables_7.html b/sdk/search/variables_7.html new file mode 100644 index 0000000000..66186a6994 --- /dev/null +++ b/sdk/search/variables_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/sdk/search/variables_7.js b/sdk/search/variables_7.js new file mode 100644 index 0000000000..ecdaf734d1 --- /dev/null +++ b/sdk/search/variables_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['temp_5fdir',['temp_dir',['../de/d57/structedash__packager_1_1media_1_1MuxerOptions.html#a014464b78ba37f978da8290db2f2414e',1,'edash_packager::media::MuxerOptions']]] +]; diff --git a/sdk/sync_off.png b/sdk/sync_off.png new file mode 100644 index 0000000000..3b443fc628 Binary files /dev/null and b/sdk/sync_off.png differ diff --git a/sdk/sync_on.png b/sdk/sync_on.png new file mode 100644 index 0000000000..e08320fb64 Binary files /dev/null and b/sdk/sync_on.png differ diff --git a/sdk/tab_a.png b/sdk/tab_a.png new file mode 100644 index 0000000000..3b725c41c5 Binary files /dev/null and b/sdk/tab_a.png differ diff --git a/sdk/tab_b.png b/sdk/tab_b.png new file mode 100644 index 0000000000..e2b4a8638c Binary files /dev/null and b/sdk/tab_b.png differ diff --git a/sdk/tab_h.png b/sdk/tab_h.png new file mode 100644 index 0000000000..fd5cb70548 Binary files /dev/null and b/sdk/tab_h.png differ diff --git a/sdk/tab_s.png b/sdk/tab_s.png new file mode 100644 index 0000000000..ab478c95b6 Binary files /dev/null and b/sdk/tab_s.png differ diff --git a/sdk/tabs.css b/sdk/tabs.css new file mode 100644 index 0000000000..9cf578f23a --- /dev/null +++ b/sdk/tabs.css @@ -0,0 +1,60 @@ +.tabs, .tabs2, .tabs3 { + background-image: url('tab_b.png'); + width: 100%; + z-index: 101; + font-size: 13px; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +.tabs2 { + font-size: 10px; +} +.tabs3 { + font-size: 9px; +} + +.tablist { + margin: 0; + padding: 0; + display: table; +} + +.tablist li { + float: left; + display: table-cell; + background-image: url('tab_b.png'); + line-height: 36px; + list-style: none; +} + +.tablist a { + display: block; + padding: 0 20px; + font-weight: bold; + background-image:url('tab_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #283A5D; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; + outline: none; +} + +.tabs3 .tablist a { + padding: 0 10px; +} + +.tablist a:hover { + background-image: url('tab_h.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + text-decoration: none; +} + +.tablist li.current a { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +}