blob: 1942c8d8ba2cb2cee9a180d5dcd223dec70bae29 [file] [log] [blame]
/* INTEL CONFIDENTIAL
* Copyright (c) 2009 Intel Corporation. All rights reserved.
*
* The source code contained or described herein and all documents
* related to the source code ("Material") are owned by Intel
* Corporation or its suppliers or licensors. Title to the
* Material remains with Intel Corporation or its suppliers and
* licensors. The Material contains trade secrets and proprietary
* and confidential information of Intel or its suppliers and
* licensors. The Material is protected by worldwide copyright and
* trade secret laws and treaty provisions. No part of the Material
* may be used, copied, reproduced, modified, published, uploaded,
* posted, transmitted, distributed, or disclosed in any way without
* Intel's prior express written permission.
*
* No license under any patent, copyright, trade secret or other
* intellectual property right is granted to or conferred upon you
* by disclosure or delivery of the Materials, either expressly, by
* implication, inducement, estoppel or otherwise. Any license
* under such intellectual property rights must be express and
* approved by Intel in writing.
*
*/
#ifndef ASF_OBJECTS_H_
#define ASF_OBJECTS_H_
#include "AsfParserDefs.h"
#include "AsfGuids.h"
#pragma pack(push, 1)
struct AsfObject {
GUID objectID;
uint64_t objectSize;
};
struct AsfHeaderObject : AsfObject {
uint32_t numberofHeaderObjects;
uint8_t reserved1;
uint8_t reserved2;
};
struct AsfFilePropertiesObject : AsfObject {
GUID fileID;
uint64_t fileSize;
uint64_t creationDate;
uint64_t dataPacketsCount;
uint64_t playDuration;
uint64_t sendDuration;
uint64_t preroll;
union {
struct {
uint32_t broadcastFlag :1;
uint32_t seekableFlag :1;
uint32_t reserved :30;
} bits;
uint32_t value;
} flags;
uint32_t minimumDataPacketSize;
uint32_t maximumDataPacketSize;
uint32_t maximumBitrate;
};
struct AsfStreamPropertiesObject : AsfObject {
GUID streamType;
GUID errorCorrectionType;
uint64_t timeOffset;
uint32_t typeSpecificDataLength;
uint32_t errorCorrectionDataLength;
union {
struct {
uint16_t streamNumber :7;
uint16_t reserved :8;
uint16_t encryptedContentFlag :1;
} bits;
uint16_t value;
} flags;
uint32_t reserved;
//type-Specific Data;
//error Correction Data;
};
struct AsfHeaderExtensionObject : AsfObject {
GUID clockType; // Reserved Field 1
uint16_t clockSize; // Reserved Field 2
uint32_t headerExtensionDataSize;
//header Extension Data;
};
struct AsfCodecListObject : AsfObject {
// TODO:
};
struct AsfScriptCommandObject : AsfObject {
// TODO:
};
struct AsfMarkerObject : AsfObject {
// TODO:
};
struct AsfBitrateMutualExclusionObject : AsfObject {
// TODO:
};
struct AsfErrorCorrectionObject : AsfObject {
// TODO:
};
struct AsfContentDescriptionObject : AsfObject {
// TODO:
};
struct AsfExtendedContentDescriptionObject : AsfObject {
// TODO:
};
struct AsfStreamBitratePropertiesObject : AsfObject {
// TODO:
};
struct AsfContentBrandingObject : AsfObject {
// TODO:
};
struct AsfContentEncryptionObject : AsfObject {
// TODO:
};
struct AsfExtendedContentEncryptionObject : AsfObject {
// TODO:
};
struct AsfDigitalSignatureObject : AsfObject {
// TODO:
};
struct AsfPaddingObject : AsfObject {
// TODO:
};
// objects in the ASF Header Extension object
struct AsfExtendedStreamPropertiesObject : AsfObject {
uint64_t startTime;
uint64_t endTime;
uint32_t dataBitrate;
uint32_t bufferSize;
uint32_t initialBufferFullness;
uint32_t alternateDataBitrate;
uint32_t alternateBufferSize;
uint32_t alternateInitialBufferFullness;
uint32_t maximumObjectSize;
union {
struct {
uint32_t reliableFlag :1;
uint32_t seekableFlag :1;
uint32_t noCleanpointsFlag :1;
uint32_t resendLiveCleanpointsFlag :1;
uint32_t reservedFlags :28;
} bits;
uint32_t value;
} flags;
uint16_t streamNumber;
uint16_t streamLanguageIDIndex;
uint64_t averageTimePerFrame;
uint16_t streamNameCount;
uint16_t payloadExtensionSystemCount;
//Stream Names - variable length
//Payload Extension Systems - variable length
//Stream Properties Object - variable length
};
struct AsfAdvancedMutualExclusionObject : AsfObject {
// TODO:
};
struct AsfGroupMutualExclusionObject : AsfObject {
// TODO:
};
struct AsfStreamPrioritizationObject : AsfObject {
// TODO:
};
struct AsfBandwidthSharingObject : AsfObject {
// TODO:
};
struct AsfLanguageListObject : AsfObject {
// TODO:
};
struct AsfMetadataObject : AsfObject {
// TODO:
};
struct AsfMetadataLibraryObject : AsfObject {
// TODO:
};
struct AsfIndexParametersObject : AsfObject {
// TODO:
};
struct AsfMediaObjectIndexParametersObject : AsfObject {
// TODO:
};
struct AsfTimeCodeIndexParametersObject : AsfObject {
// TODO:
};
struct AsfCompatibilityObject : AsfObject {
// TODO:
};
struct AsfAdvancedContentEncryptionObject : AsfObject {
// TODO:
};
// ASF top-level data object
struct AsfDataObject : AsfObject {
GUID fileID;
uint64_t totalDataPackets;
uint16_t reserved;
//Data Packets;
};
// ASF top-level index objects
struct AsfSimpleIndexObject : AsfObject {
GUID fileID;
// in 100-nanosecond units
uint64_t indexEntryTimeInterval;
uint32_t maximumPacketCount;
uint32_t indexEntriesCount;
//packet number for entry #0 (4 bytes)
//packet count for entry #0 (2 bytes)
//packet number for entry #1
//packet count for entry #1
};
struct AsfIndexObject : AsfObject {
// TODO:
};
struct AsfMediaObjectIndexObject : AsfObject {
// TODO:
};
struct AsfTimecodeIndexObject : AsfObject {
// TODO:
};
// media specific data structure
struct AsfWaveFormatEx {
uint16_t codecIDFormatTag;
uint16_t numberOfChannels;
uint32_t samplesPerSecond;
uint32_t averageNumberOfBytesPerSecond;
uint16_t blockAlignment;
uint16_t bitsPerSample;
uint16_t codecSpecificDataSize;
//uint8_t codecSpecificData[];
};
struct AsfVideoInfoHeader {
uint32_t encodedImageWidth;
uint32_t encodedImageHeight;
uint8_t reservedFlags;
uint16_t formatDataSize;
//FormatData formatData[];
};
struct AsfBitmapInfoHeader {
uint32_t formatDataSize;
int32_t imageWidth;
int32_t imageHeight;
uint16_t reserved;
uint16_t bitsPerPixelCount;
uint32_t compressionID;
uint32_t imageSize;
int32_t horizontalPixelsPerMeter;
int32_t verticalPixelsPerMeter;
uint32_t colorsUsedCount;
uint32_t importantColorsCount;
//uint8_t codecSpecificData[];
};
#pragma pack(pop)
#endif