You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.0 KiB
105 lines
3.0 KiB
4 years ago
|
#ifndef __OGMSTREAMS_H
|
||
|
#define __OGMSTREAMS_H
|
||
|
|
||
|
/*
|
||
|
* Taken from http://tobias.everwicked.com/packfmt.htm
|
||
|
*
|
||
|
* Changes: Prefixed types with ogm_ to avoid namespace polution
|
||
|
* -- tibit
|
||
|
*
|
||
|
|
||
|
First packet (header)
|
||
|
---------------------
|
||
|
|
||
|
pos | content | description
|
||
|
-------+-------------------------+----------------------------------
|
||
|
0x0000 | 0x01 | indicates 'header packet'
|
||
|
-------+-------------------------+----------------------------------
|
||
|
0x0001 | ogm_stream_header | the size is indicated in the
|
||
|
| | size member
|
||
|
|
||
|
|
||
|
Second packet (comment)
|
||
|
-----------------------
|
||
|
|
||
|
pos | content | description
|
||
|
-------+-------------------------+----------------------------------
|
||
|
0x0000 | 0x03 | indicates 'comment packet'
|
||
|
-------+-------------------------+----------------------------------
|
||
|
0x0001 | data | see vorbis doc on www.xiph.org
|
||
|
|
||
|
Data packets
|
||
|
------------
|
||
|
|
||
|
pos | content | description
|
||
|
---------+-------------------------+----------------------------------
|
||
|
0x0000 | Bit0 0 | indicates data packet
|
||
|
| Bit1 Bit 2 of lenbytes |
|
||
|
| Bit2 unused |
|
||
|
| Bit3 keyframe |
|
||
|
| Bit4 unused |
|
||
|
| Bit5 unused |
|
||
|
| Bit6 Bit 0 of lenbytes |
|
||
|
| Bit7 Bit 1 of lenbytes |
|
||
|
---------+-------------------------+----------------------------------
|
||
|
0x0001 | LowByte | Length of this packet in samples
|
||
|
| ... | (frames for video, samples for
|
||
|
| HighByte | audio, 1ms units for text)
|
||
|
---------+-------------------------+----------------------------------
|
||
|
0x0001+ | data | packet contents
|
||
|
lenbytes | |
|
||
|
|
||
|
*
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
//// oggDS headers
|
||
|
// Header for the new header format
|
||
|
typedef struct ogm_stream_header_video
|
||
|
{
|
||
|
ogg_int32_t width;
|
||
|
ogg_int32_t height;
|
||
|
} ogm_stream_header_video;
|
||
|
|
||
|
typedef struct ogm_stream_header_audio
|
||
|
{
|
||
|
ogg_int16_t channels;
|
||
|
ogg_int16_t blockalign;
|
||
|
ogg_int32_t avgbytespersec;
|
||
|
} ogm_stream_header_audio;
|
||
|
|
||
|
typedef struct ogm_stream_header
|
||
|
{
|
||
|
char streamtype[8];
|
||
|
char subtype[4];
|
||
|
|
||
|
ogg_int32_t size; // size of the structure
|
||
|
|
||
|
ogg_int64_t time_unit; // in reference time
|
||
|
ogg_int64_t samples_per_unit;
|
||
|
ogg_int32_t default_len; // in media time
|
||
|
|
||
|
ogg_int32_t buffersize;
|
||
|
ogg_int16_t bits_per_sample;
|
||
|
|
||
|
ogg_int16_t padding;
|
||
|
|
||
|
union
|
||
|
{
|
||
|
// Video specific
|
||
|
ogm_stream_header_video video;
|
||
|
// Audio specific
|
||
|
ogm_stream_header_audio audio;
|
||
|
} sh;
|
||
|
} ogm_stream_header;
|
||
|
|
||
|
/// Some defines from OggDS
|
||
|
#define OGM_PACKET_TYPE_HEADER 0x01
|
||
|
#define OGM_PACKET_TYPE_COMMENT 0x03
|
||
|
#define OGM_PACKET_TYPE_BITS 0x07
|
||
|
#define OGM_PACKET_LEN_BITS01 0xc0
|
||
|
#define OGM_PACKET_LEN_BITS2 0x02
|
||
|
#define OGM_PACKET_IS_SYNCPOINT 0x08
|
||
|
|
||
|
#endif /* __OGMSTREAMS_H */
|