1cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber/* 2cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * Copyright (C) 2010 The Android Open Source Project 3cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * 4cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * you may not use this file except in compliance with the License. 6cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * You may obtain a copy of the License at 7cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * 8cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * 10cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * Unless required by applicable law or agreed to in writing, software 11cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * See the License for the specific language governing permissions and 14cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * limitations under the License. 15cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber */ 16cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 17cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#ifndef A_TS_PARSER_H_ 18cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 19cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#define A_TS_PARSER_H_ 20cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 21cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#include <sys/types.h> 22cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 23cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#include <media/stagefright/foundation/ABase.h> 24f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include <media/stagefright/foundation/AMessage.h> 25540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim#include <media/stagefright/MediaSource.h> 268dfa228201131da0bf3ba1d74c819c27c0500f6bAndreas Huber#include <utils/KeyedVector.h> 27cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#include <utils/Vector.h> 28cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#include <utils/RefBase.h> 293b2847fa5506dc265d2e46f067bfbb66ae209f74Chong Zhang#include <vector> 30cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 31cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Hubernamespace android { 323b2847fa5506dc265d2e46f067bfbb66ae209f74Chong Zhangnamespace media { 333b2847fa5506dc265d2e46f067bfbb66ae209f74Chong Zhangclass ICas; 343b2847fa5506dc265d2e46f067bfbb66ae209f74Chong Zhangclass IDescrambler; 353b2847fa5506dc265d2e46f067bfbb66ae209f74Chong Zhang}; 363b2847fa5506dc265d2e46f067bfbb66ae209f74Chong Zhangusing namespace media; 3786a58cabe322b746ab0eb17f0cade34ed68ba60eBernhard Rosenkränzerclass ABitReader; 38f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstruct ABuffer; 393b2847fa5506dc265d2e46f067bfbb66ae209f74Chong Zhangstruct AnotherPacketSource; 40cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 41cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct ATSParser : public RefBase { 42f933441648ef6a71dee783d733aac17b9508b452Andreas Huber enum DiscontinuityType { 436e3d311b6631b12aac2879d1b08c3534aece78b1Andreas Huber DISCONTINUITY_NONE = 0, 446e3d311b6631b12aac2879d1b08c3534aece78b1Andreas Huber DISCONTINUITY_TIME = 1, 456e3d311b6631b12aac2879d1b08c3534aece78b1Andreas Huber DISCONTINUITY_AUDIO_FORMAT = 2, 466e3d311b6631b12aac2879d1b08c3534aece78b1Andreas Huber DISCONTINUITY_VIDEO_FORMAT = 4, 4787f2a558dd12043631e12c361abef301bf603140Andreas Huber DISCONTINUITY_ABSOLUTE_TIME = 8, 48d5e56231a598b180a1d898bb7dc61b75580e59a4Andreas Huber DISCONTINUITY_TIME_OFFSET = 16, 496e3d311b6631b12aac2879d1b08c3534aece78b1Andreas Huber 506e3d311b6631b12aac2879d1b08c3534aece78b1Andreas Huber // For legacy reasons this also implies a time discontinuity. 516e3d311b6631b12aac2879d1b08c3534aece78b1Andreas Huber DISCONTINUITY_FORMATCHANGE = 526e3d311b6631b12aac2879d1b08c3534aece78b1Andreas Huber DISCONTINUITY_AUDIO_FORMAT 536e3d311b6631b12aac2879d1b08c3534aece78b1Andreas Huber | DISCONTINUITY_VIDEO_FORMAT 546e3d311b6631b12aac2879d1b08c3534aece78b1Andreas Huber | DISCONTINUITY_TIME, 55a48d372833ccec13c96ece9efcc226e8beac7f59Chong Zhang DISCONTINUITY_FORMAT_ONLY = 56a48d372833ccec13c96ece9efcc226e8beac7f59Chong Zhang DISCONTINUITY_AUDIO_FORMAT 57a48d372833ccec13c96ece9efcc226e8beac7f59Chong Zhang | DISCONTINUITY_VIDEO_FORMAT, 58f933441648ef6a71dee783d733aac17b9508b452Andreas Huber }; 59f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 60c4c17d47b674b425fb6c399822c0ab3258543c0aAndreas Huber enum Flags { 61c4c17d47b674b425fb6c399822c0ab3258543c0aAndreas Huber // The 90kHz clock (PTS/DTS) is absolute, i.e. PTS=0 corresponds to 62c4c17d47b674b425fb6c399822c0ab3258543c0aAndreas Huber // a media time of 0. 63c4c17d47b674b425fb6c399822c0ab3258543c0aAndreas Huber // If this flag is _not_ specified, the first PTS encountered in a 64c4c17d47b674b425fb6c399822c0ab3258543c0aAndreas Huber // program of this stream will be assumed to correspond to media time 0 65c4c17d47b674b425fb6c399822c0ab3258543c0aAndreas Huber // instead. 6687f2a558dd12043631e12c361abef301bf603140Andreas Huber TS_TIMESTAMPS_ARE_ABSOLUTE = 1, 6787f2a558dd12043631e12c361abef301bf603140Andreas Huber // Video PES packets contain exactly one (aligned) access unit. 6887f2a558dd12043631e12c361abef301bf603140Andreas Huber ALIGNED_VIDEO_DATA = 2, 69c4c17d47b674b425fb6c399822c0ab3258543c0aAndreas Huber }; 70c4c17d47b674b425fb6c399822c0ab3258543c0aAndreas Huber 7182e147049625a4cfdcb228a1de7efda594d446c9Robert Shih enum SourceType { 7282e147049625a4cfdcb228a1de7efda594d446c9Robert Shih VIDEO = 0, 7382e147049625a4cfdcb228a1de7efda594d446c9Robert Shih AUDIO = 1, 7482e147049625a4cfdcb228a1de7efda594d446c9Robert Shih META = 2, 7582e147049625a4cfdcb228a1de7efda594d446c9Robert Shih NUM_SOURCE_TYPES = 3 7682e147049625a4cfdcb228a1de7efda594d446c9Robert Shih }; 7782e147049625a4cfdcb228a1de7efda594d446c9Robert Shih 78540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim // Event is used to signal sync point event at feedTSPacket(). 79540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim struct SyncEvent { 8040d8899f60c5212af9d727ba0ffaaecf676ebd1dChih-Hung Hsieh explicit SyncEvent(off64_t offset); 81540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim 82540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim void init(off64_t offset, const sp<MediaSource> &source, 8382e147049625a4cfdcb228a1de7efda594d446c9Robert Shih int64_t timeUs, SourceType type); 84540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim 859558f6dd733dc450270f38b9a139d384d273ce0aWei Jia bool hasReturnedData() const { return mHasReturnedData; } 869558f6dd733dc450270f38b9a139d384d273ce0aWei Jia void reset(); 879558f6dd733dc450270f38b9a139d384d273ce0aWei Jia off64_t getOffset() const { return mOffset; } 889558f6dd733dc450270f38b9a139d384d273ce0aWei Jia const sp<MediaSource> &getMediaSource() const { return mMediaSource; } 899558f6dd733dc450270f38b9a139d384d273ce0aWei Jia int64_t getTimeUs() const { return mTimeUs; } 9082e147049625a4cfdcb228a1de7efda594d446c9Robert Shih SourceType getType() const { return mType; } 91540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim 92540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim private: 939558f6dd733dc450270f38b9a139d384d273ce0aWei Jia bool mHasReturnedData; 94540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim /* 959558f6dd733dc450270f38b9a139d384d273ce0aWei Jia * mHasReturnedData == false: the current offset (or undefined if the returned data 969558f6dd733dc450270f38b9a139d384d273ce0aWei Jia has been invalidated via reset()) 979558f6dd733dc450270f38b9a139d384d273ce0aWei Jia * mHasReturnedData == true: the start offset of sync payload 98540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim */ 99540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim off64_t mOffset; 100540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim /* The media source object for this event. */ 101540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim sp<MediaSource> mMediaSource; 102540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim /* The timestamp of the sync frame. */ 103540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim int64_t mTimeUs; 10482e147049625a4cfdcb228a1de7efda594d446c9Robert Shih SourceType mType; 105540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim }; 106540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim 10740d8899f60c5212af9d727ba0ffaaecf676ebd1dChih-Hung Hsieh explicit ATSParser(uint32_t flags = 0); 108cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 1093b2847fa5506dc265d2e46f067bfbb66ae209f74Chong Zhang status_t setMediaCas(const sp<ICas> &cas); 1103b2847fa5506dc265d2e46f067bfbb66ae209f74Chong Zhang 111540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim // Feed a TS packet into the parser. uninitialized event with the start 112540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim // offset of this TS packet goes in, and if the parser detects PES with 113540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim // a sync frame, the event will be initiailzed with the start offset of the 114540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim // PES. Note that the offset of the event can be different from what we fed, 115540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim // as a PES may consist of multiple TS packets. 116540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim // 117540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim // Even in the case feedTSPacket() returns non-OK value, event still may be 118540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim // initialized if the parsing failed after the detection. 119540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim status_t feedTSPacket( 120540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim const void *data, size_t size, SyncEvent *event = NULL); 12132f3cefa373cd55e63deda36ca9d07c7fe22eaafAndreas Huber 12232f3cefa373cd55e63deda36ca9d07c7fe22eaafAndreas Huber void signalDiscontinuity( 12332f3cefa373cd55e63deda36ca9d07c7fe22eaafAndreas Huber DiscontinuityType type, const sp<AMessage> &extra); 12432f3cefa373cd55e63deda36ca9d07c7fe22eaafAndreas Huber 125f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void signalEOS(status_t finalResult); 126cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 127cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber sp<MediaSource> getSource(SourceType type); 128bf20727f0aaf609bc3b495b07b45822b137d21baRobert Shih bool hasSource(SourceType type) const; 129cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 13043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber bool PTSTimeDeltaEstablished(); 13143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 13282e147049625a4cfdcb228a1de7efda594d446c9Robert Shih int64_t getFirstPTSTimeUs(); 13382e147049625a4cfdcb228a1de7efda594d446c9Robert Shih 1343a37f3e948b600405e0c70b8a241778fda44168eHassan Shojania void signalNewSampleAesKey(const sp<AMessage> &keyItem); 1353a37f3e948b600405e0c70b8a241778fda44168eHassan Shojania 136386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber enum { 137386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber // From ISO/IEC 13818-1: 2000 (E), Table 2-29 1382944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber STREAMTYPE_RESERVED = 0x00, 139386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber STREAMTYPE_MPEG1_VIDEO = 0x01, 140386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber STREAMTYPE_MPEG2_VIDEO = 0x02, 141386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber STREAMTYPE_MPEG1_AUDIO = 0x03, 142386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber STREAMTYPE_MPEG2_AUDIO = 0x04, 1436e3d311b6631b12aac2879d1b08c3534aece78b1Andreas Huber STREAMTYPE_MPEG2_AUDIO_ADTS = 0x0f, 144386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber STREAMTYPE_MPEG4_VIDEO = 0x10, 1450852843d304006e3ab333081fddda13b07193de8Robert Shih STREAMTYPE_METADATA = 0x15, 146386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber STREAMTYPE_H264 = 0x1b, 147dd432ce03eccf280d83672f95076b6fbd561047fChangwan Ryu 148dd432ce03eccf280d83672f95076b6fbd561047fChangwan Ryu // From ATSC A/53 Part 3:2009, 6.7.1 149dd432ce03eccf280d83672f95076b6fbd561047fChangwan Ryu STREAMTYPE_AC3 = 0x81, 150dd432ce03eccf280d83672f95076b6fbd561047fChangwan Ryu 1519bf32f06e8971c1d3eb4fc5edd74b69557f97212Chong Zhang // Stream type 0x83 is non-standard, 1529bf32f06e8971c1d3eb4fc5edd74b69557f97212Chong Zhang // it could be LPCM or TrueHD AC3 1539bf32f06e8971c1d3eb4fc5edd74b69557f97212Chong Zhang STREAMTYPE_LPCM_AC3 = 0x83, 1543a37f3e948b600405e0c70b8a241778fda44168eHassan Shojania 1553a37f3e948b600405e0c70b8a241778fda44168eHassan Shojania //Sample Encrypted types 1563a37f3e948b600405e0c70b8a241778fda44168eHassan Shojania STREAMTYPE_H264_ENCRYPTED = 0xDB, 1573a37f3e948b600405e0c70b8a241778fda44168eHassan Shojania STREAMTYPE_AAC_ENCRYPTED = 0xCF, 1583a37f3e948b600405e0c70b8a241778fda44168eHassan Shojania STREAMTYPE_AC3_ENCRYPTED = 0xC1, 159386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber }; 160386d609dc513e838c7e7c4c46c604493ccd560beAndreas Huber 1612944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huberprotected: 1622944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber virtual ~ATSParser(); 1632944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 1642944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huberprivate: 165cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber struct Program; 166cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber struct Stream; 1678dfa228201131da0bf3ba1d74c819c27c0500f6bAndreas Huber struct PSISection; 1683b2847fa5506dc265d2e46f067bfbb66ae209f74Chong Zhang struct CasManager; 1693b2847fa5506dc265d2e46f067bfbb66ae209f74Chong Zhang struct CADescriptor { 1703b2847fa5506dc265d2e46f067bfbb66ae209f74Chong Zhang int32_t mSystemID; 1713b2847fa5506dc265d2e46f067bfbb66ae209f74Chong Zhang unsigned mPID; 1723b2847fa5506dc265d2e46f067bfbb66ae209f74Chong Zhang std::vector<uint8_t> mPrivateData; 1733b2847fa5506dc265d2e46f067bfbb66ae209f74Chong Zhang }; 1743b2847fa5506dc265d2e46f067bfbb66ae209f74Chong Zhang 1753b2847fa5506dc265d2e46f067bfbb66ae209f74Chong Zhang sp<CasManager> mCasManager; 176cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 177c4c17d47b674b425fb6c399822c0ab3258543c0aAndreas Huber uint32_t mFlags; 178cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber Vector<sp<Program> > mPrograms; 179cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 1808dfa228201131da0bf3ba1d74c819c27c0500f6bAndreas Huber // Keyed by PID 1818dfa228201131da0bf3ba1d74c819c27c0500f6bAndreas Huber KeyedVector<unsigned, sp<PSISection> > mPSISections; 1828dfa228201131da0bf3ba1d74c819c27c0500f6bAndreas Huber 18387f2a558dd12043631e12c361abef301bf603140Andreas Huber int64_t mAbsoluteTimeAnchorUs; 18487f2a558dd12043631e12c361abef301bf603140Andreas Huber 185d5e56231a598b180a1d898bb7dc61b75580e59a4Andreas Huber bool mTimeOffsetValid; 186d5e56231a598b180a1d898bb7dc61b75580e59a4Andreas Huber int64_t mTimeOffsetUs; 187d47dfcb5a2e5901c96fc92662cec7aa30f7f8843Chong Zhang int64_t mLastRecoveredPTS; 188d5e56231a598b180a1d898bb7dc61b75580e59a4Andreas Huber 18987f2a558dd12043631e12c361abef301bf603140Andreas Huber size_t mNumTSPacketsParsed; 19087f2a558dd12043631e12c361abef301bf603140Andreas Huber 1913a37f3e948b600405e0c70b8a241778fda44168eHassan Shojania sp<AMessage> mSampleAesKeyItem; 1923a37f3e948b600405e0c70b8a241778fda44168eHassan Shojania 193cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber void parseProgramAssociationTable(ABitReader *br); 194cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber void parseProgramMap(ABitReader *br); 195540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim // Parse PES packet where br is pointing to. If the PES contains a sync 196540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim // frame, set event with the time and the start offset of this PES. 197540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim // Note that the method itself does not touch event. 198540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim void parsePES(ABitReader *br, SyncEvent *event); 199540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim 200540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim // Strip remaining packet headers and pass to appropriate program/stream 201540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim // to parse the payload. If the payload turns out to be PES and contains 202540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim // a sync frame, event shall be set with the time and start offset of the 203540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim // PES. 204540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim // Note that the method itself does not touch event. 20506528d7f18ad01377357d337eaa3e875a242bd2dAndreas Huber status_t parsePID( 206cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber ABitReader *br, unsigned PID, 20787f2a558dd12043631e12c361abef301bf603140Andreas Huber unsigned continuity_counter, 208540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim unsigned payload_unit_start_indicator, 2093b2847fa5506dc265d2e46f067bfbb66ae209f74Chong Zhang unsigned transport_scrambling_control, 2103b2847fa5506dc265d2e46f067bfbb66ae209f74Chong Zhang unsigned random_access_indicator, 211540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim SyncEvent *event); 212cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 2133b2847fa5506dc265d2e46f067bfbb66ae209f74Chong Zhang status_t parseAdaptationField( 2143b2847fa5506dc265d2e46f067bfbb66ae209f74Chong Zhang ABitReader *br, unsigned PID, unsigned *random_access_indicator); 2153b2847fa5506dc265d2e46f067bfbb66ae209f74Chong Zhang 216540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim // see feedTSPacket(). 217540006666b4191cd78391378f1c66c21bcf0c4cdWonsik Kim status_t parseTS(ABitReader *br, SyncEvent *event); 218cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 21919cec89f8b05fd05f8034ee1a4cd39ee09c33f02Marco Nelissen void updatePCR(unsigned PID, uint64_t PCR, uint64_t byteOffsetFromStart); 22087f2a558dd12043631e12c361abef301bf603140Andreas Huber 22187f2a558dd12043631e12c361abef301bf603140Andreas Huber uint64_t mPCR[2]; 22219cec89f8b05fd05f8034ee1a4cd39ee09c33f02Marco Nelissen uint64_t mPCRBytes[2]; 22387f2a558dd12043631e12c361abef301bf603140Andreas Huber int64_t mSystemTimeUs[2]; 22487f2a558dd12043631e12c361abef301bf603140Andreas Huber size_t mNumPCRs; 22587f2a558dd12043631e12c361abef301bf603140Andreas Huber 226cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(ATSParser); 227cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber}; 228cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 229cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber} // namespace android 230cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 231cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#endif // A_TS_PARSER_H_ 232