#define _MMCAMCORDER_NANOSEC_PER_1MILISEC 1000
#define _MMCAMCORDER_SIGNAL_REQUEST_CODEC_CONFIG "request-codec-config"
#define _MMCAMCORDER_CROP_ARRAY_LENGTH 4
+#define META_TIMESTAMP_FIELD_LENGTH 6
/*-----------------------------------------------------------------------
static gboolean __mmcamcorder_set_stream_data(MMCamcorderVideoStreamDataType *stream, GstBuffer *buffer, GstMapInfo *map_info);
static gboolean __mmcamcorder_set_stream_data_zero_copy(MMCamcorderVideoStreamDataType *stream, GstBuffer *buffer, GstMemory *memory);
static const char *__mmcamcorder_get_parser_name(MMPixelFormatType format);
+static gboolean __mmcamcorder_frame_meta_foreach_func(GQuark field_id, const GValue *value, gpointer user_data);
/*=======================================================================================
| FUNCTION DEFINITIONS |
}
+static gboolean __mmcamcorder_frame_meta_foreach_func(GQuark field_id, const GValue *value, gpointer user_data)
+{
+ MMCamcorderVideoStreamDataType *stream = (MMCamcorderVideoStreamDataType *)user_data;
+ const char *field_name = g_quark_to_string(field_id);
+ guint64 field_value = g_value_get_uint64(value);
+
+ if (!stream || !field_name) {
+ MMCAM_LOG_WARNING("invalid ptr[%p, %p]", stream, field_name);
+ return TRUE;
+ }
+
+ if (!strncmp("ts_soe", field_name, META_TIMESTAMP_FIELD_LENGTH)) {
+ stream->ts_soe = field_value;
+ MMCAM_LOG_VERBOSE("[TS] SOE -> %llu", stream->ts_soe);
+ } else if (!strncmp("ts_eoe", field_name, META_TIMESTAMP_FIELD_LENGTH)) {
+ stream->ts_eoe = field_value;
+ MMCAM_LOG_VERBOSE("[TS] EOE -> %llu", stream->ts_eoe);
+ } else if (!strncmp("ts_sof", field_name, META_TIMESTAMP_FIELD_LENGTH)) {
+ stream->ts_sof = field_value;
+ MMCAM_LOG_VERBOSE("[TS] SOF -> %llu", stream->ts_sof);
+ } else if (!strncmp("ts_eof", field_name, META_TIMESTAMP_FIELD_LENGTH)) {
+ stream->ts_eof = field_value;
+ MMCAM_LOG_VERBOSE("[TS] EOF -> %llu", stream->ts_eof);
+ } else if (!strncmp("ts_hal", field_name, META_TIMESTAMP_FIELD_LENGTH)) {
+ stream->ts_hal = field_value;
+ MMCAM_LOG_VERBOSE("[TS] HAL -> %llu", stream->ts_hal);
+ } else if (!strncmp("ts_qmf", field_name, META_TIMESTAMP_FIELD_LENGTH)) {
+ stream->ts_qmf = field_value;
+ MMCAM_LOG_VERBOSE("[TS] QMF -> %llu", stream->ts_qmf);
+ } else if (!strncmp("ts_gst", field_name, META_TIMESTAMP_FIELD_LENGTH)) {
+ stream->ts_gst = field_value;
+ MMCAM_LOG_VERBOSE("[TS] GST -> %llu", stream->ts_gst);
+ } else if (!strncmp("td_exp", field_name, META_TIMESTAMP_FIELD_LENGTH)) {
+ stream->td_exp = field_value;
+ MMCAM_LOG_VERBOSE("[TD] EXP -> %llu", stream->td_exp);
+ } else if (!strncmp("ts_aux", field_name, META_TIMESTAMP_FIELD_LENGTH)) {
+ stream->ts_aux = field_value;
+ MMCAM_LOG_VERBOSE("[TS] AUX -> %llu", stream->ts_aux);
+ } else if (!strncmp("td_aux", field_name, META_TIMESTAMP_FIELD_LENGTH)) {
+ stream->td_aux = field_value;
+ MMCAM_LOG_VERBOSE("[TD] AUX -> %llu", stream->td_aux);
+ }
+
+ return TRUE;
+}
+
+
int _mmcamcorder_request_codec_config(GstElement *videosrc_element)
{
if (!videosrc_element || !G_TYPE_CHECK_INSTANCE(videosrc_element)) {
GstMapInfo map_info;
GstCaps *caps = NULL;
GstStructure *structure = NULL;
+ GstProtectionMeta *p_meta = NULL;
mmf_return_val_if_fail(hcamcorder, FALSE);
goto _INVOKE_VIDEO_STREAM_CB_DONE;
}
+ p_meta = gst_buffer_get_protection_meta(buffer);
+ if (p_meta)
+ gst_structure_foreach(p_meta->info, __mmcamcorder_frame_meta_foreach_func, &stream);
+
MMCAM_LOG_DEBUG("VideoStreamData : format[%d], resolution[%dx%d], stream_id[%d]",
stream.format, stream.width, stream.height, stream_id);