Modified: releases/WebKitGTK/webkit-1.10/Source/WebCore/platform/audio/gstreamer/AudioFileReaderGStreamer.cpp (137083 => 137084)
--- releases/WebKitGTK/webkit-1.10/Source/WebCore/platform/audio/gstreamer/AudioFileReaderGStreamer.cpp 2012-12-09 18:20:27 UTC (rev 137083)
+++ releases/WebKitGTK/webkit-1.10/Source/WebCore/platform/audio/gstreamer/AudioFileReaderGStreamer.cpp 2012-12-09 18:38:34 UTC (rev 137084)
@@ -67,6 +67,7 @@
GRefPtr<GstElement> m_decodebin;
GRefPtr<GstElement> m_deInterleave;
GRefPtr<GMainLoop> m_loop;
+ bool m_errorOccurred;
};
static GstCaps* getGStreamerAudioCaps(int channels, float sampleRate)
@@ -124,6 +125,7 @@
, m_dataSize(0)
, m_filePath(filePath)
, m_channelSize(0)
+ , m_errorOccurred(false)
{
}
@@ -132,11 +134,34 @@
, m_dataSize(dataSize)
, m_filePath(0)
, m_channelSize(0)
+ , m_errorOccurred(false)
{
}
AudioFileReader::~AudioFileReader()
{
+ if (m_pipeline) {
+ GRefPtr<GstBus> bus = gst_pipeline_get_bus(GST_PIPELINE(m_pipeline));
+ g_signal_handlers_disconnect_by_func(bus.get(), reinterpret_cast<gpointer>(messageCallback), this);
+ gst_element_set_state(m_pipeline, GST_STATE_NULL);
+ gst_object_unref(GST_OBJECT(m_pipeline));
+ }
+
+ if (m_decodebin) {
+ g_signal_handlers_disconnect_by_func(m_decodebin.get(), reinterpret_cast<gpointer>(onGStreamerDecodebinPadAddedCallback), this);
+ m_decodebin.clear();
+ }
+
+ if (m_deInterleave) {
+ g_signal_handlers_disconnect_by_func(m_deInterleave.get(), reinterpret_cast<gpointer>(onGStreamerDeinterleavePadAddedCallback), this);
+ g_signal_handlers_disconnect_by_func(m_deInterleave.get(), reinterpret_cast<gpointer>(onGStreamerDeinterleaveReadyCallback), this);
+ m_deInterleave.clear();
+ }
+
+ gst_buffer_list_iterator_free(m_frontLeftBuffersIterator);
+ gst_buffer_list_iterator_free(m_frontRightBuffersIterator);
+ gst_buffer_list_unref(m_frontLeftBuffers);
+ gst_buffer_list_unref(m_frontRightBuffers);
}
GstFlowReturn AudioFileReader::handleBuffer(GstAppSink* sink)
@@ -204,11 +229,13 @@
break;
case GST_MESSAGE_WARNING:
gst_message_parse_warning(message, &error.outPtr(), &debug.outPtr());
- g_warning("Warning: %d, %s", error->code, error->message);
+ g_warning("Warning: %d, %s. Debug output: %s", error->code, error->message, debug.get());
break;
case GST_MESSAGE_ERROR:
gst_message_parse_error(message, &error.outPtr(), &debug.outPtr());
- ASSERT_WITH_MESSAGE(0, "Fatal error: %d, %s", error->code, error->message);
+ g_warning("Error: %d, %s. Debug output: %s", error->code, error->message, debug.get());
+ m_errorOccurred = true;
+ g_main_loop_quit(m_loop.get());
break;
default:
break;
@@ -344,31 +371,17 @@
g_main_loop_run(m_loop.get());
g_main_context_pop_thread_default(context.get());
- GRefPtr<GstBus> bus = gst_pipeline_get_bus(GST_PIPELINE(m_pipeline));
- g_signal_handlers_disconnect_by_func(bus.get(), reinterpret_cast<gpointer>(messageCallback), this);
-
- g_signal_handlers_disconnect_by_func(m_decodebin.get(), reinterpret_cast<gpointer>(onGStreamerDecodebinPadAddedCallback), this);
- g_signal_handlers_disconnect_by_func(m_deInterleave.get(), reinterpret_cast<gpointer>(onGStreamerDeinterleavePadAddedCallback), this);
- g_signal_handlers_disconnect_by_func(m_deInterleave.get(), reinterpret_cast<gpointer>(onGStreamerDeinterleaveReadyCallback), this);
-
unsigned channels = mixToMono ? 1 : 2;
OwnPtr<AudioBus> audioBus = adoptPtr(new AudioBus(channels, m_channelSize, true));
audioBus->setSampleRate(m_sampleRate);
+ if (m_errorOccurred)
+ return audioBus.release();
+
copyGstreamerBuffersToAudioChannel(m_frontLeftBuffers, audioBus->channel(0));
if (!mixToMono)
copyGstreamerBuffersToAudioChannel(m_frontRightBuffers, audioBus->channel(1));
- gst_buffer_list_iterator_free(m_frontLeftBuffersIterator);
- gst_buffer_list_iterator_free(m_frontRightBuffersIterator);
- gst_buffer_list_unref(m_frontLeftBuffers);
- gst_buffer_list_unref(m_frontRightBuffers);
-
- gst_element_set_state(m_pipeline, GST_STATE_NULL);
- gst_object_unref(GST_OBJECT(m_pipeline));
-
- m_decodebin.clear();
- m_deInterleave.clear();
return audioBus.release();
}
Modified: releases/WebKitGTK/webkit-1.10/Source/WebCore/platform/audio/gtk/AudioBusGtk.cpp (137083 => 137084)
--- releases/WebKitGTK/webkit-1.10/Source/WebCore/platform/audio/gtk/AudioBusGtk.cpp 2012-12-09 18:20:27 UTC (rev 137083)
+++ releases/WebKitGTK/webkit-1.10/Source/WebCore/platform/audio/gtk/AudioBusGtk.cpp 2012-12-09 18:38:34 UTC (rev 137084)
@@ -28,7 +28,6 @@
#include <wtf/gobject/GOwnPtr.h>
#include <wtf/text/CString.h>
-#include <gio/gio.h>
#include <glib.h>
namespace WebCore {
@@ -36,14 +35,12 @@
PassOwnPtr<AudioBus> AudioBus::loadPlatformResource(const char* name, float sampleRate)
{
GOwnPtr<gchar> filename(g_strdup_printf("%s.wav", name));
- GOwnPtr<gchar> absoluteFilename(g_build_filename(sharedResourcesPath().data(), "resources", "audio", filename.get(), NULL));
-
- GFile* file = g_file_new_for_path(filename.get());
- if (!g_file_query_exists(file, 0)) {
- // Uninstalled case, assume we're in the WebKit root directory.
- const char* environmentPath = getenv("AUDIO_RESOURCES_PATH");
+ const char* environmentPath = getenv("AUDIO_RESOURCES_PATH");
+ GOwnPtr<gchar> absoluteFilename;
+ if (environmentPath)
absoluteFilename.set(g_build_filename(environmentPath, filename.get(), NULL));
- }
+ else
+ absoluteFilename.set(g_build_filename(sharedResourcesPath().data(), "resources", "audio", filename.get(), NULL));
return createBusFromAudioFile(absoluteFilename.get(), false, sampleRate);
}