video_sdl.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. /*
  22.  * video.h - contains the interface class between the codec and the video
  23.  * display hardware.
  24.  */
  25. #ifndef __VIDEO_SDL_H__
  26. #define __VIDEO_SDL_H__ 1
  27. #include "video.h"
  28. #define MAX_VIDEO_BUFFERS 16
  29. class CSDLVideoSync : public CVideoSync {
  30.  public:
  31.   CSDLVideoSync(CPlayerSession *psptr);
  32.   ~CSDLVideoSync(void);
  33.   int initialize_video(const char *name, int x, int y);  // from sync task
  34.   int is_video_ready(uint64_t &disptime);  // from sync task
  35.   int64_t play_video_at(uint64_t current_time, // from sync task
  36.  int &have_eof);
  37.   int get_video_buffer(uint8_t **y,
  38.        uint8_t **u,
  39.        uint8_t **v);
  40.   int filled_video_buffers(uint64_t time);
  41.   int set_video_frame(const uint8_t *y,      // from codec
  42.       const uint8_t *u,
  43.       const uint8_t *v,
  44.       int m_pixelw_y,
  45.       int m_pixelw_uv,
  46.       uint64_t time);
  47.   void config (int w, int h); // from codec
  48.   void set_wait_sem (SDL_sem *p) { m_decode_sem = p; };  // from set up
  49.   void flush_decode_buffers(void);    // from decoder task in response to stop
  50.   void flush_sync_buffers(void);      // from sync task in response to stop
  51.   void play_video(void);
  52.   void set_screen_size(int scaletimes2); // 1 gets 50%, 2, normal, 4, 2 times
  53.   void set_fullscreen(int fullscreen);
  54.   int get_fullscreen (void) { return m_fullscreen; };
  55.   void do_video_resize(void); // from sync
  56.  private:
  57.   int m_video_bpp;
  58.   int m_video_scale;
  59.   int m_fullscreen;
  60.   unsigned int m_width, m_height;
  61.   int m_video_initialized;
  62.   int m_config_set;
  63.   int m_paused;
  64.   volatile int m_have_data;
  65.   SDL_Surface *m_screen;
  66.   SDL_Overlay *m_image;
  67.   SDL_Rect m_dstrect;
  68.   uint32_t m_fill_index, m_play_index;
  69.   int m_decode_waiting;
  70.   volatile int m_buffer_filled[MAX_VIDEO_BUFFERS];
  71.   uint8_t *m_y_buffer[MAX_VIDEO_BUFFERS];
  72.   uint8_t *m_u_buffer[MAX_VIDEO_BUFFERS];
  73.   uint8_t *m_v_buffer[MAX_VIDEO_BUFFERS];
  74.   uint64_t m_play_this_at[MAX_VIDEO_BUFFERS];
  75.   int m_dont_fill;
  76. };
  77. /* frame doublers */
  78. #ifdef USE_MMX
  79. extern "C" void FrameDoublerMmx(u_int8_t* pSrcPlane, u_int8_t* pDstPlane, 
  80. u_int32_t srcWidth, u_int32_t srcHeight);
  81. #else
  82. extern void FrameDoubler(u_int8_t* pSrcPlane, u_int8_t* pDstPlane, 
  83. u_int32_t srcWidth, u_int32_t srcHeight, u_int32_t destWidth);
  84. #endif
  85. #endif