Release version 0.10.22 52/55652/1 accepted/tizen/mobile/20151228.233206 accepted/tizen/tv/20151228.232141 accepted/tizen/wearable/20151228.231432 submit/tizen/20151228.105332
authorJeongmo Yang <jm80.yang@samsung.com>
Mon, 28 Dec 2015 10:22:06 +0000 (19:22 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Mon, 28 Dec 2015 10:22:06 +0000 (19:22 +0900)
1. Add T-trace check point
2. Support H.264 format preview callback

Change-Id: I0f1dbbeeac3453e99d80d703a65ac899b1262744
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
configure.ac
packaging/libmm-camcorder.spec
src/Makefile.am
src/include/mm_camcorder_internal.h
src/mm_camcorder.c
src/mm_camcorder_gstcommon.c
src/mm_camcorder_internal.c
src/mm_camcorder_stillshot.c

index 9d355de..fc70d0f 100644 (file)
@@ -114,6 +114,10 @@ PKG_CHECK_MODULES(STORAGE, storage)
 AC_SUBST(STORAGE_CFLAGS)
 AC_SUBST(STORAGE_LIBS)
 
+PKG_CHECK_MODULES(TTRACE, ttrace)
+AC_SUBST(TTRACE_CFLAGS)
+AC_SUBST(TTRACE_LIBS)
+
 # Checks for header files.
 AC_HEADER_STDC
 AC_CHECK_HEADERS([fcntl.h memory.h stdlib.h string.h sys/time.h unistd.h])
index f4bd03b..21c730a 100644 (file)
@@ -2,7 +2,7 @@
 
 Name:       libmm-camcorder
 Summary:    Camera and recorder library
-Version:    0.10.21
+Version:    0.10.22
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
@@ -32,6 +32,7 @@ BuildRequires:  pkgconfig(libtbm)
 BuildRequires:  pkgconfig(storage)
 BuildRequires:  pkgconfig(murphy-resource)
 BuildRequires:  pkgconfig(murphy-glib)
+BuildRequires:  pkgconfig(ttrace)
 
 %description
 Camera and recorder function supported library.
index 810a962..931c738 100644 (file)
@@ -52,6 +52,7 @@ libmmfcamcorder_la_CFLAGS = -I$(srcdir)/include \
                             $(STORAGE_CFLAGS) \
                             $(MURPHY_RESOURCE_CFLAGS) \
                             $(MURPHY_GLIB_CFLAGS) \
+                            $(TTRACE_CFLAGS) \
                             $(SYSTEMINFO_CFLAGS)
 
 libmmfcamcorder_la_LIBADD = \
@@ -71,6 +72,7 @@ libmmfcamcorder_la_LIBADD = \
                            $(TBM_LIBS) \
                            $(MURPHY_RESOURCE_LIBS) \
                            $(MURPHY_GLIB_LIBS) \
+                           $(TTRACE_LIBS) \
                            $(STORAGE_LIBS)
 
 libmmfcamcorder_la_CFLAGS += -DMMF_LOG_OWNER=0x010 -D_FILE_OFFSET_BITS=64
index 249c71c..a5c32fc 100644 (file)
@@ -39,6 +39,7 @@
 #include <sndfile.h>
 #include <vconf.h>
 #include <gst/video/video-format.h>
+#include <ttrace.h>
 
 #include "mm_camcorder.h"
 #include "mm_debug.h"
@@ -134,7 +135,9 @@ extern "C" {
                _mmcam_dbg_err("The element is existed. element_id=[%d], name=[%s]", eid, name); \
                gst_object_unref(element[eid].gst); \
        } \
+       traceBegin(TTRACE_TAG_CAMERA, "MMCAMCORDER:ELEMENT_MAKE:%s", name); \
        element[eid].gst = gst_element_factory_make(name, nickname); \
+       traceEnd(TTRACE_TAG_CAMERA); \
        if (element[eid].gst == NULL) { \
                _mmcam_dbg_err("Element creation fail. element_id=[%d], name=[%s]", eid, name); \
                err = MM_ERROR_CAMCORDER_RESOURCE_CREATION; \
index bcb324f..34bad5e 100644 (file)
@@ -47,8 +47,12 @@ int mm_camcorder_create(MMHandleType *camcorder, MMCamPreset *info)
 
        _mmcam_dbg_err("");
 
+       traceBegin(TTRACE_TAG_CAMERA, "MMCAMCORDER:CREATE");
+
        error = _mmcamcorder_create(camcorder, info);
 
+       traceEnd(TTRACE_TAG_CAMERA);
+
        _mmcam_dbg_err("END");
 
        return error;
@@ -63,8 +67,12 @@ int mm_camcorder_destroy(MMHandleType camcorder)
 
        _mmcam_dbg_err("");
 
+       traceBegin(TTRACE_TAG_CAMERA, "MMCAMCORDER:DESTROY");
+
        error = _mmcamcorder_destroy(camcorder);
 
+       traceEnd(TTRACE_TAG_CAMERA);
+
        _mmcam_dbg_err("END!!!");
 
        return error;
@@ -81,8 +89,12 @@ int mm_camcorder_realize(MMHandleType camcorder)
 
        _MMCAMCORDER_LOCK_ASM(camcorder);
 
+       traceBegin(TTRACE_TAG_CAMERA, "MMCAMCORDER:REALIZE");
+
        error = _mmcamcorder_realize(camcorder);
 
+       traceEnd(TTRACE_TAG_CAMERA);
+
        _MMCAMCORDER_UNLOCK_ASM(camcorder);
 
        _mmcam_dbg_err("END");
@@ -101,8 +113,12 @@ int mm_camcorder_unrealize(MMHandleType camcorder)
 
        _MMCAMCORDER_LOCK_ASM(camcorder);
 
+       traceBegin(TTRACE_TAG_CAMERA, "MMCAMCORDER:UNREALIZE");
+
        error = _mmcamcorder_unrealize(camcorder);
 
+       traceEnd(TTRACE_TAG_CAMERA);
+
        _MMCAMCORDER_UNLOCK_ASM(camcorder);
 
        _mmcam_dbg_err("END");
@@ -121,8 +137,12 @@ int mm_camcorder_start(MMHandleType camcorder)
 
        _MMCAMCORDER_LOCK_ASM(camcorder);
 
+       traceBegin(TTRACE_TAG_CAMERA, "MMCAMCORDER:START");
+
        error = _mmcamcorder_start(camcorder);
 
+       traceEnd(TTRACE_TAG_CAMERA);
+
        _MMCAMCORDER_UNLOCK_ASM(camcorder);
 
        _mmcam_dbg_err("END");
@@ -141,8 +161,12 @@ int mm_camcorder_stop(MMHandleType camcorder)
 
        _MMCAMCORDER_LOCK_ASM(camcorder);
 
+       traceBegin(TTRACE_TAG_CAMERA, "MMCAMCORDER:STOP");
+
        error = _mmcamcorder_stop(camcorder);
 
+       traceEnd(TTRACE_TAG_CAMERA);
+
        _MMCAMCORDER_UNLOCK_ASM(camcorder);
 
        _mmcam_dbg_err("END");
index 59207ed..9479302 100644 (file)
@@ -1485,16 +1485,19 @@ static GstPadProbeReturn __mmcamcorder_video_dataprobe_preview(GstPad *pad, GstP
                structure = gst_caps_get_structure( caps, 0 );
                gst_structure_get_int(structure, "width", &(stream.width));
                gst_structure_get_int(structure, "height", &(stream.height));
-               string_format = gst_structure_get_string(structure, "format");
-               if (string_format == NULL) {
-                       gst_caps_unref(caps);
-                       caps = NULL;
-                       _mmcam_dbg_warn("get string error!!");
-                       return GST_PAD_PROBE_OK;
+               if (sc->info_image->preview_format == MM_PIXEL_FORMAT_ENCODED_H264) {
+                       stream.format = MM_PIXEL_FORMAT_ENCODED_H264;
+               } else {
+                       string_format = gst_structure_get_string(structure, "format");
+                       if (string_format == NULL) {
+                               gst_caps_unref(caps);
+                               caps = NULL;
+                               _mmcam_dbg_warn("get string error!!");
+                               return GST_PAD_PROBE_OK;
+                       }
+                       fourcc = _mmcamcorder_convert_fourcc_string_to_value(string_format);
+                       stream.format = _mmcamcorder_get_pixtype(fourcc);
                }
-
-               fourcc = _mmcamcorder_convert_fourcc_string_to_value(string_format);
-               stream.format = _mmcamcorder_get_pixtype(fourcc);
                gst_caps_unref(caps);
                caps = NULL;
 
@@ -1602,6 +1605,13 @@ static GstPadProbeReturn __mmcamcorder_video_dataprobe_preview(GstPad *pad, GstP
                                stream.data_type = MM_CAM_STREAM_DATA_YUV422;
                                stream.data.yuv422.yuv = mapinfo.data;
                                stream.data.yuv422.length_yuv = stream.length_total;
+                       } else if (stream.format == MM_PIXEL_FORMAT_ENCODED_H264) {
+                                       stream.data_type = MM_CAM_STREAM_DATA_ENCODED;
+                                       stream.data.encoded.data = mapinfo.data;
+                                       stream.data.encoded.length_data = stream.length_total;
+                                       _mmcam_dbg_log("H264[num_planes:%d] [0]p:0x%x,size:%d",
+                                               fourcc, fourcc>>8, fourcc>>16, fourcc>>24, stream.num_planes,
+                                               stream.data.encoded.data, stream.data.encoded.length_data);
                        } else {
                                stream.data_type = MM_CAM_STREAM_DATA_YUV420;
                                stream.data.yuv420.yuv = mapinfo.data;
index 48944e3..b8adb7e 100644 (file)
@@ -508,10 +508,15 @@ int _mmcamcorder_create(MMHandleType *handle, MMCamPreset *info)
        if (ret != MM_ERROR_NONE) {
                _mmcam_dbg_err("failed to initialize resource manager");
                ret = MM_ERROR_CAMCORDER_INTERNAL;
-                goto _ERR_DEFAULT_VALUE_INIT;
-        }
+               goto _ERR_DEFAULT_VALUE_INIT;
+       }
+
+       traceBegin(TTRACE_TAG_CAMERA, "MMCAMCORDER:CREATE:INIT_GSTREAMER");
 
        ret = __mmcamcorder_gstreamer_init(hcamcorder->conf_main);
+
+       traceEnd(TTRACE_TAG_CAMERA);
+
        if (!ret) {
                _mmcam_dbg_err( "Failed to initialize gstreamer!!" );
                ret = MM_ERROR_CAMCORDER_NOT_INITIALIZED;
@@ -1106,7 +1111,12 @@ int _mmcamcorder_realize(MMHandleType handle)
        }
 
        /* create pipeline */
+       traceBegin(TTRACE_TAG_CAMERA, "MMCAMCORDER:REALIZE:CREATE_PIPELINE");
+
        ret = _mmcamcorder_create_pipeline(handle, hcamcorder->type);
+
+       traceEnd(TTRACE_TAG_CAMERA);
+
        if (ret != MM_ERROR_NONE) {
                /* check internal error of gstreamer */
                if (hcamcorder->error_code != MM_ERROR_NONE) {
@@ -3361,7 +3371,11 @@ int _mmcamcorder_create_pipeline(MMHandleType handle, int type)
 
        pipeline = sc->element[_MMCAMCORDER_MAIN_PIPE].gst;
        if (type != MM_CAMCORDER_MODE_AUDIO) {
+               traceBegin(TTRACE_TAG_CAMERA, "MMCAMCORDER:REALIZE:SET_READY_TO_PIPELINE");
+
                ret = _mmcamcorder_gst_set_state(handle, pipeline, GST_STATE_READY);
+
+               traceEnd(TTRACE_TAG_CAMERA);
        }
 #ifdef _MMCAMCORDER_GET_DEVICE_INFO
        if (!_mmcamcorder_get_device_info(handle)) {
index 7648537..bc3b9f9 100644 (file)
@@ -223,12 +223,20 @@ void _mmcamcorder_destroy_video_capture_pipeline(MMHandleType handle)
                MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_QUE].gst, "empty-buffers", TRUE);
                MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSINK_QUE].gst, "empty-buffers", TRUE);
 
+               traceBegin(TTRACE_TAG_CAMERA, "MMCAMCORDER:UNREALIZE:SET_NULL_TO_PIPELINE");
+
                _mmcamcorder_gst_set_state(handle, sc->element[_MMCAMCORDER_MAIN_PIPE].gst, GST_STATE_NULL);
 
+               traceEnd(TTRACE_TAG_CAMERA);
+
                _mmcamcorder_remove_all_handlers(handle, _MMCAMCORDER_HANDLER_CATEGORY_ALL);
 
+               traceBegin(TTRACE_TAG_CAMERA, "MMCAMCORDER:UNREALIZE:UNREF_PIPELINE");
+
                gst_object_unref(sc->element[_MMCAMCORDER_MAIN_PIPE].gst);
 
+               traceEnd(TTRACE_TAG_CAMERA);
+
                /* NULL initialization will be done in _mmcamcorder_element_release_noti */
        }
 
@@ -742,8 +750,12 @@ int _mmcamcorder_image_cmd_preview_start(MMHandleType handle)
                MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_QUE].gst, "empty-buffers", FALSE);
                MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSINK_QUE].gst, "empty-buffers", FALSE);
 
+               traceBegin(TTRACE_TAG_CAMERA, "MMCAMCORDER:START:SET_PLAYING_TO_PIPELINE");
+
                ret = _mmcamcorder_gst_set_state(handle, pipeline, GST_STATE_PLAYING);
 
+               traceEnd(TTRACE_TAG_CAMERA);
+
                if (ret != MM_ERROR_NONE) {
                        goto cmd_error;
                }
@@ -823,8 +835,12 @@ int _mmcamcorder_image_cmd_preview_stop(MMHandleType handle)
        MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_QUE].gst, "empty-buffers", TRUE);
        MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSINK_QUE].gst, "empty-buffers", TRUE);
 
+       traceBegin(TTRACE_TAG_CAMERA, "MMCAMCORDER:STOP:SET_READY_TO_PIPELINE");
+
        ret = _mmcamcorder_gst_set_state(handle, pipeline, GST_STATE_READY);
 
+       traceEnd(TTRACE_TAG_CAMERA);
+
        MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSINK_QUE].gst, "empty-buffers", FALSE);
        MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_QUE].gst, "empty-buffers", FALSE);