From de3ff720d7bc2cd5e98994ebb2ae2d988306b890 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Thu, 18 Jun 2009 23:43:34 -0700 Subject: [PATCH] Fix GStreamer for Windows --- CMakeLists.txt | 47 +++++++++++++++++++++++++++++++++++++++++++++++ include/main.h | 8 ++++---- src/stream.cpp | 14 ++++++++------ 3 files changed, 59 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 99cb53c..4c1a50f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -258,6 +258,53 @@ IF(GSTREAMER) LINK_DIRECTORIES(${GST_LIBRARY_DIRS}) SET(EXTRA_LIBS gstapp-0.10 ${EXTRA_LIBS}) ENDIF(HAS_GSTAPP) + ELSE(GST_FOUND) + SET(GST_SEARCH_PATHS + ENV GSTSDK_DIR + ENV MINGDIR + "C:/Program Files/gstreamer" + "C:/gstreamer" ) + + MESSAGE(STATUS "Looking for glib.h") + FIND_PATH(GLIB_INCLUDE_DIR glib.h + PATHS ${GST_SEARCH_PATHS} + PATH_SUFFIXES include include/glib-2.0) + IF(GLIB_INCLUDE_DIR) + MESSAGE(STATUS "Looking for glib.h - found: ${GLIB_INCLUDE_DIR}") + ELSE(GLIB_INCLUDE_DIR) + MESSAGE(STATUS "Looking for glib.h - not found") + ENDIF(GLIB_INCLUDE_DIR) + + MESSAGE(STATUS "Looking for gst/gst.h") + FIND_PATH(GST_INCLUDE_DIR gst/gst.h + PATHS ${GST_SEARCH_PATHS} + PATH_SUFFIXES include include/gstreamer-0.10) + IF(GST_INCLUDE_DIR) + MESSAGE(STATUS "Looking for gst/gst.h - found: ${GST_INCLUDE_DIR}") + ELSE(GST_INCLUDE_DIR) + MESSAGE(STATUS "Looking for gst/gst.h - not found") + ENDIF(GST_INCLUDE_DIR) + + IF(GLIB_INCLUDE_DIR AND GST_INCLUDE_DIR) + INCLUDE_DIRECTORIES("${GLIB_INCLUDE_DIR}" "${GST_INCLUDE_DIR}") + FIND_LIBRARY(GST_LIBRARY1 NAMES gstapp-0.10 + PATHS ${GST_SEARCH_PATHS} PATH_SUFFIXES lib ) + FIND_LIBRARY(GST_LIBRARY2 NAMES gstreamer-0.10 + PATHS ${GST_SEARCH_PATHS} PATH_SUFFIXES lib ) + FIND_LIBRARY(GST_LIBRARY3 NAMES gthread-2.0 + PATHS ${GST_SEARCH_PATHS} PATH_SUFFIXES lib ) + FIND_LIBRARY(GST_LIBRARY4 NAMES gmodule-2.0 + PATHS ${GST_SEARCH_PATHS} PATH_SUFFIXES lib ) + FIND_LIBRARY(GST_LIBRARY5 NAMES gobject-2.0 + PATHS ${GST_SEARCH_PATHS} PATH_SUFFIXES lib ) + FIND_LIBRARY(GST_LIBRARY6 NAMES glib-2.0 + PATHS ${GST_SEARCH_PATHS} PATH_SUFFIXES lib ) + IF(GST_LIBRARY1 AND GST_LIBRARY2 AND GST_LIBRARY3 AND GST_LIBRARY4 AND GST_LIBRARY5 AND GST_LIBRARY6) + SET(GST_LIBRARIES "${GST_LIBRARY1}" "${GST_LIBRARY2}" "${GST_LIBRARY3}" "${GST_LIBRARY4}" "${GST_LIBRARY5}" "${GST_LIBRARY6}") + MESSAGE(STATUS "GStreamer libs: ${GST_LIBRARIES}") + SET(HAS_GSTREAMER 1) + ENDIF(GST_LIBRARY1 AND GST_LIBRARY2 AND GST_LIBRARY3 AND GST_LIBRARY4 AND GST_LIBRARY5 AND GST_LIBRARY6) + ENDIF(GLIB_INCLUDE_DIR AND GST_INCLUDE_DIR) ENDIF(GST_FOUND) ELSE(GSTREAMER) SET(GST_LIBRARIES "") diff --git a/include/main.h b/include/main.h index ed7c305..4190f7c 100644 --- a/include/main.h +++ b/include/main.h @@ -164,7 +164,7 @@ public: { if(usrFile) fio.close(usrFile); } }; -class IStream : public std::istream { +class InStream : public std::istream { public: bool IsOpen() { @@ -173,13 +173,13 @@ public: return true; } - IStream(const char *filename) + InStream(const char *filename) : std::istream(new FileStreamBuf(filename, 0)) { } - IStream(const MemDataInfo &memInfo) + InStream(const MemDataInfo &memInfo) : std::istream(new MemStreamBuf(memInfo)) { } - virtual ~IStream() + virtual ~InStream() { delete rdbuf(); } }; diff --git a/src/stream.cpp b/src/stream.cpp index b56f4da..c79eb1d 100644 --- a/src/stream.cpp +++ b/src/stream.cpp @@ -933,12 +933,14 @@ static const gchar *gst_audio_caps = "signed = (boolean) TRUE, " "width = (int) 16, " "depth = (int) 16, " - "rate = (int) [ 1, MAX ], " "channels = (int) [ 1, MAX ]; " + "rate = (int) [ 1, MAX ], " + "channels = (int) [ 1, MAX ]; " "audio/x-raw-int, " "signed = (boolean) FALSE, " "width = (int) 8, " "depth = (int) 8, " - "rate = (int) [ 1, MAX ], " "channels = (int) [ 1, MAX ]"; + "rate = (int) [ 1, MAX ], " + "channels = (int) [ 1, MAX ]"; struct gstStream : public alureStream { GstElement *gstPipeline; @@ -1092,7 +1094,7 @@ private: if(setformat) { GstCaps *caps = GST_BUFFER_CAPS(buffer); - GST_LOG("caps are %" GST_PTR_FORMAT, caps); + //GST_LOG("caps are %" GST_PTR_FORMAT, caps); ALint i; gint rate = 0, channels = 0, depth = 0, width = 0; @@ -1155,13 +1157,13 @@ private: app->fstream->read(static_cast(data), size); buffer = gst_app_buffer_new(data, app->fstream->gcount(), g_free, data); - GST_DEBUG("feed buffer %p, %u", buffer, GST_BUFFER_SIZE(buffer)); + //GST_DEBUG("feed buffer %p, %u", buffer, GST_BUFFER_SIZE(buffer)); g_signal_emit_by_name(app->gstSrc, "push-buffer", buffer, &ret); } static gboolean seek_data(GstElement */*appsrc*/, guint64 position, gstStream *app) { - GST_DEBUG("seek to offset %" G_GUINT64_FORMAT, position); + //GST_DEBUG("seek to offset %" G_GUINT64_FORMAT, position); app->fstream->clear(); return (app->fstream->seekg(position) ? TRUE : FALSE); } @@ -1187,7 +1189,7 @@ alureStream *create_stream(const T &fdata) i++; } - IStream *file = new IStream(fdata); + InStream *file = new InStream(fdata); if(file->IsOpen()) { stream.reset(new wavStream(file)); -- 2.11.4.GIT