/*---------------------------------------------------------------------------------------
| GLOBAL VARIABLE DEFINITIONS for internal |
---------------------------------------------------------------------------------------*/
-#define MM_CAMCORDER_START_CHANGE_STATE _MMCamcorderStartHelperFunc((void *)hcamcorder)
-#define MM_CAMCORDER_STOP_CHANGE_STATE _MMCamcorderStopHelperFunc((void *)hcamcorder)
+
/*---------------------------------------------------------------------------------------
| LOCAL VARIABLE DEFINITIONS for internal |
---------------------------------------------------------------------------------------*/
#define RESET_PAUSE_TIME 0
-#define _MMCAMCORDER_AUDIO_MINIMUM_SPACE (100*1024)
-#define _MMCAMCORDER_AUDIO_MARGIN_SPACE (1*1024)
-#define _MMCAMCORDER_RETRIAL_COUNT 10
-#define _MMCAMCORDER_FRAME_WAIT_TIME 200000 /* micro second */
+#define _MMCAMCORDER_AUDIO_MINIMUM_SPACE ((100*1024) + (5*1024))
+#define _MMCAMCORDER_RETRIAL_COUNT 15
+#define _MMCAMCORDER_FRAME_WAIT_TIME 200000 /* us */
#define _MMCAMCORDER_FREE_SPACE_CHECK_INTERVAL 10
/*---------------------------------------------------------------------------------------
static int __mmcamcorder_create_audiop_with_encodebin(MMHandleType handle)
{
int err = MM_ERROR_NONE;
+ int file_name_len = 0;
+
+ char *file_name = NULL;
const char *aenc_name = NULL;
const char *mux_name = NULL;
+ const char *sink_name = NULL;
GstBus *bus = NULL;
GstPad *srcpad = NULL;
_MMCamcorderSubContext *sc = NULL;
type_element *aenc_elem = NULL;
type_element *mux_elem = NULL;
+ type_element *sink_elem = NULL;
mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
sc = MMF_CAMCORDER_SUBCONTEXT(handle);
info = (_MMCamcorderAudioInfo *)sc->info_audio;
- _mmcam_dbg_log("");
+ MMCAM_LOG_INFO("");
mux_elem = _mmcamcorder_get_type_element(handle, MM_CAM_FILE_FORMAT);
- err = _mmcamcorder_conf_get_value_element_name( mux_elem, &mux_name );
+ err = _mmcamcorder_conf_get_value_element_name(mux_elem, &mux_name);
if (!mux_name || !strcmp(mux_name, "wavenc")) {
/* IF MUX in not chosen then record in raw file */
- _mmcam_dbg_log("Record without muxing.");
+ MMCAM_LOG_INFO("Record without muxing.");
info->bMuxing = FALSE;
} else {
- _mmcam_dbg_log("Record with mux.");
+ MMCAM_LOG_INFO("Record with mux.");
info->bMuxing = TRUE;
}
_MMCAMCORDER_PIPELINE_MAKE(sc, sc->encode_element, _MMCAMCORDER_ENCODE_MAIN_PIPE, "camcorder_pipeline", err);
err = _mmcamcorder_create_audiosrc_bin(handle);
- if (err != MM_ERROR_NONE) {
+ if (err != MM_ERROR_NONE)
return err;
- }
if (info->bMuxing) {
/* Muxing. can use encodebin. */
err = _mmcamcorder_create_encodesink_bin((MMHandleType)hcamcorder, MM_CAMCORDER_ENCBIN_PROFILE_AUDIO);
- if (err != MM_ERROR_NONE) {
+ if (err != MM_ERROR_NONE)
return err;
- }
+
+ /* Add and link elements */
+ gst_bin_add_many(GST_BIN(sc->encode_element[_MMCAMCORDER_ENCODE_MAIN_PIPE].gst),
+ sc->encode_element[_MMCAMCORDER_AUDIOSRC_BIN].gst,
+ sc->encode_element[_MMCAMCORDER_ENCSINK_BIN].gst,
+ NULL);
+
+ srcpad = gst_element_get_static_pad(sc->encode_element[_MMCAMCORDER_AUDIOSRC_BIN].gst, "src");
+ sinkpad = gst_element_get_static_pad(sc->encode_element[_MMCAMCORDER_ENCSINK_BIN].gst, "audio_sink0");
+ _MM_GST_PAD_LINK_UNREF(srcpad, sinkpad, err, pipeline_creation_error);
} else {
+ err = mm_camcorder_get_attributes(handle, NULL,
+ MMCAM_TARGET_FILENAME, &file_name, &file_name_len,
+ NULL);
+ if (err != MM_ERROR_NONE) {
+ MMCAM_LOG_ERROR("failed to get filename [0x%x]", err);
+ err = MM_ERROR_CAMCORDER_RESOURCE_CREATION;
+ goto pipeline_creation_error;
+ }
+
/* without muxing. can't use encodebin. */
aenc_elem = _mmcamcorder_get_type_element(handle, MM_CAM_AUDIO_ENCODER);
if (!aenc_elem) {
- _mmcam_dbg_err("Fail to get type element");
+ MMCAM_LOG_ERROR("Fail to get type element");
err = MM_ERROR_CAMCORDER_RESOURCE_CREATION;
goto pipeline_creation_error;
}
err = _mmcamcorder_conf_get_value_element_name(aenc_elem, &aenc_name);
if ((!err) || (!aenc_name)) {
- _mmcam_dbg_err("Fail to get element name");
+ MMCAM_LOG_ERROR("Fail to get element name");
err = MM_ERROR_CAMCORDER_RESOURCE_CREATION;
goto pipeline_creation_error;
}
+ element_list = g_list_append(element_list, &sc->encode_element[_MMCAMCORDER_AUDIOSRC_BIN]);
+
_MMCAMCORDER_ELEMENT_MAKE(sc, sc->encode_element, _MMCAMCORDER_ENCSINK_AQUE, "queue", NULL, element_list, err);
- if (strcmp(aenc_name, "wavenc") != 0) {
+ if (strcmp(aenc_name, "wavenc") != 0)
_MMCAMCORDER_ELEMENT_MAKE(sc, sc->encode_element, _MMCAMCORDER_ENCSINK_CONV, "audioconvert", NULL, element_list, err);
- }
_MMCAMCORDER_ELEMENT_MAKE(sc, sc->encode_element, _MMCAMCORDER_ENCSINK_AENC, aenc_name, NULL, element_list, err);
- _MMCAMCORDER_ELEMENT_MAKE(sc, sc->encode_element, _MMCAMCORDER_ENCSINK_SINK, "filesink", NULL, element_list, err);
- }
+ _mmcamcorder_conf_get_element(handle, hcamcorder->conf_main,
+ CONFIGURE_CATEGORY_MAIN_RECORD,
+ "RecordsinkElement",
+ &sink_elem);
+ _mmcamcorder_conf_get_value_element_name(sink_elem, &sink_name);
- /* Add and link elements */
- if (info->bMuxing) {
- /* IF MUX is indicated create MUX */
- gst_bin_add_many(GST_BIN(sc->encode_element[_MMCAMCORDER_ENCODE_MAIN_PIPE].gst),
- sc->encode_element[_MMCAMCORDER_AUDIOSRC_BIN].gst,
- sc->encode_element[_MMCAMCORDER_ENCSINK_BIN].gst,
- NULL);
+ MMCAM_LOG_INFO("encode sink : %s", sink_name);
- srcpad = gst_element_get_static_pad (sc->encode_element[_MMCAMCORDER_AUDIOSRC_BIN].gst, "src");
- sinkpad = gst_element_get_static_pad (sc->encode_element[_MMCAMCORDER_ENCSINK_BIN].gst, "audio_sink0");
- _MM_GST_PAD_LINK_UNREF(srcpad, sinkpad, err, pipeline_creation_error);
- } else {
- /* IF MUX in not chosen then record in raw amr file */
- if (!strcmp(aenc_name, "wavenc")) {
- gst_bin_add_many(GST_BIN(sc->encode_element[_MMCAMCORDER_ENCODE_MAIN_PIPE].gst),
- sc->encode_element[_MMCAMCORDER_AUDIOSRC_BIN].gst,
- sc->encode_element[_MMCAMCORDER_ENCSINK_AQUE].gst,
- sc->encode_element[_MMCAMCORDER_ENCSINK_AENC].gst,
- sc->encode_element[_MMCAMCORDER_ENCSINK_SINK].gst,
- NULL);
-
- if (!_MM_GST_ELEMENT_LINK_MANY(sc->encode_element[_MMCAMCORDER_AUDIOSRC_BIN].gst,
- sc->encode_element[_MMCAMCORDER_ENCSINK_AQUE].gst,
- sc->encode_element[_MMCAMCORDER_ENCSINK_AENC].gst,
- sc->encode_element[_MMCAMCORDER_ENCSINK_SINK].gst,
- NULL)) {
- err = MM_ERROR_CAMCORDER_GST_LINK;
- goto pipeline_creation_error;
- }
- } else {
- gst_bin_add_many(GST_BIN(sc->encode_element[_MMCAMCORDER_ENCODE_MAIN_PIPE].gst),
- sc->encode_element[_MMCAMCORDER_AUDIOSRC_BIN].gst,
- sc->encode_element[_MMCAMCORDER_ENCSINK_AQUE].gst,
- sc->encode_element[_MMCAMCORDER_ENCSINK_CONV].gst,
- sc->encode_element[_MMCAMCORDER_ENCSINK_AENC].gst,
- sc->encode_element[_MMCAMCORDER_ENCSINK_SINK].gst,
- NULL);
-
- if (!_MM_GST_ELEMENT_LINK_MANY(sc->encode_element[_MMCAMCORDER_AUDIOSRC_BIN].gst,
- sc->encode_element[_MMCAMCORDER_ENCSINK_AQUE].gst,
- sc->encode_element[_MMCAMCORDER_ENCSINK_CONV].gst,
- sc->encode_element[_MMCAMCORDER_ENCSINK_AENC].gst,
- sc->encode_element[_MMCAMCORDER_ENCSINK_SINK].gst,
- NULL)) {
- err = MM_ERROR_CAMCORDER_GST_LINK;
- goto pipeline_creation_error;
- }
+ _MMCAMCORDER_ELEMENT_MAKE(sc, sc->encode_element, _MMCAMCORDER_ENCSINK_SINK, sink_name, NULL, element_list, err);
+
+ _mmcamcorder_conf_set_value_element_property(sc->encode_element[_MMCAMCORDER_ENCSINK_SINK].gst, sink_elem);
+
+ /* add elements to encode pipeline */
+ if (!_mmcamcorder_add_elements_to_bin(GST_BIN(sc->encode_element[_MMCAMCORDER_ENCODE_MAIN_PIPE].gst), element_list)) {
+ MMCAM_LOG_ERROR("add encode elements error.");
+ err = MM_ERROR_CAMCORDER_RESOURCE_CREATION;
+ goto pipeline_creation_error;
+ }
+
+ /* link elements */
+ if (!_mmcamcorder_link_elements(element_list)) {
+ MMCAM_LOG_ERROR("encode element link error.");
+ err = MM_ERROR_CAMCORDER_GST_LINK;
+ goto pipeline_creation_error;
}
}
/* set data probe function */
srcpad = gst_element_get_static_pad(sc->encode_element[_MMCAMCORDER_AUDIOSRC_SRC].gst, "src");
MMCAMCORDER_ADD_BUFFER_PROBE(srcpad, _MMCAMCORDER_HANDLER_AUDIOREC,
- __mmcamcorder_audio_dataprobe_voicerecorder, hcamcorder);
+ __mmcamcorder_audio_dataprobe_voicerecorder, hcamcorder);
gst_object_unref(srcpad);
srcpad = NULL;
srcpad = gst_element_get_static_pad(sc->encode_element[_MMCAMCORDER_ENCSINK_AENC].gst, "src");
MMCAMCORDER_ADD_BUFFER_PROBE(srcpad, _MMCAMCORDER_HANDLER_AUDIOREC,
- __mmcamcorder_audio_dataprobe_record, hcamcorder);
+ __mmcamcorder_audio_dataprobe_record, hcamcorder);
+
+ /* for replay gain tag */
+ MMCAMCORDER_ADD_EVENT_PROBE(srcpad, _MMCAMCORDER_HANDLER_AUDIOREC,
+ __mmcamcorder_eventprobe_monitor, hcamcorder);
+
gst_object_unref(srcpad);
srcpad = NULL;
- bus = gst_pipeline_get_bus(GST_PIPELINE(sc->encode_element[_MMCAMCORDER_ENCODE_MAIN_PIPE].gst));
+ sinkpad = gst_element_get_static_pad(sc->encode_element[_MMCAMCORDER_ENCSINK_SINK].gst, "sink");
+ MMCAMCORDER_ADD_BUFFER_PROBE(sinkpad, _MMCAMCORDER_HANDLER_AUDIOREC,
+ __mmcamcorder_muxed_dataprobe, hcamcorder);
+ MMCAMCORDER_ADD_EVENT_PROBE(sinkpad, _MMCAMCORDER_HANDLER_AUDIOREC,
+ __mmcamcorder_eventprobe_monitor, hcamcorder);
+ gst_object_unref(sinkpad);
+ sinkpad = NULL;
- /* register message callback */
- hcamcorder->pipeline_cb_event_id = gst_bus_add_watch(bus, (GstBusFunc)_mmcamcorder_pipeline_cb_message, hcamcorder);
+ bus = gst_pipeline_get_bus(GST_PIPELINE(sc->encode_element[_MMCAMCORDER_ENCODE_MAIN_PIPE].gst));
/* set sync callback */
- gst_bus_set_sync_handler(bus, _mmcamcorder_audio_pipeline_bus_sync_callback, hcamcorder, NULL);
+ gst_bus_set_sync_handler(bus, _mmcamcorder_encode_pipeline_bus_sync_callback, hcamcorder, NULL);
gst_object_unref(bus);
bus = NULL;
int
_mmcamcorder_create_audio_pipeline(MMHandleType handle)
{
- mmf_camcorder_t *hcamcorder= MMF_CAMCORDER(handle);
+ mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
_MMCamcorderSubContext *sc = NULL;
mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
info = sc->info_audio;
- _mmcam_dbg_log("start");
+ MMCAM_LOG_INFO("start");
if (sc->encode_element[_MMCAMCORDER_ENCODE_MAIN_PIPE].gst) {
- _mmcam_dbg_warn("release audio pipeline");
+ MMCAM_LOG_WARNING("release audio pipeline");
_mmcamcorder_gst_set_state(handle, sc->encode_element[_MMCAMCORDER_ENCODE_MAIN_PIPE].gst, GST_STATE_NULL);
gst_element_release_request_pad(sc->encode_element[_MMCAMCORDER_ENCSINK_ENCBIN].gst, reqpad);
gst_object_unref(reqpad);
- if(GST_IS_ELEMENT(sc->encode_element[_MMCAMCORDER_ENCSINK_MUX].gst) &&
+ if (GST_IS_ELEMENT(sc->encode_element[_MMCAMCORDER_ENCSINK_MUX].gst) &&
GST_OBJECT_REFCOUNT(sc->encode_element[_MMCAMCORDER_ENCSINK_MUX].gst) > 1) {
gst_object_unref(sc->encode_element[_MMCAMCORDER_ENCSINK_MUX].gst);
}
gst_object_unref(sc->encode_element[_MMCAMCORDER_ENCODE_MAIN_PIPE].gst);
}
- _mmcam_dbg_log("done");
+ MMCAM_LOG_INFO("done");
return;
}
-/**
- * This function operates each command on audio mode.
- *
- * @param c [in] Handle of camcorder context.
- * @param command [in] command type received from Multimedia Framework.
- *
- * @return This function returns MM_ERROR_NONE on success, or the other values
- * on error.
- * @remark
- * @see _mmcamcorder_set_functions()
- *
- */
- /* ADDED BY SISO */
-
-
-void* _MMCamcorderStartHelperFunc(void *handle)
-{
- mmf_camcorder_t *hcamcorder= MMF_CAMCORDER(handle);
- _mmcamcorder_set_state((MMHandleType)hcamcorder, hcamcorder->target_state);
-
- return NULL;
-}
-
-void* _MMCamcorderStopHelperFunc(void *handle)
-{
- mmf_camcorder_t *hcamcorder= MMF_CAMCORDER(handle);
- _mmcamcorder_set_state((MMHandleType)hcamcorder, hcamcorder->target_state);
-
- return NULL;
-}
-
-
int
_mmcamcorder_audio_command(MMHandleType handle, int command)
{
int cmd = command;
int ret = MM_ERROR_NONE;
- int err = 0;
- guint64 free_space = 0;
char *err_attr_name = NULL;
GstElement *pipeline = NULL;
pipeline = sc->element[_MMCAMCORDER_MAIN_PIPE].gst;
info = sc->info_audio;
- _mmcam_dbg_log("");
+ MMCAM_LOG_INFO("");
pipeline = sc->encode_element[_MMCAMCORDER_ENCODE_MAIN_PIPE].gst;
audioSrc = sc->encode_element[_MMCAMCORDER_AUDIOSRC_SRC].gst;
case _MMCamcorder_CMD_RECORD:
/* check status for resume case */
if (_mmcamcorder_get_state((MMHandleType)hcamcorder) != MM_CAMCORDER_STATE_PAUSED) {
+ gboolean storage_validity = FALSE;
guint imax_size = 0;
guint imax_time = 0;
- char *temp_filename = NULL;
- char *dir_name = NULL;
- int file_system_type = 0;
+ char *target_filename = NULL;
int filename_length = 0;
int root_directory_length = 0;
- if(sc->pipeline_time) {
+ if (sc->pipeline_time)
gst_element_set_start_time(pipeline, sc->pipeline_time);
- }
+
sc->pipeline_time = RESET_PAUSE_TIME;
ret = mm_camcorder_get_attributes(handle, &err_attr_name,
- MMCAM_TARGET_MAX_SIZE, &imax_size,
- MMCAM_TARGET_TIME_LIMIT, &imax_time,
- MMCAM_FILE_FORMAT, &(info->fileformat),
- MMCAM_TARGET_FILENAME, &temp_filename, &filename_length,
- MMCAM_ROOT_DIRECTORY, &hcamcorder->root_directory, &root_directory_length,
- NULL);
+ MMCAM_TARGET_MAX_SIZE, &imax_size,
+ MMCAM_TARGET_TIME_LIMIT, &imax_time,
+ MMCAM_FILE_FORMAT, &(info->fileformat),
+ MMCAM_TARGET_FILENAME, &target_filename, &filename_length,
+ MMCAM_ROOT_DIRECTORY, &hcamcorder->root_directory, &root_directory_length,
+ NULL);
if (ret != MM_ERROR_NONE) {
- _mmcam_dbg_warn("failed to get attribute. (%s:%x)", err_attr_name, ret);
+ MMCAM_LOG_WARNING("failed to get attribute. (%s:%x)", err_attr_name, ret);
SAFE_FREE(err_attr_name);
goto _ERR_CAMCORDER_AUDIO_COMMAND;
}
- if (temp_filename == NULL) {
- _mmcam_dbg_err("filename is not set");
+ if (!target_filename && !hcamcorder->mstream_cb) {
+ MMCAM_LOG_ERROR("filename is not set and muxed stream cb is NULL");
ret = MM_ERROR_CAMCORDER_INVALID_ARGUMENT;
goto _ERR_CAMCORDER_AUDIO_COMMAND;
}
- info->filename = strdup(temp_filename);
- if (!info->filename) {
- _mmcam_dbg_err("STRDUP was failed");
- goto _ERR_CAMCORDER_AUDIO_COMMAND;
- }
+ SAFE_G_FREE(info->filename);
+
+ if (target_filename) {
+ info->filename = g_strdup(target_filename);
+ if (!info->filename) {
+ MMCAM_LOG_ERROR("STRDUP was failed for [%s]", target_filename);
+ goto _ERR_CAMCORDER_AUDIO_COMMAND;
+ }
- _mmcam_dbg_log("Record start : set file name using attribute - %s\n ",info->filename);
+ MMCAM_LOG_INFO("Record start : file name [%s]", info->filename);
- MMCAMCORDER_G_OBJECT_SET_POINTER(sc->encode_element[_MMCAMCORDER_ENCSINK_SINK].gst, "location", info->filename);
+ MMCAMCORDER_G_OBJECT_SET_POINTER(sc->encode_element[_MMCAMCORDER_ENCSINK_SINK].gst, "location", info->filename);
+ } else {
+ MMCAM_LOG_INFO("Recorded data will be written in [%s]", _MMCamcorder_FILENAME_NULL);
+ MMCAMCORDER_G_OBJECT_SET_POINTER(sc->encode_element[_MMCAMCORDER_ENCSINK_SINK].gst, "location", _MMCamcorder_FILENAME_NULL);
+ }
sc->ferror_send = FALSE;
sc->ferror_count = 0;
sc->bget_eos = FALSE;
- info->filesize =0;
+ sc->muxed_stream_offset = 0;
+ info->filesize = 0;
/* set max size */
- if (imax_size <= 0) {
+ if (imax_size <= 0)
info->max_size = 0; /* do not check */
- } else {
+ else
info->max_size = ((guint64)imax_size) << 10; /* to byte */
- }
/* set max time */
- if (imax_time <= 0) {
+ if (imax_time <= 0)
info->max_time = 0; /* do not check */
- } else {
+ else
info->max_time = ((guint64)imax_time) * 1000; /* to millisecond */
- }
-
- /* TODO : check free space before recording start */
- dir_name = g_path_get_dirname(info->filename);
- if (dir_name) {
- err = _mmcamcorder_get_freespace(dir_name, hcamcorder->root_directory, &free_space);
-
- _mmcam_dbg_warn("current space - %s [%" G_GUINT64_FORMAT "]", dir_name, free_space);
-
- if (_mmcamcorder_get_file_system_type(dir_name, &file_system_type) == 0) {
- /* MSDOS_SUPER_MAGIC : 0x4d44 */
- if (file_system_type == MSDOS_SUPER_MAGIC &&
- (info->max_size == 0 || info->max_size > FAT32_FILE_SYSTEM_MAX_SIZE)) {
- _mmcam_dbg_warn("FAT32 and too large max[%"G_GUINT64_FORMAT"], set max as %"G_GUINT64_FORMAT,
- info->max_size, FAT32_FILE_SYSTEM_MAX_SIZE);
- info->max_size = FAT32_FILE_SYSTEM_MAX_SIZE;
- } else {
- _mmcam_dbg_warn("file system 0x%x, max size %"G_GUINT64_FORMAT,
- file_system_type, info->max_size);
- }
- } else {
- _mmcam_dbg_warn("_mmcamcorder_get_file_system_type failed");
- }
- g_free(dir_name);
- dir_name = NULL;
- } else {
- _mmcam_dbg_err("failed to get directory name");
- err = -1;
+ ret = _mmcamcorder_get_storage_validity(handle, info->filename,
+ _MMCAMCORDER_AUDIO_MINIMUM_SPACE, &storage_validity);
+ if (ret != MM_ERROR_NONE || !storage_validity) {
+ MMCAM_LOG_ERROR("storage validation failed[0x%x]:%d", ret, storage_validity);
+ return ret;
}
- if ((err == -1) || free_space <= (_MMCAMCORDER_AUDIO_MINIMUM_SPACE+(5*1024))) {
- _mmcam_dbg_err("OUT of STORAGE [err:%d or free space [%" G_GUINT64_FORMAT "] is smaller than [%d]",
- err, free_space, (_MMCAMCORDER_AUDIO_MINIMUM_SPACE+(5*1024)));
- return MM_ERROR_OUT_OF_STORAGE;
- }
+ _mmcamcorder_adjust_recording_max_size(info->filename, &info->max_size);
}
ret = _mmcamcorder_gst_set_state(handle, pipeline, GST_STATE_PLAYING);
- if (ret != MM_ERROR_NONE) {
+ if (ret != MM_ERROR_NONE)
goto _ERR_CAMCORDER_AUDIO_COMMAND;
- }
+
break;
case _MMCamcorder_CMD_PAUSE:
GstClock *pipe_clock = NULL;
int count = 0;
- if (info->b_commiting) {
- _mmcam_dbg_warn("now on commiting previous file!!(cmd : %d)", cmd);
+ if (info->b_committing) {
+ MMCAM_LOG_WARNING("now on commiting previous file!!(cmd : %d)", cmd);
return MM_ERROR_CAMCORDER_CMD_IS_RUNNING;
}
if (info->filesize > 0) {
break;
} else if (count == _MMCAMCORDER_RETRIAL_COUNT) {
- _mmcam_dbg_err("Pause fail, wait 200 ms, but file size is %lld",
- info->filesize);
+ MMCAM_LOG_ERROR("Pause fail, wait 200 ms, but file size is %"G_GUINT64_FORMAT,
+ info->filesize);
return MM_ERROR_CAMCORDER_INVALID_CONDITION;
} else {
- _mmcam_dbg_warn("Wait for enough audio frame, retry count[%d], file size is %lld",
- count, info->filesize);
+ MMCAM_LOG_WARNING("Wait for enough audio frame, retry count[%d], file size is %"G_GUINT64_FORMAT,
+ count, info->filesize);
}
usleep(_MMCAMCORDER_FRAME_WAIT_TIME);
}
ret = _mmcamcorder_gst_set_state(handle, pipeline, GST_STATE_PAUSED);
- if (ret != MM_ERROR_NONE) {
+ if (ret != MM_ERROR_NONE)
goto _ERR_CAMCORDER_AUDIO_COMMAND;
- }
/* FIXME: consider delay. */
pipe_clock = gst_pipeline_get_clock(GST_PIPELINE(pipeline));
}
case _MMCamcorder_CMD_CANCEL:
- if (info->b_commiting) {
- _mmcam_dbg_warn("now on commiting previous file!!(cmd : %d)", cmd);
+ if (info->b_committing) {
+ MMCAM_LOG_WARNING("now on commiting previous file!!(cmd : %d)", cmd);
return MM_ERROR_CAMCORDER_CMD_IS_RUNNING;
}
ret = _mmcamcorder_gst_set_state(handle, pipeline, GST_STATE_READY);
- if (ret != MM_ERROR_NONE) {
+ if (ret != MM_ERROR_NONE)
goto _ERR_CAMCORDER_AUDIO_COMMAND;
- }
- if (info->bMuxing) {
+ if (info->bMuxing)
MMCAMCORDER_G_OBJECT_SET(sc->encode_element[_MMCAMCORDER_ENCSINK_ENCBIN].gst, "block", FALSE);
- } else {
+ else
MMCAMCORDER_G_OBJECT_SET(sc->encode_element[_MMCAMCORDER_ENCSINK_AQUE].gst, "empty-buffers", FALSE);
- }
- _mmcamcorder_gst_set_state(handle, sc->encode_element[_MMCAMCORDER_ENCSINK_SINK].gst, GST_STATE_NULL);
+ _mmcamcorder_gst_set_state(handle, pipeline, GST_STATE_NULL);
+
+ /* Reconstruct audio encoding pipeline,
+ because some muxer(ex:avmux_amr) should be created newly for next recording after cancel.
+ Otherwise, it returns error when start next recording. */
+ _mmcamcorder_destroy_audio_pipeline(handle);
+ ret = _mmcamcorder_create_audio_pipeline(handle);
sc->pipeline_time = 0;
sc->pause_time = 0;
sc->isMaxtimePausing = FALSE;
if (info->filename) {
- _mmcam_dbg_log("file delete(%s)", info->filename);
+ MMCAM_LOG_INFO("file delete(%s)", info->filename);
unlink(info->filename);
- g_free(info->filename);
- info->filename = NULL;
+ SAFE_G_FREE(info->filename);
}
break;
case _MMCamcorder_CMD_COMMIT:
{
int count = 0;
+ guint64 free_space = 0;
+ MMCAM_LOG_INFO("_MMCamcorder_CMD_COMMIT");
- _mmcam_dbg_log("_MMCamcorder_CMD_COMMIT");
-
- if (info->b_commiting) {
- _mmcam_dbg_warn("now on commiting previous file!!(cmd : %d)", cmd);
+ if (info->b_committing) {
+ MMCAM_LOG_WARNING("now on commiting previous file!!(cmd : %d)", cmd);
return MM_ERROR_CAMCORDER_CMD_IS_RUNNING;
} else {
- _mmcam_dbg_log("_MMCamcorder_CMD_COMMIT : start");
- info->b_commiting = TRUE;
+ MMCAM_LOG_INFO("_MMCamcorder_CMD_COMMIT : start");
+ info->b_committing = TRUE;
}
for (count = 0 ; count <= _MMCAMCORDER_RETRIAL_COUNT ; count++) {
if (info->filesize > 0) {
break;
} else if (count == _MMCAMCORDER_RETRIAL_COUNT) {
- _mmcam_dbg_err("Commit fail, waited 200 ms, but file size is %lld", info->filesize);
- info->b_commiting = FALSE;
+ MMCAM_LOG_ERROR("Commit fail, waited 200 ms, but file size is %"G_GUINT64_FORMAT, info->filesize);
+ info->b_committing = FALSE;
return MM_ERROR_CAMCORDER_INVALID_CONDITION;
} else {
- _mmcam_dbg_warn("Waiting for enough audio frame, re-count[%d], file size is %lld",
- count, info->filesize);
+ MMCAM_LOG_WARNING("Waiting for enough audio frame, re-count[%d], file size is %"G_GUINT64_FORMAT,
+ count, info->filesize);
}
usleep(_MMCAMCORDER_FRAME_WAIT_TIME);
}
+ _mmcamcorder_get_freespace(hcamcorder->storage_info.type, &free_space);
+ if (free_space < _MMCAMCORDER_AUDIO_MINIMUM_SPACE) {
+ MMCAM_LOG_WARNING("_MMCamcorder_CMD_COMMIT out of storage [%" G_GUINT64_FORMAT "]", free_space);
+ ret = MM_ERROR_OUT_OF_STORAGE;
+ goto _ERR_CAMCORDER_AUDIO_COMMAND;
+ }
+
if (audioSrc) {
if (gst_element_send_event(audioSrc, gst_event_new_eos()) == FALSE) {
- _mmcam_dbg_err("send EOS failed");
- info->b_commiting = FALSE;
+ MMCAM_LOG_ERROR("send EOS failed");
+ info->b_committing = FALSE;
ret = MM_ERROR_CAMCORDER_INTERNAL;
goto _ERR_CAMCORDER_AUDIO_COMMAND;
}
- _mmcam_dbg_log("send EOS done");
+ MMCAM_LOG_INFO("send EOS done");
/* for pause -> commit case */
if (_mmcamcorder_get_state((MMHandleType)hcamcorder) == MM_CAMCORDER_STATE_PAUSED) {
ret = _mmcamcorder_gst_set_state(handle, pipeline, GST_STATE_PLAYING);
if (ret != MM_ERROR_NONE) {
- info->b_commiting = FALSE;
+ info->b_committing = FALSE;
goto _ERR_CAMCORDER_AUDIO_COMMAND;
}
}
} else {
- _mmcam_dbg_err("No audio stream source");
- info->b_commiting = FALSE;
+ MMCAM_LOG_ERROR("No audio stream source");
+ info->b_committing = FALSE;
ret = MM_ERROR_CAMCORDER_INTERNAL;
goto _ERR_CAMCORDER_AUDIO_COMMAND;
}
/* wait until finishing EOS */
- _mmcam_dbg_log("Start to wait EOS");
- if ((ret =_mmcamcorder_get_eos_message(handle)) != MM_ERROR_NONE) {
- info->b_commiting = FALSE;
+ MMCAM_LOG_INFO("Start to wait EOS");
+ if ((ret = _mmcamcorder_get_eos_message(handle)) != MM_ERROR_NONE) {
+ info->b_committing = FALSE;
goto _ERR_CAMCORDER_AUDIO_COMMAND;
}
break;
}
case _MMCamcorder_CMD_PREVIEW_START:
- //MM_CAMCORDER_START_CHANGE_STATE;
+ /*MM_CAMCORDER_START_CHANGE_STATE;*/
break;
case _MMCamcorder_CMD_PREVIEW_STOP:
- //MM_CAMCORDER_STOP_CHANGE_STATE;
- //void
+ /*MM_CAMCORDER_STOP_CHANGE_STATE;*/
+ /*void*/
break;
default:
int _mmcamcorder_audio_handle_eos(MMHandleType handle)
{
int err = MM_ERROR_NONE;
- mmf_camcorder_t *hcamcorder= MMF_CAMCORDER(handle);
+ mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
_MMCamcorderSubContext *sc = NULL;
_MMCamcorderAudioInfo *info = NULL;
GstElement *pipeline = NULL;
mmf_return_val_if_fail(sc, FALSE);
mmf_return_val_if_fail(sc->info_audio, FALSE);
- _mmcam_dbg_err("");
+ MMCAM_LOG_ERROR("");
info = sc->info_audio;
pipeline = sc->encode_element[_MMCAMCORDER_ENCODE_MAIN_PIPE].gst;
err = _mmcamcorder_gst_set_state(handle, pipeline, GST_STATE_READY);
- if (err != MM_ERROR_NONE) {
- _mmcam_dbg_warn("Failed:_MMCamcorder_CMD_COMMIT:GST_STATE_READY. err[%x]", err);
- }
+ if (err != MM_ERROR_NONE)
+ MMCAM_LOG_WARNING("Failed:_MMCamcorder_CMD_COMMIT:GST_STATE_READY. err[%x]", err);
/* Send recording report message to application */
msg.id = MM_MESSAGE_CAMCORDER_AUDIO_CAPTURED;
- report = (MMCamRecordingReport*) malloc(sizeof(MMCamRecordingReport));
- if (!report) {
- _mmcam_dbg_err("Recording report fail(%s). Out of memory.", info->filename);
- return FALSE;
- }
+ report = (MMCamRecordingReport *)g_malloc(sizeof(MMCamRecordingReport));
/* START TAG HERE */
- // MM_AUDIO_CODEC_AAC + MM_FILE_FORMAT_MP4
- if(info->fileformat == MM_FILE_FORMAT_3GP || info->fileformat == MM_FILE_FORMAT_MP4){
+ /* MM_AUDIO_CODEC_AAC + MM_FILE_FORMAT_MP4 */
+ if (info->fileformat == MM_FILE_FORMAT_3GP || info->fileformat == MM_FILE_FORMAT_MP4)
__mmcamcorder_audio_add_metadata_info_m4a(handle);
- }
/* END TAG HERE */
- report->recording_filename = strdup(info->filename);
- msg.param.data= report;
+ report->recording_filename = g_strdup(info->filename);
+ msg.param.data = report;
_mmcamcorder_send_message(handle, &msg);
- if (info->bMuxing) {
+ if (info->bMuxing)
MMCAMCORDER_G_OBJECT_SET(sc->encode_element[_MMCAMCORDER_ENCSINK_ENCBIN].gst, "block", FALSE);
- } else {
+ else
MMCAMCORDER_G_OBJECT_SET(sc->encode_element[_MMCAMCORDER_ENCSINK_AQUE].gst, "empty-buffers", FALSE);
- }
_mmcamcorder_gst_set_state(handle, pipeline, GST_STATE_NULL);
sc->isMaxsizePausing = FALSE;
sc->isMaxtimePausing = FALSE;
- g_free(info->filename);
- info->filename = NULL;
+ SAFE_G_FREE(info->filename);
- _mmcam_dbg_err("_MMCamcorder_CMD_COMMIT : end");
+ MMCAM_LOG_ERROR("_MMCamcorder_CMD_COMMIT : end");
- info->b_commiting = FALSE;
+ info->b_committing = FALSE;
return TRUE;
}
if (format == MM_CAMCORDER_AUDIO_FORMAT_PCM_S16_LE)
depthByte = 2;
- else //MM_CAMCORDER_AUDIO_FORMAT_PCM_U8
+ else /*MM_CAMCORDER_AUDIO_FORMAT_PCM_U8*/
depthByte = 1;
- for( ; i < size ; i += (depthByte<<1) )
- {
- if (depthByte == 1)
- {
+ for ( ; i < size ; i += (depthByte<<1)) {
+ if (depthByte == 1) {
pcm8 = (char *)(raw + i);
- square_sum += (*pcm8)*(*pcm8);
- }
- else //2byte
- {
+ square_sum += (*pcm8) * (*pcm8);
+ } else { /*2byte*/
pcm16 = (short*)(raw + i);
- square_sum += (*pcm16)*(*pcm16);
+ square_sum += (*pcm16) * (*pcm16);
}
count++;
}
if (count > 0) {
- rms = sqrt( (double)square_sum/(double)count );
- if (depthByte == 1) {
- db = 20 * log10( rms/MAX_AMPLITUDE_MEAN_08BIT );
- } else {
- db = 20 * log10( rms/MAX_AMPLITUDE_MEAN_16BIT );
- }
+ rms = sqrt((double)square_sum/(double)count);
+
+ if (depthByte == 1)
+ db = 20 * log10(rms/MAX_AMPLITUDE_MEAN_08BIT);
+ else
+ db = 20 * log10(rms/MAX_AMPLITUDE_MEAN_16BIT);
}
/*
- _mmcam_dbg_log("size[%d],depthByte[%d],count[%d],rms[%f],db[%f]",
- size, depthByte, count, rms, db);
+ MMCAM_LOG_INFO("size[%d],depthByte[%d],count[%d],rms[%f],db[%f]",
+ size, depthByte, count, rms, db);
*/
return db;
{
mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(u_data);
double volume = 0.0;
+ int current_state = MM_CAMCORDER_STATE_NONE;
int format = 0;
int channel = 0;
float curdcb = 0.0;
mmf_return_val_if_fail(hcamcorder, GST_PAD_PROBE_OK);
+ current_state = _mmcamcorder_get_state((MMHandleType)hcamcorder);
+ if (current_state < MM_CAMCORDER_STATE_PREPARE) {
+ MMCAM_LOG_WARNING("Not ready for stream callback");
+ return GST_PAD_PROBE_OK;
+ }
+
memset(&mapinfo, 0x0, sizeof(GstMapInfo));
/* Set volume to audio input */
err = mm_camcorder_get_attributes((MMHandleType)hcamcorder, &err_name,
- MMCAM_AUDIO_VOLUME, &volume,
- MMCAM_AUDIO_FORMAT, &format,
- MMCAM_AUDIO_CHANNEL, &channel,
- NULL);
+ MMCAM_AUDIO_VOLUME, &volume,
+ MMCAM_AUDIO_FORMAT, &format,
+ MMCAM_AUDIO_CHANNEL, &channel,
+ NULL);
+
if (err < 0) {
- _mmcam_dbg_warn("Get attrs fail. (%s:%x)", err_name, err);
+ MMCAM_LOG_WARNING("Get attrs fail. (%s:%x)", err_name, err);
SAFE_FREE(err_name);
- return err;
+ return GST_PAD_PROBE_OK;
}
- gst_buffer_map(buffer, &mapinfo, GST_MAP_READWRITE);
+ if (!gst_buffer_map(buffer, &mapinfo, GST_MAP_READWRITE)) {
+ MMCAM_LOG_WARNING("map failed : buffer[%p]", buffer);
+ return GST_PAD_PROBE_OK;
+ }
- if(volume == 0){
+ if (volume == 0)
memset(mapinfo.data, 0, mapinfo.size);
- }
/* Get current volume level of real input stream */
curdcb = __mmcamcorder_get_decibel(mapinfo.data, mapinfo.size, format);
msg.param.rec_volume_dB = curdcb;
_mmcamcorder_send_message((MMHandleType)hcamcorder, &msg);
- /* CALL audio stream callback */
- if ((hcamcorder->astream_cb) && buffer && mapinfo.data && mapinfo.size > 0)
- {
- MMCamcorderAudioStreamDataType stream;
+ _MMCAMCORDER_LOCK_ASTREAM_CALLBACK(hcamcorder);
- if (_mmcamcorder_get_state((MMHandleType)hcamcorder) < MM_CAMCORDER_STATE_PREPARE)
- {
- _mmcam_dbg_warn("Not ready for stream callback");
- gst_buffer_unmap(buffer, &mapinfo);
- return GST_PAD_PROBE_OK;
- }
+ MMCAM_LOG_DEBUG("audio stream cb[%p][%"GST_TIME_FORMAT"] - fmt[%d], ch[%d], size[%"G_GSIZE_FORMAT"], dB[%f]",
+ hcamcorder->astream_cb, GST_TIME_ARGS(GST_BUFFER_PTS(buffer)), format, channel, mapinfo.size, curdcb);
- /*
- _mmcam_dbg_log("Call audio steramCb, data[%p], format[%d], channel[%d], length[%d], volume_dB[%f]",
- GST_BUFFER_DATA(buffer), format, channel, GST_BUFFER_SIZE(buffer), curdcb);
- */
+ /* CALL audio stream callback */
+ if (hcamcorder->astream_cb) {
+ MMCamcorderAudioStreamDataType stream;
stream.data = (void *)mapinfo.data;
stream.format = format;
stream.channel = channel;
- stream.length = mapinfo.size;
- stream.timestamp = (unsigned int)(GST_BUFFER_PTS(buffer)/1000000); //nano -> msecond
+ stream.length = (unsigned int)mapinfo.size;
+ stream.timestamp = (unsigned int)(GST_TIME_AS_MSECONDS(GST_BUFFER_PTS(buffer)));
stream.volume_dB = curdcb;
- _MMCAMCORDER_LOCK_ASTREAM_CALLBACK( hcamcorder );
-
- if(hcamcorder->astream_cb)
- {
- hcamcorder->astream_cb(&stream, hcamcorder->astream_cb_param);
- }
-
- _MMCAMCORDER_UNLOCK_ASTREAM_CALLBACK( hcamcorder );
+ hcamcorder->astream_cb(&stream, hcamcorder->astream_cb_param);
}
+ _MMCAMCORDER_UNLOCK_ASTREAM_CALLBACK(hcamcorder);
+
gst_buffer_unmap(buffer, &mapinfo);
+
return GST_PAD_PROBE_OK;
}
guint64 free_space = 0;
guint64 buffer_size = 0;
guint64 trailer_size = 0;
- char *filename = NULL;
unsigned long long remained_time = 0;
+ int get_trailer_size = 0;
_MMCamcorderSubContext *sc = NULL;
mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(u_data);
audioinfo = sc->info_audio;
if (sc->isMaxtimePausing || sc->isMaxsizePausing) {
- _mmcam_dbg_warn("isMaxtimePausing[%d],isMaxsizePausing[%d]",
- sc->isMaxtimePausing, sc->isMaxsizePausing);
+ MMCAM_LOG_WARNING("isMaxtimePausing[%d],isMaxsizePausing[%d]",
+ sc->isMaxtimePausing, sc->isMaxsizePausing);
return GST_PAD_PROBE_DROP;
}
buffer_size = gst_buffer_get_size(buffer);
if (audioinfo->filesize == 0) {
- if (audioinfo->fileformat == MM_FILE_FORMAT_WAV) {
+ if (audioinfo->fileformat == MM_FILE_FORMAT_WAV)
audioinfo->filesize += 44; /* wave header size */
- } else if (audioinfo->fileformat == MM_FILE_FORMAT_AMR) {
+ else if (audioinfo->fileformat == MM_FILE_FORMAT_AMR)
audioinfo->filesize += 6; /* amr header size */
- }
audioinfo->filesize += buffer_size;
return GST_PAD_PROBE_OK;
}
if (sc->ferror_send) {
- _mmcam_dbg_warn("file write error, drop frames");
+ MMCAM_LOG_WARNING("file write error, drop frames");
return GST_PAD_PROBE_DROP;
}
/* get trailer size */
- if (audioinfo->fileformat == MM_FILE_FORMAT_3GP ||
- audioinfo->fileformat == MM_FILE_FORMAT_MP4 ||
- audioinfo->fileformat == MM_FILE_FORMAT_AAC) {
+ get_trailer_size = (
+ audioinfo->fileformat == MM_FILE_FORMAT_3GP ||
+ audioinfo->fileformat == MM_FILE_FORMAT_MP4 ||
+ audioinfo->fileformat == MM_FILE_FORMAT_AAC) ? TRUE : FALSE;
+ if (get_trailer_size) {
MMCAMCORDER_G_OBJECT_GET(sc->encode_element[_MMCAMCORDER_ENCSINK_MUX].gst, "expected-trailer-size", &trailer_size);
- /*_mmcam_dbg_log("trailer_size %d", trailer_size);*/
+ MMCAM_LOG_VERBOSE("trailer_size %"G_GUINT64_FORMAT, trailer_size);
} else {
trailer_size = 0; /* no trailer */
}
- filename = audioinfo->filename;
-
/* to minimizing free space check overhead */
count = count % _MMCAMCORDER_FREE_SPACE_CHECK_INTERVAL;
if (count++ == 0) {
- char *dir_name = g_path_get_dirname(filename);
gint free_space_ret = 0;
+ storage_state_e storage_state = STORAGE_STATE_UNMOUNTABLE;
- if (dir_name) {
- free_space_ret = _mmcamcorder_get_freespace(dir_name, hcamcorder->root_directory, &free_space);
- g_free(dir_name);
- dir_name = NULL;
- } else {
- _mmcam_dbg_err("failed to get dir name from [%s]", filename);
- free_space_ret = -1;
- }
-
- /*_mmcam_dbg_log("check free space for recording");*/
-
- switch (free_space_ret) {
- case -2: /* file not exist */
- case -1: /* failed to get free space */
- _mmcam_dbg_err("Error occured. [%d]", free_space_ret);
+ /* check free space */
+ free_space_ret = _mmcamcorder_get_freespace(hcamcorder->storage_info.type, &free_space);
+ if (free_space_ret != 0) {
+ MMCAM_LOG_ERROR("Error occurred. [%d]", free_space_ret);
if (sc->ferror_count == 2 && sc->ferror_send == FALSE) {
sc->ferror_send = TRUE;
+
msg.id = MM_MESSAGE_CAMCORDER_ERROR;
- if (free_space_ret == -2) {
- msg.param.code = MM_ERROR_FILE_NOT_FOUND;
- } else {
- msg.param.code = MM_ERROR_FILE_READ;
- }
+ msg.param.code = MM_ERROR_FILE_READ;
+
_mmcamcorder_send_message((MMHandleType)hcamcorder, &msg);
} else {
sc->ferror_count++;
}
return GST_PAD_PROBE_DROP; /* skip this buffer */
+ }
+
+ if (free_space == 0) {
+ /* check storage state */
+ storage_get_state(hcamcorder->storage_info.id, &storage_state);
+
+ MMCAM_LOG_WARNING("storage state %d", storage_state);
+
+ if (storage_state == STORAGE_STATE_REMOVED ||
+ storage_state == STORAGE_STATE_UNMOUNTABLE) {
+ MMCAM_LOG_ERROR("storage was removed!");
+
+ _MMCAMCORDER_LOCK(hcamcorder);
+
+ if (sc->ferror_send == FALSE) {
+ MMCAM_LOG_ERROR("OUT_OF_STORAGE error");
- default: /* succeeded to get free space */
- /* check free space for recording */
- if (free_space < (guint64)(_MMCAMCORDER_AUDIO_MINIMUM_SPACE + buffer_size + trailer_size)) {
- _mmcam_dbg_warn("No more space for recording!!!");
- _mmcam_dbg_warn("Free Space : [%" G_GUINT64_FORMAT "], file size : [%" G_GUINT64_FORMAT "]",
- free_space, audioinfo->filesize);
+ sc->ferror_send = TRUE;
- if (audioinfo->bMuxing) {
- MMCAMCORDER_G_OBJECT_SET(sc->encode_element[_MMCAMCORDER_ENCSINK_ENCBIN].gst, "block", TRUE);
+ _MMCAMCORDER_UNLOCK(hcamcorder);
+
+ msg.id = MM_MESSAGE_CAMCORDER_ERROR;
+ msg.param.code = MM_ERROR_OUT_OF_STORAGE;
+
+ _mmcamcorder_send_message((MMHandleType)hcamcorder, &msg);
} else {
- MMCAMCORDER_G_OBJECT_SET(sc->encode_element[_MMCAMCORDER_ENCSINK_AQUE].gst, "empty-buffers", TRUE);
+ _MMCAMCORDER_UNLOCK(hcamcorder);
+ MMCAM_LOG_WARNING("error was already sent");
}
- sc->isMaxsizePausing = TRUE;
- msg.id = MM_MESSAGE_CAMCORDER_NO_FREE_SPACE;
- _mmcamcorder_send_message((MMHandleType)hcamcorder, &msg);
-
- return GST_PAD_PROBE_DROP; /* skip this buffer */
+ return GST_PAD_PROBE_DROP;
}
- break;
+ }
+
+ if (free_space < (guint64)(_MMCAMCORDER_AUDIO_MINIMUM_SPACE + buffer_size + trailer_size)) {
+ MMCAM_LOG_WARNING("No more space for recording!!!");
+ MMCAM_LOG_WARNING("Free Space : [%" G_GUINT64_FORMAT "], file size : [%" G_GUINT64_FORMAT "]",
+ free_space, audioinfo->filesize);
+
+ if (audioinfo->bMuxing)
+ MMCAMCORDER_G_OBJECT_SET(sc->encode_element[_MMCAMCORDER_ENCSINK_ENCBIN].gst, "block", TRUE);
+ else
+ MMCAMCORDER_G_OBJECT_SET(sc->encode_element[_MMCAMCORDER_ENCSINK_AQUE].gst, "empty-buffers", TRUE);
+
+ sc->isMaxsizePausing = TRUE;
+ msg.id = MM_MESSAGE_CAMCORDER_NO_FREE_SPACE;
+ _mmcamcorder_send_message((MMHandleType)hcamcorder, &msg);
+
+ return GST_PAD_PROBE_DROP; /* skip this buffer */
}
}
if (!GST_CLOCK_TIME_IS_VALID(GST_BUFFER_PTS(buffer))) {
- _mmcam_dbg_err("Buffer timestamp is invalid, check it");
+ MMCAM_LOG_ERROR("Buffer timestamp is invalid, check it");
return GST_PAD_PROBE_DROP;
}
remained_time = (unsigned long long)((long double)rec_pipe_time * (max_size/current_size)) - rec_pipe_time;
}
- /*_mmcam_dbg_log("remained time : %u", remained_time);*/
-
/* check max size of recorded file */
if (audioinfo->max_size > 0 &&
audioinfo->max_size < audioinfo->filesize + buffer_size + trailer_size + _MMCAMCORDER_MMS_MARGIN_SPACE) {
- _mmcam_dbg_warn("Max size!!! Recording is paused.");
- _mmcam_dbg_warn("Max [%" G_GUINT64_FORMAT "], file [%" G_GUINT64_FORMAT "], trailer : [%" G_GUINT64_FORMAT "]", \
- audioinfo->max_size, audioinfo->filesize, trailer_size);
+ MMCAM_LOG_WARNING("Max size!!! Recording is paused.");
+ MMCAM_LOG_WARNING("Max [%" G_GUINT64_FORMAT "], file [%" G_GUINT64_FORMAT "], trailer : [%" G_GUINT64_FORMAT "]", \
+ audioinfo->max_size, audioinfo->filesize, trailer_size);
/* just same as pause status. After blocking two queue, this function will not call again. */
- if (audioinfo->bMuxing) {
+ if (audioinfo->bMuxing)
MMCAMCORDER_G_OBJECT_SET(sc->encode_element[_MMCAMCORDER_ENCSINK_ENCBIN].gst, "block", TRUE);
- } else {
+ else
MMCAMCORDER_G_OBJECT_SET(sc->encode_element[_MMCAMCORDER_ENCSINK_AQUE].gst, "empty-buffers", TRUE);
- }
msg.id = MM_MESSAGE_CAMCORDER_RECORDING_STATUS;
msg.param.recording_status.elapsed = (unsigned long long)rec_pipe_time;
msg.param.recording_status.remained_time = 0;
_mmcamcorder_send_message((MMHandleType)hcamcorder, &msg);
- _mmcam_dbg_warn("Last filesize sent by message : %d", audioinfo->filesize + trailer_size);
+ MMCAM_LOG_WARNING("Last filesize sent by message : %"G_GUINT64_FORMAT, audioinfo->filesize + trailer_size);
sc->isMaxsizePausing = TRUE;
msg.id = MM_MESSAGE_CAMCORDER_MAX_SIZE;
/* check recording time limit and send recording status message */
if (audioinfo->max_time > 0 && rec_pipe_time > audioinfo->max_time) {
- _mmcam_dbg_warn("Current time : [%" G_GUINT64_FORMAT "], Maximum time : [%" G_GUINT64_FORMAT "]", \
- rec_pipe_time, audioinfo->max_time);
+ MMCAM_LOG_WARNING("Current time : [%"GST_TIME_FORMAT"], Maximum time : [%"GST_TIME_FORMAT"]",
+ GST_TIME_ARGS(GST_BUFFER_PTS(buffer)), GST_TIME_ARGS(audioinfo->max_time * GST_MSECOND));
- if (audioinfo->bMuxing) {
+ if (audioinfo->bMuxing)
MMCAMCORDER_G_OBJECT_SET(sc->encode_element[_MMCAMCORDER_ENCSINK_ENCBIN].gst, "block", TRUE);
- } else {
+ else
MMCAMCORDER_G_OBJECT_SET(sc->encode_element[_MMCAMCORDER_ENCSINK_AQUE].gst, "empty-buffers", TRUE);
- }
sc->isMaxtimePausing = TRUE;
msg.id = MM_MESSAGE_CAMCORDER_TIME_LIMIT;
}
/* send message for recording time and recorded file size */
- if (audioinfo->b_commiting == FALSE) {
+ if (audioinfo->b_committing == FALSE) {
audioinfo->filesize += buffer_size;
msg.id = MM_MESSAGE_CAMCORDER_RECORDING_STATUS;
msg.param.recording_status.elapsed = (unsigned long long)rec_pipe_time;
msg.param.recording_status.filesize = (unsigned long long)((audioinfo->filesize + trailer_size) >> 10);
msg.param.recording_status.remained_time = remained_time;
+
+ MMCAM_LOG_DEBUG("audio rec[%"GST_TIME_FORMAT"], size[%"G_GUINT64_FORMAT"(trailer:%"G_GUINT64_FORMAT")]",
+ GST_TIME_ARGS(GST_BUFFER_PTS(buffer)), audioinfo->filesize + trailer_size, trailer_size);
+
_mmcamcorder_send_message((MMHandleType)hcamcorder, &msg);
return GST_PAD_PROBE_OK;
gint64 current_pos = 0;
gint64 moov_pos = 0;
gint64 udta_pos = 0;
- // supporting audio geo tag for mobile
+ /* supporting audio geo tag for mobile */
int gps_enable = 0;
gdouble longitude = 0;
gdouble latitude = 0;
gdouble altitude = 0;
- _MMCamcorderLocationInfo geo_info = {0,0,0};
- _MMCamcorderLocationInfo loc_info = {0,0,0};
+ _MMCamcorderLocationInfo geo_info = {0, 0, 0};
+ _MMCamcorderLocationInfo loc_info = {0, 0, 0};
char err_msg[128] = {'\0',};
info = sc->info_audio;
mm_camcorder_get_attributes(handle, NULL,
- MMCAM_TAG_GPS_ENABLE, &gps_enable,
- NULL);
+ MMCAM_TAG_GPS_ENABLE, &gps_enable,
+ NULL);
if (gps_enable) {
mm_camcorder_get_attributes(handle, NULL,
- MMCAM_TAG_LATITUDE, &latitude,
- MMCAM_TAG_LONGITUDE, &longitude,
- MMCAM_TAG_ALTITUDE, &altitude,
- NULL);
+ MMCAM_TAG_LATITUDE, &latitude,
+ MMCAM_TAG_LONGITUDE, &longitude,
+ MMCAM_TAG_ALTITUDE, &altitude,
+ NULL);
loc_info.longitude = _mmcamcorder_double_to_fix(longitude);
loc_info.latitude = _mmcamcorder_double_to_fix(latitude);
loc_info.altitude = _mmcamcorder_double_to_fix(altitude);
f = fopen64(info->filename, "rb+");
if (f == NULL) {
strerror_r(errno, err_msg, 128);
- _mmcam_dbg_err("file open failed [%s]", err_msg);
+ MMCAM_LOG_ERROR("file open failed [%s]", err_msg);
return FALSE;
}
/* find udta container.
if, there are udta container, write loci box after that
else, make udta container and write loci box. */
- if (_mmcamcorder_find_fourcc(f, MMCAM_FOURCC('u','d','t','a'), TRUE)) {
+ if (_mmcamcorder_find_fourcc(f, MMCAM_FOURCC('u', 'd', 't', 'a'), TRUE)) {
size_t nread = 0;
- _mmcam_dbg_log("find udta container");
+ MMCAM_LOG_INFO("find udta container");
/* read size */
- if (fseek(f, -8L, SEEK_CUR) != 0) {
+ if (fseek(f, -8L, SEEK_CUR) != 0)
goto fail;
- }
udta_pos = ftello(f);
- if (udta_pos < 0) {
+ if (udta_pos < 0)
goto ftell_fail;
- }
nread = fread(&buf, sizeof(char), sizeof(buf), f);
- _mmcam_dbg_log("recorded file fread %d", nread);
+ MMCAM_LOG_INFO("recorded file fread %zu", nread);
udta_size = _mmcamcorder_get_container_size(buf);
/* goto end of udta and write 'smta' box */
- if (fseek(f, (udta_size-4L), SEEK_CUR) != 0) {
+ if (fseek(f, (udta_size-4L), SEEK_CUR) != 0)
goto fail;
- }
if (gps_enable) {
- if (!_mmcamcorder_write_loci(f, loc_info)) {
+ if (!_mmcamcorder_write_loci(f, loc_info))
goto fail;
- }
- if (!_mmcamcorder_write_geodata( f, geo_info )) {
+ if (!_mmcamcorder_write_geodata(f, geo_info))
goto fail;
- }
}
current_pos = ftello(f);
- if (current_pos < 0) {
+ if (current_pos < 0)
goto ftell_fail;
- }
- if (!_mmcamcorder_update_size(f, udta_pos, current_pos)) {
+ if (!_mmcamcorder_update_size(f, udta_pos, current_pos))
goto fail;
- }
} else {
- _mmcam_dbg_log("No udta container");
- if (fseek(f, 0, SEEK_END) != 0) {
+ MMCAM_LOG_INFO("No udta container");
+ if (fseek(f, 0, SEEK_END) != 0)
goto fail;
- }
- if (!_mmcamcorder_write_udta(f, gps_enable, loc_info, geo_info)) {
+ if (!_mmcamcorder_write_udta(f, gps_enable, loc_info, geo_info))
goto fail;
- }
}
/* find moov container.
update moov container size. */
- if((current_pos = ftello(f))<0)
+ if ((current_pos = ftello(f)) < 0)
goto ftell_fail;
- if (_mmcamcorder_find_fourcc(f, MMCAM_FOURCC('m','o','o','v'), TRUE)) {
+ if (_mmcamcorder_find_fourcc(f, MMCAM_FOURCC('m', 'o', 'o', 'v'), TRUE)) {
- _mmcam_dbg_log("found moov container");
- if (fseek(f, -8L, SEEK_CUR) !=0) {
+ MMCAM_LOG_INFO("found moov container");
+ if (fseek(f, -8L, SEEK_CUR) != 0)
goto fail;
- }
moov_pos = ftello(f);
- if (moov_pos < 0) {
+ if (moov_pos < 0)
goto ftell_fail;
- }
- if (!_mmcamcorder_update_size(f, moov_pos, current_pos)) {
+ if (!_mmcamcorder_update_size(f, moov_pos, current_pos))
goto fail;
- }
-
} else {
- _mmcam_dbg_err("No 'moov' container");
+ MMCAM_LOG_ERROR("No 'moov' container");
goto fail;
}
return FALSE;
ftell_fail:
- _mmcam_dbg_err("ftell() returns negative value.");
+ MMCAM_LOG_ERROR("ftell() returns negative value.");
fclose(f);
return FALSE;
}