From d9d9f0931452b785782dfbc800ac094c2ec95360 Mon Sep 17 00:00:00 2001 From: Jeongmo Yang Date: Tue, 30 Jun 2015 18:08:11 +0900 Subject: [PATCH] 1. set "recording-hint" property to camerasrc element 2. add "AudioDevice" field for unsupported audio device Change-Id: I872b06d956bbff2442621752881b72be5c17318b Signed-off-by: Jeongmo Yang --- packaging/libmm-camcorder.spec | 2 +- src/include/mm_camcorder_platform.h | 2 +- src/mm_camcorder_attribute.c | 6 ++-- src/mm_camcorder_configure.c | 1 + src/mm_camcorder_internal.c | 19 ++++++++++++- src/mm_camcorder_platform.c | 57 +++++++++++++++++++++++++++---------- src/mm_camcorder_videorec.c | 25 ++++++++++------ 7 files changed, 83 insertions(+), 29 deletions(-) diff --git a/packaging/libmm-camcorder.spec b/packaging/libmm-camcorder.spec index d1ec7d2..a0f9331 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.2 +Version: 0.10.3 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/include/mm_camcorder_platform.h b/src/include/mm_camcorder_platform.h index de2c8c1..c2196e6 100644 --- a/src/include/mm_camcorder_platform.h +++ b/src/include/mm_camcorder_platform.h @@ -230,7 +230,7 @@ int _mmcamcorder_get_fps_array_by_resolution(MMHandleType handle, int width, int int _mmcamcorder_set_converted_value(MMHandleType handle, _MMCamcorderEnumConvert *convert); int _mmcamcorder_init_convert_table(MMHandleType handle); -int _mmcamcorder_init_attr_from_configure(MMHandleType handle); +int _mmcamcorder_init_attr_from_configure(MMHandleType handle, int type); int _mmcamcorder_convert_brightness(int mslVal); int _mmcamcorder_convert_whitebalance(int mslVal); diff --git a/src/mm_camcorder_attribute.c b/src/mm_camcorder_attribute.c index 2b020c6..d0740e8 100644 --- a/src/mm_camcorder_attribute.c +++ b/src/mm_camcorder_attribute.c @@ -153,9 +153,9 @@ _mmcamcorder_alloc_attribute( MMHandleType handle, MMCamPreset *info ) MMF_VALUE_TYPE_INT, MM_ATTRS_FLAG_RW, {(void*)MM_AUDIO_DEVICE_MIC}, - MM_ATTRS_VALID_TYPE_INT_RANGE, - {.int_min = 0}, - {.int_max = (MM_AUDIO_DEVICE_NUM-1)}, + MM_ATTRS_VALID_TYPE_INT_ARRAY, + {NULL}, + {0}, NULL, }, { diff --git a/src/mm_camcorder_configure.c b/src/mm_camcorder_configure.c index 04fa7cf..d8f31c4 100644 --- a/src/mm_camcorder_configure.c +++ b/src/mm_camcorder_configure.c @@ -622,6 +622,7 @@ void _mmcamcorder_conf_init(MMHandleType handle, int type, camera_conf** configu /* [AudioInput] matching table */ static conf_info_table conf_main_audio_input_table[] = { + { "AudioDevice", CONFIGURE_VALUE_INT_ARRAY, {NULL} }, { "AudiosrcElement", CONFIGURE_VALUE_ELEMENT, {&_audiosrc_element_default} }, { "AudiomodemsrcElement", CONFIGURE_VALUE_ELEMENT, {&_audiomodemsrc_element_default} }, }; diff --git a/src/mm_camcorder_internal.c b/src/mm_camcorder_internal.c index efd0781..5407f37 100644 --- a/src/mm_camcorder_internal.c +++ b/src/mm_camcorder_internal.c @@ -341,11 +341,15 @@ int _mmcamcorder_create(MMHandleType *handle, MMCamPreset *info) ret = _mmcamcorder_init_convert_table((MMHandleType)hcamcorder); if (ret != MM_ERROR_NONE) { _mmcam_dbg_warn("converting table initialize error!!"); + ret = MM_ERROR_CAMCORDER_INTERNAL; + goto _ERR_AFTER_ASM_REGISTER; } - ret = _mmcamcorder_init_attr_from_configure((MMHandleType)hcamcorder); + ret = _mmcamcorder_init_attr_from_configure((MMHandleType)hcamcorder, info->videodev_type); if (ret != MM_ERROR_NONE) { _mmcam_dbg_warn("converting table initialize error!!"); + ret = MM_ERROR_CAMCORDER_INTERNAL; + goto _ERR_AFTER_ASM_REGISTER; } /* Get device info, recommend preview fmt and display rotation from INI */ @@ -433,6 +437,8 @@ int _mmcamcorder_create(MMHandleType *handle, MMCamPreset *info) _mmcam_dbg_err("Set %s FAILED.", err_attr_name); free(err_attr_name); err_attr_name = NULL; + ret = MM_ERROR_CAMCORDER_INTERNAL; + goto _ERR_AFTER_ASM_REGISTER; } /* Get default value of brightness */ @@ -443,6 +449,8 @@ int _mmcamcorder_create(MMHandleType *handle, MMCamPreset *info) _mmcam_dbg_err("Get brightness FAILED."); free(err_attr_name); err_attr_name = NULL; + ret = MM_ERROR_CAMCORDER_INTERNAL; + goto _ERR_AFTER_ASM_REGISTER; } _mmcam_dbg_log("Default brightness : %d", hcamcorder->brightness_default); } else { @@ -461,6 +469,15 @@ int _mmcamcorder_create(MMHandleType *handle, MMCamPreset *info) _mmcam_dbg_err("Set %s FAILED.", err_attr_name); free(err_attr_name); err_attr_name = NULL; + ret = MM_ERROR_CAMCORDER_INTERNAL; + goto _ERR_AFTER_ASM_REGISTER; + } + + ret = _mmcamcorder_init_attr_from_configure((MMHandleType)hcamcorder, info->videodev_type); + if (ret != MM_ERROR_NONE) { + _mmcam_dbg_warn("init attribute from configure error : 0x%x", ret); + ret = MM_ERROR_CAMCORDER_INTERNAL; + goto _ERR_AFTER_ASM_REGISTER; } } diff --git a/src/mm_camcorder_platform.c b/src/mm_camcorder_platform.c index fd27eed..23bbfe9 100644 --- a/src/mm_camcorder_platform.c +++ b/src/mm_camcorder_platform.c @@ -221,6 +221,18 @@ _MMCamcorderEnumConvert _mmcamcorder_enum_conv_detect_mode = * For detail information, refer below documents. * */ +static _MMCamcorderInfoConverting g_audio_info[] = { + { + CONFIGURE_TYPE_MAIN, + CONFIGURE_CATEGORY_MAIN_AUDIO_INPUT, + MM_CAM_AUDIO_DEVICE, + MM_CAMCORDER_ATTR_NONE, + "AudioDevice", + MM_CAMCONVERT_TYPE_INT_ARRAY, + NULL, + } +}; + static _MMCamcorderInfoConverting g_display_info[] = { { CONFIGURE_TYPE_MAIN, @@ -826,7 +838,7 @@ __mmcamcorder_get_valid_array(int * original_array, int original_count, int ** v } -int _mmcamcorder_init_attr_from_configure(MMHandleType handle) +int _mmcamcorder_init_attr_from_configure(MMHandleType handle, int type) { mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle); _MMCamcorderInfoConverting *info = NULL; @@ -836,28 +848,43 @@ int _mmcamcorder_init_attr_from_configure(MMHandleType handle) mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED); - _mmcam_dbg_log(""); + _mmcam_dbg_log("type : %d", type); - /* Initialize attribute related to camera control */ - info = hcamcorder->caminfo_convert; - table_size = sizeof(g_caminfo_convert) / sizeof(_MMCamcorderInfoConverting); - ret = __mmcamcorder_set_info_to_attr( handle, info, table_size ); - if( ret != MM_ERROR_NONE ) - { - _mmcam_dbg_err( "ret : %x", ret ); - return ret; + if (type != MM_VIDEO_DEVICE_NONE) { + /* Initialize attribute related to camera control */ + info = hcamcorder->caminfo_convert; + table_size = sizeof(g_caminfo_convert) / sizeof(_MMCamcorderInfoConverting); + ret = __mmcamcorder_set_info_to_attr(handle, info, table_size); + if (ret != MM_ERROR_NONE) { + _mmcam_dbg_err("camera info set error : 0x%x", ret); + return ret; + } + + /* Initialize attribute related to display */ + info = g_display_info; + table_size = sizeof(g_display_info) / sizeof(_MMCamcorderInfoConverting); + ret = __mmcamcorder_set_info_to_attr(handle, info, table_size); + if (ret != MM_ERROR_NONE) { + _mmcam_dbg_err("display info set error : 0x%x", ret); + return ret; + } } - /* Initialize attribute related to display */ - info = g_display_info; - table_size = sizeof(g_display_info) / sizeof(_MMCamcorderInfoConverting); - ret = __mmcamcorder_set_info_to_attr( handle, info, table_size ); + /* Initialize attribute related to audio */ + info = g_audio_info; + table_size = sizeof(g_audio_info) / sizeof(_MMCamcorderInfoConverting); + ret = __mmcamcorder_set_info_to_attr(handle, info, table_size); + if (ret != MM_ERROR_NONE) { + _mmcam_dbg_err("audio info set error : 0x%x", ret); + return ret; + } - _mmcam_dbg_log( "result: %x", ret ); + _mmcam_dbg_log("done"); return ret; } + static int __mmcamcorder_set_info_to_attr( MMHandleType handle, _MMCamcorderInfoConverting *info, int table_size ) { diff --git a/src/mm_camcorder_videorec.c b/src/mm_camcorder_videorec.c index de054ed..c20df6f 100644 --- a/src/mm_camcorder_videorec.c +++ b/src/mm_camcorder_videorec.c @@ -634,6 +634,9 @@ int _mmcamcorder_video_command(MMHandleType handle, int command) info->restart_preview = TRUE; } + /* set recording hint */ + MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "recording-hint", TRUE); + if (info->restart_preview) { /* stop preview and set new size */ _mmcam_dbg_log("restart preview"); @@ -710,10 +713,10 @@ int _mmcamcorder_video_command(MMHandleType handle, int command) CameraControl = GST_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst); if (CameraControl) { MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSINK_SINK].gst, "stop-video", TRUE); -#ifdef LATEST_CAMERA_CONTROL + _mmcam_dbg_log("GST_CAMERA_CONTROL_RECORD_COMMAND_START"); gst_camera_control_set_record_command(CameraControl, GST_CAMERA_CONTROL_RECORD_COMMAND_START); -#endif /* LATEST_CAMERA_CONTROL */ + MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSINK_SINK].gst, "stop-video", FALSE); } else { _mmcam_dbg_err("could not get camera control"); @@ -761,10 +764,10 @@ int _mmcamcorder_video_command(MMHandleType handle, int command) CameraControl = GST_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst); if (CameraControl) { MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSINK_SINK].gst, "stop-video", TRUE); -#ifdef LATEST_CAMERA_CONTROL + _mmcam_dbg_log("GST_CAMERA_CONTROL_RECORD_COMMAND_STOP"); gst_camera_control_set_record_command(CameraControl, GST_CAMERA_CONTROL_RECORD_COMMAND_STOP); -#endif /* LATEST_CAMERA_CONTROL */ + MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSINK_SINK].gst, "stop-video", FALSE); } else { _mmcam_dbg_err("failed to get camera control"); @@ -893,15 +896,18 @@ int _mmcamcorder_video_command(MMHandleType handle, int command) goto _ERR_CAMCORDER_VIDEO_COMMAND; } + /* set recording hint */ + MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "recording-hint", FALSE); + /* stop video stream */ if (info->record_dual_stream) { CameraControl = GST_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst); if (CameraControl) { MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSINK_SINK].gst, "stop-video", TRUE); -#ifdef LATEST_CAMERA_CONTROL + _mmcam_dbg_log("GST_CAMERA_CONTROL_RECORD_COMMAND_STOP"); gst_camera_control_set_record_command(CameraControl, GST_CAMERA_CONTROL_RECORD_COMMAND_STOP); -#endif /* LATEST_CAMERA_CONTROL */ + MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSINK_SINK].gst, "stop-video", FALSE); } else { _mmcam_dbg_err("failed to get camera control"); @@ -1096,15 +1102,18 @@ int _mmcamcorder_video_handle_eos(MMHandleType handle) _mmcam_dbg_warn("_MMCamcorder_CMD_COMMIT:__mmcamcorder_remove_recorder_pipeline failed. error[%x]", ret); } + /* set recording hint */ + MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "recording-hint", FALSE); + /* stop video stream */ if (info->record_dual_stream) { GstCameraControl *control = GST_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst); if (control) { MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSINK_SINK].gst, "stop-video", TRUE); -#ifdef LATEST_CAMERA_CONTROL + _mmcam_dbg_log("GST_CAMERA_CONTROL_RECORD_COMMAND_STOP"); gst_camera_control_set_record_command(control, GST_CAMERA_CONTROL_RECORD_COMMAND_STOP); -#endif /* LATEST_CAMERA_CONTROL */ + MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSINK_SINK].gst, "stop-video", FALSE); } else { _mmcam_dbg_err("failed to get camera control"); -- 2.7.4