diff options
Diffstat (limited to 'camera/QCamera2/stack/mm-camera-test/src/mm_qcamera_preview.c')
| -rwxr-xr-x | camera/QCamera2/stack/mm-camera-test/src/mm_qcamera_preview.c | 948 |
1 files changed, 0 insertions, 948 deletions
diff --git a/camera/QCamera2/stack/mm-camera-test/src/mm_qcamera_preview.c b/camera/QCamera2/stack/mm-camera-test/src/mm_qcamera_preview.c deleted file mode 100755 index f20ecd8..0000000 --- a/camera/QCamera2/stack/mm-camera-test/src/mm_qcamera_preview.c +++ /dev/null @@ -1,948 +0,0 @@ -/* -Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of The Linux Foundation nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "mm_qcamera_dbg.h" -#include "mm_qcamera_app.h" -#include <assert.h> -#include <sys/mman.h> -#include <semaphore.h> - -static void mm_app_metadata_notify_cb(mm_camera_super_buf_t *bufs, - void *user_data) -{ - uint32_t i = 0; - mm_camera_channel_t *channel = NULL; - mm_camera_stream_t *p_stream = NULL; - mm_camera_test_obj_t *pme = (mm_camera_test_obj_t *)user_data; - mm_camera_buf_def_t *frame = bufs->bufs[0]; - cam_metadata_info_t *pMetadata; - cam_auto_focus_data_t *focus_data; - - /* find channel */ - for (i = 0; i < MM_CHANNEL_TYPE_MAX; i++) { - if (pme->channels[i].ch_id == bufs->ch_id) { - channel = &pme->channels[i]; - break; - } - } - /* find preview stream */ - for (i = 0; i < channel->num_streams; i++) { - if (channel->streams[i].s_config.stream_info->stream_type == CAM_STREAM_TYPE_METADATA) { - p_stream = &channel->streams[i]; - break; - } - } - if (NULL == p_stream) { - CDBG_ERROR("%s: cannot find metadata stream", __func__); - return; - } - - /* find preview frame */ - for (i = 0; i < bufs->num_bufs; i++) { - if (bufs->bufs[i]->stream_id == p_stream->s_id) { - frame = bufs->bufs[i]; - break; - } - } - if (pme->metadata == NULL) { - /* The app will free the meta data, we don't need to bother here */ - pme->metadata = malloc(sizeof(cam_metadata_info_t)); - if (pme->metadata == NULL) { - CDBG_ERROR("%s:error: malloc failed allocate memory",__func__); - return; - } - } - memcpy(pme->metadata, frame->buffer, sizeof(cam_metadata_info_t)); - - pMetadata = (cam_metadata_info_t *)frame->buffer; - - if (pMetadata->is_focus_valid) { - focus_data = (cam_auto_focus_data_t *)&(pMetadata->focus_data); - - if (focus_data->focus_state == CAM_AF_FOCUSED || focus_data->focus_state == CAM_AF_NOT_FOCUSED) { - CDBG_ERROR("%s: AutoFocus Done Call Back Received\n",__func__); - mm_camera_app_done(); - } - } - - if (pme->user_metadata_cb) { - CDBG("[DBG] %s, user defined own metadata cb. calling it...", __func__); - pme->user_metadata_cb(frame); - } - - if (MM_CAMERA_OK != pme->cam->ops->qbuf(bufs->camera_handle, - bufs->ch_id, - frame)) { - CDBG_ERROR("%s: Failed in Preview Qbuf\n", __func__); - } - mm_app_cache_ops((mm_camera_app_meminfo_t *)frame->mem_info, - ION_IOC_INV_CACHES); -} - -static void mm_app_preview_notify_cb(mm_camera_super_buf_t *bufs, - void *user_data) -{ - uint32_t i = 0; - mm_camera_channel_t *channel = NULL; - mm_camera_stream_t *p_stream = NULL; - mm_camera_buf_def_t *frame = bufs->bufs[0]; - mm_camera_test_obj_t *pme = (mm_camera_test_obj_t *)user_data; - - CDBG_ERROR("%s: BEGIN - length=%zu, frame idx = %d\n", - __func__, frame->frame_len, frame->frame_idx); - - /* find channel */ - for (i = 0; i < MM_CHANNEL_TYPE_MAX; i++) { - if (pme->channels[i].ch_id == bufs->ch_id) { - channel = &pme->channels[i]; - break; - } - } - /* find preview stream */ - for (i = 0; i < channel->num_streams; i++) { - if (channel->streams[i].s_config.stream_info->stream_type == CAM_STREAM_TYPE_PREVIEW) { - p_stream = &channel->streams[i]; - break; - } - } - /* find preview frame */ - for (i = 0; i < bufs->num_bufs; i++) { - if (bufs->bufs[i]->stream_id == p_stream->s_id) { - frame = bufs->bufs[i]; - break; - } - } - - if (NULL == p_stream) { - CDBG_ERROR("%s: cannot find preview stream", __func__); - return; - } - - if ( 0 < pme->fb_fd ) { - mm_app_overlay_display(pme, frame->fd); - } -#ifdef DUMP_PRV_IN_FILE - { - char file_name[64]; - snprintf(file_name, sizeof(file_name), "P_C%d", pme->cam->camera_handle); - mm_app_dump_frame(frame, file_name, "yuv", frame->frame_idx); - } -#endif - if (pme->user_preview_cb) { - CDBG_ERROR("[DBG] %s, user defined own preview cb. calling it...", __func__); - pme->user_preview_cb(frame); - } - if (MM_CAMERA_OK != pme->cam->ops->qbuf(bufs->camera_handle, - bufs->ch_id, - frame)) { - CDBG_ERROR("%s: Failed in Preview Qbuf\n", __func__); - } - mm_app_cache_ops((mm_camera_app_meminfo_t *)frame->mem_info, - ION_IOC_INV_CACHES); - - CDBG("%s: END\n", __func__); -} - -static void mm_app_zsl_notify_cb(mm_camera_super_buf_t *bufs, - void *user_data) -{ - int rc = 0; - uint32_t i = 0; - mm_camera_test_obj_t *pme = (mm_camera_test_obj_t *)user_data; - mm_camera_channel_t *channel = NULL; - mm_camera_stream_t *p_stream = NULL; - mm_camera_stream_t *m_stream = NULL; - mm_camera_stream_t *md_stream = NULL; - mm_camera_buf_def_t *p_frame = NULL; - mm_camera_buf_def_t *m_frame = NULL; - mm_camera_buf_def_t *md_frame = NULL; - - CDBG("%s: BEGIN\n", __func__); - - /* find channel */ - for (i = 0; i < MM_CHANNEL_TYPE_MAX; i++) { - if (pme->channels[i].ch_id == bufs->ch_id) { - channel = &pme->channels[i]; - break; - } - } - if (NULL == channel) { - CDBG_ERROR("%s: Wrong channel id (%d)", __func__, bufs->ch_id); - return; - } - - /* find preview stream */ - for (i = 0; i < channel->num_streams; i++) { - if (channel->streams[i].s_config.stream_info->stream_type == CAM_STREAM_TYPE_PREVIEW) { - p_stream = &channel->streams[i]; - break; - } - } - if (NULL == p_stream) { - CDBG_ERROR("%s: cannot find preview stream", __func__); - return; - } - - /* find snapshot stream */ - for (i = 0; i < channel->num_streams; i++) { - if (channel->streams[i].s_config.stream_info->stream_type == CAM_STREAM_TYPE_SNAPSHOT) { - m_stream = &channel->streams[i]; - break; - } - } - if (NULL == m_stream) { - CDBG_ERROR("%s: cannot find snapshot stream", __func__); - return; - } - - /* find metadata stream */ - for (i = 0; i < channel->num_streams; i++) { - if (channel->streams[i].s_config.stream_info->stream_type == CAM_STREAM_TYPE_METADATA) { - md_stream = &channel->streams[i]; - break; - } - } - if (NULL == md_stream) { - CDBG_ERROR("%s: cannot find metadata stream", __func__); - } - - /* find preview frame */ - for (i = 0; i < bufs->num_bufs; i++) { - if (bufs->bufs[i]->stream_id == p_stream->s_id) { - p_frame = bufs->bufs[i]; - break; - } - } - - if(md_stream) { - /* find metadata frame */ - for (i = 0; i < bufs->num_bufs; i++) { - if (bufs->bufs[i]->stream_id == md_stream->s_id) { - md_frame = bufs->bufs[i]; - break; - } - } - /* fill in meta data frame ptr */ - if (md_frame != NULL) { - pme->metadata = (cam_metadata_info_t *)md_frame->buffer; - } else { - CDBG_ERROR("%s: error getting metadata frame",__func__); - goto exit; - } - } - /* find snapshot frame */ - for (i = 0; i < bufs->num_bufs; i++) { - if (bufs->bufs[i]->stream_id == m_stream->s_id) { - m_frame = bufs->bufs[i]; - break; - } - } - - if (!m_frame || !p_frame) { - CDBG_ERROR("%s: cannot find preview/snapshot frame", __func__); - return; - } - - CDBG("%s: ZSL CB with fb_fd = %d, m_frame = %p, p_frame = %p \n", - __func__, - pme->fb_fd, - m_frame, - p_frame); - - if ( 0 < pme->fb_fd ) { - mm_app_overlay_display(pme, p_frame->fd); - }/* else { - mm_app_dump_frame(p_frame, "zsl_preview", "yuv", p_frame->frame_idx); - mm_app_dump_frame(m_frame, "zsl_main", "yuv", m_frame->frame_idx); - }*/ - - if ( pme->enable_reproc && ( NULL != pme->reproc_stream ) ) { - rc = mm_app_do_reprocess(pme, - m_frame, - md_frame->buf_idx, - bufs, - md_stream); - if (MM_CAMERA_OK != rc ) { - CDBG_ERROR("%s: reprocess failed rc = %d", __func__, rc); - } - - return; - } - - if ( pme->encodeJpeg ) { - pme->jpeg_buf.buf.buffer = (uint8_t *)malloc(m_frame->frame_len); - if ( NULL == pme->jpeg_buf.buf.buffer ) { - CDBG_ERROR("%s: error allocating jpeg output buffer", __func__); - goto exit; - } - - pme->jpeg_buf.buf.frame_len = m_frame->frame_len; - /* create a new jpeg encoding session */ - rc = createEncodingSession(pme, m_stream, m_frame); - if (0 != rc) { - CDBG_ERROR("%s: error creating jpeg session", __func__); - free(pme->jpeg_buf.buf.buffer); - goto exit; - } - - /* start jpeg encoding job */ - rc = encodeData(pme, bufs, m_stream); - pme->encodeJpeg = 0; - } else { - if (MM_CAMERA_OK != pme->cam->ops->qbuf(bufs->camera_handle, - bufs->ch_id, - m_frame)) { - CDBG_ERROR("%s: Failed in main Qbuf\n", __func__); - } - mm_app_cache_ops((mm_camera_app_meminfo_t *)m_frame->mem_info, - ION_IOC_INV_CACHES); - } - -exit: - - if (MM_CAMERA_OK != pme->cam->ops->qbuf(bufs->camera_handle, - bufs->ch_id, - p_frame)) { - CDBG_ERROR("%s: Failed in preview Qbuf\n", __func__); - } - mm_app_cache_ops((mm_camera_app_meminfo_t *)p_frame->mem_info, - ION_IOC_INV_CACHES); - - if(md_frame) { - if (MM_CAMERA_OK != pme->cam->ops->qbuf(bufs->camera_handle, - bufs->ch_id, - md_frame)) { - CDBG_ERROR("%s: Failed in metadata Qbuf\n", __func__); - } - mm_app_cache_ops((mm_camera_app_meminfo_t *)md_frame->mem_info, - ION_IOC_INV_CACHES); - } - - CDBG("%s: END\n", __func__); -} - -mm_camera_stream_t * mm_app_add_metadata_stream(mm_camera_test_obj_t *test_obj, - mm_camera_channel_t *channel, - mm_camera_buf_notify_t stream_cb, - void *userdata, - uint8_t num_bufs) -{ - int rc = MM_CAMERA_OK; - mm_camera_stream_t *stream = NULL; - cam_capability_t *cam_cap = (cam_capability_t *)(test_obj->cap_buf.buf.buffer); - - stream = mm_app_add_stream(test_obj, channel); - if (NULL == stream) { - CDBG_ERROR("%s: add stream failed\n", __func__); - return NULL; - } - - stream->s_config.mem_vtbl.get_bufs = mm_app_stream_initbuf; - stream->s_config.mem_vtbl.put_bufs = mm_app_stream_deinitbuf; - stream->s_config.mem_vtbl.clean_invalidate_buf = - mm_app_stream_clean_invalidate_buf; - stream->s_config.mem_vtbl.invalidate_buf = mm_app_stream_invalidate_buf; - stream->s_config.mem_vtbl.user_data = (void *)stream; - stream->s_config.stream_cb = stream_cb; - stream->s_config.userdata = userdata; - stream->num_of_bufs = num_bufs; - - stream->s_config.stream_info = (cam_stream_info_t *)stream->s_info_buf.buf.buffer; - memset(stream->s_config.stream_info, 0, sizeof(cam_stream_info_t)); - stream->s_config.stream_info->stream_type = CAM_STREAM_TYPE_METADATA; - stream->s_config.stream_info->streaming_mode = CAM_STREAMING_MODE_CONTINUOUS; - stream->s_config.stream_info->fmt = DEFAULT_PREVIEW_FORMAT; - stream->s_config.stream_info->dim.width = sizeof(cam_metadata_info_t); - stream->s_config.stream_info->dim.height = 1; - stream->s_config.padding_info = cam_cap->padding_info; - - rc = mm_app_config_stream(test_obj, channel, stream, &stream->s_config); - if (MM_CAMERA_OK != rc) { - CDBG_ERROR("%s:config preview stream err=%d\n", __func__, rc); - return NULL; - } - - return stream; -} - -mm_camera_stream_t * mm_app_add_preview_stream(mm_camera_test_obj_t *test_obj, - mm_camera_channel_t *channel, - mm_camera_buf_notify_t stream_cb, - void *userdata, - uint8_t num_bufs) -{ - int rc = MM_CAMERA_OK; - mm_camera_stream_t *stream = NULL; - cam_capability_t *cam_cap = (cam_capability_t *)(test_obj->cap_buf.buf.buffer); - - stream = mm_app_add_stream(test_obj, channel); - if (NULL == stream) { - CDBG_ERROR("%s: add stream failed\n", __func__); - return NULL; - } - stream->s_config.mem_vtbl.get_bufs = mm_app_stream_initbuf; - stream->s_config.mem_vtbl.put_bufs = mm_app_stream_deinitbuf; - stream->s_config.mem_vtbl.clean_invalidate_buf = - mm_app_stream_clean_invalidate_buf; - stream->s_config.mem_vtbl.invalidate_buf = mm_app_stream_invalidate_buf; - stream->s_config.mem_vtbl.user_data = (void *)stream; - stream->s_config.stream_cb = stream_cb; - stream->s_config.userdata = userdata; - stream->num_of_bufs = num_bufs; - - stream->s_config.stream_info = (cam_stream_info_t *)stream->s_info_buf.buf.buffer; - memset(stream->s_config.stream_info, 0, sizeof(cam_stream_info_t)); - stream->s_config.stream_info->stream_type = CAM_STREAM_TYPE_PREVIEW; - stream->s_config.stream_info->streaming_mode = CAM_STREAMING_MODE_CONTINUOUS; - stream->s_config.stream_info->fmt = DEFAULT_PREVIEW_FORMAT; - - if ((test_obj->preview_resolution.user_input_display_width == 0) || - ( test_obj->preview_resolution.user_input_display_height == 0)) { - stream->s_config.stream_info->dim.width = DEFAULT_PREVIEW_WIDTH; - stream->s_config.stream_info->dim.height = DEFAULT_PREVIEW_HEIGHT; - } else { - stream->s_config.stream_info->dim.width = test_obj->preview_resolution.user_input_display_width; - stream->s_config.stream_info->dim.height = test_obj->preview_resolution.user_input_display_height; - } - - stream->s_config.padding_info = cam_cap->padding_info; - - rc = mm_app_config_stream(test_obj, channel, stream, &stream->s_config); - if (MM_CAMERA_OK != rc) { - CDBG_ERROR("%s:config preview stream err=%d\n", __func__, rc); - return NULL; - } - - return stream; -} - -mm_camera_stream_t * mm_app_add_raw_stream(mm_camera_test_obj_t *test_obj, - mm_camera_channel_t *channel, - mm_camera_buf_notify_t stream_cb, - void *userdata, - uint8_t num_bufs, - uint8_t num_burst) -{ - int rc = MM_CAMERA_OK; - mm_camera_stream_t *stream = NULL; - cam_capability_t *cam_cap = (cam_capability_t *)(test_obj->cap_buf.buf.buffer); - - stream = mm_app_add_stream(test_obj, channel); - if (NULL == stream) { - CDBG_ERROR("%s: add stream failed\n", __func__); - return NULL; - } - - stream->s_config.mem_vtbl.get_bufs = mm_app_stream_initbuf; - stream->s_config.mem_vtbl.put_bufs = mm_app_stream_deinitbuf; - stream->s_config.mem_vtbl.invalidate_buf = mm_app_stream_invalidate_buf; - stream->s_config.mem_vtbl.user_data = (void *)stream; - stream->s_config.stream_cb = stream_cb; - stream->s_config.userdata = userdata; - stream->num_of_bufs = num_bufs; - - stream->s_config.stream_info = (cam_stream_info_t *)stream->s_info_buf.buf.buffer; - memset(stream->s_config.stream_info, 0, sizeof(cam_stream_info_t)); - stream->s_config.stream_info->stream_type = CAM_STREAM_TYPE_RAW; - if (num_burst == 0) { - stream->s_config.stream_info->streaming_mode = CAM_STREAMING_MODE_CONTINUOUS; - } else { - stream->s_config.stream_info->streaming_mode = CAM_STREAMING_MODE_BURST; - stream->s_config.stream_info->num_of_burst = num_burst; - } - stream->s_config.stream_info->fmt = test_obj->buffer_format; - if ( test_obj->buffer_width == 0 || test_obj->buffer_height == 0 ) { - stream->s_config.stream_info->dim.width = DEFAULT_SNAPSHOT_WIDTH; - stream->s_config.stream_info->dim.height = DEFAULT_SNAPSHOT_HEIGHT; - } else { - stream->s_config.stream_info->dim.width = (int32_t)test_obj->buffer_width; - stream->s_config.stream_info->dim.height = (int32_t)test_obj->buffer_height; - } - stream->s_config.padding_info = cam_cap->padding_info; - - rc = mm_app_config_stream(test_obj, channel, stream, &stream->s_config); - if (MM_CAMERA_OK != rc) { - CDBG_ERROR("%s:config preview stream err=%d\n", __func__, rc); - return NULL; - } - - return stream; -} - -mm_camera_stream_t * mm_app_add_snapshot_stream(mm_camera_test_obj_t *test_obj, - mm_camera_channel_t *channel, - mm_camera_buf_notify_t stream_cb, - void *userdata, - uint8_t num_bufs, - uint8_t num_burst) -{ - int rc = MM_CAMERA_OK; - mm_camera_stream_t *stream = NULL; - cam_capability_t *cam_cap = (cam_capability_t *)(test_obj->cap_buf.buf.buffer); - - stream = mm_app_add_stream(test_obj, channel); - if (NULL == stream) { - CDBG_ERROR("%s: add stream failed\n", __func__); - return NULL; - } - - stream->s_config.mem_vtbl.get_bufs = mm_app_stream_initbuf; - stream->s_config.mem_vtbl.put_bufs = mm_app_stream_deinitbuf; - stream->s_config.mem_vtbl.clean_invalidate_buf = - mm_app_stream_clean_invalidate_buf; - stream->s_config.mem_vtbl.invalidate_buf = mm_app_stream_invalidate_buf; - stream->s_config.mem_vtbl.user_data = (void *)stream; - stream->s_config.stream_cb = stream_cb; - stream->s_config.userdata = userdata; - stream->num_of_bufs = num_bufs; - - stream->s_config.stream_info = (cam_stream_info_t *)stream->s_info_buf.buf.buffer; - memset(stream->s_config.stream_info, 0, sizeof(cam_stream_info_t)); - stream->s_config.stream_info->stream_type = CAM_STREAM_TYPE_SNAPSHOT; - if (num_burst == 0) { - stream->s_config.stream_info->streaming_mode = CAM_STREAMING_MODE_CONTINUOUS; - } else { - stream->s_config.stream_info->streaming_mode = CAM_STREAMING_MODE_BURST; - stream->s_config.stream_info->num_of_burst = num_burst; - } - stream->s_config.stream_info->fmt = DEFAULT_SNAPSHOT_FORMAT; - if ( test_obj->buffer_width == 0 || test_obj->buffer_height == 0 ) { - stream->s_config.stream_info->dim.width = DEFAULT_SNAPSHOT_WIDTH; - stream->s_config.stream_info->dim.height = DEFAULT_SNAPSHOT_HEIGHT; - } else { - stream->s_config.stream_info->dim.width = (int32_t)test_obj->buffer_width; - stream->s_config.stream_info->dim.height = (int32_t)test_obj->buffer_height; - } - stream->s_config.padding_info = cam_cap->padding_info; - - rc = mm_app_config_stream(test_obj, channel, stream, &stream->s_config); - if (MM_CAMERA_OK != rc) { - CDBG_ERROR("%s:config preview stream err=%d\n", __func__, rc); - return NULL; - } - - return stream; -} - -mm_camera_channel_t * mm_app_add_preview_channel(mm_camera_test_obj_t *test_obj) -{ - mm_camera_channel_t *channel = NULL; - mm_camera_stream_t *stream = NULL; - - channel = mm_app_add_channel(test_obj, - MM_CHANNEL_TYPE_PREVIEW, - NULL, - NULL, - NULL); - if (NULL == channel) { - CDBG_ERROR("%s: add channel failed", __func__); - return NULL; - } - - stream = mm_app_add_preview_stream(test_obj, - channel, - mm_app_preview_notify_cb, - (void *)test_obj, - PREVIEW_BUF_NUM); - if (NULL == stream) { - CDBG_ERROR("%s: add stream failed\n", __func__); - mm_app_del_channel(test_obj, channel); - return NULL; - } - - return channel; -} - -int mm_app_stop_and_del_channel(mm_camera_test_obj_t *test_obj, - mm_camera_channel_t *channel) -{ - int rc = MM_CAMERA_OK; - mm_camera_stream_t *stream = NULL; - uint8_t i; - - rc = mm_app_stop_channel(test_obj, channel); - if (MM_CAMERA_OK != rc) { - CDBG_ERROR("%s:Stop Preview failed rc=%d\n", __func__, rc); - } - - for (i = 0; i < channel->num_streams; i++) { - stream = &channel->streams[i]; - rc = mm_app_del_stream(test_obj, channel, stream); - if (MM_CAMERA_OK != rc) { - CDBG_ERROR("%s:del stream(%d) failed rc=%d\n", __func__, i, rc); - } - } - - rc = mm_app_del_channel(test_obj, channel); - if (MM_CAMERA_OK != rc) { - CDBG_ERROR("%s:delete channel failed rc=%d\n", __func__, rc); - } - - return rc; -} - -int mm_app_start_preview(mm_camera_test_obj_t *test_obj) -{ - int rc = MM_CAMERA_OK; - mm_camera_channel_t *channel = NULL; - mm_camera_stream_t *stream = NULL; - mm_camera_stream_t *s_metadata = NULL; - uint8_t i; - - channel = mm_app_add_preview_channel(test_obj); - if (NULL == channel) { - CDBG_ERROR("%s: add channel failed", __func__); - return -MM_CAMERA_E_GENERAL; - } - - s_metadata = mm_app_add_metadata_stream(test_obj, - channel, - mm_app_metadata_notify_cb, - (void *)test_obj, - PREVIEW_BUF_NUM); - if (NULL == s_metadata) { - CDBG_ERROR("%s: add metadata stream failed\n", __func__); - mm_app_del_channel(test_obj, channel); - return rc; - } - - rc = mm_app_start_channel(test_obj, channel); - if (MM_CAMERA_OK != rc) { - CDBG_ERROR("%s:start preview failed rc=%d\n", __func__, rc); - for (i = 0; i < channel->num_streams; i++) { - stream = &channel->streams[i]; - mm_app_del_stream(test_obj, channel, stream); - } - mm_app_del_channel(test_obj, channel); - return rc; - } - - return rc; -} - -int mm_app_stop_preview(mm_camera_test_obj_t *test_obj) -{ - int rc = MM_CAMERA_OK; - - mm_camera_channel_t *channel = - mm_app_get_channel_by_type(test_obj, MM_CHANNEL_TYPE_PREVIEW); - - rc = mm_app_stop_and_del_channel(test_obj, channel); - if (MM_CAMERA_OK != rc) { - CDBG_ERROR("%s:Stop Preview failed rc=%d\n", __func__, rc); - } - - return rc; -} - -int mm_app_start_preview_zsl(mm_camera_test_obj_t *test_obj) -{ - int32_t rc = MM_CAMERA_OK; - mm_camera_channel_t *channel = NULL; - mm_camera_stream_t *s_preview = NULL; - mm_camera_stream_t *s_metadata = NULL; - mm_camera_stream_t *s_main = NULL; - mm_camera_channel_attr_t attr; - - memset(&attr, 0, sizeof(mm_camera_channel_attr_t)); - attr.notify_mode = MM_CAMERA_SUPER_BUF_NOTIFY_CONTINUOUS; - attr.look_back = 2; - attr.post_frame_skip = 0; - attr.water_mark = 2; - attr.max_unmatched_frames = 3; - channel = mm_app_add_channel(test_obj, - MM_CHANNEL_TYPE_ZSL, - &attr, - mm_app_zsl_notify_cb, - test_obj); - if (NULL == channel) { - CDBG_ERROR("%s: add channel failed", __func__); - return -MM_CAMERA_E_GENERAL; - } - - s_preview = mm_app_add_preview_stream(test_obj, - channel, - mm_app_preview_notify_cb, - (void *)test_obj, - PREVIEW_BUF_NUM); - if (NULL == s_preview) { - CDBG_ERROR("%s: add preview stream failed\n", __func__); - mm_app_del_channel(test_obj, channel); - return rc; - } - - s_metadata = mm_app_add_metadata_stream(test_obj, - channel, - mm_app_metadata_notify_cb, - (void *)test_obj, - PREVIEW_BUF_NUM); - if (NULL == s_metadata) { - CDBG_ERROR("%s: add metadata stream failed\n", __func__); - mm_app_del_channel(test_obj, channel); - return rc; - } - - s_main = mm_app_add_snapshot_stream(test_obj, - channel, - NULL, - NULL, - PREVIEW_BUF_NUM, - 0); - if (NULL == s_main) { - CDBG_ERROR("%s: add main snapshot stream failed\n", __func__); - mm_app_del_stream(test_obj, channel, s_preview); - mm_app_del_channel(test_obj, channel); - return rc; - } - - rc = mm_app_start_channel(test_obj, channel); - if (MM_CAMERA_OK != rc) { - CDBG_ERROR("%s:start zsl failed rc=%d\n", __func__, rc); - mm_app_del_stream(test_obj, channel, s_preview); - mm_app_del_stream(test_obj, channel, s_metadata); - mm_app_del_stream(test_obj, channel, s_main); - mm_app_del_channel(test_obj, channel); - return rc; - } - - if ( test_obj->enable_reproc ) { - if ( NULL == mm_app_add_reprocess_channel(test_obj, s_main) ) { - CDBG_ERROR("%s: Reprocess channel failed to initialize \n", __func__); - mm_app_del_stream(test_obj, channel, s_preview); -#ifdef USE_METADATA_STREAM - mm_app_del_stream(test_obj, channel, s_metadata); -#endif - mm_app_del_stream(test_obj, channel, s_main); - mm_app_del_channel(test_obj, channel); - return rc; - } - rc = mm_app_start_reprocess(test_obj); - if (MM_CAMERA_OK != rc) { - CDBG_ERROR("%s: reprocess start failed rc=%d\n", __func__, rc); - mm_app_del_stream(test_obj, channel, s_preview); -#ifdef USE_METADATA_STREAM - mm_app_del_stream(test_obj, channel, s_metadata); -#endif - mm_app_del_stream(test_obj, channel, s_main); - mm_app_del_channel(test_obj, channel); - return rc; - } - } - - return rc; -} - -int mm_app_stop_preview_zsl(mm_camera_test_obj_t *test_obj) -{ - int rc = MM_CAMERA_OK; - - mm_camera_channel_t *channel = - mm_app_get_channel_by_type(test_obj, MM_CHANNEL_TYPE_ZSL); - - rc = mm_app_stop_and_del_channel(test_obj, channel); - if (MM_CAMERA_OK != rc) { - CDBG_ERROR("%s:Stop Preview failed rc=%d\n", __func__, rc); - } - - if ( test_obj->enable_reproc ) { - rc |= mm_app_stop_reprocess(test_obj); - } - - return rc; -} - -int mm_app_initialize_fb(mm_camera_test_obj_t *test_obj) -{ - int rc = MM_CAMERA_OK; - int brightness_fd; - const char brightness_level[] = BACKLIGHT_LEVEL; - void *fb_base = NULL; - - assert( ( NULL != test_obj ) && ( 0 == test_obj->fb_fd ) ); - - test_obj->fb_fd = open(FB_PATH, O_RDWR); - if ( 0 > test_obj->fb_fd ) { - CDBG_ERROR("%s: FB device open failed rc=%d, %s\n", - __func__, - -errno, - strerror(errno)); - rc = -errno; - goto FAIL; - } - - rc = ioctl(test_obj->fb_fd, FBIOGET_VSCREENINFO, &test_obj->vinfo); - if ( MM_CAMERA_OK != rc ) { - CDBG_ERROR("%s: Can not retrieve screen info rc=%d, %s\n", - __func__, - -errno, - strerror(errno)); - rc = -errno; - goto FAIL; - } - - if ( ( 0 == test_obj->vinfo.yres_virtual ) || - ( 0 == test_obj->vinfo.yres ) || - ( test_obj->vinfo.yres > test_obj->vinfo.yres_virtual ) ) { - CDBG_ERROR("%s: Invalid FB virtual yres: %d, yres: %d\n", - __func__, - test_obj->vinfo.yres_virtual, - test_obj->vinfo.yres); - rc = MM_CAMERA_E_GENERAL; - goto FAIL; - } - - if ( ( 0 == test_obj->vinfo.xres_virtual ) || - ( 0 == test_obj->vinfo.xres ) || - ( test_obj->vinfo.xres > test_obj->vinfo.xres_virtual ) ) { - CDBG_ERROR("%s: Invalid FB virtual xres: %d, xres: %d\n", - __func__, - test_obj->vinfo.xres_virtual, - test_obj->vinfo.xres); - rc = MM_CAMERA_E_GENERAL; - goto FAIL; - } - - brightness_fd = open(BACKLIGHT_CONTROL, O_RDWR); - if ( brightness_fd >= 0 ) { - write(brightness_fd, brightness_level, strlen(brightness_level)); - close(brightness_fd); - } - - test_obj->slice_size = test_obj->vinfo.xres * ( test_obj->vinfo.yres - 1 ) * DEFAULT_OV_FORMAT_BPP; - memset(&test_obj->data_overlay, 0, sizeof(struct mdp_overlay)); - test_obj->data_overlay.src.width = test_obj->buffer_width; - test_obj->data_overlay.src.height = test_obj->buffer_height; - test_obj->data_overlay.src_rect.w = test_obj->buffer_width; - test_obj->data_overlay.src_rect.h = test_obj->buffer_height; - test_obj->data_overlay.dst_rect.w = test_obj->buffer_width; - test_obj->data_overlay.dst_rect.h = test_obj->buffer_height; - test_obj->data_overlay.src.format = DEFAULT_OV_FORMAT; - test_obj->data_overlay.src_rect.x = 0; - test_obj->data_overlay.src_rect.y = 0; - test_obj->data_overlay.dst_rect.x = 0; - test_obj->data_overlay.dst_rect.y = 0; - test_obj->data_overlay.z_order = 2; - test_obj->data_overlay.alpha = 0x80; - test_obj->data_overlay.transp_mask = 0xffe0; - test_obj->data_overlay.flags = MDP_FLIP_LR | MDP_FLIP_UD; - - // Map and clear FB portion - fb_base = mmap(0, - test_obj->slice_size, - PROT_WRITE, - MAP_SHARED, - test_obj->fb_fd, - 0); - if ( MAP_FAILED == fb_base ) { - CDBG_ERROR("%s: ( Error while memory mapping frame buffer %s", - __func__, - strerror(errno)); - rc = -errno; - goto FAIL; - } - - memset(fb_base, 0, test_obj->slice_size); - - if (ioctl(test_obj->fb_fd, FBIOPAN_DISPLAY, &test_obj->vinfo) < 0) { - CDBG_ERROR("%s : FBIOPAN_DISPLAY failed!", __func__); - rc = -errno; - goto FAIL; - } - - munmap(fb_base, test_obj->slice_size); - test_obj->data_overlay.id = (uint32_t)MSMFB_NEW_REQUEST; - rc = ioctl(test_obj->fb_fd, MSMFB_OVERLAY_SET, &test_obj->data_overlay); - if (rc < 0) { - CDBG_ERROR("%s : MSMFB_OVERLAY_SET failed! err=%d\n", - __func__, - test_obj->data_overlay.id); - return MM_CAMERA_E_GENERAL; - } - CDBG_ERROR("%s: Overlay set with overlay id: %d", __func__, test_obj->data_overlay.id); - - return rc; - -FAIL: - - if ( 0 < test_obj->fb_fd ) { - close(test_obj->fb_fd); - } - - return rc; -} - -int mm_app_close_fb(mm_camera_test_obj_t *test_obj) -{ - int rc = MM_CAMERA_OK; - - assert( ( NULL != test_obj ) && ( 0 < test_obj->fb_fd ) ); - - if (ioctl(test_obj->fb_fd, MSMFB_OVERLAY_UNSET, &test_obj->data_overlay.id)) { - CDBG_ERROR("\nERROR! MSMFB_OVERLAY_UNSET failed! (Line %d)\n", __LINE__); - } - - if (ioctl(test_obj->fb_fd, FBIOPAN_DISPLAY, &test_obj->vinfo) < 0) { - CDBG_ERROR("ERROR: FBIOPAN_DISPLAY failed! line=%d\n", __LINE__); - } - - close(test_obj->fb_fd); - test_obj->fb_fd = 0; - - return rc; -} - -void memset16(void *pDst, uint16_t value, int count) -{ - uint16_t *ptr = pDst; - while (count--) - *ptr++ = value; -} - -int mm_app_overlay_display(mm_camera_test_obj_t *test_obj, int bufferFd) -{ - int rc = MM_CAMERA_OK; - struct msmfb_overlay_data ovdata; - - - memset(&ovdata, 0, sizeof(struct msmfb_overlay_data)); - ovdata.id = test_obj->data_overlay.id; - ovdata.data.memory_id = bufferFd; - - if (ioctl(test_obj->fb_fd, MSMFB_OVERLAY_PLAY, &ovdata)) { - CDBG_ERROR("%s : MSMFB_OVERLAY_PLAY failed!", __func__); - return MM_CAMERA_E_GENERAL; - } - - if (ioctl(test_obj->fb_fd, FBIOPAN_DISPLAY, &test_obj->vinfo) < 0) { - CDBG_ERROR("%s : FBIOPAN_DISPLAY failed!", __func__); - return MM_CAMERA_E_GENERAL; - } - - return rc; -} |
