Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,8 @@ if test "x$enable_debug" = xyes; then
fi
AM_CONDITIONAL(OWR_DEBUG, test x$enable_debug = xyes)

dnl build debug or not
dnl build tests or not
have_json_glib=no
AC_MSG_CHECKING([whether to build tests or not])
AC_ARG_ENABLE(tests,
AC_HELP_STRING(
Expand All @@ -95,12 +96,13 @@ AC_HELP_STRING(
esac],[enable_tests=yes])
AC_MSG_RESULT([$enable_tests])
if test "x$enable_tests" = xyes; then
PKG_CHECK_MODULES(JSON_GLIB, [json-glib-1.0])
PKG_CHECK_MODULES(JSON_GLIB, [json-glib-1.0], [$have_json_glib=yes], [$have_json_glib=no])
PKG_CHECK_MODULES(LIBSOUP, [libsoup-2.4])
AC_DEFINE(OWR_TESTS, 1,
[Define if building tests])
fi
AM_CONDITIONAL(OWR_TESTS, test x$enable_tests = xyes)
AM_CONDITIONAL(HAVE_JSON_GLIB, test x$have_json_glib = xyes)

dnl build static or not
AC_MSG_CHECKING([whether to build static owr or not])
Expand Down
11 changes: 7 additions & 4 deletions local/owr_device_list.c
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ static gboolean enumerate_audio_source_devices(GClosure *callback)

source = _owr_local_media_source_new_cached(-1,
"Default audio input", OWR_MEDIA_TYPE_AUDIO, OWR_SOURCE_TYPE_CAPTURE,
NULL);
NULL, OWR_MEDIA_SOURCE_SUPPORTS_NONE);
sources = g_list_prepend(sources, source);
_owr_utils_call_closure_with_list(callback, sources);
g_list_free_full(sources, g_object_unref);
Expand Down Expand Up @@ -177,7 +177,8 @@ static gboolean enumerate_source_devices(OwrMediaType type, GClosure *callback)
source = _owr_local_media_source_new_cached(-1,
name, type,
OWR_SOURCE_TYPE_CAPTURE,
device);
device,
OWR_MEDIA_SOURCE_SUPPORTS_NONE);
g_free(name);
sources = g_list_prepend(sources, source);
}
Expand Down Expand Up @@ -486,11 +487,13 @@ static gboolean enumerate_video_source_devices(GClosure *callback)

if (facing == CameraInfo.CAMERA_FACING_FRONT) {
source = _owr_local_media_source_new_cached(i, "Front facing Camera",
OWR_MEDIA_TYPE_VIDEO, OWR_SOURCE_TYPE_CAPTURE, NULL);
OWR_MEDIA_TYPE_VIDEO, OWR_SOURCE_TYPE_CAPTURE, NULL,
OWR_MEDIA_SOURCE_SUPPORTS_NONE);
sources = g_list_prepend(sources, source);
} else if (facing == CameraInfo.CAMERA_FACING_BACK) {
source = _owr_local_media_source_new_cached(i, "Back facing Camera",
OWR_MEDIA_TYPE_VIDEO, OWR_SOURCE_TYPE_CAPTURE, NULL);
OWR_MEDIA_TYPE_VIDEO, OWR_SOURCE_TYPE_CAPTURE, NULL,
OWR_MEDIA_SOURCE_SUPPORTS_NONE);
sources = g_list_append(sources, source);
}

Expand Down
7 changes: 5 additions & 2 deletions local/owr_local.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,17 @@ static GList *get_test_sources(OwrMediaType types)
OwrMediaType media_type;
GList *result_list = NULL;
GList *elem;
gboolean useh264 = g_ascii_strcasecmp (g_getenv("OWR_USE_TEST_SOURCES"),"H264") == 0;

if (g_once_init_enter(&cached_sources)) {
GList *sources = NULL;

source = _owr_local_media_source_new_cached(-1, "Audio test source", OWR_MEDIA_TYPE_AUDIO, OWR_SOURCE_TYPE_TEST, NULL);
source = _owr_local_media_source_new_cached(-1, "Audio test source", OWR_MEDIA_TYPE_AUDIO, OWR_SOURCE_TYPE_TEST, NULL, OWR_MEDIA_SOURCE_SUPPORTS_NONE);
sources = g_list_append(sources, OWR_MEDIA_SOURCE(source));

source = _owr_local_media_source_new_cached(-1, "Video test source", OWR_MEDIA_TYPE_VIDEO, OWR_SOURCE_TYPE_TEST, NULL);
source = _owr_local_media_source_new_cached(-1, "Video test source", OWR_MEDIA_TYPE_VIDEO, OWR_SOURCE_TYPE_TEST, NULL, OWR_MEDIA_SOURCE_SUPPORTS_NONE);
if (useh264)
_owr_media_source_set_codec(OWR_MEDIA_SOURCE(source), OWR_CODEC_TYPE_H264);
sources = g_list_append(sources, OWR_MEDIA_SOURCE(source));

g_once_init_leave(&cached_sources, sources);
Expand Down
42 changes: 34 additions & 8 deletions local/owr_local_media_source.c
Original file line number Diff line number Diff line change
Expand Up @@ -571,7 +571,9 @@ static void on_caps(GstElement *source, GParamSpec *pspec, OwrMediaSource *media
if (GST_IS_CAPS(caps)) {
GST_INFO_OBJECT(source, "%s - configured with caps: %" GST_PTR_FORMAT,
media_source_name, caps);
gst_caps_unref(caps);
}
g_free(media_source_name);
}

static void
Expand Down Expand Up @@ -773,8 +775,14 @@ static GstElement *owr_local_media_source_request_source(OwrMediaSource *media_s
}
break;
case OWR_SOURCE_TYPE_TEST: {
GstElement *src, *time;
GstElement *src, *time, *h264enc = NULL;
GstPad *srcpad;
gboolean useh264 = g_ascii_strcasecmp (g_getenv("OWR_USE_TEST_SOURCES"),"H264") == 0;

if (useh264)
printf("video-source encoding: video/x-h264\n");
else
printf("video-source encoding: video/x-raw\n");

source = gst_bin_new("video-source");

Expand All @@ -787,9 +795,24 @@ static GstElement *owr_local_media_source_request_source(OwrMediaSource *media_s
g_object_set(time, "font-desc", "Sans 60", NULL);
gst_bin_add(GST_BIN(source), time);
gst_element_link(src, time);
srcpad = gst_element_get_static_pad(time, "src");
} else
srcpad = gst_element_get_static_pad(src, "src");
if (!useh264)
srcpad = gst_element_get_static_pad(time, "src");
} else if (!useh264)
srcpad = gst_element_get_static_pad(src, "src");

if (useh264) {
h264enc = gst_element_factory_make("openh264enc", "openh264enc");
if (!h264enc) {
GST_ERROR_OBJECT(source, "Failed to create openh264enc element!");
printf("Failed to create openh264enc element!\n");
}
gst_bin_add(GST_BIN(source), h264enc);
if (time)
gst_element_link(time, h264enc);
else
gst_element_link(src, h264enc);
srcpad = gst_element_get_static_pad(h264enc, "src");
}

gst_element_add_pad(source, gst_ghost_pad_new("src", srcpad));
gst_object_unref(srcpad);
Expand Down Expand Up @@ -924,7 +947,8 @@ static GstElement *owr_local_media_source_request_source(OwrMediaSource *media_s
}

static OwrLocalMediaSource *_owr_local_media_source_new(gint device_index, const gchar *name,
OwrMediaType media_type, OwrSourceType source_type, GstDevice *device)
OwrMediaType media_type, OwrSourceType source_type, GstDevice *device,
OwrMediaSourceSupportedInterfaces interfaces)
{
OwrLocalMediaSource *source;

Expand All @@ -936,12 +960,14 @@ static OwrLocalMediaSource *_owr_local_media_source_new(gint device_index, const
source->priv->device = device;

_owr_media_source_set_type(OWR_MEDIA_SOURCE(source), source_type);
_owr_media_source_set_supported_interfaces(OWR_MEDIA_SOURCE(source), interfaces);

return source;
}

OwrLocalMediaSource *_owr_local_media_source_new_cached(gint device_index, const gchar *name,
OwrMediaType media_type, OwrSourceType source_type, GstDevice *device)
OwrMediaType media_type, OwrSourceType source_type, GstDevice *device,
OwrMediaSourceSupportedInterfaces interfaces)
{
static OwrLocalMediaSource *test_sources[2] = { NULL, };
static GHashTable *sources[2] = { NULL, };
Expand All @@ -962,7 +988,7 @@ OwrLocalMediaSource *_owr_local_media_source_new_cached(gint device_index, const

if (source_type == OWR_SOURCE_TYPE_TEST) {
if (!test_sources[i])
test_sources[i] = _owr_local_media_source_new(device_index, name, media_type, source_type, device);
test_sources[i] = _owr_local_media_source_new(device_index, name, media_type, source_type, device, interfaces);

ret = test_sources[i];

Expand All @@ -982,7 +1008,7 @@ OwrLocalMediaSource *_owr_local_media_source_new_cached(gint device_index, const
}

if (!ret) {
ret = _owr_local_media_source_new(device_index, name, media_type, source_type, device);
ret = _owr_local_media_source_new(device_index, name, media_type, source_type, device, interfaces);
g_hash_table_insert(sources[i], GINT_TO_POINTER(device_index), ret);
}

Expand Down
4 changes: 3 additions & 1 deletion local/owr_local_media_source_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
#define __OWR_LOCAL_MEDIA_SOURCE_PRIVATE_H__

#include "owr_local_media_source.h"
#include "owr_media_source_private.h"

#include "owr_types.h"

Expand All @@ -44,7 +45,8 @@
G_BEGIN_DECLS

OwrLocalMediaSource *_owr_local_media_source_new_cached(gint device_index,
const gchar *name, OwrMediaType media_type, OwrSourceType source_type, GstDevice *device);
const gchar *name, OwrMediaType media_type, OwrSourceType source_type, GstDevice *device,
OwrMediaSourceSupportedInterfaces interfaces);
void _owr_local_media_source_set_capture_device_index(OwrLocalMediaSource *source, guint index);

G_END_DECLS
Expand Down
20 changes: 20 additions & 0 deletions local/owr_media_renderer.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ enum {
PROP_0,
PROP_MEDIA_TYPE,
PROP_DISABLED,
PROP_SOURCE,
N_PROPERTIES
};

Expand Down Expand Up @@ -130,6 +131,10 @@ static void owr_media_renderer_class_init(OwrMediaRendererClass *klass)
"Whether this renderer is disabled or not", DEFAULT_DISABLED,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);

obj_properties[PROP_SOURCE] = g_param_spec_object("source", "Source",
"Current Media Source being rendered", OWR_TYPE_MEDIA_SOURCE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);

gobject_class->set_property = owr_media_renderer_set_property;
gobject_class->get_property = owr_media_renderer_get_property;

Expand Down Expand Up @@ -263,6 +268,10 @@ static void owr_media_renderer_set_property(GObject *object, guint property_id,
priv->disabled = g_value_get_boolean(value);
break;

case PROP_SOURCE:
priv->source = g_value_get_object(value);
break;

default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
break;
Expand All @@ -286,6 +295,10 @@ static void owr_media_renderer_get_property(GObject *object, guint property_id,
g_value_set_boolean(value, priv->disabled);
break;

case PROP_SOURCE:
g_value_set_object(value, priv->source);
break;

default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
break;
Expand All @@ -305,6 +318,7 @@ static void on_caps(GstElement *sink, GParamSpec *pspec, OwrMediaRenderer *media
media_renderer->priv->media_type == OWR_MEDIA_TYPE_AUDIO ? "Audio" :
media_renderer->priv->media_type == OWR_MEDIA_TYPE_VIDEO ? "Video" :
"Unknown", caps);
gst_caps_unref(caps);
}
}

Expand Down Expand Up @@ -388,6 +402,7 @@ static gboolean set_source(GHashTable *args)
}

priv->source = g_object_ref(source);
g_object_notify_by_pspec(G_OBJECT(renderer), obj_properties[PROP_SOURCE]);

maybe_start_renderer(renderer);

Expand Down Expand Up @@ -469,6 +484,11 @@ void _owr_media_renderer_set_sink(OwrMediaRenderer *renderer, gpointer sink_ptr)
g_mutex_unlock(&priv->media_renderer_lock);
}

OwrMediaSource* _owr_media_renderer_get_source(OwrMediaRenderer *renderer)
{
return renderer->priv->source;
}

gchar * owr_media_renderer_get_dot_data(OwrMediaRenderer *renderer)
{
g_return_val_if_fail(OWR_IS_MEDIA_RENDERER(renderer), NULL);
Expand Down
1 change: 1 addition & 0 deletions local/owr_media_renderer.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ struct _OwrMediaRendererClass {
/*< private >*/
void *(*get_caps)(OwrMediaRenderer *renderer);
void *(*get_sink)(OwrMediaRenderer *renderer);

};

GType owr_media_renderer_get_type(void) G_GNUC_CONST;
Expand Down
2 changes: 2 additions & 0 deletions local/owr_media_renderer_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ G_BEGIN_DECLS

void _owr_media_renderer_set_sink(OwrMediaRenderer *renderer, gpointer sink);
GstPipeline * _owr_media_renderer_get_pipeline(OwrMediaRenderer *renderer);
OwrMediaSource* _owr_media_renderer_get_source(OwrMediaRenderer *renderer);
void _owr_media_renderer_reconfigure_element(OwrMediaRenderer *renderer);

G_END_DECLS

Expand Down
Loading