From 5fd54be7675819d40e32dcbf45161ce1c63d6b62 Mon Sep 17 00:00:00 2001 From: Jeongmo Yang Date: Fri, 29 Apr 2016 19:41:07 +0900 Subject: [PATCH] [Release version 0.10.45] 1. Update code for DPM - camera, mic policy, 2. Return value in video stream callback to remove buffer leak Change-Id: I0a0783f2bb5694c740200f61cea6b052e868427d Signed-off-by: Jeongmo Yang --- configure.ac | 4 + packaging/libmm-camcorder.spec | 3 +- src/Makefile.am | 2 + src/include/mm_camcorder_internal.h | 10 ++ src/mm_camcorder_internal.c | 239 ++++++++++++++++++++++++++++++++---- src/mm_camcorder_videorec.c | 14 +-- test/Makefile.am | 1 + 7 files changed, 243 insertions(+), 30 deletions(-) diff --git a/configure.ac b/configure.ac index 72db867..47c88eb 100644 --- a/configure.ac +++ b/configure.ac @@ -114,6 +114,10 @@ PKG_CHECK_MODULES(TTRACE, ttrace) AC_SUBST(TTRACE_CFLAGS) AC_SUBST(TTRACE_LIBS) +PKG_CHECK_MODULES(DPM, dpm) +AC_SUBST(DPM_CFLAGS) +AC_SUBST(DPM_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 5258b10..ddf2eb8 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.44 +Version: 0.10.45 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 @@ -31,6 +31,7 @@ BuildRequires: pkgconfig(murphy-resource) BuildRequires: pkgconfig(murphy-glib) BuildRequires: pkgconfig(ttrace) BuildRequires: pkgconfig(libtzplatform-config) +BuildRequires: pkgconfig(dpm) %description Camera and recorder function supported library. diff --git a/src/Makefile.am b/src/Makefile.am index ef78bd1..c511c31 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -50,6 +50,7 @@ libmmfcamcorder_la_CFLAGS = -I$(srcdir)/include \ $(MURPHY_RESOURCE_CFLAGS) \ $(MURPHY_GLIB_CFLAGS) \ $(TTRACE_CFLAGS) \ + $(DPM_CFLAGS) \ $(SYSTEMINFO_CFLAGS) libmmfcamcorder_la_LIBADD = \ @@ -69,6 +70,7 @@ libmmfcamcorder_la_LIBADD = \ $(MURPHY_RESOURCE_LIBS) \ $(MURPHY_GLIB_LIBS) \ $(TTRACE_LIBS) \ + $(DPM_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 41f9a27..1340fac 100644 --- a/src/include/mm_camcorder_internal.h +++ b/src/include/mm_camcorder_internal.h @@ -39,6 +39,7 @@ #include #include #include +#include /* device policy manager */ #include "mm_camcorder.h" #include "mm_debug.h" @@ -543,6 +544,7 @@ typedef enum { _MMCAMCORDER_STATE_CHANGE_NORMAL = 0, _MMCAMCORDER_STATE_CHANGE_BY_ASM, _MMCAMCORDER_STATE_CHANGE_BY_RM, + _MMCAMCORDER_STATE_CHANGE_BY_DPM } _MMCamcorderStateChange; @@ -718,6 +720,11 @@ typedef struct mmf_camcorder { _MMCamcorderGDbusCbInfo gdbus_info_sound; /**< Informations for the gbus cb of sound play */ _MMCamcorderGDbusCbInfo gdbus_info_solo_sound; /**< Informations for the gbus cb of solo sound play */ + /* DPM(device policy manager) */ + dpm_context_h dpm_context; /**< DPM context handle */ + dpm_restriction_policy_h dpm_policy; /**< DPM restriction policy handle */ + int dpm_camera_cb_id; /**< DPM camera policy changed callback id */ + int reserved[4]; /**< reserved */ } mmf_camcorder_t; @@ -1197,6 +1204,9 @@ void _mmcamcorder_sound_focus_cb(int id, mm_sound_focus_type_e focus_type, void _mmcamcorder_sound_focus_watch_cb(mm_sound_focus_type_e focus_type, mm_sound_focus_state_e focus_state, const char *reason_for_change, const char *additional_info, void *user_data); +/* device policy manager */ +void _mmcamcorder_dpm_camera_policy_changed_cb(const char *name, const char *value, void *user_data); + /* For hand over the server's caps information to client */ int _mmcamcorder_get_video_caps(MMHandleType handle, char **caps); diff --git a/src/mm_camcorder_internal.c b/src/mm_camcorder_internal.c index cde987b..5d4f841 100644 --- a/src/mm_camcorder_internal.c +++ b/src/mm_camcorder_internal.c @@ -55,6 +55,9 @@ #define __MMCAMCORDER_SOUND_WAIT_TIMEOUT 3 #define __MMCAMCORDER_FOCUS_CHANGE_REASON_LEN 64 +#define DPM_ALLOWED 1 +#define DPM_DISALLOWED 0 + /*--------------------------------------------------------------------------------------- | LOCAL FUNCTION PROTOTYPES: | @@ -371,6 +374,29 @@ int _mmcamcorder_create(MMHandleType *handle, MMCamPreset *info) _mmcam_dbg_log( "Disable Configure Control system." ); hcamcorder->conf_ctrl = NULL; } + + /* get DPM context for camera restriction */ + hcamcorder->dpm_context = dpm_context_create(); + if (hcamcorder->dpm_context) { + hcamcorder->dpm_policy = dpm_context_acquire_restriction_policy(hcamcorder->dpm_context); + if (hcamcorder->dpm_policy == NULL) { + _mmcam_dbg_err("dpm_context_acquire_restriction_policy failed"); + dpm_context_destroy(hcamcorder->dpm_context); + hcamcorder->dpm_context = NULL; + } + + /* add DPM camera policy changed callback */ + if (dpm_context_add_policy_changed_cb(hcamcorder->dpm_context, + "camera", _mmcamcorder_dpm_camera_policy_changed_cb, + (void *)hcamcorder, &hcamcorder->dpm_camera_cb_id) != DPM_ERROR_NONE) { + _mmcam_dbg_err("add DPM changed cb failed, keep going..."); + hcamcorder->dpm_camera_cb_id = 0; + } + + _mmcam_dbg_log("DPM camera changed cb id %d", hcamcorder->dpm_camera_cb_id); + } + + _mmcam_dbg_log("DPM context %p, policy %p", hcamcorder->dpm_context, hcamcorder->dpm_policy); } else { _mmcamcorder_conf_get_value_int((MMHandleType)hcamcorder, hcamcorder->conf_main, CONFIGURE_CATEGORY_MAIN_VIDEO_INPUT, @@ -470,6 +496,9 @@ int _mmcamcorder_create(MMHandleType *handle, MMCamPreset *info) return MM_ERROR_NONE; _ERR_DEFAULT_VALUE_INIT: + /* de-initialize resource manager */ + _mmcamcorder_resource_manager_deinit(&hcamcorder->resource_manager); + /* unregister sound focus */ if (hcamcorder->sound_focus_register && hcamcorder->sound_focus_id > 0) { if (MM_ERROR_NONE != mm_sound_unregister_focus(hcamcorder->sound_focus_id)) { @@ -482,6 +511,28 @@ _ERR_DEFAULT_VALUE_INIT: hcamcorder->sound_focus_register, hcamcorder->sound_focus_id); } + /* release DPM related handle */ + if (hcamcorder->dpm_context) { + _mmcam_dbg_log("release DPM context %p, camera changed cb id %d", + hcamcorder->dpm_context, hcamcorder->dpm_camera_cb_id); + + /* remove camera policy changed callback */ + if (hcamcorder->dpm_camera_cb_id > 0) { + dpm_context_remove_policy_changed_cb(hcamcorder->dpm_context, hcamcorder->dpm_camera_cb_id); + hcamcorder->dpm_camera_cb_id = 0; + } else { + _mmcam_dbg_warn("invalid dpm camera cb id %d", hcamcorder->dpm_camera_cb_id); + } + + if (hcamcorder->dpm_policy) { + dpm_context_release_restriction_policy(hcamcorder->dpm_context, hcamcorder->dpm_policy); + hcamcorder->dpm_policy = NULL; + } + + dpm_context_destroy(hcamcorder->dpm_context); + hcamcorder->dpm_context = NULL; + } + /* Remove attributes */ if (hcamcorder->attributes) { _mmcamcorder_dealloc_attribute((MMHandleType)hcamcorder, hcamcorder->attributes); @@ -654,6 +705,28 @@ int _mmcamcorder_destroy(MMHandleType handle) hcamcorder->software_version = NULL; } + /* release DPM related handle */ + if (hcamcorder->dpm_context) { + _mmcam_dbg_log("release DPM context %p, camera changed cb id %d", + hcamcorder->dpm_context, hcamcorder->dpm_camera_cb_id); + + /* remove camera policy changed callback */ + if (hcamcorder->dpm_camera_cb_id > 0) { + dpm_context_remove_policy_changed_cb(hcamcorder->dpm_context, hcamcorder->dpm_camera_cb_id); + hcamcorder->dpm_camera_cb_id = 0; + } else { + _mmcam_dbg_warn("invalid dpm camera cb id %d", hcamcorder->dpm_camera_cb_id); + } + + if (hcamcorder->dpm_policy) { + dpm_context_release_restriction_policy(hcamcorder->dpm_context, hcamcorder->dpm_policy); + hcamcorder->dpm_policy = NULL; + } + + dpm_context_destroy(hcamcorder->dpm_context); + hcamcorder->dpm_context = NULL; + } + /* join task thread */ _mmcam_dbg_log("task thread join"); g_thread_join(hcamcorder->task_thread); @@ -897,8 +970,23 @@ int _mmcamcorder_realize(MMHandleType handle) _mmcam_dbg_log("Support sensor encoded capture : %d", hcamcorder->sub_context->SensorEncodedCapture); if (hcamcorder->type == MM_CAMCORDER_MODE_VIDEO_CAPTURE) { + int dpm_camera_state = DPM_ALLOWED; + + /* check camera policy from DPM */ + if (dpm_restriction_get_camera_state(hcamcorder->dpm_policy, &dpm_camera_state) == DPM_ERROR_NONE) { + _mmcam_dbg_log("DPM camera state %d", dpm_camera_state); + if (dpm_camera_state == DPM_DISALLOWED) { + _mmcam_dbg_err("CAMERA DISALLOWED by DPM"); + ret = MM_ERROR_COMMON_INVALID_PERMISSION; + goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; + } + } else { + _mmcam_dbg_err("get DPM camera state failed, keep going..."); + } + /* prepare resource manager for camera */ - if((_mmcamcorder_resource_manager_prepare(&hcamcorder->resource_manager, RESOURCE_TYPE_CAMERA))) { + ret = _mmcamcorder_resource_manager_prepare(&hcamcorder->resource_manager, RESOURCE_TYPE_CAMERA); + if (ret != MM_ERROR_NONE) { _mmcam_dbg_err("could not prepare for camera resource"); ret = MM_ERROR_CAMCORDER_INTERNAL; goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; @@ -906,17 +994,20 @@ int _mmcamcorder_realize(MMHandleType handle) /* prepare resource manager for "video_overlay only if display surface is X" */ mm_camcorder_get_attributes(handle, NULL, - MMCAM_DISPLAY_SURFACE, &display_surface_type, - NULL); - if(display_surface_type == MM_DISPLAY_SURFACE_OVERLAY) { - if((_mmcamcorder_resource_manager_prepare(&hcamcorder->resource_manager, RESOURCE_TYPE_VIDEO_OVERLAY))) { + MMCAM_DISPLAY_SURFACE, &display_surface_type, + NULL); + + if (display_surface_type == MM_DISPLAY_SURFACE_OVERLAY) { + ret = _mmcamcorder_resource_manager_prepare(&hcamcorder->resource_manager, RESOURCE_TYPE_VIDEO_OVERLAY); + if(ret != MM_ERROR_NONE) { _mmcam_dbg_err("could not prepare for video overlay resource"); ret = MM_ERROR_CAMCORDER_INTERNAL; goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; } } + /* acquire resources */ - if((hcamcorder->resource_manager.rset && _mmcamcorder_resource_manager_acquire(&hcamcorder->resource_manager))) { + if (hcamcorder->resource_manager.rset && _mmcamcorder_resource_manager_acquire(&hcamcorder->resource_manager)) { _mmcam_dbg_err("could not acquire resources"); _mmcamcorder_resource_manager_unprepare(&hcamcorder->resource_manager); goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; @@ -1047,6 +1138,7 @@ int _mmcamcorder_unrealize(MMHandleType handle) } if (hcamcorder->type == MM_CAMCORDER_MODE_VIDEO_CAPTURE) { + /* release resource */ ret = _mmcamcorder_resource_manager_release(&hcamcorder->resource_manager); if (ret == MM_ERROR_RESOURCE_INVALID_STATE) { _mmcam_dbg_warn("it could be in the middle of resource callback or there's no acquired resource"); @@ -1451,6 +1543,7 @@ int _mmcamcorder_record(MMHandleType handle) int state_FROM1 = MM_CAMCORDER_STATE_PREPARE; int state_FROM2 = MM_CAMCORDER_STATE_PAUSED; int state_TO = MM_CAMCORDER_STATE_RECORDING; + int dpm_mic_state = DPM_ALLOWED; mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle); @@ -1478,6 +1571,18 @@ int _mmcamcorder_record(MMHandleType handle) /* initialize error code */ hcamcorder->error_code = MM_ERROR_NONE; + /* check mic policy from DPM */ + if (dpm_restriction_get_microphone_state(hcamcorder->dpm_policy, &dpm_mic_state) == DPM_ERROR_NONE) { + _mmcam_dbg_log("DPM mic state %d", dpm_mic_state); + if (dpm_mic_state == DPM_DISALLOWED) { + _mmcam_dbg_err("MIC DISALLOWED by DPM"); + ret = MM_ERROR_COMMON_INVALID_PERMISSION; + goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; + } + } else { + _mmcam_dbg_err("get DPM mic state failed, keep going..."); + } + ret = hcamcorder->command((MMHandleType)hcamcorder, _MMCamcorder_CMD_RECORD); if (ret != MM_ERROR_NONE) { /* check internal error of gstreamer */ @@ -2240,6 +2345,10 @@ void _mmcamcorder_set_state(MMHandleType handle, int state) msg.id = MM_MESSAGE_CAMCORDER_STATE_CHANGED_BY_RM; msg.param.state.code = MM_ERROR_NONE; break; + case _MMCAMCORDER_STATE_CHANGE_BY_DPM: + msg.id = MM_MESSAGE_CAMCORDER_STATE_CHANGED_BY_SECURITY; + msg.param.state.code = MM_ERROR_NONE; + break; case _MMCAMCORDER_STATE_CHANGE_NORMAL: default: msg.id = MM_MESSAGE_CAMCORDER_STATE_CHANGED; @@ -2480,17 +2589,24 @@ gboolean _mmcamcorder_pipeline_cb_message(GstBus *bus, GstMessage *message, gpoi } case GST_MESSAGE_ERROR: { - GError *err; - gchar *debug; - gst_message_parse_error(message, &err, &debug); + GError *err = NULL; + gchar *debug = NULL; - _mmcam_dbg_err ("GSTERR: %s", err->message); - _mmcam_dbg_err ("Error Debug: %s", debug); + gst_message_parse_error(message, &err, &debug); __mmcamcorder_handle_gst_error((MMHandleType)hcamcorder, message, err); - g_error_free (err); - g_free (debug); + if (err) { + _mmcam_dbg_err("GSTERR: %s", err->message); + g_error_free(err); + err = NULL; + } + + if (debug) { + _mmcam_dbg_err("Error Debug: %s", debug); + g_free(debug); + debug = NULL; + } break; } case GST_MESSAGE_WARNING: @@ -2853,20 +2969,27 @@ GstBusSyncReply _mmcamcorder_audio_pipeline_bus_sync_callback(GstBus *bus, GstMe if (err->domain == GST_RESOURCE_ERROR && GST_ELEMENT_CAST(message->src) == element) { _MMCamcorderMsgItem msg; + switch (err->code) { case GST_RESOURCE_ERROR_OPEN_READ_WRITE: case GST_RESOURCE_ERROR_OPEN_WRITE: _mmcam_dbg_err("audio device [open failed]"); - hcamcorder->error_code = MM_ERROR_COMMON_INVALID_PERMISSION; + /* post error to application */ hcamcorder->error_occurs = TRUE; + hcamcorder->error_code = MM_ERROR_COMMON_INVALID_PERMISSION; + msg.id = MM_MESSAGE_CAMCORDER_ERROR; msg.param.code = hcamcorder->error_code; + + _mmcamcorder_send_message((MMHandleType)hcamcorder, &msg); + _mmcam_dbg_err(" error : sc->error_occurs %d", hcamcorder->error_occurs); + g_error_free(err); - _mmcamcorder_send_message((MMHandleType)hcamcorder, &msg); gst_message_unref(message); message = NULL; + return GST_BUS_DROP; default: break; @@ -2874,7 +2997,6 @@ GstBusSyncReply _mmcamcorder_audio_pipeline_bus_sync_callback(GstBus *bus, GstMe } g_error_free(err); - } return GST_BUS_PASS; @@ -2962,7 +3084,7 @@ void _mmcamcorder_sound_focus_watch_cb(mm_sound_focus_type_e focus_type, mm_soun mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(user_data); int current_state = MM_CAMCORDER_STATE_NONE; - mmf_return_if_fail((MMHandleType)hcamcorder); + mmf_return_if_fail(hcamcorder); current_state = _mmcamcorder_get_state((MMHandleType)hcamcorder); if (current_state <= MM_CAMCORDER_STATE_NONE || @@ -3024,6 +3146,43 @@ void _mmcamcorder_sound_focus_watch_cb(mm_sound_focus_type_e focus_type, mm_soun } +void _mmcamcorder_dpm_camera_policy_changed_cb(const char *name, const char *value, void *user_data) +{ + mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(user_data); + int current_state = MM_CAMCORDER_STATE_NONE; + + mmf_return_if_fail(hcamcorder); + mmf_return_if_fail(value); + + current_state = _mmcamcorder_get_state((MMHandleType)hcamcorder); + if (current_state <= MM_CAMCORDER_STATE_NONE || + current_state >= MM_CAMCORDER_STATE_NUM) { + _mmcam_dbg_err("Abnormal state. Or null handle. (%p, %d)", hcamcorder, current_state); + return; + } + + _mmcam_dbg_warn("camera policy [%s], current state [%d]", value, current_state); + + if (!strcmp(value, "disallowed")) { + _MMCAMCORDER_LOCK_ASM(hcamcorder); + + /* set value to inform a status is changed by DPM */ + hcamcorder->state_change_by_system = _MMCAMCORDER_STATE_CHANGE_BY_DPM; + + __mmcamcorder_force_stop(hcamcorder); + + /* restore value */ + hcamcorder->state_change_by_system = _MMCAMCORDER_STATE_CHANGE_NORMAL; + + _MMCAMCORDER_UNLOCK_ASM(hcamcorder); + } + + _mmcam_dbg_warn("done"); + + return; +} + + int _mmcamcorder_create_pipeline(MMHandleType handle, int type) { int ret = MM_ERROR_NONE; @@ -3421,7 +3580,7 @@ static gboolean __mmcamcorder_handle_gst_error(MMHandleType handle, GstMessage * { mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle); _MMCamcorderMsgItem msg; - gchar *msg_src_element; + gchar *msg_src_element = NULL; _MMCamcorderSubContext *sc = NULL; return_val_if_fail(hcamcorder, FALSE); @@ -3476,10 +3635,12 @@ static gboolean __mmcamcorder_handle_gst_error(MMHandleType handle, GstMessage * } #endif /* _MMCAMCORDER_SKIP_GST_FLOW_ERROR */ - /* post error to application */ - hcamcorder->error_occurs = TRUE; - msg.id = MM_MESSAGE_CAMCORDER_ERROR; - _mmcamcorder_send_message(handle, &msg); + /* post error to application except RESTRICTED case */ + if (msg.param.code != MM_ERROR_POLICY_RESTRICTED) { + hcamcorder->error_occurs = TRUE; + msg.id = MM_MESSAGE_CAMCORDER_ERROR; + _mmcamcorder_send_message(handle, &msg); + } return TRUE; } @@ -3583,6 +3744,40 @@ static gint __mmcamcorder_gst_handle_resource_error(MMHandleType handle, int cod } } + /* audiosrc */ + element = GST_ELEMENT_CAST(sc->encode_element[_MMCAMCORDER_AUDIOSRC_SRC].gst); + if (GST_ELEMENT_CAST(message->src) == element) { + if (code == GST_RESOURCE_ERROR_FAILED) { + int ret = MM_ERROR_NONE; + int current_state = MM_CAMCORDER_STATE_NONE; + + _mmcam_dbg_err("DPM mic DISALLOWED - current state %d", current_state); + + _MMCAMCORDER_LOCK_ASM(hcamcorder); + + current_state = _mmcamcorder_get_state((MMHandleType)hcamcorder); + if (current_state >= MM_CAMCORDER_STATE_RECORDING) { + /* set value to inform a status is changed by DPM */ + hcamcorder->state_change_by_system = _MMCAMCORDER_STATE_CHANGE_BY_DPM; + + ret = _mmcamcorder_commit((MMHandleType)hcamcorder); + _mmcam_dbg_log("commit result : 0x%x", ret); + + if (ret != MM_ERROR_NONE) { + _mmcam_dbg_err("commit failed, cancel it"); + ret = _mmcamcorder_cancel((MMHandleType)hcamcorder); + } + } + + /* restore value */ + hcamcorder->state_change_by_system = _MMCAMCORDER_STATE_CHANGE_NORMAL; + + _MMCAMCORDER_UNLOCK_ASM(hcamcorder); + + return MM_ERROR_POLICY_RESTRICTED; + } + } + /* encodebin */ element = GST_ELEMENT_CAST(sc->encode_element[_MMCAMCORDER_ENCSINK_VENC].gst); if (GST_ELEMENT_CAST(message->src) == element) { diff --git a/src/mm_camcorder_videorec.c b/src/mm_camcorder_videorec.c index df85937..b7b5834 100644 --- a/src/mm_camcorder_videorec.c +++ b/src/mm_camcorder_videorec.c @@ -46,7 +46,7 @@ | LOCAL FUNCTION PROTOTYPES: | ---------------------------------------------------------------------------------------*/ /* STATIC INTERNAL FUNCTION */ -static void __mmcamcorder_video_stream_cb(GstElement *element, GstSample *sample, gpointer u_data); +static gboolean __mmcamcorder_video_stream_cb(GstElement *element, GstSample *sample, gpointer u_data); static GstPadProbeReturn __mmcamcorder_audio_dataprobe_check(GstPad *pad, GstPadProbeInfo *info, gpointer u_data); static GstPadProbeReturn __mmcamcorder_video_dataprobe_record(GstPad *pad, GstPadProbeInfo *info, gpointer u_data); static GstPadProbeReturn __mmcamcorder_audioque_dataprobe(GstPad *pad, GstPadProbeInfo *info, gpointer u_data); @@ -62,18 +62,18 @@ static GstPadProbeReturn __mmcamcorder_eventprobe_monitor(GstPad *pad, GstPadPro /*--------------------------------------------------------------------------------------- | GLOBAL FUNCTION DEFINITIONS: | ---------------------------------------------------------------------------------------*/ -static void __mmcamcorder_video_stream_cb(GstElement *element, GstSample *sample, gpointer u_data) +static gboolean __mmcamcorder_video_stream_cb(GstElement *element, GstSample *sample, gpointer u_data) { mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(u_data); _MMCamcorderSubContext *sc = NULL; GstBuffer *buffer = gst_sample_get_buffer(sample); - mmf_return_if_fail(buffer); - mmf_return_if_fail(gst_buffer_n_memory(buffer)); - mmf_return_if_fail(hcamcorder); + mmf_return_val_if_fail(buffer, FALSE); + mmf_return_val_if_fail(gst_buffer_n_memory(buffer), FALSE); + mmf_return_val_if_fail(hcamcorder, FALSE); sc = MMF_CAMCORDER_SUBCONTEXT(hcamcorder); - mmf_return_if_fail(sc); + mmf_return_val_if_fail(sc, FALSE); /* _mmcam_dbg_log("ENTER - push_encoding_buffer %d, buffer %p, MALLOCDATA %p, size %d", @@ -123,7 +123,7 @@ static void __mmcamcorder_video_stream_cb(GstElement *element, GstSample *sample buffer = NULL; } - return; + return TRUE; } diff --git a/test/Makefile.am b/test/Makefile.am index 16e3145..12e9e57 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -5,6 +5,7 @@ mm_camcorder_testsuite_SOURCES = mm_camcorder_testsuite.c mm_camcorder_testsuite_CFLAGS = -I$(srcdir)/../src/include \ $(GLIB_CFLAGS)\ $(GST_CFLAGS)\ + $(DPM_CFLAGS)\ $(MM_COMMON_CFLAGS)\ $(MM_SOUND_CFLAGS) -- 2.7.4