/*
 * Broadcom BM2835 V4L2 driver
 *
 * Copyright © 2013 Raspberry Pi (Trading) Ltd.
 *
 * This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file COPYING in the main directory of this archive
 * for more details.
 *
 * Authors: Vincent Sanders <vincent.sanders@collabora.co.uk>
 *          Dave Stevenson <dsteve@broadcom.com>
 *          Simon Mellor <simellor@broadcom.com>
 *          Luke Diamand <luked@broadcom.com>
 */

#ifndef MMAL_MSG_FORMAT_H
#define MMAL_MSG_FORMAT_H

#include "mmal-msg-common.h"

/* MMAL_ES_FORMAT_T */

struct mmal_audio_format {
	u32 channels;           /**< Number of audio channels */
	u32 sample_rate;        /**< Sample rate */

	u32 bits_per_sample;    /**< Bits per sample */
	u32 block_align;        /**< Size of a block of data */
};

struct mmal_video_format {
	u32 width;        /**< Width of frame in pixels */
	u32 height;       /**< Height of frame in rows of pixels */
	struct mmal_rect crop;         /**< Visible region of the frame */
	struct mmal_rational frame_rate;   /**< Frame rate */
	struct mmal_rational par;          /**< Pixel aspect ratio */

	/* FourCC specifying the color space of the video stream. See the
	 * \ref MmalColorSpace "pre-defined color spaces" for some examples.
	 */
	u32 color_space;
};

struct mmal_subpicture_format {
	u32 x_offset;
	u32 y_offset;
};

union mmal_es_specific_format {
	struct mmal_audio_format audio;
	struct mmal_video_format video;
	struct mmal_subpicture_format subpicture;
};

/** Definition of an elementary stream format (MMAL_ES_FORMAT_T) */
struct mmal_es_format_local {
	u32 type;      /* enum mmal_es_type */

	u32 encoding;  /* FourCC specifying encoding of the elementary stream.*/
	u32 encoding_variant; /* FourCC specifying the specific
			       * encoding variant of the elementary
			       * stream.
			       */

	union mmal_es_specific_format *es;  /* Type specific
					     * information for the
					     * elementary stream
					     */

	u32 bitrate;        /**< Bitrate in bits per second */
	u32 flags; /**< Flags describing properties of the elementary stream. */

	u32 extradata_size;       /**< Size of the codec specific data */
	u8  *extradata;           /**< Codec specific data */
};

/** Remote definition of an elementary stream format (MMAL_ES_FORMAT_T) */
struct mmal_es_format {
	u32 type;      /* enum mmal_es_type */

	u32 encoding;  /* FourCC specifying encoding of the elementary stream.*/
	u32 encoding_variant; /* FourCC specifying the specific
			       * encoding variant of the elementary
			       * stream.
			       */

	u32 es; /* Type specific
		 * information for the
		 * elementary stream
		 */

	u32 bitrate;        /**< Bitrate in bits per second */
	u32 flags; /**< Flags describing properties of the elementary stream. */

	u32 extradata_size;       /**< Size of the codec specific data */
	u32 extradata;           /**< Codec specific data */
};

#endif /* MMAL_MSG_FORMAT_H */
