llmediaimplgstreamervidplug.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:3k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /**
  2.  * @file llmediaimplgstreamervidplug.h
  3.  * @brief Video-consuming static GStreamer plugin for gst-to-LLMediaImpl
  4.  *
  5.  * @cond
  6.  * $LicenseInfo:firstyear=2007&license=viewergpl$
  7.  * 
  8.  * Copyright (c) 2007-2010, Linden Research, Inc.
  9.  * 
  10.  * Second Life Viewer Source Code
  11.  * The source code in this file ("Source Code") is provided by Linden Lab
  12.  * to you under the terms of the GNU General Public License, version 2.0
  13.  * ("GPL"), unless you have obtained a separate licensing agreement
  14.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  15.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  16.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  17.  * 
  18.  * There are special exceptions to the terms and conditions of the GPL as
  19.  * it is applied to this Source Code. View the full text of the exception
  20.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  21.  * online at
  22.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  23.  * 
  24.  * By copying, modifying or distributing this software, you acknowledge
  25.  * that you have read and understood your obligations described above,
  26.  * and agree to abide by those obligations.
  27.  * 
  28.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  29.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  30.  * COMPLETENESS OR PERFORMANCE.
  31.  * $/LicenseInfo$
  32.  * @endcond
  33.  */
  34. #ifndef __GST_SLVIDEO_H__
  35. #define __GST_SLVIDEO_H__
  36. #if LL_GSTREAMER010_ENABLED
  37. extern "C" {
  38. #include <gst/gst.h>
  39. #include <gst/video/video.h>
  40. #include <gst/video/gstvideosink.h>
  41. }
  42. G_BEGIN_DECLS
  43. /* #defines don't like whitespacey bits */
  44. #define GST_TYPE_SLVIDEO 
  45.   (gst_slvideo_get_type())
  46. #define GST_SLVIDEO(obj) 
  47.   (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SLVIDEO,GstSLVideo))
  48. #define GST_SLVIDEO_CLASS(klass) 
  49.   (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SLVIDEO,GstSLVideoClass))
  50. #define GST_IS_SLVIDEO(obj) 
  51.   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SLVIDEO))
  52. #define GST_IS_SLVIDEO_CLASS(klass) 
  53.   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SLVIDEO))
  54. typedef struct _GstSLVideo      GstSLVideo;
  55. typedef struct _GstSLVideoClass GstSLVideoClass;
  56. typedef enum {
  57. SLV_PF_UNKNOWN = 0,
  58. SLV_PF_RGBX    = 1,
  59. SLV_PF_BGRX    = 2,
  60. SLV__END       = 3
  61. } SLVPixelFormat;
  62. const int SLVPixelFormatBytes[SLV__END] = {1, 4, 4};
  63. struct _GstSLVideo
  64. {
  65. GstVideoSink video_sink;
  66. GstCaps *caps;
  67. int fps_n, fps_d;
  68. int par_n, par_d;
  69. int height, width;
  70. SLVPixelFormat format;
  71. // SHARED WITH APPLICATION:
  72. // Access to the following should be protected by GST_OBJECT_LOCK() on
  73. // the GstSLVideo object, and should be totally consistent upon UNLOCK
  74. // (i.e. all written at once to reflect the current retained frame info
  75. // when the retained frame is updated.)
  76. bool retained_frame_ready; // new frame ready since flag last reset. (*TODO: could get the writer to wait on a semaphore instead of having the reader poll, potentially making dropped frames somewhat cheaper.)
  77. unsigned char*  retained_frame_data;
  78. int retained_frame_allocbytes;
  79. int retained_frame_width, retained_frame_height;
  80. SLVPixelFormat retained_frame_format;
  81. // sticky resize info
  82. bool resize_forced_always;
  83. int resize_try_width;
  84. int resize_try_height;
  85. };
  86. struct _GstSLVideoClass 
  87. {
  88. GstVideoSinkClass parent_class;
  89. };
  90. GType gst_slvideo_get_type (void);
  91. void gst_slvideo_init_class (void);
  92. G_END_DECLS
  93. #endif // LL_GSTREAMER010_ENABLED
  94. #endif /* __GST_SLVIDEO_H__ */