From 161340ad388471a2b13a49d1f3745cab3d7ad884 Mon Sep 17 00:00:00 2001 From: Jeongmo Yang Date: Mon, 28 Dec 2015 19:22:06 +0900 Subject: [PATCH] Release version 0.10.22 1. Add T-trace check point 2. Support H.264 format preview callback Change-Id: I0f1dbbeeac3453e99d80d703a65ac899b1262744 Signed-off-by: Jeongmo Yang --- configure.ac | 4 ++++ packaging/libmm-camcorder.spec | 3 ++- src/Makefile.am | 2 ++ src/include/mm_camcorder_internal.h | 3 +++ src/mm_camcorder.c | 24 ++++++++++++++++++++++++ src/mm_camcorder_gstcommon.c | 28 +++++++++++++++++++--------- src/mm_camcorder_internal.c | 18 ++++++++++++++++-- src/mm_camcorder_stillshot.c | 16 ++++++++++++++++ 8 files changed, 86 insertions(+), 12 deletions(-) diff --git a/configure.ac b/configure.ac index 9d355de..fc70d0f 100644 --- a/configure.ac +++ b/configure.ac @@ -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]) diff --git a/packaging/libmm-camcorder.spec b/packaging/libmm-camcorder.spec index f4bd03b..21c730a 100644 --- a/packaging/libmm-camcorder.spec +++ b/packaging/libmm-camcorder.spec @@ -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. diff --git a/src/Makefile.am b/src/Makefile.am index 810a962..931c738 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -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 diff --git a/src/include/mm_camcorder_internal.h b/src/include/mm_camcorder_internal.h index 249c71c..a5c32fc 100644 --- a/src/include/mm_camcorder_internal.h +++ b/src/include/mm_camcorder_internal.h @@ -39,6 +39,7 @@ #include #include #include +#include #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; \ diff --git a/src/mm_camcorder.c b/src/mm_camcorder.c index bcb324f..34bad5e 100644 --- a/src/mm_camcorder.c +++ b/src/mm_camcorder.c @@ -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"); diff --git a/src/mm_camcorder_gstcommon.c b/src/mm_camcorder_gstcommon.c index 59207ed..9479302 100644 --- a/src/mm_camcorder_gstcommon.c +++ b/src/mm_camcorder_gstcommon.c @@ -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; diff --git a/src/mm_camcorder_internal.c b/src/mm_camcorder_internal.c index 48944e3..b8adb7e 100644 --- a/src/mm_camcorder_internal.c +++ b/src/mm_camcorder_internal.c @@ -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)) { diff --git a/src/mm_camcorder_stillshot.c b/src/mm_camcorder_stillshot.c index 7648537..bc3b9f9 100644 --- a/src/mm_camcorder_stillshot.c +++ b/src/mm_camcorder_stillshot.c @@ -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); -- 2.7.4