[-]
[+]
|
Changed |
_service:tar_git:gstreamer1.0-droid.changes
|
|
[-]
[+]
|
Changed |
_service:tar_git:gst-droid.spec
^
|
|
[-]
[+]
|
Changed |
_service
^
|
@@ -6,4 +6,4 @@
<param name="token"/>
<param name="debian">N</param>
<param name="dumb">N</param>
-</service></services>
+</service></services>
\ No newline at end of file
|
[-]
[+]
|
Changed |
_service:tar_git:gstreamer1.0-droid-0.20190805.0.tar.gz/gst-libs/gst/droid/gstdroidcodec.c
^
|
@@ -52,7 +52,6 @@
DroidMediaData * out);
static gboolean is_mpeg4v (GstDroidCodec * codec, const GstStructure * s);
static gboolean is_mpega (GstDroidCodec * codec, const GstStructure * s);
-static gboolean is_mp3 (GstDroidCodec * codec, const GstStructure * s);
static gboolean is_h264_dec (GstDroidCodec * codec, const GstStructure * s);
static gboolean is_h264_enc (GstDroidCodec * codec, const GstStructure * s);
static void h264enc_complement (GstCaps * caps);
@@ -109,10 +108,6 @@
is_mpega, NULL, NULL, NULL, create_aacdec_codec_data_from_codec_data,
create_aacdec_codec_data_from_frame_data, process_aacdec_data},
- {GST_DROID_CODEC_DECODER_AUDIO, "audio/mpeg", "audio/mpeg",
- "audio/mpeg, mpegversion=(int)1, layer=[1, 3]", TRUE,
- is_mp3, NULL, NULL, NULL, NULL, NULL, NULL},
-
/* video decoders */
{GST_DROID_CODEC_DECODER_VIDEO, "video/mpeg", "video/mp4v-es",
"video/mpeg, mpegversion=4", TRUE,
@@ -586,15 +581,6 @@
}
static gboolean
-is_mp3 (GstDroidCodec * codec G_GNUC_UNUSED, const GstStructure * s)
-{
- gint val, layer;
-
- return gst_structure_get_int (s, "mpegversion", &val) && val == 1 &&
- gst_structure_get_int (s, "layer", &layer) && (layer == 1 || layer == 3);
-}
-
-static gboolean
is_h264_dec (GstDroidCodec * codec G_GNUC_UNUSED, const GstStructure * s)
{
const char *alignment = gst_structure_get_string (s, "alignment");
@@ -1086,6 +1072,7 @@
|| codec->info->type ==
GST_DROID_CODEC_DECODER_VIDEO) ? "decoder-quirks" : "encoder-quirks";
gsize quirks_length = 0;
+ codec->quirks = 0;
int x;
g_key_file_load_from_file (file, path, G_KEY_FILE_NONE, NULL);
@@ -1104,7 +1091,6 @@
goto out;
}
- codec->quirks = 0;
for (x = 0; x < quirks_length; x++) {
if (!g_strcmp0 (quirks_string[x], USE_CODEC_SUPPLIED_HEIGHT_NAME)) {
codec->quirks |= USE_CODEC_SUPPLIED_HEIGHT_VALUE;
|
[-]
[+]
|
Changed |
_service:tar_git:gstreamer1.0-droid-0.20190805.0.tar.gz/gst-libs/gst/droid/gstdroidmediabuffer.c
^
|
@@ -35,7 +35,6 @@
{
GstAllocator parent;
- DroidMediaPixelFormatConstants c;
} GstDroidMediaBufferAllocator;
typedef struct
@@ -49,9 +48,23 @@
GstMemory mem;
DroidMediaBuffer *buffer;
+ GstVideoInfo video_info;
+ gpointer map_data;
+ int map_count;
+ GstMapFlags map_flags;
} GstDroidMediaBufferMemory;
+typedef struct
+{
+ int hal_format;
+ GstVideoFormat gst_format;
+ int bytes_per_pixel;
+ int h_align;
+ int v_align;
+
+} GstDroidMediaBufferFormatMap;
+
#define _do_init \
GST_DEBUG_CATEGORY_INIT (droid_memory_debug, "droidmemory", 0, \
"droid memory allocator");
@@ -65,6 +78,133 @@
static void gst_droid_media_buffer_allocator_free (GstAllocator * allocator,
GstMemory * mem);
+static gpointer gst_droid_media_buffer_memory_map (GstMemory * mem,
+ gsize maxsize, GstMapFlags flags);
+static void gst_droid_media_buffer_memory_unmap (GstMemory * mem);
+
+#define GST_DROID_MEDIA_BUFFER_FORMAT_COUNT 11
+
+static GstDroidMediaBufferFormatMap
+ gst_droid_media_buffer_formats[GST_DROID_MEDIA_BUFFER_FORMAT_COUNT];
+
+static void
+gst_droid_media_buffer_initialize_format_map ()
+{
+ DroidMediaPixelFormatConstants constants;
+ static gboolean initialized = FALSE;
+
+ if (!initialized) {
+ droid_media_pixel_format_constants_init (&constants);
+
+ gst_droid_media_buffer_formats[0].hal_format =
+ constants.HAL_PIXEL_FORMAT_RGBA_8888;
+ gst_droid_media_buffer_formats[0].gst_format = GST_VIDEO_FORMAT_RGBA;
+ gst_droid_media_buffer_formats[0].bytes_per_pixel = 4;
+ gst_droid_media_buffer_formats[0].h_align = 4;
+ gst_droid_media_buffer_formats[0].v_align = 1;
+
+ gst_droid_media_buffer_formats[1].hal_format =
+ constants.HAL_PIXEL_FORMAT_RGBX_8888;
+ gst_droid_media_buffer_formats[1].gst_format = GST_VIDEO_FORMAT_RGBx;
+ gst_droid_media_buffer_formats[1].bytes_per_pixel = 4;
+ gst_droid_media_buffer_formats[1].h_align = 4;
+ gst_droid_media_buffer_formats[1].v_align = 1;
+
+ gst_droid_media_buffer_formats[2].hal_format =
+ constants.HAL_PIXEL_FORMAT_RGB_888;
+ gst_droid_media_buffer_formats[2].gst_format = GST_VIDEO_FORMAT_RGB;
+ gst_droid_media_buffer_formats[2].bytes_per_pixel = 3;
+ gst_droid_media_buffer_formats[2].h_align = 4;
+ gst_droid_media_buffer_formats[2].v_align = 1;
+
+ gst_droid_media_buffer_formats[3].hal_format =
+ constants.HAL_PIXEL_FORMAT_RGB_565;
+ gst_droid_media_buffer_formats[3].gst_format = GST_VIDEO_FORMAT_RGB16;
+ gst_droid_media_buffer_formats[3].bytes_per_pixel = 2;
+ gst_droid_media_buffer_formats[3].h_align = 4;
+ gst_droid_media_buffer_formats[3].v_align = 1;
+
+ gst_droid_media_buffer_formats[4].hal_format =
+ constants.HAL_PIXEL_FORMAT_BGRA_8888;
+ gst_droid_media_buffer_formats[4].gst_format = GST_VIDEO_FORMAT_BGRA;
+ gst_droid_media_buffer_formats[4].bytes_per_pixel = 4;
+ gst_droid_media_buffer_formats[4].h_align = 4;
+ gst_droid_media_buffer_formats[4].v_align = 1;
+
+ gst_droid_media_buffer_formats[5].hal_format =
+ constants.HAL_PIXEL_FORMAT_YV12;
+ gst_droid_media_buffer_formats[5].gst_format = GST_VIDEO_FORMAT_YV12;
+ gst_droid_media_buffer_formats[5].bytes_per_pixel = 1;
+ gst_droid_media_buffer_formats[5].h_align = 1;
+ gst_droid_media_buffer_formats[5].v_align = 1;
+
+ gst_droid_media_buffer_formats[6].hal_format =
+ constants.HAL_PIXEL_FORMAT_YCbCr_422_SP;
+ gst_droid_media_buffer_formats[6].gst_format = GST_VIDEO_FORMAT_NV16;
+ gst_droid_media_buffer_formats[6].bytes_per_pixel = 1;
+ gst_droid_media_buffer_formats[6].h_align = 1;
+ gst_droid_media_buffer_formats[6].v_align = 1;
+
+ gst_droid_media_buffer_formats[7].hal_format =
+ constants.HAL_PIXEL_FORMAT_YCrCb_420_SP;
+ gst_droid_media_buffer_formats[7].gst_format = GST_VIDEO_FORMAT_NV21;
+ gst_droid_media_buffer_formats[7].bytes_per_pixel = 1;
+ gst_droid_media_buffer_formats[7].h_align = 1;
+ gst_droid_media_buffer_formats[7].v_align = 1;
+
+ gst_droid_media_buffer_formats[8].hal_format =
+ constants.HAL_PIXEL_FORMAT_YCbCr_422_I;
+ gst_droid_media_buffer_formats[8].gst_format = GST_VIDEO_FORMAT_YUY2;
+ gst_droid_media_buffer_formats[8].bytes_per_pixel = 1;
+ gst_droid_media_buffer_formats[8].h_align = 1;
+ gst_droid_media_buffer_formats[8].v_align = 1;
+
+ gst_droid_media_buffer_formats[9].hal_format =
+ constants.QOMX_COLOR_FormatYUV420PackedSemiPlanar32m;
+ gst_droid_media_buffer_formats[9].gst_format = GST_VIDEO_FORMAT_YV12;
+ gst_droid_media_buffer_formats[9].bytes_per_pixel = 1;
+ gst_droid_media_buffer_formats[9].h_align = 128;
+ gst_droid_media_buffer_formats[9].v_align = 32;
+
+ gst_droid_media_buffer_formats[10].hal_format =
+ constants.QOMX_COLOR_FormatYUV420PackedSemiPlanar64x32Tile2m8ka;
+ gst_droid_media_buffer_formats[10].gst_format = GST_VIDEO_FORMAT_NV12_64Z32;
+ gst_droid_media_buffer_formats[10].bytes_per_pixel = 0;
+ gst_droid_media_buffer_formats[10].h_align = 0;
+ gst_droid_media_buffer_formats[10].v_align = 0;
+ }
+}
+
+static int
+gst_droid_media_buffer_index_of_hal_format (int format)
+{
+ int i;
+
+ gst_droid_media_buffer_initialize_format_map ();
+
+ for (i = 0; i < GST_DROID_MEDIA_BUFFER_FORMAT_COUNT; ++i) {
+ if (gst_droid_media_buffer_formats[i].hal_format == format) {
+ return i;
+ }
+ }
+ return GST_DROID_MEDIA_BUFFER_FORMAT_COUNT;
+}
+
+static int
+gst_droid_media_buffer_index_of_gst_format (GstVideoFormat format)
+{
+ int i;
+
+ gst_droid_media_buffer_initialize_format_map ();
+
+ for (i = 0; i < GST_DROID_MEDIA_BUFFER_FORMAT_COUNT; ++i) {
+ if (gst_droid_media_buffer_formats[i].gst_format == format) {
+ return i;
+ }
+ }
+ return GST_DROID_MEDIA_BUFFER_FORMAT_COUNT;
+}
+
GstAllocator *
gst_droid_media_buffer_allocator_new (void)
{
@@ -80,17 +220,17 @@
alloc->mem_type = GST_ALLOCATOR_DROID_MEDIA_BUFFER;
- alloc->mem_map = NULL;
- alloc->mem_unmap = NULL;
+ alloc->mem_map = gst_droid_media_buffer_memory_map;
+ alloc->mem_unmap = gst_droid_media_buffer_memory_unmap;
alloc->mem_copy = NULL;
alloc->mem_share = NULL;
alloc->mem_is_span = NULL;
- droid_media_pixel_format_constants_init (&allocator->c);
-
GST_OBJECT_FLAG_SET (allocator, GST_ALLOCATOR_FLAG_CUSTOM_ALLOC);
}
+#define ALIGN_SIZE(size, to) (((size) + to - 1) & ~(to - 1))
+
static void
droid_media_buffer_allocator_class_init (GstDroidMediaBufferAllocatorClass *
klass)
@@ -101,13 +241,56 @@
allocator_class->free = gst_droid_media_buffer_allocator_free;
}
+static GstDroidMediaBufferMemory *
+gst_droid_media_buffer_allocator_alloc_from_buffer (GstAllocator * allocator,
+ DroidMediaBuffer * buffer, int format_index, gsize width, gsize height,
+ gsize stride)
+{
+ GstDroidMediaBufferMemory *mem = g_slice_new0 (GstDroidMediaBufferMemory);
+ GstFormat format;
+ gsize padded_width = width;
|
[-]
[+]
|
Changed |
_service:tar_git:gstreamer1.0-droid-0.20190805.0.tar.gz/gst-libs/gst/droid/gstdroidmediabuffer.h
^
|
@@ -29,6 +29,8 @@
#define GST_ALLOCATOR_DROID_MEDIA_BUFFER "droidmediabuffer"
#define GST_CAPS_FEATURE_MEMORY_DROID_MEDIA_BUFFER "memory:DroidMediaBuffer"
+#define GST_DROID_MEDIA_BUFFER_MEMORY_VIDEO_FORMATS "{ NV12_64Z32, YV12, NV16, " \
+ "NV12, NV21, YUY2, RGBA, RGBx, RGB, RGB16, BGRA, ENCODED }"
GstAllocator * gst_droid_media_buffer_allocator_new (void);
GstMemory * gst_droid_media_buffer_allocator_alloc (GstAllocator * allocator,
@@ -42,6 +44,8 @@
DroidMediaBuffer * gst_droid_media_buffer_memory_get_buffer (GstMemory * mem);
gboolean gst_is_droid_media_buffer_memory (GstMemory * mem);
+GstVideoInfo * gst_droid_media_buffer_get_video_info (GstMemory * mem);
+
G_END_DECLS
#endif /* __GST_DROID_MEDIA_BUFFER_H__ */
|
[-]
[+]
|
Changed |
_service:tar_git:gstreamer1.0-droid-0.20190805.0.tar.gz/gst/droidcamsrc/gstdroidcamsrc.c
^
|
@@ -52,7 +52,8 @@
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
- (GST_CAPS_FEATURE_MEMORY_DROID_MEDIA_BUFFER, "{YV12}") ";"
+ (GST_CAPS_FEATURE_MEMORY_DROID_MEDIA_BUFFER,
+ GST_DROID_MEDIA_BUFFER_MEMORY_VIDEO_FORMATS) ";"
GST_VIDEO_CAPS_MAKE ("{NV21}")));
static GstStaticPadTemplate img_src_template_factory =
@@ -1049,6 +1050,37 @@
"Target bitrate", 0, G_MAXINT,
DEFAULT_TARGET_BITRATE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class,
+ PROP_SUPPORTED_WB_MODES,
+ g_param_spec_variant ("supported-wb-modes",
+ "Supported white balance modes", "Supported white balance modes",
+ G_VARIANT_TYPE_VARIANT, NULL, G_PARAM_READABLE));
+
+ g_object_class_install_property (gobject_class, PROP_SUPPORTED_COLOR_TONES,
+ g_param_spec_variant ("supported-color-tones", "Supported color tones",
+ "Supported color tones", G_VARIANT_TYPE_VARIANT, NULL,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property (gobject_class, PROP_SUPPORTED_SCENE_MODES,
+ g_param_spec_variant ("supported-scene-modes",
+ "Supported scene modes", "Supported scene modes",
+ G_VARIANT_TYPE_VARIANT, NULL, G_PARAM_READABLE));
+
+ g_object_class_install_property (gobject_class, PROP_SUPPORTED_FLASH_MODES,
+ g_param_spec_variant ("supported-flash-modes", "Supported flash modes",
+ "Supported flash modes", G_VARIANT_TYPE_VARIANT, NULL,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property (gobject_class, PROP_SUPPORTED_FOCUS_MODES,
+ g_param_spec_variant ("supported-focus-modes", "Supported focus modes",
+ "Supported focus modes", G_VARIANT_TYPE_VARIANT, NULL,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property (gobject_class, PROP_SUPPORTED_ISO_SPEEDS,
+ g_param_spec_variant ("supported-iso-speeds", "Supported ISO speeds",
+ "Supported ISO speeds", G_VARIANT_TYPE_VARIANT, NULL,
+ G_PARAM_READABLE));
+
gst_droidcamsrc_photography_add_overrides (gobject_class);
/* Signals */
@@ -1424,7 +1456,9 @@
g_rec_mutex_lock (&src->dev_lock);
if (src->dev && src->dev->params) {
if (data == src->vfsrc) {
- caps = gst_droidcamsrc_params_get_viewfinder_caps (src->dev->params);
+ caps =
+ gst_droidcamsrc_params_get_viewfinder_caps (src->dev->params,
+ src->dev->viewfinder_format);
} else if (data == src->imgsrc) {
caps = gst_droidcamsrc_params_get_image_caps (src->dev->params);
} else if (data == src->vidsrc) {
@@ -1493,6 +1527,7 @@
gboolean ret = FALSE;
GstCaps *peer = NULL;
GstCaps *our_caps = NULL;
+ GstCapsFeatures *features;
gchar *preview;
GstVideoInfo info;
@@ -1500,7 +1535,9 @@
GST_DEBUG_OBJECT (src, "vfsrc negotiate");
- our_caps = gst_droidcamsrc_params_get_viewfinder_caps (src->dev->params);
+ our_caps =
+ gst_droidcamsrc_params_get_viewfinder_caps (src->dev->params,
+ src->dev->viewfinder_format);
GST_DEBUG_OBJECT (src, "our caps %" GST_PTR_FORMAT, our_caps);
if (!our_caps || gst_caps_is_empty (our_caps)) {
@@ -1559,8 +1596,12 @@
gst_droidcamsrc_params_set_string (src->dev->params, "preview-size", preview);
g_free (preview);
+ features = gst_caps_get_features (our_caps, 0);
+
g_rec_mutex_lock (&src->dev_lock);
- src->dev->use_raw_data = info.finfo->format == GST_VIDEO_FORMAT_NV21;
+ src->dev->use_raw_data =
+ !gst_caps_features_contains (features,
+ GST_CAPS_FEATURE_MEMORY_DROID_MEDIA_BUFFER);
g_rec_mutex_unlock (&src->dev_lock);
ret = TRUE;
@@ -1713,8 +1754,8 @@
vid = g_strdup_printf ("%ix%i", info.width, info.height);
gchar *key =
- src->dev->
- params->has_separate_video_size_values ? "video-size" : "preview-size";
+ src->dev->params->
+ has_separate_video_size_values ? "video-size" : "preview-size";
gst_droidcamsrc_params_set_string (src->dev->params, key, vid);
/* Now we need to find a picture size that is equal to our video size.
|
[-]
[+]
|
Changed |
_service:tar_git:gstreamer1.0-droid-0.20190805.0.tar.gz/gst/droidcamsrc/gstdroidcamsrcdev.c
^
|
@@ -73,7 +73,7 @@
void gst_droidcamsrc_dev_update_params_locked (GstDroidCamSrcDev * dev);
static void
gst_droidcamsrc_dev_prepare_buffer (GstDroidCamSrcDev * dev, GstBuffer * buffer,
- DroidMediaRect rect, int width, int height, GstVideoFormat format);
+ DroidMediaRect rect, GstVideoInfo * video_info);
static gboolean
gst_droidcamsrc_dev_start_video_recording_recorder_locked (GstDroidCamSrcDev *
dev);
@@ -273,6 +273,7 @@
GstDroidCamSrcDev *dev = (GstDroidCamSrcDev *) user;
GstDroidCamSrc *src = GST_DROIDCAMSRC (GST_PAD_PARENT (dev->imgsrc->pad));
GstDroidCamSrcPad *pad = dev->vfsrc;
+ GstVideoInfo video_info;
GstBuffer *buffer;
gsize width, height;
DroidMediaRect rect;
@@ -298,8 +299,9 @@
rect = src->crop_rect;
GST_OBJECT_UNLOCK (src);
- gst_droidcamsrc_dev_prepare_buffer (dev, buffer, rect, width, height,
- GST_VIDEO_FORMAT_NV21);
+ gst_video_info_set_format (&video_info, GST_VIDEO_FORMAT_NV21, width, height);
+
+ gst_droidcamsrc_dev_prepare_buffer (dev, buffer, rect, &video_info);
g_mutex_lock (&pad->lock);
g_queue_push_tail (pad->queue, buffer);
@@ -433,7 +435,6 @@
DroidMediaBuffer *buffer;
GstMemory *mem;
DroidMediaRect rect;
- guint width, height;
GstBuffer *buff;
DroidMediaBufferCallbacks cb;
GstFlowReturn flow_ret;
@@ -482,11 +483,9 @@
gst_droidcamsrc_timestamp (src, buff);
rect = droid_media_buffer_get_crop_rect (buffer);
- width = droid_media_buffer_get_width (buffer);
- height = droid_media_buffer_get_height (buffer);
- gst_droidcamsrc_dev_prepare_buffer (dev, buff, rect, width, height,
- GST_VIDEO_FORMAT_YV12);
+ gst_droidcamsrc_dev_prepare_buffer (dev, buff, rect,
+ gst_droid_media_buffer_get_video_info (mem));
g_mutex_lock (&pad->lock);
g_queue_push_tail (pad->queue, buff);
@@ -541,6 +540,8 @@
droid_media_camera_constants_init (&dev->c);
+ dev->viewfinder_format = GST_VIDEO_FORMAT_UNKNOWN;
+
return dev;
}
@@ -548,6 +549,10 @@
gst_droidcamsrc_dev_open (GstDroidCamSrcDev * dev, GstDroidCamSrcCamInfo * info)
{
GstDroidCamSrc *src;
+ DroidMediaColourFormatConstants constants;
+ int hal_format;
+
+ droid_media_colour_format_constants_init (&constants);
g_rec_mutex_lock (dev->lock);
@@ -565,6 +570,23 @@
return FALSE;
}
+ hal_format = droid_media_camera_get_video_color_format (dev->cam);
+
+ if (hal_format == constants.OMX_COLOR_FormatYUV420Planar) {
+ dev->viewfinder_format = GST_VIDEO_FORMAT_YV12;
+ } else if (hal_format == constants.OMX_COLOR_FormatYUV422SemiPlanar) {
+ dev->viewfinder_format = GST_VIDEO_FORMAT_NV16;
+ } else if (hal_format == constants.OMX_COLOR_FormatYUV420SemiPlanar) {
+ dev->viewfinder_format = GST_VIDEO_FORMAT_NV21;
+ } else if (hal_format == constants.OMX_COLOR_FormatYCbYCr) {
+ dev->viewfinder_format = GST_VIDEO_FORMAT_YUY2;
+ } else if (hal_format == constants.OMX_COLOR_Format16bitRGB565) {
+ dev->viewfinder_format = GST_VIDEO_FORMAT_RGB16;
+ } else {
+ GST_WARNING_OBJECT (src, "Unknown HAL color format 0x%x", hal_format);
+ dev->viewfinder_format = GST_VIDEO_FORMAT_ENCODED;
+ }
+
dev->queue = droid_media_camera_get_buffer_queue (dev->cam);
if (!droid_media_camera_lock (dev->cam)) {
@@ -1115,7 +1137,7 @@
static void
gst_droidcamsrc_dev_prepare_buffer (GstDroidCamSrcDev * dev, GstBuffer * buffer,
- DroidMediaRect rect, int width, int height, GstVideoFormat format)
+ DroidMediaRect rect, GstVideoInfo * video_info)
{
GstDroidCamSrc *src = GST_DROIDCAMSRC (GST_PAD_PARENT (dev->imgsrc->pad));
GstVideoCropMeta *crop;
@@ -1133,11 +1155,13 @@
gst_buffer_add_gst_buffer_orientation_meta (buffer,
dev->info->orientation, dev->info->direction);
- gst_buffer_add_video_meta (buffer, GST_VIDEO_FRAME_FLAG_NONE,
- format, width, height);
+ gst_buffer_add_video_meta_full (buffer, GST_VIDEO_FRAME_FLAG_NONE,
+ video_info->finfo->format, video_info->width, video_info->height,
+ video_info->finfo->n_planes, video_info->offset, video_info->stride);
GST_LOG_OBJECT (src, "preview info: w=%d, h=%d, crop: x=%d, y=%d, w=%d, h=%d",
- width, height, crop->x, crop->y, crop->width, crop->height);
+ video_info->width, video_info->height, crop->x, crop->y, crop->width,
+ crop->height);
}
static gboolean
|
[-]
[+]
|
Changed |
_service:tar_git:gstreamer1.0-droid-0.20190805.0.tar.gz/gst/droidcamsrc/gstdroidcamsrcdev.h
^
|
@@ -54,6 +54,7 @@
GstDroidCamSrcVideoCaptureState *vid;
GstBufferPool *pool;
DroidMediaCameraConstants c;
+ GstVideoFormat viewfinder_format;
gboolean use_recorder;
GstDroidCamSrcRecorder *recorder;
|
[-]
[+]
|
Changed |
_service:tar_git:gstreamer1.0-droid-0.20190805.0.tar.gz/gst/droidcamsrc/gstdroidcamsrcparams.c
^
|
@@ -375,7 +375,8 @@
}
GstCaps *
-gst_droidcamsrc_params_get_viewfinder_caps (GstDroidCamSrcParams * params)
+gst_droidcamsrc_params_get_viewfinder_caps (GstDroidCamSrcParams * params,
+ GstVideoFormat format)
{
GstCaps *caps;
@@ -383,7 +384,8 @@
caps =
gst_caps_merge (gst_droidcamsrc_params_get_caps_locked (params,
"preview-size-values", "video/x-raw",
- GST_CAPS_FEATURE_MEMORY_DROID_MEDIA_BUFFER, "YV12"),
+ GST_CAPS_FEATURE_MEMORY_DROID_MEDIA_BUFFER,
+ gst_video_format_to_string (format)),
gst_droidcamsrc_params_get_caps_locked (params, "preview-size-values",
"video/x-raw", NULL, "NV21"));
g_mutex_unlock (¶ms->lock);
|
[-]
[+]
|
Changed |
_service:tar_git:gstreamer1.0-droid-0.20190805.0.tar.gz/gst/droidcamsrc/gstdroidcamsrcparams.h
^
|
@@ -22,6 +22,7 @@
#define __GST_DROIDCAMSRC_PARAMS_H__
#include <gst/gst.h>
+#include <gst/video/video.h>
G_BEGIN_DECLS
@@ -44,7 +45,7 @@
gchar *gst_droidcamsrc_params_to_string (GstDroidCamSrcParams *params);
gboolean gst_droidcamsrc_params_is_dirty (GstDroidCamSrcParams *params);
-GstCaps *gst_droidcamsrc_params_get_viewfinder_caps (GstDroidCamSrcParams *params);
+GstCaps *gst_droidcamsrc_params_get_viewfinder_caps (GstDroidCamSrcParams *params, GstVideoFormat format);
GstCaps *gst_droidcamsrc_params_get_video_caps (GstDroidCamSrcParams *params);
GstCaps *gst_droidcamsrc_params_get_image_caps (GstDroidCamSrcParams *params);
|
[-]
[+]
|
Changed |
_service:tar_git:gstreamer1.0-droid-0.20190805.0.tar.gz/gst/droidcamsrc/gstdroidcamsrcphotography.c
^
|
@@ -147,7 +147,8 @@
{GST_PHOTOGRAPHY_SCENE_MODE_LANDSCAPE, "landscape"},
{GST_PHOTOGRAPHY_SCENE_MODE_SPORT, "sports"},
{GST_PHOTOGRAPHY_SCENE_MODE_NIGHT, "night"},
- {GST_PHOTOGRAPHY_SCENE_MODE_AUTO, "auto"},
+ {GST_PHOTOGRAPHY_SCENE_MODE_MANUAL, "auto"},
+ {GST_PHOTOGRAPHY_SCENE_MODE_AUTO, "asd"},
{GST_PHOTOGRAPHY_SCENE_MODE_ACTION, "action"},
{GST_PHOTOGRAPHY_SCENE_MODE_NIGHT_PORTRAIT, "night-portrait"},
{GST_PHOTOGRAPHY_SCENE_MODE_THEATRE, "theatre"},
@@ -158,7 +159,11 @@
{GST_PHOTOGRAPHY_SCENE_MODE_FIREWORKS, "fireworks"},
{GST_PHOTOGRAPHY_SCENE_MODE_PARTY, "party"},
{GST_PHOTOGRAPHY_SCENE_MODE_CANDLELIGHT, "candlelight"},
- {GST_PHOTOGRAPHY_SCENE_MODE_BARCODE, "barcode"}
+ {GST_PHOTOGRAPHY_SCENE_MODE_BARCODE, "barcode"},
+ {GST_PHOTOGRAPHY_SCENE_MODE_BACKLIGHT, "backlight"},
+ {GST_PHOTOGRAPHY_SCENE_MODE_FLOWERS, "flowers"},
+ {GST_PHOTOGRAPHY_SCENE_MODE_AR, "AR"},
+ {GST_PHOTOGRAPHY_SCENE_MODE_HDR, "hdr"}
};
struct DataEntry ColourToneValues[] = {
@@ -175,6 +180,9 @@
{GST_PHOTOGRAPHY_COLOR_TONE_MODE_WHITEBOARD, "whiteboard"},
{GST_PHOTOGRAPHY_COLOR_TONE_MODE_BLACKBOARD, "blackboard"},
{GST_PHOTOGRAPHY_COLOR_TONE_MODE_AQUA, "aqua"},
+ {GST_PHOTOGRAPHY_COLOR_TONE_MODE_EMBOSS, "emboss"},
+ {GST_PHOTOGRAPHY_COLOR_TONE_MODE_SKETCH, "sketch"},
+ {GST_PHOTOGRAPHY_COLOR_TONE_MODE_NEON, "neon"}
};
struct DataEntry FlickerValues[] = {
@@ -319,6 +327,31 @@
capture_caps, user_data);
}
+GVariant *
+gst_droid_camsrc_glist_to_array (GList * list)
+{
+ int len = g_list_length (list);
+
+ if (len == 0) {
+ return 0;
+ }
+
+ GVariant *modes;
+ GVariantBuilder *builder;
+ builder = g_variant_builder_new (G_VARIANT_TYPE ("ai"));
+
+ struct DataEntry *entry;
+ GList *l;
+ for (l = list; l != NULL; l = l->next) {
+ entry = l->data;
+ g_variant_builder_add (builder, "i", entry->key);
+ }
+
+ modes = g_variant_new ("ai", builder);
+ g_variant_builder_unref (builder);
+ return modes;
+}
+
static void
gst_droidcamsrc_photography_set_autofocus (GstPhotography * photo, gboolean on)
{
@@ -599,6 +632,53 @@
{
/* not supported */
}
+
+ return TRUE;
+
+ case PROP_SUPPORTED_WB_MODES:
+ {
+ GVariant *wb_modes = gst_droid_camsrc_glist_to_array (src->photo->wb);
+ g_value_set_variant (value, wb_modes);
+ }
+ return TRUE;
+
+ case PROP_SUPPORTED_COLOR_TONES:
+ {
+ GVariant *effects =
+ gst_droid_camsrc_glist_to_array (src->photo->color_tone);
+ g_value_set_variant (value, effects);
+ }
+ return TRUE;
+
+ case PROP_SUPPORTED_SCENE_MODES:
+ {
+ GVariant *exposure_modes =
+ gst_droid_camsrc_glist_to_array (src->photo->scene);
+ g_value_set_variant (value, exposure_modes);
+ }
+ return TRUE;
+
+ case PROP_SUPPORTED_FLASH_MODES:
+ {
+ GVariant *flash_modes =
+ gst_droid_camsrc_glist_to_array (src->photo->flash);
+ g_value_set_variant (value, flash_modes);
+ }
+ return TRUE;
+
+ case PROP_SUPPORTED_FOCUS_MODES:
+ {
+ GVariant *focus_modes =
+ gst_droid_camsrc_glist_to_array (src->photo->focus);
+ g_value_set_variant (value, focus_modes);
+ }
+ return TRUE;
+
+ case PROP_SUPPORTED_ISO_SPEEDS:
+ {
+ GVariant *iso_modes = gst_droid_camsrc_glist_to_array (src->photo->iso);
+ g_value_set_variant (value, iso_modes);
+ }
return TRUE;
}
@@ -716,7 +796,7 @@
src->photo = g_slice_new0 (GstDroidCamSrcPhotography);
src->photo->settings.wb_mode = GST_PHOTOGRAPHY_WB_MODE_AUTO;
src->photo->settings.tone_mode = GST_PHOTOGRAPHY_COLOR_TONE_MODE_NORMAL;
- src->photo->settings.scene_mode = GST_PHOTOGRAPHY_SCENE_MODE_AUTO;
+ src->photo->settings.scene_mode = GST_PHOTOGRAPHY_SCENE_MODE_MANUAL;
src->photo->settings.flash_mode = GST_PHOTOGRAPHY_FLASH_MODE_AUTO;
src->photo->settings.ev_compensation = 0.0;
src->photo->settings.iso_speed = 0;
|
[-]
[+]
|
Changed |
_service:tar_git:gstreamer1.0-droid-0.20190805.0.tar.gz/gst/droidcamsrc/gstdroidcamsrcphotography.h
^
|
@@ -47,6 +47,12 @@
PROP_SENSOR_ORIENTATION,
PROP_SENSOR_MOUNT_ANGLE,
PROP_TARGET_BITRATE,
+ PROP_SUPPORTED_WB_MODES,
+ PROP_SUPPORTED_COLOR_TONES,
+ PROP_SUPPORTED_SCENE_MODES,
+ PROP_SUPPORTED_FLASH_MODES,
+ PROP_SUPPORTED_FOCUS_MODES,
+ PROP_SUPPORTED_ISO_SPEEDS,
/* photography interface */
PROP_WB_MODE,
@@ -70,7 +76,7 @@
PROP_MIN_EXPOSURE_TIME,
PROP_MAX_EXPOSURE_TIME,
PROP_NOISE_REDUCTION,
- PROP_EXPOSURE_MODE,
+ PROP_EXPOSURE_MODE
} GstDroidCamSrcProperties;
void gst_droidcamsrc_photography_register (gpointer g_iface, gpointer iface_data);
|
[-]
[+]
|
Changed |
_service:tar_git:gstreamer1.0-droid-0.20190805.0.tar.gz/gst/droidcodec/gstdroidvdec.c
^
|
@@ -45,12 +45,24 @@
GST_DEBUG_CATEGORY_EXTERN (gst_droid_vdec_debug);
#define GST_CAT_DEFAULT gst_droid_vdec_debug
+typedef struct
+{
+ int *hal_format;
+ GstVideoFormat gst_format;
+ GstDroidVideoConvertToI420 convert_to_i420;
+ gsize bytes_per_pixel;
+ gsize h_align;
+ gsize v_align;
+
+} GstDroidVideoFormatMap;
+
static GstStaticPadTemplate gst_droidvdec_src_template_factory =
GST_STATIC_PAD_TEMPLATE (GST_VIDEO_DECODER_SRC_NAME,
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
- (GST_CAPS_FEATURE_MEMORY_DROID_MEDIA_BUFFER, "{YV12}") ";"
+ (GST_CAPS_FEATURE_MEMORY_DROID_MEDIA_BUFFER,
+ GST_DROID_MEDIA_BUFFER_MEMORY_VIDEO_FORMATS) ";"
GST_VIDEO_CAPS_MAKE ("I420")));
static gboolean gst_droidvdec_configure_state (GstVideoDecoder * decoder,
@@ -89,6 +101,179 @@
gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (GST_VIDEO_DECODER (dec)));
}
+
+static void
+gst_droidvec_copy_plane (guint8 * out, gint stride_out, guint8 * in,
+ gint stride_in, gint width, gint height)
+{
+ int i;
+ for (i = 0; i < height; i++) {
+ orc_memcpy (out, in, width);
+ out += stride_out;
+ in += stride_in;
+ }
+}
+
+static void
+gst_droidvec_copy_packed_planes (guint8 * out0, guint8 * out1, gint stride_out,
+ guint8 * in, gint stride_in, gint width, gint height)
+{
+ int x, y;
+ for (y = 0; y < height; y++) {
+ guint8 *row = in;
+ for (x = 0; x < width; x++) {
+ out0[x] = row[0];
+ out1[x] = row[1];
+ row += 2;
+ }
+
+ out0 += stride_out;
+ out1 += stride_out;
+ in += stride_in;
+ }
+}
+
+#define ALIGN_SIZE(size, to) (((size) + to - 1) & ~(to - 1))
+
+static gboolean
+gst_droidvdec_convert_native_to_i420 (GstDroidVDec * dec, GstMapInfo * out,
+ DroidMediaData * in, GstVideoInfo * info, gsize width, gsize height)
+{
+ gsize size = width * height * 3 / 2;
+ gboolean use_external_buffer = out->size != size;
+ guint8 *data = NULL;
+ gboolean ret = TRUE;
+
+ if (use_external_buffer) {
+ GST_DEBUG_OBJECT (dec, "using an external buffer for I420 conversion.");
+ data = g_malloc (size);
+ } else {
+ data = out->data;
+ }
+
+ if (droid_media_convert_to_i420 (dec->convert, in, data) != true) {
+ GST_ELEMENT_ERROR (dec, LIBRARY, FAILED, (NULL),
+ ("failed to convert frame"));
+
+ ret = FALSE;
+ } else if (use_external_buffer) {
+ /* fix up the buffer */
+ /* Code is based on gst-colorconv qcom backend */
+
+ gint stride = GST_VIDEO_INFO_COMP_STRIDE (info, 0);
+ gint strideUV = GST_VIDEO_INFO_COMP_STRIDE (info, 1);
+ guint8 *p = data;
+ guint8 *dst = out->data;
+ int i;
+ int x;
+
+ /* Y */
+ for (i = 0; i < info->height; i++) {
+ orc_memcpy (dst, p, info->width);
+ dst += stride;
+ p += width;
+ }
+
+ /* NOP if height == info->height */
+ p += (height - info->height) * width;
+ /* U and V */
+ for (x = 0; x < 2; x++) {
+ for (i = 0; i < info->height / 2; i++) {
+ orc_memcpy (dst, p, info->width / 2);
+ dst += strideUV;
+ p += width / 2;
+ }
+
+ /* NOP if height == info->height */
+ p += (height - info->height) / 2 * width / 2;
+ }
+ }
+
+ if (use_external_buffer && data) {
+ g_free (data);
+ }
+
+ return ret;
+}
+
+static gboolean
+gst_droidvdec_convert_yuv420_planar_to_i420 (GstDroidVDec * dec,
+ GstMapInfo * out, DroidMediaData * in, GstVideoInfo * info, gsize width,
+ gsize height)
+{
+ /* Buffer is already I420, so we can copy it straight over */
+ /* though we need to handle the cropping */
+
+ GST_DEBUG_OBJECT (dec, "Copying I420 buffer");
+ gint top = dec->crop_rect.top;
+ gint left = dec->crop_rect.left;
+ gint crop_width = dec->crop_rect.right - left;
+ gint crop_height = dec->crop_rect.bottom - top;
+
+ guint8 *y = in->data + (top * width) + left;
+ guint8 *u = in->data + (width * height) + (top * width / 2) + (left / 2);
+ guint8 *v =
+ in->data + (width * height) + (width * height / 4) +
+ (top * width / 2) + (left / 2);
+
+ gst_droidvec_copy_plane (out->data + info->offset[0],
+ info->stride[0], y, width, crop_width, crop_height);
+ gst_droidvec_copy_plane (out->data + info->offset[1],
+ info->stride[1], u, width / 2, crop_width / 2, crop_height / 2);
+ gst_droidvec_copy_plane (out->data + info->offset[2],
+ info->stride[2], v, width / 2, crop_width / 2, crop_height / 2);
+
+ return TRUE;
+}
+
+static gboolean
+gst_droidvdec_convert_yuv420_semi_planar_to_i420 (GstDroidVDec * dec,
+ GstMapInfo * out, DroidMediaData * in, GstVideoInfo * info, gsize width,
+ gsize height)
+{
+ GST_DEBUG_OBJECT (dec, "Converting from OMX_COLOR_FormatYUV420SemiPlanar");
+ gint stride = width;
+ gint slice_height = ALIGN_SIZE (height, 16);
+ gint top = dec->crop_rect.top;
+ gint left = dec->crop_rect.left;
+
+ guint8 *y = in->data + (top * stride) + left;
+ guint8 *uv = in->data + (stride * slice_height) + (top * stride / 2) + left;
+
+ gst_droidvec_copy_plane (out->data + info->offset[0],
+ info->stride[0], y, stride, info->width, info->height);
+ gst_droidvec_copy_packed_planes (out->data + info->offset[1],
+ out->data + info->offset[2], info->stride[1], uv, stride,
+ info->width / 2, info->height / 2);
+
+ return TRUE;
+}
+
+static gboolean
+gst_droidvdec_convert_yuv420_packed_semi_planar_to_i420 (GstDroidVDec * dec,
+ GstMapInfo * out, DroidMediaData * in, GstVideoInfo * info, gsize width,
+ gsize height)
+{
+ /* copy to the output buffer swapping the u and v planes and cropping if necessary */
+ /* NV12 format with 128 byte alignment */
+ GST_DEBUG_OBJECT (dec, "Converting from qcom NV12 semi planar");
+ gint stride = ALIGN_SIZE (width, 128);
+ gint slice_height = ALIGN_SIZE (height, 32);
+ gint top = ALIGN_SIZE (dec->crop_rect.top, 2);
+ gint left = ALIGN_SIZE (dec->crop_rect.left, 2);
+
+ guint8 *y = in->data + (top * stride) + left;
+ guint8 *uv = in->data + (stride * slice_height) + (top * stride / 2) + left;
+
+ gst_droidvec_copy_plane (out->data + info->offset[0],
+ info->stride[0], y, stride, info->width, info->height);
+ gst_droidvec_copy_packed_planes (out->data + info->offset[1],
+ out->data + info->offset[2], info->stride[1], uv, stride,
+ info->width / 2, info->height / 2);
+
|
[-]
[+]
|
Changed |
_service:tar_git:gstreamer1.0-droid-0.20190805.0.tar.gz/gst/droidcodec/gstdroidvdec.h
^
|
@@ -44,6 +44,10 @@
typedef struct _GstDroidVDecClass GstDroidVDecClass;
typedef enum _GstDroidVDecState GstDroidVDecState;
+typedef gboolean (*GstDroidVideoConvertToI420) (GstDroidVDec * dec,
+ GstMapInfo * out, DroidMediaData * in, GstVideoInfo * info, gsize width,
+ gsize height);
+
enum _GstDroidVDecState
{
GST_DROID_VDEC_STATE_OK,
@@ -73,14 +77,19 @@
gboolean dirty;
DroidMediaRect crop_rect;
gboolean running;
+ gboolean use_hardware_buffers;
GstVideoFormat format;
gsize codec_reported_height;
gsize codec_reported_width;
+ gsize bytes_per_pixel;
+ gsize v_align;
+ gsize h_align;
GstVideoCodecState *in_state;
GstVideoCodecState *out_state;
DroidMediaConvert *convert;
+ GstDroidVideoConvertToI420 convert_to_i420;
gint32 hal_format;
};
|
[-]
[+]
|
Changed |
_service:tar_git:gstreamer1.0-droid-0.20190805.0.tar.gz/gst/droideglsink/gstdroideglsink.c
^
|
@@ -43,9 +43,10 @@
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("{YV12, NV21}") "; "
- GST_VIDEO_CAPS_MAKE_WITH_FEATURES
- (GST_CAPS_FEATURE_MEMORY_DROID_MEDIA_BUFFER, "{YV12}")));
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
+ (GST_CAPS_FEATURE_MEMORY_DROID_MEDIA_BUFFER,
+ GST_DROID_MEDIA_BUFFER_MEMORY_VIDEO_FORMATS) "; "
+ GST_VIDEO_CAPS_MAKE ("{YV12, NV21}")));
enum
{
|
[-]
[+]
|
Changed |
_service:tar_git:gstreamer1.0-droid-0.20190805.0.tar.gz/tools/gstdroidcamsrcconf.c
^
|
@@ -84,13 +84,13 @@
{NULL, -1}
}},
{"scene-mode-values", "scene-mode", {
- ADD_ENTRY (GST_PHOTOGRAPHY_SCENE_MODE_MANUAL, NULL),
+ ADD_ENTRY (GST_PHOTOGRAPHY_SCENE_MODE_MANUAL, "auto"),
ADD_ENTRY (GST_PHOTOGRAPHY_SCENE_MODE_CLOSEUP, NULL),
ADD_ENTRY (GST_PHOTOGRAPHY_SCENE_MODE_PORTRAIT, "portrait"),
ADD_ENTRY (GST_PHOTOGRAPHY_SCENE_MODE_LANDSCAPE, "landscape"),
ADD_ENTRY (GST_PHOTOGRAPHY_SCENE_MODE_SPORT, "sports"),
ADD_ENTRY (GST_PHOTOGRAPHY_SCENE_MODE_NIGHT, "night"),
- ADD_ENTRY (GST_PHOTOGRAPHY_SCENE_MODE_AUTO, "auto"),
+ ADD_ENTRY (GST_PHOTOGRAPHY_SCENE_MODE_AUTO, "asd"),
ADD_ENTRY (GST_PHOTOGRAPHY_SCENE_MODE_ACTION, "action"),
ADD_ENTRY (GST_PHOTOGRAPHY_SCENE_MODE_NIGHT_PORTRAIT, "night-portrait"),
ADD_ENTRY (GST_PHOTOGRAPHY_SCENE_MODE_THEATRE, "theatre"),
@@ -102,6 +102,10 @@
ADD_ENTRY (GST_PHOTOGRAPHY_SCENE_MODE_PARTY, "party"),
ADD_ENTRY (GST_PHOTOGRAPHY_SCENE_MODE_CANDLELIGHT, "candlelight"),
ADD_ENTRY (GST_PHOTOGRAPHY_SCENE_MODE_BARCODE, "barcode"),
+ ADD_ENTRY (GST_PHOTOGRAPHY_SCENE_MODE_BACKLIGHT, "backlight"),
+ ADD_ENTRY (GST_PHOTOGRAPHY_SCENE_MODE_FLOWERS, "flowers"),
+ ADD_ENTRY (GST_PHOTOGRAPHY_SCENE_MODE_AR, "AR"),
+ ADD_ENTRY (GST_PHOTOGRAPHY_SCENE_MODE_HDR, "hdr"),
{NULL, -1}
}},
{"effect-values", "color-tone-mode", {
@@ -121,6 +125,9 @@
ADD_ENTRY (GST_PHOTOGRAPHY_COLOR_TONE_MODE_WHITEBOARD, "whiteboard"),
ADD_ENTRY (GST_PHOTOGRAPHY_COLOR_TONE_MODE_BLACKBOARD, "blackboard"),
ADD_ENTRY (GST_PHOTOGRAPHY_COLOR_TONE_MODE_AQUA, "aqua"),
+ ADD_ENTRY (GST_PHOTOGRAPHY_COLOR_TONE_MODE_EMBOSS, "emboss"),
+ ADD_ENTRY (GST_PHOTOGRAPHY_COLOR_TONE_MODE_SKETCH, "sketch"),
+ ADD_ENTRY (GST_PHOTOGRAPHY_COLOR_TONE_MODE_NEON, "neon"),
{NULL, -1}
}},
// Qualcomm ISO values (e.g. ISO100) and Intel (iso-100)
|