/*
	File:		ComponentVideoPayload.h

	Contains:	Declaration of ComponentVideoPayload datatype and its operations

	Copyright:	© 1997-1999 by Apple Computer Inc. all rights reserved.

	
	
	X-Sample-YUV-422-v0 Payload Format
	-----------------------------------------------------------------
	
	                     1                   2                   3
	 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
	+-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
	|D|                      Description Seed                       |
	+-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
	|                        Offset                         |  MBZ  |
	+-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
	:                      Payload Description                      :
	+-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
	:                          Image Data                           :
	+-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
	
	
	D - 1 bit
	
		Set if, and only if, Payload Description is present.
	
	
	Description Seed - 31 bits
	
		A payload description seed that increments cyclically
		whenever the payload description changes.
		
		
	Offset - 28 bits
	
		Positive offset from the start of the current frame to the
		start of image data contained in this payload as counted in
		32-bit words. Multiply by 4 to compute the offset in octets.
	
	
	MBZ - 4 bits
	
		Reserved.  Must be zero.
	
	
	Payload Description - described below
		
		Present if, and only if, the D bit is set.
	
	
	Image Data - 0 or more 32-bit words
		
		YUV 4:2:2 encoded image data.  Might be omitted if Payload
		Description is present.
	
	
	
	Payload Description Format
	-----------------------------------------------------------------
	
	                     1                   2                   3
	 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
	+-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
	| Z |            Width            |            Height           |
	+-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
	
	
	Z - 2 bits
	
		Reserved.  Must be zero.
	
	
	Width - 15 bits
	
		Positive integer specifying width of current frame in pixels.
	
	
	Height - 15 bits
		
		Positive integer specifying height of current frame in pixels.

*/



#ifndef __COMPONENTVIDEOPAYLOAD__
#define __COMPONENTVIDEOPAYLOAD__



/* ---------------------------------------------------------------------------
 *		H E A D E R S
 * ---------------------------------------------------------------------------
 */

#include <MacTypes.h>



/* ---------------------------------------------------------------------------
 *		C O N S T A N T S
 * ---------------------------------------------------------------------------
 */

enum
{
	kComponentVideoPayloadFixedHeaderWordCount	= 2,
	kComponentVideoPayloadDescriptionWordCount	= 1
};



/* ---------------------------------------------------------------------------
 *		D A T A T Y P E S
 * ---------------------------------------------------------------------------
 *
 *	The ComponentVideoPayload structure represents the payload format defined
 *	above.  Unfortunately, the position of bit fields in C data structures is
 *	implementation-dependent, so the data structure cannot declare individual
 *	fields of the payload format.
 *
 */



typedef struct
{
	UInt32	itsFixedHeader[ kComponentVideoPayloadFixedHeaderWordCount ];
	union
	{
		UInt32	itsDescription[ kComponentVideoPayloadDescriptionWordCount ];
		UInt32	itsImageData[ 1 ];
	};
} ComponentVideoPayload;



/* ---------------------------------------------------------------------------
 *		P R O T O T Y P E S
 * ---------------------------------------------------------------------------
 *
 *	These functions get and set fields of the ComponentVideoPayload.  Some
 *	functions affect multiple fields, and some functions expect or return
 *	values that differ from the representation encoded in the payload:
 *
 *		ComponentVideoPayloadSetOffset()
 *		ComponentVideoPayloadOffset()			These functions expect or
 *												return the offset in octets,
 *												not 32-bit words
 *
 *		ComponentVideoPayloadSetDescription()	This function implicitly sets
 *												the description flag (D) field
 *												if inWidth and inHeight are
 *												both non-zero.  If inWidth or
 *												inHeight is zero, this
 *												function clears the
 *												description flag, but does not
 *												modify the Width or Height
 *												fields in the given
 *												ComponentPayloadDescription.
 *		
 *		ComponentVideoPayloadCopyDescription()	This function copies the
 *												description flag (D) and
 *												Description Seed fields as
 *												well as the Payload
 *												Description field.
 */

UInt32
ComponentVideoPayloadDescriptionSeedLimit(
	void );

ComponentVideoPayload *
ComponentVideoPayloadInitialize(
	ComponentVideoPayload *		inPayload,
	UInt16						inWidth,
	UInt16						inHeight );

UInt32
ComponentVideoPayloadSetOffset(
	ComponentVideoPayload *		inPayload,
	UInt32						inOffset );

UInt32
ComponentVideoPayloadSetDescription(
	ComponentVideoPayload *		inPayload,
	UInt16						inWidth,
	UInt16						inHeight );

UInt32
ComponentVideoPayloadCopyDescription(
	ComponentVideoPayload *			inTargetPayload,
	const ComponentVideoPayload *	inSourcePayload );

Boolean
ComponentVideoPayloadHasDescription(
	const ComponentVideoPayload *	inPayload );

UInt32
ComponentVideoPayloadDescriptionSeed(
	const ComponentVideoPayload *	inPayload );

UInt32
ComponentVideoPayloadOffset(
	const ComponentVideoPayload *	inPayload );

UInt16
ComponentVideoPayloadWidth(
	const ComponentVideoPayload *	inPayload );

UInt16
ComponentVideoPayloadHeight(
	const ComponentVideoPayload *	inPayload );



#endif /* __COMPONENTVIDEOPAYLOAD__ */
