mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-30 13:41:48 +00:00
a04e6b0cb2
ahssrc is a new plugin that enables Gstreamer to read from the android.hardware.Sensor Android sensors. These sensors are treated as buffers and can be passed through and manipulated by the pipeline. https://bugzilla.gnome.org/show_bug.cgi?id=768110
156 lines
4.9 KiB
C
156 lines
4.9 KiB
C
/*
|
|
* Copyright (C) 2016 SurroundIO
|
|
* Author: Martin Kelly <martin@surround.io>
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Library General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Library General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Library General Public
|
|
* License along with this library; if not, write to the
|
|
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
|
* Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#ifndef __GST_ANDROID_HARDWARE_SENSOR_H__
|
|
#define __GST_ANDROID_HARDWARE_SENSOR_H__
|
|
|
|
#include <gst/gst.h>
|
|
#include <jni.h>
|
|
|
|
#include "gstsensors.h"
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
typedef struct GstAHSensor
|
|
{
|
|
/* < private > */
|
|
jobject object;
|
|
} GstAHSensor;
|
|
|
|
typedef struct GstAHSensorData
|
|
{
|
|
jfloatArray array;
|
|
gfloat *values;
|
|
} GstAHSensorData;
|
|
|
|
typedef struct GstAHSensorEvent
|
|
{
|
|
/*
|
|
* Note that we don't use the Android event timestamp, as it's not reliable.
|
|
* See https://code.google.com/p/android/issues/detail?id=7981 for more
|
|
* details.
|
|
*/
|
|
gint32 accuracy;
|
|
GstAHSensorData data;
|
|
} GstAHSensorEvent;
|
|
|
|
typedef struct GstAHSensorEventListener
|
|
{
|
|
/* < private > */
|
|
jobject object;
|
|
|
|
gboolean registered;
|
|
} GstAHSensorEventListener;
|
|
|
|
typedef struct GstAHSensorManager
|
|
{
|
|
/* < private > */
|
|
jobject object;
|
|
} GstAHSensorManager;
|
|
|
|
gint gst_android_sensor_type_from_string (const gchar * type_str);
|
|
|
|
/* android.hardware.SensorListener onSensorChanged */
|
|
typedef void (*GstAHSensorCallback) (jobject sensor_event, gpointer user_data);
|
|
|
|
/* android.hardware.SensorListener onAccuracyChanged */
|
|
typedef void (*GstAHSAccuracyCallback) (jobject sensor, gint32 accuracy,
|
|
gpointer user_data);
|
|
|
|
gboolean gst_android_hardware_sensor_init (void);
|
|
void gst_android_hardware_sensor_deinit (void);
|
|
|
|
/*
|
|
* Example usage (excluding error checking):
|
|
*
|
|
* GstAHSensorManager *manager = gst_ah_sensor_get_manager ();
|
|
* GstAHSensor *sensor =
|
|
* gst_ah_sensor_get_default_sensor (manager, * sensor_type);
|
|
* GstAHSensorEventListener *listener =
|
|
* gst_ah_sensor_create_listener * (change_cb, accuracy_cb, self);
|
|
* gst_ah_sensor_register_listener (manager, listener, sensor,
|
|
* SensorDelay_SENSOR_DELAY_NORMAL);
|
|
*/
|
|
GstAHSensorManager *gst_ah_sensor_get_manager (void);
|
|
GstAHSensor *gst_ah_sensor_get_default_sensor (GstAHSensorManager * manager,
|
|
gint32 sensor_type);
|
|
GstAHSensorEventListener *gst_ah_sensor_create_listener (GstAHSensorCallback
|
|
sensor_cb, GstAHSAccuracyCallback accuracy_cb, gpointer user_data);
|
|
gboolean gst_ah_sensor_register_listener (GstAHSensorManager * self,
|
|
GstAHSensorEventListener * listener, GstAHSensor * sensor, gint32 delay);
|
|
void gst_ah_sensor_unregister_listener (GstAHSensorManager * self,
|
|
GstAHSensorEventListener * listener);
|
|
|
|
gboolean gst_ah_sensor_populate_event (GstAHSensorEvent * event,
|
|
jobject event_object, gint size);
|
|
void gst_ah_sensor_free_sensor_data (GstAHSensorData * data);
|
|
|
|
/*
|
|
* These constants come from the matching SENSOR_DELAY_* TYPE_* constants found
|
|
* in the Android documentation:
|
|
*
|
|
* SENSOR_DELAY_*:
|
|
* https://developer.android.com/reference/android/hardware/SensorManager.html
|
|
*
|
|
* TYPE_*:
|
|
* https://developer.android.com/reference/android/hardware/Sensor.html
|
|
*
|
|
* They are intended to be passed into the registerListener callback for
|
|
* listener registration. Note that, although these are hardcoded, we also do
|
|
* paranoid runtime checks during plugin init to verify that the API values
|
|
* haven't changed. This is unlikely but seems like a good precaution. When
|
|
* adding values, please keep the two lists in sync.
|
|
*/
|
|
enum
|
|
{
|
|
AHS_SENSOR_DELAY_FASTEST = 0,
|
|
AHS_SENSOR_DELAY_GAME = 1,
|
|
AHS_SENSOR_DELAY_NORMAL = 3,
|
|
AHS_SENSOR_DELAY_UI = 2
|
|
};
|
|
|
|
enum
|
|
{
|
|
AHS_SENSOR_TYPE_ACCELEROMETER = 0x1,
|
|
AHS_SENSOR_TYPE_AMBIENT_TEMPERATURE = 0xd,
|
|
AHS_SENSOR_TYPE_GAME_ROTATION_VECTOR = 0xf,
|
|
AHS_SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR = 0x14,
|
|
AHS_SENSOR_TYPE_GRAVITY = 0x9,
|
|
AHS_SENSOR_TYPE_GYROSCOPE = 0x4,
|
|
AHS_SENSOR_TYPE_GYROSCOPE_UNCALIBRATED = 0x10,
|
|
AHS_SENSOR_TYPE_HEART_RATE = 0x15,
|
|
AHS_SENSOR_TYPE_LIGHT = 0x5,
|
|
AHS_SENSOR_TYPE_LINEAR_ACCELERATION = 0xa,
|
|
AHS_SENSOR_TYPE_MAGNETIC_FIELD = 0x2,
|
|
AHS_SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED = 0xe,
|
|
AHS_SENSOR_TYPE_ORIENTATION = 0x3,
|
|
AHS_SENSOR_TYPE_PRESSURE = 0x6,
|
|
AHS_SENSOR_TYPE_PROXIMITY = 0x8,
|
|
AHS_SENSOR_TYPE_RELATIVE_HUMIDITY = 0xc,
|
|
AHS_SENSOR_TYPE_ROTATION_VECTOR = 0xb,
|
|
AHS_SENSOR_TYPE_SIGNIFICANT_MOTION = 0x11,
|
|
AHS_SENSOR_TYPE_STEP_COUNTER = 0x13,
|
|
AHS_SENSOR_TYPE_STEP_DETECTOR = 0x12
|
|
};
|
|
|
|
gsize gst_ah_sensor_get_sensor_data_size (gint sensor_type);
|
|
|
|
G_END_DECLS
|
|
#endif /* __GST_ANDROID_HARDWARE_SENSOR_H__ */
|