mpeg2t_private.h
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:3k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is MPEG4IP.
  13.  * 
  14.  * The Initial Developer of the Original Code is Cisco Systems Inc.
  15.  * Portions created by Cisco Systems Inc. are
  16.  * Copyright (C) Cisco Systems Inc. 2000, 2001.  All Rights Reserved.
  17.  * 
  18.  * Contributor(s): 
  19.  *              Bill May        wmay@cisco.com
  20.  */
  21. #include "mpeg2t_thread.h"
  22. #include "mpeg2t_thread_ipc.h"
  23. #include <rtp/rtp.h>
  24. #include <SDL.h>
  25. #include <SDL_thread.h>
  26. #include <mpeg2t/mpeg2_transport.h>
  27. #ifndef TRUE
  28. #define TRUE 1
  29. #define FALSE 0
  30. #endif
  31. /*
  32.  * Some useful macros.
  33.  */
  34. #define ADV_SPACE(a) {while (isspace(*(a)) && (*(a) != ''))(a)++;}
  35. #define CHECK_AND_FREE(a, b) { if (a->b != NULL) { free(a->b); a->b = NULL;}}
  36. typedef struct mpeg2t_thread_info_ mpeg2t_thread_info_t;
  37. struct addrinfo;
  38. struct mpeg2t_client_ {
  39.   /*
  40.    * Information about the server we're talking to.
  41.    */
  42.   char *address;
  43.   int useRTP;
  44.   struct in_addr server_addr;
  45.   struct addrinfo *addr_info;
  46.   in_port_t rx_port, tx_port;
  47.   mpeg2t_t *decoder;
  48.   // if using RTP
  49.   double rtcp_bw;
  50.   int ttl;
  51.   struct rtp *rtp_session;
  52.   socket_udp *udp;
  53.   /*
  54.    * Communications information - socket, receive buffer
  55.    */
  56. #ifndef _WIN32
  57.   int data_socket;
  58.   int rtcp_socket;
  59. #else
  60.   SOCKET data_socket;
  61.   int rtcp_socket;
  62. #endif
  63.   int recv_timeout;
  64.   /*
  65.    * Thread information
  66.    */
  67.   SDL_Thread *thread;
  68.   SDL_mutex *msg_mutex;
  69.   SDL_sem *pam_recvd_sem;
  70.   mpeg2t_thread_info_t *m_thread_info;
  71.   /*
  72.    * receive buffer
  73.    */
  74.   uint32_t m_buffer_len, m_offset_on;
  75.   char m_resp_buffer[1500];
  76. };
  77. #ifdef __cplusplus
  78. extern "C" {
  79. #endif
  80.   int mpeg2t_create_thread(mpeg2t_client_t *info);
  81.   int mpeg2t_thread(void *data); // don't call
  82.   void mpeg2t_close_thread(mpeg2t_client_t *info); // only from thread
  83. int mpeg2t_thread_ipc_respond(mpeg2t_client_t *info, int ret); // only from thread
  84. int mpeg2t_thread_ipc_receive(mpeg2t_client_t *info, char *buffer, size_t len);
  85. void mpeg2t_thread_init_thread_info(mpeg2t_client_t *info);
  86. int mpeg2t_thread_wait_for_event(mpeg2t_client_t *info);
  87. int mpeg2t_thread_has_control_message(mpeg2t_client_t *info);
  88. int mpeg2t_thread_get_control_message(mpeg2t_client_t *info, mpeg2t_msg_type_t *msg);
  89. int mpeg2t_thread_has_receive_data(mpeg2t_client_t *info);
  90. int mpeg2t_thread_has_rtcp_data(mpeg2t_client_t *info);
  91. void mpeg2t_thread_close(mpeg2t_client_t *info);
  92. void mpeg2t_thread_set_nonblocking(mpeg2t_client_t *info);
  93. // Call these only from the server thread.
  94. int mpeg2t_thread_ipc_send (mpeg2t_client_t *info,
  95.   unsigned char *msg,
  96.   int len);
  97. int mpeg2t_thread_ipc_send_wait(mpeg2t_client_t *info,
  98.       unsigned char *msg,
  99.       int msg_len,
  100.       int *return_msg);
  101.   void mpeg2t_debug(int loglevel, const char *fmt, ...);
  102. #ifdef __cplusplus
  103. }
  104. #endif