text: /* $Id: types.h 5166 2015-08-21 06:46:32Z ming $ */
  /* 
   * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
   * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
   * the Free Software Foundation; either version 2 of the License, or
   * (at your option) any later version.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU General Public License for more details.
   *
   * You should have received a copy of the GNU General Public License
   * along with this program; if not, write to the Free Software
   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
   */
  #ifndef __PJMEDIA_TYPES_H__
  #define __PJMEDIA_TYPES_H__
  
  /**
   * @file pjmedia/types.h Basic Types
   * @brief Basic PJMEDIA types.
   */
  
  #include <pjmedia/config.h>
  #include <pj/sock.h>
  #include <pj/types.h>
  
  
  /**
   * @defgroup PJMEDIA_PORT Media Ports Framework
   * @brief Extensible framework for media terminations
   */
  
  
  /**
   * @defgroup PJMEDIA_FRAME_OP Audio Manipulation Algorithms
   * @brief Algorithms to manipulate audio frames
   */
  
  /**
   * @defgroup PJMEDIA_TYPES Basic Types
   * @ingroup PJMEDIA_BASE
   * @brief Basic PJMEDIA types and operations.
   * @{
   */
  
  /**
   * Top most media type. See also #pjmedia_type_name().
   */
  typedef enum pjmedia_type
  {
      /** Type is not specified. */
      PJMEDIA_TYPE_NONE,
  
      /** The media is audio */
      PJMEDIA_TYPE_AUDIO,
  
      /** The media is video. */
      PJMEDIA_TYPE_VIDEO,
  
      /** The media is application. */
      PJMEDIA_TYPE_APPLICATION,
  
      /** The media type is unknown or unsupported. */
      PJMEDIA_TYPE_UNKNOWN
  
  } pjmedia_type;
  
  
  /**
   * Media transport protocol.
   */
  typedef enum pjmedia_tp_proto
  {
      /** No transport type */
      PJMEDIA_TP_PROTO_NONE = 0,
  
      /** RTP using A/V profile */
      PJMEDIA_TP_PROTO_RTP_AVP,
  
      /** Secure RTP */
      PJMEDIA_TP_PROTO_RTP_SAVP,
  
      /** Unknown */
      PJMEDIA_TP_PROTO_UNKNOWN
  
  } pjmedia_tp_proto;
  
  
  /**
   * Media direction.
   */
  typedef enum pjmedia_dir
  {
      /** None */
      PJMEDIA_DIR_NONE = 0,
  
      /** Encoding (outgoing to network) stream, also known as capture */
      PJMEDIA_DIR_ENCODING = 1,
  
      /** Same as encoding direction. */
      PJMEDIA_DIR_CAPTURE = PJMEDIA_DIR_ENCODING,
  
      /** Decoding (incoming from network) stream, also known as playback. */
      PJMEDIA_DIR_DECODING = 2,
  
      /** Same as decoding. */
      PJMEDIA_DIR_PLAYBACK = PJMEDIA_DIR_DECODING,
  
      /** Same as decoding. */
      PJMEDIA_DIR_RENDER = PJMEDIA_DIR_DECODING,
  
      /** Incoming and outgoing stream, same as PJMEDIA_DIR_CAPTURE_PLAYBACK */
      PJMEDIA_DIR_ENCODING_DECODING = 3,
  
      /** Same as ENCODING_DECODING */
      PJMEDIA_DIR_CAPTURE_PLAYBACK = PJMEDIA_DIR_ENCODING_DECODING,
  
      /** Same as ENCODING_DECODING */
      PJMEDIA_DIR_CAPTURE_RENDER = PJMEDIA_DIR_ENCODING_DECODING
  
  } pjmedia_dir;
  
  
  /**
   * Opaque declaration of media endpoint.
   */
  typedef struct pjmedia_endpt pjmedia_endpt;
  
  /*
   * Forward declaration for stream (needed by transport).
   */
  typedef struct pjmedia_stream pjmedia_stream;
  
  /**
   * Enumeration for picture coordinate base.
   */
  typedef enum pjmedia_coord_base
  {
      /**
       * This specifies that the pixel [0, 0] location is at the left-top
       * position.
       */
      PJMEDIA_COORD_BASE_LEFT_TOP,
  
      /**
       * This specifies that the pixel [0, 0] location is at the left-bottom
       * position.
       */
      PJMEDIA_COORD_BASE_LEFT_BOTTOM
  
  } pjmedia_coord_base;
  
  /**
   * This structure is used to represent rational numbers.
   */
  typedef struct pjmedia_ratio
  {
      int		num;    /** < Numerator. */
      int		denum;  /** < Denumerator. */
  } pjmedia_ratio;
  
  /**
   * This structure represent a coordinate.
   */
  typedef struct pjmedia_coord
  {
      int		x;	/**< X position of the coordinate */
      int		y;	/**< Y position of the coordinate */
  } pjmedia_coord;
  
  /**
   * This structure represents rectangle size.
   */
  typedef struct pjmedia_rect_size
  {
      unsigned	w;	/**< The width.		*/
      unsigned 	h;	/**< The height.	*/
  } pjmedia_rect_size;
  
  /**
   * This structure describes a rectangle.
   */
  typedef struct pjmedia_rect
  {
      pjmedia_coord	coord;	/**< The position.	*/
      pjmedia_rect_size	size;	/**< The size.		*/
  } pjmedia_rect;
  
  /**
   * Enumeration for video/picture orientation.
   */
  typedef enum pjmedia_orient
  {
      /**
       * Unknown orientation.
       */
      PJMEDIA_ORIENT_UNKNOWN,
  
      /**
       * Natural orientation, i.e. the original orientation video will be
       * displayed/captured without rotation.
       */
      PJMEDIA_ORIENT_NATURAL,
  
      /**
       * Specifies that the video/picture needs to be rotated 90 degrees
       * from its natural orientation in clockwise direction from the user's
       * perspective.
       * Note that for devices with back cameras (which faces away
       * from the user), the video will actually need to be rotated
       * 270 degrees clockwise instead.
       */
      PJMEDIA_ORIENT_ROTATE_90DEG,
  
      /**
       * Specifies that the video/picture needs to be rotated 180 degrees
       * from its natural orientation.
       */
      PJMEDIA_ORIENT_ROTATE_180DEG,
  
      /**
       * Specifies that the video/picture needs to be rotated 270 degrees
       * from its natural orientation in clockwise direction from the user's
       * perspective.
       * Note that for devices with back cameras (which faces away
       * from the user), the video will actually need to be rotated
       * 90 degrees clockwise instead.
       */
      PJMEDIA_ORIENT_ROTATE_270DEG
  
  } pjmedia_orient;
  
  
  /**
   * Macro for packing format from a four character code, similar to FOURCC.
   */
  #define PJMEDIA_FOURCC(C1, C2, C3, C4) ( C4<<24 | C3<<16 | C2<<8 | C1 )
  
  
  /**
   * Utility function to return the string name for a pjmedia_type.
   *
   * @param t		The media type.
   *
   * @return		String.
   */
  PJ_DECL(const char*) pjmedia_type_name(pjmedia_type t);
  
  /**
   * A utility function to convert fourcc type of value to four letters string.
   *
   * @param sig		The fourcc value.
   * @param buf		Buffer to store the string, which MUST be at least
   * 			five bytes long.
   *
   * @return		The string.
   */
  PJ_INLINE(const char*) pjmedia_fourcc_name(pj_uint32_t sig, char buf[])
  {
      buf[3] = (char)((sig >> 24) & 0xFF);
      buf[2] = (char)((sig >> 16) & 0xFF);
      buf[1] = (char)((sig >>  8) & 0xFF);
      buf[0] = (char)((sig >>  0) & 0xFF);
      buf[4] = '\0';
      return buf;
  }
  
  
  /**
   * @}
   */
  
  
  #endif	/* __PJMEDIA_TYPES_H__ */
  
  