#include <gst/video/colorbalance.h>
#include <gst/video/cameracontrol.h>
#include <gst/video/videooverlay.h>
-#include <gst/wayland/wayland.h>
/*-----------------------------------------------------------------------
| MACRO DEFINITIONS: |
bool _mmcamcorder_commit_target_filename(MMHandleType handle, int attr_idx, const mmf_value_t *value)
{
- _MMCamcorderSubContext *sc = NULL;
- const char *filename = NULL;
+ int ret = MM_ERROR_NONE;
int size = 0;
+ const char *filename = NULL;
+ _MMCamcorderSubContext *sc = NULL;
+ GstElement *encode_link = NULL;
+ GstElement *encode_sink = NULL;
+ GstElement *encode_pipeline = NULL;
mmf_return_val_if_fail(handle && value, FALSE);
}
if (sc->encode_element && sc->encode_element[_MMCAMCORDER_ENCSINK_SINK].gst) {
- _mmcam_dbg_log("new file location set.[%s] filesink %p", filename, sc->encode_element[_MMCAMCORDER_ENCSINK_SINK].gst);
- MMCAMCORDER_G_OBJECT_SET_POINTER(sc->encode_element[_MMCAMCORDER_ENCSINK_SINK].gst, "location", filename);
- _mmcam_dbg_log("new file location set.(%s)", filename);
+ encode_sink = sc->encode_element[_MMCAMCORDER_ENCSINK_SINK].gst;
+ encode_pipeline = sc->encode_element[_MMCAMCORDER_ENCODE_MAIN_PIPE].gst;
+
+ _mmcam_dbg_log("file location set.[%s], current encode sink [%s]",
+ filename, GST_OBJECT_NAME(gst_element_get_factory(encode_sink)));
+
+ /* check whether it's filesink or not */
+ if (strncmp(GST_OBJECT_NAME(gst_element_get_factory(encode_sink)), "filesink", strlen("filesink"))) {
+ _mmcam_dbg_log("remove current sink and create filesink");
+
+ /* remove fakesink and create/add filesink to encode pipeline */
+ /* set NULL state */
+ ret = _mmcamcorder_gst_set_state(handle, encode_sink, GST_STATE_NULL);
+ if (ret != MM_ERROR_NONE) {
+ _mmcam_dbg_err("failed to set NULL encoder sink");
+ return FALSE;
+ }
+
+ /* remove encode sink - pads will be unlinked automatically in remove function */
+ if (!gst_bin_remove(GST_BIN(encode_pipeline), encode_sink)) {
+ _mmcam_dbg_err("failed to remove encode sink from pipeline");
+ return FALSE;
+ }
+
+ _mmcam_dbg_log("remove done");
+
+ /* create filesink */
+ encode_sink = gst_element_factory_make("filesink", NULL);
+ if (!encode_sink) {
+ _mmcam_dbg_err("filesink creation failed");
+ return FALSE;
+ }
+
+ sc->encode_element[_MMCAMCORDER_ENCSINK_SINK].gst = encode_sink;
+
+ /* set release notification callback */
+ g_object_weak_ref(G_OBJECT(encode_sink), (GWeakNotify)_mmcamcorder_element_release_noti, sc);
+
+ /* add to pipeline */
+ if (!gst_bin_add(GST_BIN(encode_pipeline), encode_sink)) {
+ _mmcam_dbg_err("failed to add filesink to encode pipeline");
+ gst_object_unref(encode_sink);
+ return FALSE;
+ }
+
+ /* link filesink */
+ if (sc->encode_element[_MMCAMCORDER_ENCSINK_MUX].gst) {
+ /* mux element is used */
+ _mmcam_dbg_log("Link mux to encode_sink");
+ encode_link = sc->encode_element[_MMCAMCORDER_ENCSINK_MUX].gst;
+ } else {
+ /* no mux element */
+ _mmcam_dbg_log("Link audio encoder to encode_sink");
+ encode_link = sc->encode_element[_MMCAMCORDER_ENCSINK_AENC].gst;
+ }
+
+ if (!_MM_GST_ELEMENT_LINK(encode_link, encode_sink)) {
+ _mmcam_dbg_err("Link FAILED");
+ return FALSE;
+ }
+
+ _mmcam_dbg_log("Link OK");
+ }
+
+ MMCAMCORDER_G_OBJECT_SET_POINTER(encode_sink, "location", filename);
} else {
_mmcam_dbg_log("element is not created yet. [%s] will be set later...", filename);
}
MM_CAM_CAMERA_WDR,
MM_CAM_FILTER_CONTRAST,
MM_CAM_FILTER_HUE,
- MM_CAM_STROBE_MODE,
MM_CAM_DETECT_MODE
};
mmf_return_val_if_fail(hcamcorder, FALSE);
- _mmcam_dbg_log("Set all attribute again.");
+ _mmcam_dbg_log("commit some attributes again");
attr = (mmf_attrs_t *)MMF_CAMCORDER_ATTRS(handle);
if (attr == NULL) {
}
+bool _mmcamcorder_set_attribute_to_camsensor2(MMHandleType handle)
+{
+ mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
+ mmf_attrs_t *attr = NULL;
+
+ unsigned int i = 0;
+ int ret = TRUE;
+ int attr_idxs[] = {
+ MM_CAM_STROBE_MODE
+ };
+
+ mmf_return_val_if_fail(hcamcorder, FALSE);
+
+ _mmcam_dbg_log("commit some attribute again[2]");
+
+ attr = (mmf_attrs_t *)MMF_CAMCORDER_ATTRS(handle);
+ if (attr == NULL) {
+ _mmcam_dbg_err("Get attribute handle failed.");
+ return FALSE;
+ } else {
+ _mmcam_dbg_log("attribute count(%d)", attr->count);
+
+ for (i = 0 ; i < ARRAY_SIZE(attr_idxs) ; i++) {
+ if (__mmcamcorder_attrs_is_supported((MMHandleType)attr, attr_idxs[i]))
+ mmf_attribute_set_modified(&(attr->items[attr_idxs[i]]));
+ }
+
+ if (mmf_attrs_commit((MMHandleType)attr) == -1)
+ ret = FALSE;
+ else
+ ret = TRUE;
+ }
+
+ _mmcam_dbg_log("Done.");
+
+ return ret;
+}
+
+
int _mmcamcorder_lock_readonly_attributes(MMHandleType handle)
{
mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);