/* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef WEBMELEMENT_H_ #define WEBMELEMENT_H_ #include #include #include #include namespace android { struct WebmElement : public LightRefBase { const uint64_t mId, mSize; WebmElement(uint64_t id, uint64_t size); virtual ~WebmElement(); virtual int serializePayloadSize(uint8_t *buf); virtual void serializePayload(uint8_t *buf)=0; uint64_t totalSize(); uint64_t serializeInto(uint8_t *buf); uint8_t *serialize(uint64_t& size); int write(int fd, uint64_t& size); static sp EbmlHeader( int ver = 1, int readVer = 1, int maxIdLen = 4, int maxSizeLen = 8, int docVer = 2, int docReadVer = 2); static sp SegmentInfo(uint64_t scale = 1000000, double dur = 0); static sp AudioTrackEntry( int chans, double rate, const sp &buf, int bps = 0, uint64_t uid = 0, bool lacing = false, const char *lang = "und"); static sp VideoTrackEntry( uint64_t width, uint64_t height, uint64_t uid = 0, bool lacing = false, const char *lang = "und"); static sp SeekEntry(uint64_t id, uint64_t off); static sp CuePointEntry(uint64_t time, int track, uint64_t off); static sp SimpleBlock( int trackNum, int16_t timecode, bool key, const uint8_t *data, uint64_t dataSize); }; struct WebmUnsigned : public WebmElement { WebmUnsigned(uint64_t id, uint64_t value); const uint64_t mValue; void serializePayload(uint8_t *buf); }; struct WebmFloat : public WebmElement { const double mValue; WebmFloat(uint64_t id, float value); WebmFloat(uint64_t id, double value); void serializePayload(uint8_t *buf); }; struct WebmBinary : public WebmElement { const sp mRef; WebmBinary(uint64_t id, const sp &ref); void serializePayload(uint8_t *buf); }; struct WebmString : public WebmElement { const char *const mStr; WebmString(uint64_t id, const char *str); void serializePayload(uint8_t *buf); }; struct WebmSimpleBlock : public WebmElement { const int mTrackNum; const int16_t mRelTimecode; const bool mKey; const sp mRef; WebmSimpleBlock(int trackNum, int16_t timecode, bool key, const sp& orig); void serializePayload(uint8_t *buf); }; struct EbmlVoid : public WebmElement { const uint64_t mSizeWidth; EbmlVoid(uint64_t totalSize); int serializePayloadSize(uint8_t *buf); void serializePayload(uint8_t *buf); }; struct WebmMaster : public WebmElement { const List > mChildren; WebmMaster(uint64_t id); WebmMaster(uint64_t id, const List > &children); int serializePayloadSize(uint8_t *buf); void serializePayload(uint8_t *buf); }; } /* namespace android */ #endif /* WEBMELEMENT_H_ */