MPEGDEF.H

//==========================================================================; 
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
// PURPOSE.
//
// Copyright (c) 1996 - 1997 Microsoft Corporation. All Rights Reserved.
//
//--------------------------------------------------------------------------;
//

/*
mpegdef.h

This file defines the externals for interfacing with MPEG
components
*/

/*

MPEG constants

*/

#define MPEG_TIME_DIVISOR (90000)
#define MPEG_MAX_TIME ((LONGLONG)0x200000000)

#define PICTURE_START_CODE 0x00000100
#define USER_DATA_START_CODE 0x000001B2
#define SEQUENCE_HEADER_CODE 0x000001B3
#define SEQUENCE_ERROR_CODE 0x000001B4
#define EXTENSION_START_CODE 0x000001B5
#define SEQUENCE_END_CODE 0x000001B7
#define GROUP_START_CODE 0x000001B8

#define ISO_11172_END_CODE 0x000001B9
#define PACK_START_CODE 0x000001BA
#define SYSTEM_HEADER_START_CODE 0x000001BB
#define PADDING_START_CODE 0x000001BE
#define PACKET_START_CODE_MIN 0x000001BC
#define PACKET_START_CODE_MAX 0x000001FF

#define AUDIO_GLOBAL 0xB8
#define VIDEO_GLOBAL 0xB9
#define RESERVED_STREAM 0xBC
#define PRIVATE_STREAM_1 0xBD
#define PADDING_STREAM 0xBE
#define PRIVATE_STREAM_2 0xBF
#define AUDIO_STREAM 0xC0
#define AUDIO_STREAM_MASK 0xE0
#define VIDEO_STREAM 0xE0
#define VIDEO_STREAM_MASK 0xF0
#define DATA_STREAM 0xF0
#define DATA_STREAM_MASK 0xF0

/* MPEG-2 stuff */
#define PROGRAM_STREAM_DIRECTORY 0xFF
#define PROGRAM_STREAM_MAP 0xBC
#define ANCILLIARY_STREAM 0xF9
#define ECM_STREAM 0xF0
#define EMM_STREAM 0xF1

#define VALID_PACKET(data) (((data) >= PACKET_START_CODE_MIN) \
&& ((data) <= PACKET_START_CODE_MAX))

#define VALID_SYSTEM_START_CODE(data) \
(VALID_PACKET(data) \
|| (data) == SYSTEM_HEADER_START_CODE\
|| (data) == PACK_START_CODE \
|| (data) == ISO_11172_END_CODE)


/* Types of stream */
inline BOOL IsVideoStreamId(BYTE StreamId)
{
return (StreamId & 0xF0) == 0xE0;
} ;
inline BOOL IsAudioStreamId(BYTE StreamId)
{
return (StreamId & 0xE0) == 0xC0;
} ;

#define MAX_MPEG_PACKET_SIZE (65535+6)

/* Lengths of the various structures */
#define PACK_HEADER_LENGTH 12
#define SYSTEM_HEADER_BASIC_LENGTH 12

inline DWORD DWORD_SWAP(DWORD x)
{
return
((DWORD)( ((x) << 24) | ((x) >> 24) |
(((x) & 0xFF00) << 8) | (((x) & 0xFF0000) >> 8)));
}


/* Video definitions */

/* Frame types as defined in a picture header */
#define I_Frame 1
#define D_Frame 4
#define P_Frame 2
#define B_Frame 3