aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/llmedia
diff options
context:
space:
mode:
Diffstat (limited to 'linden/indra/llmedia')
-rw-r--r--linden/indra/llmedia/llmediabase.h3
-rw-r--r--linden/indra/llmedia/llmediaemitter.h3
-rw-r--r--linden/indra/llmedia/llmediaimplcommon.cpp3
-rw-r--r--linden/indra/llmedia/llmediaimplcommon.h3
-rw-r--r--linden/indra/llmedia/llmediaimplexample1.cpp3
-rw-r--r--linden/indra/llmedia/llmediaimplexample1.h3
-rw-r--r--linden/indra/llmedia/llmediaimplexample2.cpp3
-rw-r--r--linden/indra/llmedia/llmediaimplexample2.h3
-rw-r--r--linden/indra/llmedia/llmediaimplfactory.cpp3
-rw-r--r--linden/indra/llmedia/llmediaimplfactory.h3
-rw-r--r--linden/indra/llmedia/llmediaimplgstreamer.cpp249
-rw-r--r--linden/indra/llmedia/llmediaimplgstreamer.h32
-rw-r--r--linden/indra/llmedia/llmediaimplgstreamer_syms.cpp59
-rw-r--r--linden/indra/llmedia/llmediaimplgstreamer_syms.h12
-rw-r--r--linden/indra/llmedia/llmediaimplgstreamer_syms_raw.inc8
-rw-r--r--linden/indra/llmedia/llmediaimplgstreamer_syms_rawa.inc5
-rw-r--r--linden/indra/llmedia/llmediaimplgstreamervidplug.cpp43
-rw-r--r--linden/indra/llmedia/llmediaimplgstreamervidplug.h3
-rw-r--r--linden/indra/llmedia/llmediaimplllmozlib.cpp3
-rw-r--r--linden/indra/llmedia/llmediaimplllmozlib.h3
-rw-r--r--linden/indra/llmedia/llmediaimplquicktime.cpp3
-rw-r--r--linden/indra/llmedia/llmediaimplquicktime.h3
-rw-r--r--linden/indra/llmedia/llmediaimplregister.h3
-rw-r--r--linden/indra/llmedia/llmediamanager.cpp5
-rw-r--r--linden/indra/llmedia/llmediamanager.h3
-rw-r--r--linden/indra/llmedia/llmediaobserver.h3
26 files changed, 292 insertions, 175 deletions
diff --git a/linden/indra/llmedia/llmediabase.h b/linden/indra/llmedia/llmediabase.h
index 7f7f06f..68e6677 100644
--- a/linden/indra/llmedia/llmediabase.h
+++ b/linden/indra/llmedia/llmediabase.h
@@ -19,7 +19,8 @@
19 * There are special exceptions to the terms and conditions of the GPL as 19 * There are special exceptions to the terms and conditions of the GPL as
20 * it is applied to this Source Code. View the full text of the exception 20 * it is applied to this Source Code. View the full text of the exception
21 * in the file doc/FLOSS-exception.txt in this software distribution, or 21 * in the file doc/FLOSS-exception.txt in this software distribution, or
22 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 22 * online at
23 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
23 * 24 *
24 * By copying, modifying or distributing this software, you acknowledge 25 * By copying, modifying or distributing this software, you acknowledge
25 * that you have read and understood your obligations described above, 26 * that you have read and understood your obligations described above,
diff --git a/linden/indra/llmedia/llmediaemitter.h b/linden/indra/llmedia/llmediaemitter.h
index a5e0554..ef3caeb 100644
--- a/linden/indra/llmedia/llmediaemitter.h
+++ b/linden/indra/llmedia/llmediaemitter.h
@@ -19,7 +19,8 @@
19 * There are special exceptions to the terms and conditions of the GPL as 19 * There are special exceptions to the terms and conditions of the GPL as
20 * it is applied to this Source Code. View the full text of the exception 20 * it is applied to this Source Code. View the full text of the exception
21 * in the file doc/FLOSS-exception.txt in this software distribution, or 21 * in the file doc/FLOSS-exception.txt in this software distribution, or
22 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 22 * online at
23 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
23 * 24 *
24 * By copying, modifying or distributing this software, you acknowledge 25 * By copying, modifying or distributing this software, you acknowledge
25 * that you have read and understood your obligations described above, 26 * that you have read and understood your obligations described above,
diff --git a/linden/indra/llmedia/llmediaimplcommon.cpp b/linden/indra/llmedia/llmediaimplcommon.cpp
index b206618..87838f7 100644
--- a/linden/indra/llmedia/llmediaimplcommon.cpp
+++ b/linden/indra/llmedia/llmediaimplcommon.cpp
@@ -17,7 +17,8 @@
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 * 22 *
22 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
diff --git a/linden/indra/llmedia/llmediaimplcommon.h b/linden/indra/llmedia/llmediaimplcommon.h
index 4985cba..2e60a1a 100644
--- a/linden/indra/llmedia/llmediaimplcommon.h
+++ b/linden/indra/llmedia/llmediaimplcommon.h
@@ -17,7 +17,8 @@
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 * 22 *
22 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
diff --git a/linden/indra/llmedia/llmediaimplexample1.cpp b/linden/indra/llmedia/llmediaimplexample1.cpp
index 910bbf7..fe7b7e2 100644
--- a/linden/indra/llmedia/llmediaimplexample1.cpp
+++ b/linden/indra/llmedia/llmediaimplexample1.cpp
@@ -17,7 +17,8 @@
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 * 22 *
22 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
diff --git a/linden/indra/llmedia/llmediaimplexample1.h b/linden/indra/llmedia/llmediaimplexample1.h
index 19b8ed6..1b90e93 100644
--- a/linden/indra/llmedia/llmediaimplexample1.h
+++ b/linden/indra/llmedia/llmediaimplexample1.h
@@ -17,7 +17,8 @@
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 * 22 *
22 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
diff --git a/linden/indra/llmedia/llmediaimplexample2.cpp b/linden/indra/llmedia/llmediaimplexample2.cpp
index 7bda982..7590e19 100644
--- a/linden/indra/llmedia/llmediaimplexample2.cpp
+++ b/linden/indra/llmedia/llmediaimplexample2.cpp
@@ -17,7 +17,8 @@
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 * 22 *
22 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
diff --git a/linden/indra/llmedia/llmediaimplexample2.h b/linden/indra/llmedia/llmediaimplexample2.h
index ad76088..6a4f80b 100644
--- a/linden/indra/llmedia/llmediaimplexample2.h
+++ b/linden/indra/llmedia/llmediaimplexample2.h
@@ -17,7 +17,8 @@
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 * 22 *
22 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
diff --git a/linden/indra/llmedia/llmediaimplfactory.cpp b/linden/indra/llmedia/llmediaimplfactory.cpp
index 6f8787e..c5d098f 100644
--- a/linden/indra/llmedia/llmediaimplfactory.cpp
+++ b/linden/indra/llmedia/llmediaimplfactory.cpp
@@ -17,7 +17,8 @@
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 * 22 *
22 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
diff --git a/linden/indra/llmedia/llmediaimplfactory.h b/linden/indra/llmedia/llmediaimplfactory.h
index 663efd8..93a7cc1 100644
--- a/linden/indra/llmedia/llmediaimplfactory.h
+++ b/linden/indra/llmedia/llmediaimplfactory.h
@@ -17,7 +17,8 @@
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 * 22 *
22 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
diff --git a/linden/indra/llmedia/llmediaimplgstreamer.cpp b/linden/indra/llmedia/llmediaimplgstreamer.cpp
index 51614c5..a4fe930 100644
--- a/linden/indra/llmedia/llmediaimplgstreamer.cpp
+++ b/linden/indra/llmedia/llmediaimplgstreamer.cpp
@@ -18,7 +18,8 @@
18 * There are special exceptions to the terms and conditions of the GPL as 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 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 20 * in the file doc/FLOSS-exception.txt in this software distribution, or
21 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 21 * online at
22 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
22 * 23 *
23 * By copying, modifying or distributing this software, you acknowledge 24 * By copying, modifying or distributing this software, you acknowledge
24 * that you have read and understood your obligations described above, 25 * that you have read and understood your obligations described above,
@@ -43,10 +44,6 @@ extern "C" {
43 44
44#include "llmediaimplgstreamervidplug.h" 45#include "llmediaimplgstreamervidplug.h"
45 46
46#ifdef LL_GST_SOUNDSINK
47#include "llmediaimplgstreamersndplug.h"
48#endif // LL_GST_SOUNDSINK
49
50#include "llmediaimplgstreamer_syms.h" 47#include "llmediaimplgstreamer_syms.h"
51 48
52// register this impl with media manager factory 49// register this impl with media manager factory
@@ -67,6 +64,7 @@ LLMediaImplGStreamerMaker::LLMediaImplGStreamerMaker()
67// 64//
68LLMediaImplGStreamer:: 65LLMediaImplGStreamer::
69LLMediaImplGStreamer () : 66LLMediaImplGStreamer () :
67 mBusWatchID ( 0 ),
70 mediaData ( NULL ), 68 mediaData ( NULL ),
71 mMediaRowbytes ( 1 ), 69 mMediaRowbytes ( 1 ),
72 mTextureFormatPrimary ( LL_MEDIA_BGRA ), 70 mTextureFormatPrimary ( LL_MEDIA_BGRA ),
@@ -74,10 +72,10 @@ LLMediaImplGStreamer () :
74 mPump ( NULL ), 72 mPump ( NULL ),
75 mPlaybin ( NULL ), 73 mPlaybin ( NULL ),
76 mVideoSink ( NULL ) 74 mVideoSink ( NULL )
77#ifdef LL_GST_SOUNDSINK
78 ,mAudioSink ( NULL )
79#endif // LL_GST_SOUNDSINK
80{ 75{
76 if (!mDoneInit)
77 return; // error
78
81 DEBUGMSG("constructing media..."); 79 DEBUGMSG("constructing media...");
82 80
83 mVolume = 0.1234567; // minor hack to force an initial volume update 81 mVolume = 0.1234567; // minor hack to force an initial volume update
@@ -95,10 +93,20 @@ LLMediaImplGStreamer () :
95 mPlaybin = llgst_element_factory_make ("playbin", "play"); 93 mPlaybin = llgst_element_factory_make ("playbin", "play");
96 if (!mPlaybin) 94 if (!mPlaybin)
97 { 95 {
98 // todo: cleanup pump
99 return; // error 96 return; // error
100 } 97 }
101 98
99 // get playbin's bus
100 GstBus *bus = llgst_pipeline_get_bus (GST_PIPELINE (mPlaybin));
101 if (!bus)
102 {
103 return; // error
104 }
105 mBusWatchID = llgst_bus_add_watch (bus,
106 llmediaimplgstreamer_bus_callback,
107 this);
108 llgst_object_unref (bus);
109
102 if (NULL == getenv("LL_GSTREAMER_EXTERNAL")) { 110 if (NULL == getenv("LL_GSTREAMER_EXTERNAL")) {
103 // instantiate and connect a custom video sink 111 // instantiate and connect a custom video sink
104 mVideoSink = 112 mVideoSink =
@@ -111,20 +119,6 @@ LLMediaImplGStreamer () :
111 } 119 }
112 120
113 g_object_set(mPlaybin, "video-sink", mVideoSink, NULL); 121 g_object_set(mPlaybin, "video-sink", mVideoSink, NULL);
114
115#ifdef LL_GST_SOUNDSINK
116 // instantiate and connect a custom audio sink
117 mAudioSink =
118 GST_SLSOUND(llgst_element_factory_make ("private-slsound", "slsound"));
119 if (!mAudioSink)
120 {
121 WARNMSG("Could not instantiate private-slsound element.");
122 // todo: cleanup.
123 return; // error
124 }
125
126 g_object_set(mPlaybin, "audio-sink", mAudioSink, NULL);
127#endif
128 } 122 }
129} 123}
130 124
@@ -166,48 +160,96 @@ std::string LLMediaImplGStreamer::getVersion()
166 160
167/////////////////////////////////////////////////////////////////////////////// 161///////////////////////////////////////////////////////////////////////////////
168// (static) super-initialization - called once at application startup 162// (static) super-initialization - called once at application startup
163
164//static
165bool LLMediaImplGStreamer::mDoneInit = false;
166
167//static
169bool 168bool
170LLMediaImplGStreamer:: 169LLMediaImplGStreamer::
171startup ( LLMediaManagerData* init_data ) 170startup ( LLMediaManagerData* init_data )
172{ 171{
173 static bool done_init = false; 172 // first - check if GStreamer is explicitly disabled
174 if (!done_init) 173 if (NULL != getenv("LL_DISABLE_GSTREAMER"))
174 return false;
175
176 // only do global GStreamer initialization once.
177 if (!mDoneInit)
175 { 178 {
176 // Init the glib type system - we need it. 179 // Init the glib type system - we need it.
177 g_type_init(); 180 g_type_init();
178 181
179 // Get symbols! 182 // Get symbols!
180 if (! grab_gst_syms("libgstreamer-0.10.so.0", 183 if (! grab_gst_syms("libgstreamer-0.10.so.0",
181 "libgstvideo-0.10.so.0", 184 "libgstvideo-0.10.so.0") )
182 "libgstaudio-0.10.so.0") )
183 { 185 {
184 WARNMSG("Couldn't find suitable GStreamer 0.10 support on this system - video playback disabled."); 186 WARNMSG("Couldn't find suitable GStreamer 0.10 support on this system - video playback disabled.");
185 return false; 187 return false;
186 } 188 }
187 189
188 if (llgst_segtrap_set_enabled) 190 if (llgst_segtrap_set_enabled)
191 {
189 llgst_segtrap_set_enabled(FALSE); 192 llgst_segtrap_set_enabled(FALSE);
193 }
190 else 194 else
195 {
191 WARNMSG("gst_segtrap_set_enabled() is not available; Automated crash-reporter may cease to function until next restart."); 196 WARNMSG("gst_segtrap_set_enabled() is not available; Automated crash-reporter may cease to function until next restart.");
197 }
198
199#if LL_LINUX
200 // Gstreamer tries a fork during init, waitpid-ing on it,
201 // which conflicts with any installed SIGCHLD handler...
202 struct sigaction tmpact, oldact;
203 if (llgst_registry_fork_set_enabled) {
204 // if we can disable SIGCHLD-using forking behaviour,
205 // do it.
206 llgst_registry_fork_set_enabled(false);
207 }
208 else {
209 // else temporarily install default SIGCHLD handler
210 // while GStreamer initialises
211 tmpact.sa_handler = SIG_DFL;
212 sigemptyset( &tmpact.sa_mask );
213 tmpact.sa_flags = SA_SIGINFO;
214 sigaction(SIGCHLD, &tmpact, &oldact);
215 }
216#endif // LL_LINUX
192 217
193 // Protect against GStreamer resetting the locale, yuck. 218 // Protect against GStreamer resetting the locale, yuck.
194 static std::string saved_locale; 219 static std::string saved_locale;
195 saved_locale = setlocale(LC_ALL, NULL); 220 saved_locale = setlocale(LC_ALL, NULL);
196 if (0 == llgst_init_check(NULL, NULL, NULL)) 221
222 // finally, try to initialize GStreamer!
223 GError *err = NULL;
224 gboolean init_gst_success = llgst_init_check(NULL, NULL, &err);
225
226 // restore old locale
227 setlocale(LC_ALL, saved_locale.c_str() );
228
229#if LL_LINUX
230 // restore old SIGCHLD handler
231 if (!llgst_registry_fork_set_enabled)
232 sigaction(SIGCHLD, &oldact, NULL);
233#endif // LL_LINUX
234
235 if (!init_gst_success) // fail
197 { 236 {
198 WARNMSG("GST init failed for unspecified reason."); 237 if (err)
199 setlocale(LC_ALL, saved_locale.c_str() ); 238 {
239 WARNMSG("GST init failed: %s", err->message);
240 g_error_free(err);
241 }
242 else
243 {
244 WARNMSG("GST init failed for unspecified reason.");
245 }
200 return false; 246 return false;
201 } 247 }
202 setlocale(LC_ALL, saved_locale.c_str() );
203 248
204 // Init our custom plugins - only really need do this once. 249 // Init our custom plugins - only really need do this once.
205 gst_slvideo_init_class(); 250 gst_slvideo_init_class();
206#if 0
207 gst_slsound_init_class();
208#endif
209 251
210 done_init = true; 252 mDoneInit = true;
211 } 253 }
212 254
213 return true; 255 return true;
@@ -217,6 +259,9 @@ startup ( LLMediaManagerData* init_data )
217bool LLMediaImplGStreamer:: 259bool LLMediaImplGStreamer::
218closedown() 260closedown()
219{ 261{
262 if (!mDoneInit)
263 return false; // error
264
220 ungrab_gst_syms(); 265 ungrab_gst_syms();
221 266
222 return true; 267 return true;
@@ -240,12 +285,15 @@ static char* get_gst_state_name(GstState state)
240} 285}
241#endif // LL_GST_REPORT_STATE_CHANGES 286#endif // LL_GST_REPORT_STATE_CHANGES
242 287
243//static 288extern "C" {
244gboolean 289gboolean
245LLMediaImplGStreamer::bus_callback (GstBus *bus, 290llmediaimplgstreamer_bus_callback (GstBus *bus,
246 GstMessage *message, 291 GstMessage *message,
247 gpointer data) 292 gpointer data)
248{ 293{
294 if (!message)
295 return TRUE; // shield against GStreamer bug
296
249 if (GST_MESSAGE_TYPE(message) != GST_MESSAGE_STATE_CHANGED && 297 if (GST_MESSAGE_TYPE(message) != GST_MESSAGE_STATE_CHANGED &&
250 GST_MESSAGE_TYPE(message) != GST_MESSAGE_BUFFERING) 298 GST_MESSAGE_TYPE(message) != GST_MESSAGE_BUFFERING)
251 { 299 {
@@ -352,10 +400,35 @@ LLMediaImplGStreamer::bus_callback (GstBus *bus,
352 if (impl->isLooping()) 400 if (impl->isLooping())
353 { 401 {
354 DEBUGMSG("looping media..."); 402 DEBUGMSG("looping media...");
355 impl->stop(); 403 double eos_pos_sec = 0.0F;
356 impl->play(); 404 bool got_eos_position = impl->getTimePos(eos_pos_sec);
405
406 if (got_eos_position && eos_pos_sec < impl->MIN_LOOP_SEC)
407 {
408 // if we know that the movie is really short, don't
409 // loop it else it can easily become a time-hog
410 // because of GStreamer spin-up overhead
411 DEBUGMSG("really short movie (%0.3fsec) - not gonna loop this, pausing instead.", eos_pos_sec);
412 // inject a COMMAND_PAUSE
413 impl->addCommand(LLMediaBase::COMMAND_PAUSE);
414 }
415 else
416 {
417 // first try looping by an explicit rewind
418 bool seeksuccess = impl->seek(0.0);
419 if (seeksuccess)
420 {
421 impl->play();
422 }
423 else // use clumsy stop-start to loop
424 {
425 DEBUGMSG("couldn't loop by rewinding - stopping and starting instead...");
426 impl->stop();
427 impl->play();
428 }
429 }
357 } 430 }
358 else 431 else // not a looping media
359 { 432 {
360 // inject a COMMAND_STOP 433 // inject a COMMAND_STOP
361 impl->addCommand(LLMediaBase::COMMAND_STOP); 434 impl->addCommand(LLMediaBase::COMMAND_STOP);
@@ -372,6 +445,7 @@ LLMediaImplGStreamer::bus_callback (GstBus *bus,
372 */ 445 */
373 return TRUE; 446 return TRUE;
374} 447}
448} // extern "C"
375 449
376/////////////////////////////////////////////////////////// 450///////////////////////////////////////////////////////////
377// virtual 451// virtual
@@ -379,15 +453,15 @@ bool
379LLMediaImplGStreamer:: 453LLMediaImplGStreamer::
380navigateTo ( const std::string urlIn ) 454navigateTo ( const std::string urlIn )
381{ 455{
456 if (!mDoneInit)
457 return false; // error
458
382 DEBUGMSG("Setting media URI: %s", urlIn.c_str()); 459 DEBUGMSG("Setting media URI: %s", urlIn.c_str());
383 460
384 if (NULL == mPump 461 if (NULL == mPump ||
385#ifdef LL_GST_SOUNDSINK 462 NULL == mPlaybin)
386 || NULL == mAudioSink
387#endif
388 || NULL == mPlaybin)
389 { 463 {
390 return false; 464 return false; // error
391 } 465 }
392 466
393 setStatus( LLMediaBase::STATUS_NAVIGATING ); 467 setStatus( LLMediaBase::STATUS_NAVIGATING );
@@ -396,15 +470,6 @@ navigateTo ( const std::string urlIn )
396 g_object_set (G_OBJECT (mPlaybin), "uri", urlIn.c_str(), NULL); 470 g_object_set (G_OBJECT (mPlaybin), "uri", urlIn.c_str(), NULL);
397 //g_object_set (G_OBJECT (mPlaybin), "uri", "file:///tmp/movie", NULL); 471 //g_object_set (G_OBJECT (mPlaybin), "uri", "file:///tmp/movie", NULL);
398 472
399 // get playbin's bus - perhaps this can/should be done in ctor
400 GstBus *bus = llgst_pipeline_get_bus (GST_PIPELINE (mPlaybin));
401 if (!bus)
402 {
403 return false;
404 }
405 llgst_bus_add_watch (bus, bus_callback, this);
406 llgst_object_unref (bus);
407
408 // navigateTo implicitly plays, too. 473 // navigateTo implicitly plays, too.
409 play(); 474 play();
410 475
@@ -417,7 +482,14 @@ bool
417LLMediaImplGStreamer:: 482LLMediaImplGStreamer::
418unload () 483unload ()
419{ 484{
485 if (!mDoneInit)
486 return false; // error
487
420 DEBUGMSG("unloading media..."); 488 DEBUGMSG("unloading media...");
489
490 // stop getting callbacks for this bus
491 g_source_remove(mBusWatchID);
492
421 if (mPlaybin) 493 if (mPlaybin)
422 { 494 {
423 llgst_element_set_state (mPlaybin, GST_STATE_NULL); 495 llgst_element_set_state (mPlaybin, GST_STATE_NULL);
@@ -433,7 +505,7 @@ unload ()
433 505
434 if (mediaData) 506 if (mediaData)
435 { 507 {
436 delete mediaData; 508 delete [] mediaData;
437 mediaData = NULL; 509 mediaData = NULL;
438 } 510 }
439 511
@@ -448,14 +520,14 @@ bool
448LLMediaImplGStreamer:: 520LLMediaImplGStreamer::
449updateMedia () 521updateMedia ()
450{ 522{
523 if (!mDoneInit)
524 return false; // error
525
451 DEBUGMSG("updating media..."); 526 DEBUGMSG("updating media...");
452 527
453 // sanity check 528 // sanity check
454 if (NULL == mPump 529 if (NULL == mPump ||
455#ifdef LL_GST_SOUNDSINK 530 NULL == mPlaybin)
456 || NULL == mAudioSink
457#endif
458 || NULL == mPlaybin)
459 { 531 {
460 DEBUGMSG("dead media..."); 532 DEBUGMSG("dead media...");
461 return false; 533 return false;
@@ -517,7 +589,7 @@ updateMedia ()
517 mVideoSink->retained_frame_height != getMediaHeight()) 589 mVideoSink->retained_frame_height != getMediaHeight())
518 // *TODO: also check for change in format 590 // *TODO: also check for change in format
519 { 591 {
520 // just resize containe 592 // just resize container
521 int neww = mVideoSink->retained_frame_width; 593 int neww = mVideoSink->retained_frame_width;
522 int newh = mVideoSink->retained_frame_height; 594 int newh = mVideoSink->retained_frame_height;
523 int newd = SLVPixelFormatBytes[mVideoSink->retained_frame_format]; 595 int newd = SLVPixelFormatBytes[mVideoSink->retained_frame_format];
@@ -621,12 +693,12 @@ LLMediaImplGStreamer::
621seek( double time ) 693seek( double time )
622{ 694{
623 bool success = false; 695 bool success = false;
624 if (mPlaybin) 696 if (mDoneInit && mPlaybin)
625 { 697 {
626 success = llgst_element_seek(mPlaybin, 1.0F, GST_FORMAT_TIME, 698 success = llgst_element_seek(mPlaybin, 1.0F, GST_FORMAT_TIME,
627 GstSeekFlags(GST_SEEK_FLAG_FLUSH | 699 GstSeekFlags(GST_SEEK_FLAG_FLUSH |
628 GST_SEEK_FLAG_KEY_UNIT), 700 GST_SEEK_FLAG_KEY_UNIT),
629 GST_SEEK_TYPE_SET, gint64(time*1000000000.0F), 701 GST_SEEK_TYPE_SET, gint64(time*GST_SECOND),
630 GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE); 702 GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE);
631 } 703 }
632 DEBUGMSG("MEDIA SEEK REQUEST to %fsec result was %d", 704 DEBUGMSG("MEDIA SEEK REQUEST to %fsec result was %d",
@@ -634,6 +706,49 @@ seek( double time )
634 return success; 706 return success;
635} 707}
636 708
709bool
710LLMediaImplGStreamer::
711getTimePos(double &sec_out)
712{
713 bool got_position = false;
714 if (mPlaybin)
715 {
716 gint64 pos;
717 GstFormat timefmt = GST_FORMAT_TIME;
718 got_position =
719 llgst_element_query_position &&
720 llgst_element_query_position(mPlaybin,
721 &timefmt,
722 &pos);
723 got_position = got_position
724 && (timefmt == GST_FORMAT_TIME);
725 // GStreamer may have other ideas, but we consider the current position
726 // undefined if not PLAYING or PAUSED
727 got_position = got_position &&
728 (GST_STATE(mPlaybin) == GST_STATE_PLAYING ||
729 GST_STATE(mPlaybin) == GST_STATE_PAUSED);
730 if (got_position && !GST_CLOCK_TIME_IS_VALID(pos))
731 {
732 if (GST_STATE(mPlaybin) == GST_STATE_PLAYING)
733 {
734 // if we're playing then we treat an invalid clock time
735 // as 0, for complicated reasons (insert reason here)
736 pos = 0;
737 }
738 else
739 {
740 got_position = false;
741 }
742
743 }
744 // If all the preconditions succeeded... we can trust the result.
745 if (got_position)
746 {
747 sec_out = double(pos) / double(GST_SECOND); // gst to sec
748 }
749 }
750 return got_position;
751}
637 752
638/////////////////////////////////////////////////////////////////////////////// 753///////////////////////////////////////////////////////////////////////////////
639// virtual 754// virtual
@@ -648,7 +763,7 @@ setVolume(float volume)
648 return true; // nothing to do, everything's fine 763 return true; // nothing to do, everything's fine
649 764
650 mVolume = volume; 765 mVolume = volume;
651 if (mPlaybin) 766 if (mDoneInit && mPlaybin)
652 { 767 {
653 g_object_set(mPlaybin, "volume", mVolume, NULL); 768 g_object_set(mPlaybin, "volume", mVolume, NULL);
654 return true; 769 return true;
diff --git a/linden/indra/llmedia/llmediaimplgstreamer.h b/linden/indra/llmedia/llmediaimplgstreamer.h
index f1ffd3a..07b698d 100644
--- a/linden/indra/llmedia/llmediaimplgstreamer.h
+++ b/linden/indra/llmedia/llmediaimplgstreamer.h
@@ -18,7 +18,8 @@
18 * There are special exceptions to the terms and conditions of the GPL as 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 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 20 * in the file doc/FLOSS-exception.txt in this software distribution, or
21 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 21 * online at
22 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
22 * 23 *
23 * By copying, modifying or distributing this software, you acknowledge 24 * By copying, modifying or distributing this software, you acknowledge
24 * that you have read and understood your obligations described above, 25 * that you have read and understood your obligations described above,
@@ -48,9 +49,6 @@ extern "C" {
48} 49}
49 50
50#include "llmediaimplgstreamervidplug.h" 51#include "llmediaimplgstreamervidplug.h"
51#ifdef LL_GST_SOUNDSINK
52#include "llmediaimplgstreamersndplug.h"
53#endif // LL_GST_SOUNDSINK
54 52
55class LLMediaManagerData; 53class LLMediaManagerData;
56class LLMediaImplMaker; 54class LLMediaImplMaker;
@@ -81,30 +79,38 @@ class LLMediaImplGStreamer:
81 79
82 LLMediaEmitter< LLMediaObserver > getEventEmitter() const {return mEventEmitter;}; 80 LLMediaEmitter< LLMediaObserver > getEventEmitter() const {return mEventEmitter;};
83 81
84 private:
85 // misc 82 // misc
86 bool unload();
87 bool pause(); 83 bool pause();
88 bool stop(); 84 bool stop();
89 bool play(); 85 bool play();
90 static gboolean bus_callback (GstBus *bus, 86 bool getTimePos(double &sec_out);
91 GstMessage *message, 87 static const double MIN_LOOP_SEC = 1.0F;
92 gpointer data); 88
89 private:
90 bool unload();
91
92 static bool mDoneInit;
93
94 guint mBusWatchID;
95
93 unsigned char* mediaData; 96 unsigned char* mediaData;
94 int mMediaRowbytes; 97 int mMediaRowbytes;
95 98
96 int mTextureFormatPrimary; 99 int mTextureFormatPrimary;
97 int mTextureFormatType; 100 int mTextureFormatType;
98 101
99 // GStreamer-specific 102 // Very GStreamer-specific
100 GMainLoop *mPump; // event pump for this media 103 GMainLoop *mPump; // event pump for this media
101 GstElement *mPlaybin; 104 GstElement *mPlaybin;
102 GstSLVideo *mVideoSink; 105 GstSLVideo *mVideoSink;
103#ifdef LL_GST_SOUNDSINK
104 GstSLSound *mAudioSink;
105#endif // LL_GST_SOUNDSINK
106}; 106};
107 107
108extern "C" {
109gboolean llmediaimplgstreamer_bus_callback (GstBus *bus,
110 GstMessage *message,
111 gpointer data);
112}
113
108class LLMediaImplGStreamerMaker : public LLMediaImplMaker 114class LLMediaImplGStreamerMaker : public LLMediaImplMaker
109{ 115{
110public: 116public:
diff --git a/linden/indra/llmedia/llmediaimplgstreamer_syms.cpp b/linden/indra/llmedia/llmediaimplgstreamer_syms.cpp
index 20ee00b..db26dda 100644
--- a/linden/indra/llmedia/llmediaimplgstreamer_syms.cpp
+++ b/linden/indra/llmedia/llmediaimplgstreamer_syms.cpp
@@ -17,7 +17,8 @@
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 * 22 *
22 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
@@ -42,21 +43,28 @@ extern "C" {
42 43
43#define LL_GST_SYM(REQ, GSTSYM, RTN, ...) RTN (*ll##GSTSYM)(__VA_ARGS__) = NULL 44#define LL_GST_SYM(REQ, GSTSYM, RTN, ...) RTN (*ll##GSTSYM)(__VA_ARGS__) = NULL
44#include "llmediaimplgstreamer_syms_raw.inc" 45#include "llmediaimplgstreamer_syms_raw.inc"
45#include "llmediaimplgstreamer_syms_rawa.inc"
46#include "llmediaimplgstreamer_syms_rawv.inc" 46#include "llmediaimplgstreamer_syms_rawv.inc"
47#undef LL_GST_SYM 47#undef LL_GST_SYM
48 48
49// a couple of stubs for disgusting reasons
50GstDebugCategory*
51ll_gst_debug_category_new(gchar *name, guint color, gchar *description)
52{
53 static GstDebugCategory dummy;
54 return &dummy;
55}
56void ll_gst_debug_register_funcptr(GstDebugFuncPtr func, gchar* ptrname)
57{
58}
49 59
50static bool sSymsGrabbed = false; 60static bool sSymsGrabbed = false;
51static apr_pool_t *sSymGSTDSOMemoryPool = NULL; 61static apr_pool_t *sSymGSTDSOMemoryPool = NULL;
52static apr_dso_handle_t *sSymGSTDSOHandleG = NULL; 62static apr_dso_handle_t *sSymGSTDSOHandleG = NULL;
53static apr_dso_handle_t *sSymGSTDSOHandleV = NULL; 63static apr_dso_handle_t *sSymGSTDSOHandleV = NULL;
54static apr_dso_handle_t *sSymGSTDSOHandleA = NULL;
55 64
56 65
57bool grab_gst_syms(std::string gst_dso_name, 66bool grab_gst_syms(std::string gst_dso_name,
58 std::string gst_dso_name_vid, 67 std::string gst_dso_name_vid)
59 std::string gst_dso_name_aud)
60{ 68{
61 if (sSymsGrabbed) 69 if (sSymsGrabbed)
62 { 70 {
@@ -87,40 +95,20 @@ bool grab_gst_syms(std::string gst_dso_name,
87 sSymGSTDSOHandle = NULL; 95 sSymGSTDSOHandle = NULL;
88 } 96 }
89 97
90 if ( APR_SUCCESS == (rv = apr_dso_load(&sSymGSTDSOHandle, 98 if ( APR_SUCCESS ==
91 gst_dso_name_aud.c_str(), 99 (rv = apr_dso_load(&sSymGSTDSOHandle,
92 sSymGSTDSOMemoryPool) )) 100 gst_dso_name_vid.c_str(),
101 sSymGSTDSOMemoryPool) ))
93 { 102 {
94 INFOMSG("Found DSO: %s", gst_dso_name_aud.c_str()); 103 INFOMSG("Found DSO: %s", gst_dso_name_vid.c_str());
95#include "llmediaimplgstreamer_syms_rawa.inc"
96
97 if ( sSymGSTDSOHandle )
98 {
99 sSymGSTDSOHandleA = sSymGSTDSOHandle;
100 sSymGSTDSOHandle = NULL;
101 }
102
103 if ( APR_SUCCESS ==
104 (rv = apr_dso_load(&sSymGSTDSOHandle,
105 gst_dso_name_vid.c_str(),
106 sSymGSTDSOMemoryPool) ))
107 {
108 INFOMSG("Found DSO: %s", gst_dso_name_vid.c_str());
109#include "llmediaimplgstreamer_syms_rawv.inc" 104#include "llmediaimplgstreamer_syms_rawv.inc"
110 } 105 rtn = !sym_error;
111 else
112 {
113 INFOMSG("Couldn't load DSO: %s", gst_dso_name_vid.c_str());
114 rtn = false; // failure
115 }
116 } 106 }
117 else 107 else
118 { 108 {
119 INFOMSG("Couldn't load DSO: %s", gst_dso_name_aud.c_str()); 109 INFOMSG("Couldn't load DSO: %s", gst_dso_name_vid.c_str());
120 rtn = false; // failure 110 rtn = false; // failure
121 } 111 }
122
123 rtn = !sym_error;
124 } 112 }
125 else 113 else
126 { 114 {
@@ -156,12 +144,6 @@ void ungrab_gst_syms()
156 sSymGSTDSOHandleG = NULL; 144 sSymGSTDSOHandleG = NULL;
157 } 145 }
158 146
159 if ( sSymGSTDSOHandleA )
160 {
161 apr_dso_unload(sSymGSTDSOHandleA);
162 sSymGSTDSOHandleA = NULL;
163 }
164
165 if ( sSymGSTDSOHandleV ) 147 if ( sSymGSTDSOHandleV )
166 { 148 {
167 apr_dso_unload(sSymGSTDSOHandleV); 149 apr_dso_unload(sSymGSTDSOHandleV);
@@ -177,7 +159,6 @@ void ungrab_gst_syms()
177 // NULL-out all of the symbols we'd grabbed 159 // NULL-out all of the symbols we'd grabbed
178#define LL_GST_SYM(REQ, GSTSYM, RTN, ...) do{ll##GSTSYM = NULL;}while(0) 160#define LL_GST_SYM(REQ, GSTSYM, RTN, ...) do{ll##GSTSYM = NULL;}while(0)
179#include "llmediaimplgstreamer_syms_raw.inc" 161#include "llmediaimplgstreamer_syms_raw.inc"
180#include "llmediaimplgstreamer_syms_rawa.inc"
181#include "llmediaimplgstreamer_syms_rawv.inc" 162#include "llmediaimplgstreamer_syms_rawv.inc"
182#undef LL_GST_SYM 163#undef LL_GST_SYM
183 164
diff --git a/linden/indra/llmedia/llmediaimplgstreamer_syms.h b/linden/indra/llmedia/llmediaimplgstreamer_syms.h
index 6957b1c..4220bdb 100644
--- a/linden/indra/llmedia/llmediaimplgstreamer_syms.h
+++ b/linden/indra/llmedia/llmediaimplgstreamer_syms.h
@@ -17,7 +17,8 @@
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 * 22 *
22 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
@@ -38,13 +39,11 @@ extern "C" {
38} 39}
39 40
40bool grab_gst_syms(std::string gst_dso_name, 41bool grab_gst_syms(std::string gst_dso_name,
41 std::string gst_dso_name_vid, 42 std::string gst_dso_name_vid);
42 std::string gst_dso_name_aud);
43void ungrab_gst_syms(); 43void ungrab_gst_syms();
44 44
45#define LL_GST_SYM(REQ, GSTSYM, RTN, ...) extern RTN (*ll##GSTSYM)(__VA_ARGS__) 45#define LL_GST_SYM(REQ, GSTSYM, RTN, ...) extern RTN (*ll##GSTSYM)(__VA_ARGS__)
46#include "llmediaimplgstreamer_syms_raw.inc" 46#include "llmediaimplgstreamer_syms_raw.inc"
47#include "llmediaimplgstreamer_syms_rawa.inc"
48#include "llmediaimplgstreamer_syms_rawv.inc" 47#include "llmediaimplgstreamer_syms_rawv.inc"
49#undef LL_GST_SYM 48#undef LL_GST_SYM
50 49
@@ -61,12 +60,13 @@ void ungrab_gst_syms();
61#define GST_TYPE_PIPELINE (llgst_pipeline_get_type()) 60#define GST_TYPE_PIPELINE (llgst_pipeline_get_type())
62#undef GST_TYPE_ELEMENT 61#undef GST_TYPE_ELEMENT
63#define GST_TYPE_ELEMENT (llgst_element_get_type()) 62#define GST_TYPE_ELEMENT (llgst_element_get_type())
64#undef GST_TYPE_AUDIO_SINK
65#define GST_TYPE_AUDIO_SINK (llgst_audio_sink_get_type())
66#undef GST_TYPE_VIDEO_SINK 63#undef GST_TYPE_VIDEO_SINK
67#define GST_TYPE_VIDEO_SINK (llgst_video_sink_get_type()) 64#define GST_TYPE_VIDEO_SINK (llgst_video_sink_get_type())
65// more regrettable hacks to stub-out these .h-exposed GStreamer internals
66void ll_gst_debug_register_funcptr(GstDebugFuncPtr func, gchar* ptrname);
68#undef _gst_debug_register_funcptr 67#undef _gst_debug_register_funcptr
69#define _gst_debug_register_funcptr ll_gst_debug_register_funcptr 68#define _gst_debug_register_funcptr ll_gst_debug_register_funcptr
69GstDebugCategory* ll_gst_debug_category_new(gchar *name, guint color, gchar *description);
70#undef _gst_debug_category_new 70#undef _gst_debug_category_new
71#define _gst_debug_category_new ll_gst_debug_category_new 71#define _gst_debug_category_new ll_gst_debug_category_new
72#undef __gst_debug_enabled 72#undef __gst_debug_enabled
diff --git a/linden/indra/llmedia/llmediaimplgstreamer_syms_raw.inc b/linden/indra/llmedia/llmediaimplgstreamer_syms_raw.inc
index 08ba6df..b81872a 100644
--- a/linden/indra/llmedia/llmediaimplgstreamer_syms_raw.inc
+++ b/linden/indra/llmedia/llmediaimplgstreamer_syms_raw.inc
@@ -19,8 +19,6 @@ LL_GST_SYM(true, gst_element_class_add_pad_template, void, GstElementClass *klas
19LL_GST_SYM(true, gst_element_class_set_details, void, GstElementClass *klass, const GstElementDetails *details); 19LL_GST_SYM(true, gst_element_class_set_details, void, GstElementClass *klass, const GstElementDetails *details);
20LL_GST_SYM(true, gst_caps_unref, void, GstCaps* caps); 20LL_GST_SYM(true, gst_caps_unref, void, GstCaps* caps);
21LL_GST_SYM(true, gst_caps_ref, GstCaps *, GstCaps* caps); 21LL_GST_SYM(true, gst_caps_ref, GstCaps *, GstCaps* caps);
22LL_GST_SYM(true, _gst_debug_register_funcptr, void, GstDebugFuncPtr func, gchar* ptrname);
23LL_GST_SYM(true, _gst_debug_category_new, GstDebugCategory *, gchar *name, guint color, gchar *description);
24LL_GST_SYM(true, gst_caps_is_empty, gboolean, const GstCaps *caps); 22LL_GST_SYM(true, gst_caps_is_empty, gboolean, const GstCaps *caps);
25LL_GST_SYM(true, gst_caps_from_string, GstCaps *, const gchar *string); 23LL_GST_SYM(true, gst_caps_from_string, GstCaps *, const gchar *string);
26LL_GST_SYM(true, gst_caps_replace, void, GstCaps **caps, GstCaps *newcaps); 24LL_GST_SYM(true, gst_caps_replace, void, GstCaps **caps, GstCaps *newcaps);
@@ -37,6 +35,12 @@ LL_GST_SYM(true, gst_structure_get_name, G_CONST_RETURN gchar *, const GstStruct
37LL_GST_SYM(true, gst_element_seek, bool, GstElement *, gdouble, GstFormat, GstSeekFlags, GstSeekType, gint64, GstSeekType, gint64); 35LL_GST_SYM(true, gst_element_seek, bool, GstElement *, gdouble, GstFormat, GstSeekFlags, GstSeekType, gint64, GstSeekType, gint64);
38 36
39// optional symbols to grab 37// optional symbols to grab
38LL_GST_SYM(false, gst_registry_fork_set_enabled, void, gboolean enabled);
40LL_GST_SYM(false, gst_segtrap_set_enabled, void, gboolean enabled); 39LL_GST_SYM(false, gst_segtrap_set_enabled, void, gboolean enabled);
41LL_GST_SYM(false, gst_message_parse_buffering, void, GstMessage *message, gint *percent); 40LL_GST_SYM(false, gst_message_parse_buffering, void, GstMessage *message, gint *percent);
42LL_GST_SYM(false, gst_message_parse_info, void, GstMessage *message, GError **gerror, gchar **debug); 41LL_GST_SYM(false, gst_message_parse_info, void, GstMessage *message, GError **gerror, gchar **debug);
42LL_GST_SYM(false, gst_element_query_position, gboolean, GstElement *element, GstFormat *format, gint64 *cur);
43
44// GStreamer 'internal' symbols which may not be visible in some runtimes but are still used in expanded GStreamer header macros - yuck! We'll substitute our own stubs for these.
45//LL_GST_SYM(true, _gst_debug_register_funcptr, void, GstDebugFuncPtr func, gchar* ptrname);
46//LL_GST_SYM(true, _gst_debug_category_new, GstDebugCategory *, gchar *name, guint color, gchar *description);
diff --git a/linden/indra/llmedia/llmediaimplgstreamer_syms_rawa.inc b/linden/indra/llmedia/llmediaimplgstreamer_syms_rawa.inc
deleted file mode 100644
index 0be99b5..0000000
--- a/linden/indra/llmedia/llmediaimplgstreamer_syms_rawa.inc
+++ /dev/null
@@ -1,5 +0,0 @@
1
2// required symbols to grab
3LL_GST_SYM(true, gst_audio_sink_get_type, GType, void);
4
5// optional symbols to grab
diff --git a/linden/indra/llmedia/llmediaimplgstreamervidplug.cpp b/linden/indra/llmedia/llmediaimplgstreamervidplug.cpp
index dc3fe61..5e96666 100644
--- a/linden/indra/llmedia/llmediaimplgstreamervidplug.cpp
+++ b/linden/indra/llmedia/llmediaimplgstreamervidplug.cpp
@@ -17,7 +17,8 @@
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 * 22 *
22 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
@@ -81,10 +82,10 @@ static void
81gst_slvideo_base_init (gpointer gclass) 82gst_slvideo_base_init (gpointer gclass)
82{ 83{
83 static GstElementDetails element_details = { 84 static GstElementDetails element_details = {
84 "PluginTemplate", 85 (gchar*)"PluginTemplate",
85 "Generic/PluginTemplate", 86 (gchar*)"Generic/PluginTemplate",
86 "Generic Template Element", 87 (gchar*)"Generic Template Element",
87 "Linden Lab" 88 (gchar*)"Linden Lab"
88 }; 89 };
89 GstElementClass *element_class = GST_ELEMENT_CLASS (gclass); 90 GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
90 91
@@ -317,14 +318,6 @@ gst_slvideo_stop (GstBaseSink * bsink)
317} 318}
318 319
319 320
320static gboolean
321gst_slvideo_unlock (GstBaseSink * bsink)
322{
323 // nothing really to do here.
324 return TRUE;
325}
326
327
328/* initialize the plugin's class */ 321/* initialize the plugin's class */
329static void 322static void
330gst_slvideo_class_init (GstSLVideoClass * klass) 323gst_slvideo_class_init (GstSLVideoClass * klass)
@@ -343,17 +336,19 @@ gst_slvideo_class_init (GstSLVideoClass * klass)
343 336
344 gstelement_class->change_state = gst_slvideo_change_state; 337 gstelement_class->change_state = gst_slvideo_change_state;
345 338
346 gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_slvideo_get_caps); 339#define LLGST_DEBUG_FUNCPTR(p) (p)
347 gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR( gst_slvideo_set_caps); 340 gstbasesink_class->get_caps = LLGST_DEBUG_FUNCPTR (gst_slvideo_get_caps);
348 //gstbasesink_class->buffer_alloc=GST_DEBUG_FUNCPTR(gst_slvideo_buffer_alloc); 341 gstbasesink_class->set_caps = LLGST_DEBUG_FUNCPTR( gst_slvideo_set_caps);
349 //gstbasesink_class->get_times = GST_DEBUG_FUNCPTR (gst_slvideo_get_times); 342 //gstbasesink_class->buffer_alloc=LLGST_DEBUG_FUNCPTR(gst_slvideo_buffer_alloc);
350 gstbasesink_class->preroll = GST_DEBUG_FUNCPTR (gst_slvideo_show_frame); 343 //gstbasesink_class->get_times = LLGST_DEBUG_FUNCPTR (gst_slvideo_get_times);
351 gstbasesink_class->render = GST_DEBUG_FUNCPTR (gst_slvideo_show_frame); 344 gstbasesink_class->preroll = LLGST_DEBUG_FUNCPTR (gst_slvideo_show_frame);
345 gstbasesink_class->render = LLGST_DEBUG_FUNCPTR (gst_slvideo_show_frame);
352 346
353 gstbasesink_class->start = GST_DEBUG_FUNCPTR (gst_slvideo_start); 347 gstbasesink_class->start = LLGST_DEBUG_FUNCPTR (gst_slvideo_start);
354 gstbasesink_class->stop = GST_DEBUG_FUNCPTR (gst_slvideo_stop); 348 gstbasesink_class->stop = LLGST_DEBUG_FUNCPTR (gst_slvideo_stop);
355 349
356 gstbasesink_class->unlock = GST_DEBUG_FUNCPTR (gst_slvideo_unlock); 350 // gstbasesink_class->unlock = LLGST_DEBUG_FUNCPTR (gst_slvideo_unlock);
351#undef LLGST_DEBUG_FUNCPTR
357} 352}
358 353
359 354
@@ -433,8 +428,8 @@ plugin_init (GstPlugin * plugin)
433{ 428{
434 //fprintf(stderr, "\n\n\nPLUGIN INIT\n\n\n"); 429 //fprintf(stderr, "\n\n\nPLUGIN INIT\n\n\n");
435 430
436 GST_DEBUG_CATEGORY_INIT (gst_slvideo_debug, "private-slvideo-plugin", 431 GST_DEBUG_CATEGORY_INIT (gst_slvideo_debug, (gchar*)"private-slvideo-plugin",
437 0, "Second Life Video Sink"); 432 0, (gchar*)"Second Life Video Sink");
438 433
439 return llgst_element_register (plugin, "private-slvideo", 434 return llgst_element_register (plugin, "private-slvideo",
440 GST_RANK_NONE, GST_TYPE_SLVIDEO); 435 GST_RANK_NONE, GST_TYPE_SLVIDEO);
diff --git a/linden/indra/llmedia/llmediaimplgstreamervidplug.h b/linden/indra/llmedia/llmediaimplgstreamervidplug.h
index 660d261..3db064c 100644
--- a/linden/indra/llmedia/llmediaimplgstreamervidplug.h
+++ b/linden/indra/llmedia/llmediaimplgstreamervidplug.h
@@ -17,7 +17,8 @@
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 * 22 *
22 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
diff --git a/linden/indra/llmedia/llmediaimplllmozlib.cpp b/linden/indra/llmedia/llmediaimplllmozlib.cpp
index 05d7220..689d4b4 100644
--- a/linden/indra/llmedia/llmediaimplllmozlib.cpp
+++ b/linden/indra/llmedia/llmediaimplllmozlib.cpp
@@ -17,7 +17,8 @@
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 * 22 *
22 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
diff --git a/linden/indra/llmedia/llmediaimplllmozlib.h b/linden/indra/llmedia/llmediaimplllmozlib.h
index 18b1c6a..f71300e 100644
--- a/linden/indra/llmedia/llmediaimplllmozlib.h
+++ b/linden/indra/llmedia/llmediaimplllmozlib.h
@@ -17,7 +17,8 @@
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 * 22 *
22 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
diff --git a/linden/indra/llmedia/llmediaimplquicktime.cpp b/linden/indra/llmedia/llmediaimplquicktime.cpp
index 5bd530d..76cacee 100644
--- a/linden/indra/llmedia/llmediaimplquicktime.cpp
+++ b/linden/indra/llmedia/llmediaimplquicktime.cpp
@@ -17,7 +17,8 @@
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 * 22 *
22 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
diff --git a/linden/indra/llmedia/llmediaimplquicktime.h b/linden/indra/llmedia/llmediaimplquicktime.h
index c8de1dd..d4e1db8 100644
--- a/linden/indra/llmedia/llmediaimplquicktime.h
+++ b/linden/indra/llmedia/llmediaimplquicktime.h
@@ -17,7 +17,8 @@
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 * 22 *
22 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
diff --git a/linden/indra/llmedia/llmediaimplregister.h b/linden/indra/llmedia/llmediaimplregister.h
index fcc3ab7..5191274 100644
--- a/linden/indra/llmedia/llmediaimplregister.h
+++ b/linden/indra/llmedia/llmediaimplregister.h
@@ -17,7 +17,8 @@
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 * 22 *
22 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
diff --git a/linden/indra/llmedia/llmediamanager.cpp b/linden/indra/llmedia/llmediamanager.cpp
index 6db8dbe..e1c7608 100644
--- a/linden/indra/llmedia/llmediamanager.cpp
+++ b/linden/indra/llmedia/llmediamanager.cpp
@@ -17,7 +17,8 @@
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 * 22 *
22 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
@@ -150,8 +151,10 @@ LLMediaManager* LLMediaManager::getInstance()
150// (static) 151// (static)
151void LLMediaManager::setBrowserUserAgent(std::string user_agent) 152void LLMediaManager::setBrowserUserAgent(std::string user_agent)
152{ 153{
154#if LL_LLMOZLIB_ENABLED
153 // *HACK: Breaks encapsulation model, as initClass does above. JC 155 // *HACK: Breaks encapsulation model, as initClass does above. JC
154 LLMediaImplLLMozLib::setBrowserUserAgent(user_agent); 156 LLMediaImplLLMozLib::setBrowserUserAgent(user_agent);
157#endif // LL_LLMOZLIB_ENABLED
155} 158}
156 159
157//////////////////////////////////////////////////////////////////////////////// 160////////////////////////////////////////////////////////////////////////////////
diff --git a/linden/indra/llmedia/llmediamanager.h b/linden/indra/llmedia/llmediamanager.h
index f618f4c..dc832d5 100644
--- a/linden/indra/llmedia/llmediamanager.h
+++ b/linden/indra/llmedia/llmediamanager.h
@@ -17,7 +17,8 @@
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 * 22 *
22 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
diff --git a/linden/indra/llmedia/llmediaobserver.h b/linden/indra/llmedia/llmediaobserver.h
index e6da4f6..5f794bb 100644
--- a/linden/indra/llmedia/llmediaobserver.h
+++ b/linden/indra/llmedia/llmediaobserver.h
@@ -17,7 +17,8 @@
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 * 22 *
22 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,