Files
haiku-beta6/src/add-ons/media/plugins/mov_reader/libMOV/QTStructs.h
T
David McPaul 011badde6b Improvements to mov_reader still alpha
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13080 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-06-13 07:09:45 +00:00

311 lines
6.4 KiB
C

/*
* Copyright (c) 2005, David McPaul
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
struct xxxx {
uint8 Version;
uint8 Flags1;
uint8 Flags2;
uint8 Flags3;
uint32 CreationTime;
uint32 ModificationTime;
uint32 TimeScale;
uint32 Duration;
uint16 Language;
uint16 Quality;
};
#define AUDIO_NONE 'NONE'
#define AUDIO_RAW 'raw '
#define AUDIO_TWOS1 'twos'
#define AUDIO_TWOS2 'sowt'
#define AUDIO_IMA4 'ima4'
#define AUDIO_MS_PCM02 0x6D730002
#define AUDIO_INTEL_PCM17 0x6D730011
#define AUDIO_MPEG3_CBR 0x6D730055
// this is all from the avi reader. we will rework it for mov
struct mov_main_header
{
uint32 micro_sec_per_frame;
uint32 max_bytes_per_sec;
uint32 padding_granularity;
uint32 flags;
uint32 total_frames;
uint32 initial_frames;
uint32 streams;
uint32 suggested_buffer_size;
uint32 width;
uint32 height;
};
struct mov_stream_header
{
uint32 fourcc_type;
uint32 fourcc_handler;
uint32 flags;
uint16 priority;
uint16 language;
uint32 initial_frames;
uint32 scale;
uint32 rate;
uint32 start;
uint32 length;
uint32 suggested_buffer_size;
uint32 quality;
uint32 sample_size;
int16 rect_left;
int16 rect_top;
int16 rect_right;
int16 rect_bottom;
};
struct VideoMetaData
{
uint32 compression;
uint32 size;
uint32 width;
uint32 height;
uint16 planes;
uint16 bit_count;
uint32 image_size;
uint32 HorizontalResolution;
uint32 VerticalResolution;
float FrameRate;
};
struct AudioMetaData
{
uint32 compression; // compression used
uint16 NoOfChannels; // 1 = mono, 2 = stereo
uint16 SampleSize; // bits per sample
float SampleRate; // Samples per second (OR Frames per second)
uint32 PacketSize; // (Sample Rate * NoOfchannels * SampleSize)/8 = bytes per second
};
struct wave_format_ex
{
uint16 format_tag;
uint16 channels;
uint32 frames_per_sec;
uint32 avg_bytes_per_sec;
uint16 block_align;
uint16 bits_per_sample;
uint16 extra_size;
};
struct stts {
uint8 Version;
uint8 Flags1;
uint8 Flags2;
uint8 Flags3;
uint32 NoEntries;
};
struct TimeToSample {
uint32 Count;
uint32 Duration;
};
struct SampleToChunk {
uint32 FirstChunk;
uint32 SamplesPerChunk;
uint32 SampleDescriptionID;
uint32 TotalPrevFrames;
};
// Note standard is 32bits offsets but later is 64
// We standardise on 64 and convert older formats upwards
struct ChunkToOffset {
uint64 Offset;
};
struct SyncSample {
uint64 SyncSampleNo;
};
struct SampleSizeHeader {
uint8 Version;
uint8 Flags1;
uint8 Flags2;
uint8 Flags3;
uint32 SampleSize;
uint32 NoEntries;
};
struct SampleSize {
uint32 Size;
};
struct mvhd {
uint8 Version;
uint8 Flags1;
uint8 Flags2;
uint8 Flags3;
uint32 CreationTime;
uint32 ModificationTime;
uint32 TimeScale;
uint32 Duration;
uint32 PreferredRate;
uint16 PreferredVolume;
uint8 Reserved[10];
uint8 Matrix[36];
uint32 PreviewTime;
uint32 PreviewDuration;
uint32 PosterTime;
uint32 SelectionTime;
uint32 SelectionDuration;
uint32 CurrentTime;
uint32 NextTrackID;
};
struct tkhd {
uint8 Version;
uint8 Flags1;
uint8 Flags2;
uint8 Flags3;
uint32 CreationTime;
uint32 ModificationTime;
uint32 TrackID;
uint32 Reserved1;
uint32 Duration;
uint64 Reserved2;
uint16 Layer;
uint16 AlternateGroup;
uint16 Volume;
uint16 Reserved3;
uint8 MatrixStructure[36];
uint32 TrackWidth;
uint32 TrackHeight;
};
struct mdhd {
uint8 Version;
uint8 Flags1;
uint8 Flags2;
uint8 Flags3;
uint32 CreationTime;
uint32 ModificationTime;
uint32 TimeScale;
uint32 Duration;
uint16 Language;
uint16 Quality;
};
struct hdlr {
uint8 Version;
uint8 Flags1;
uint8 Flags2;
uint8 Flags3;
uint32 ComponentType;
uint32 ComponentSubType;
uint32 ComponentManufacturer;
uint32 ComponentFlags;
uint32 ComponentFlagsMask;
};
struct vmhd {
uint8 Version;
uint8 Flags1;
uint8 Flags2;
uint8 Flags3;
uint16 GraphicsMode;
uint16 OpColourRed;
uint16 OpColourGreen;
uint16 OpColourBlue;
};
struct smhd {
uint8 Version;
uint8 Flags1;
uint8 Flags2;
uint8 Flags3;
uint16 Balance;
uint16 Reserved;
};
struct array_header {
uint8 Version;
uint8 Flags1;
uint8 Flags2;
uint8 Flags3;
uint32 NoEntries;
};
struct SampleDescBase {
uint32 Size;
uint32 DataFormat;
uint8 Reserved[6];
uint16 DataReference;
};
struct SoundDescription {
uint16 Version;
uint16 Revision;
uint32 Vendor;
uint16 NoOfChannels;
uint16 SampleSize;
uint16 CompressionID;
uint16 PacketSize;
uint32 SampleRate;
};
struct SoundDescriptionV0 {
SampleDescBase basefields;
SoundDescription desc;
};
struct SoundDescriptionV1 {
SampleDescBase basefields;
SoundDescription desc;
uint32 samplesPerPacket;
uint32 bytesPerPacket;
uint32 bytesPerFrame;
uint32 bytesPerSample;
// These are optional data from atoms that follow
wave_format_ex theWaveFormat; // wave atom is a copy of wave_format_ex
};
struct VideoDescription {
uint16 Version;
uint16 Revision;
uint32 Vendor;
uint32 TemporaralQuality;
uint32 SpacialQuality;
uint16 Width;
uint16 Height;
uint32 HorizontalResolution;
uint32 VerticalResolution;
uint32 DataSize;
uint16 FrameCount;
char CompressorName[32];
uint16 Depth;
uint16 ColourTableID;
// Optional atoms follow
};
struct VideoDescriptionV0 {
SampleDescBase basefields;
VideoDescription desc;
};