diff g23m/condat/ms/src/mfw/mfw_cam.c @ 0:509db1a7b7b8

initial import: leo2moko-r1
author Space Falcon <falcon@ivan.Harhan.ORG>
date Mon, 01 Jun 2015 03:24:05 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/g23m/condat/ms/src/mfw/mfw_cam.c	Mon Jun 01 03:24:05 2015 +0000
@@ -0,0 +1,635 @@
+/*
++--------------------------------------------------------------------+
+| PROJECT:	MMI-Framework (8417)		$Workfile::	mfw_cam.c	    $|
+| $Author::	NDH							$Revision::	1			    $|
+| CREATED:	21.05.04		     		$Modtime::	21.05.04 14:58	$|
+| STATE  :	code														 |
++--------------------------------------------------------------------+
+
+   MODULE  : MFW_CAM
+
+   PURPOSE : This module contains Camera Interface functions.
+
+   HISTORY:
+
+       Nov 29, 2005 REF: MMI-SPR-33833(OMAPS00055207)- x0035544
+       MMI making Riviera calls without using proper header files. So added appropriate header files.
+       
+    	Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
+	Description: Locosto: MIgration to New LCD APIs
+	Solution: Migrated to New APIs by replacing the old driver APIs with
+	corresponding New LCD APIs
+
+   	Sep 13, 2005    REF: SPR 33992 xdeepadh	
+	Description: Image viewer cannot open file when saved in high quality	
+	Solution: The quality factor has been rearranged to support saving	the images within 64KBlimit.
+
+ 	Aug 22 2005, xpradipg - LOCOSTO-ENH-31154
+ 	Description:	Application to test camera
+ 	Solution:	Implemented the camera application with following functionalities
+ 			preview, snapshot and image saving.
+
+*/
+
+
+/*
+** Include Files
+*/
+
+#define ENTITY_MFW
+/* includes */
+#include <string.h>
+
+
+#include "typedefs.h"
+#include "vsi.h"
+#include "pei.h"
+#include "custom.h"
+#include "gsm.h"
+
+#include "message.h" /* included for aci_cmh.h .... */
+#include "prim.h" /* included for aci_cmh.h .... */
+#include "aci_cmh.h" /* included for mfw_sat.h, included for MmiDummy.h, included for MmiMenu.h */
+
+
+#include "mfw_mfw.h"
+#include "mfw_win.h"
+#include "mfw_cam.h"
+
+//#include "img/img_api.h" //included for img_message.h
+//#include "img/img_message.h"
+
+#include "mks/mks_api.h"
+
+//#include "r2d/lcd_messages_ti.h"
+//#include "r2d/lcd_messages.h"
+#include "r2d/r2d.h"
+//#include "cama/cama_cfg.h"
+//#include "cama/cama_i.h"
+#include "cama/camil_api.h"
+#include "cama/camil_i.h"
+//#include "gil/gil_gpf.h"
+#include "ffs/ffs_api.h"
+#include "mfw_ffs.h"
+
+#if (BOARD == 71)
+#define ISAMPLE
+#endif
+//x0035544 29 Nov, 2005 MMI-SPR-55207
+#ifndef NEPTUNE_BOARD //x0035544 Sudha - Guarded the below header file for Neptune.
+#include "rv/rv_general.h"
+#endif
+
+#include "dspl.h"
+
+
+/*Variable declarations*/
+
+//Variable to track the different Camera states.
+UBYTE camera_state = CAMERA_STATE_IDLE;
+
+//Variable to store the quality factor.
+static UBYTE quality_factor = QUALITY_STANDARD;
+
+T_CAMA_VIEWFINDER_PARAMETERS viewfinder_parameters;  //For Future Use, when viewfinder parameters can be configured.
+
+//File name for the jpeg image to be saved in FFS.
+extern char new_filename[CT_FILE_NAME_LENGTH];
+
+//Flag to check whether viewfinder parameter configuration has changed.
+UBYTE configure_flag = FALSE;
+
+//Riviera Callback Functions for CAMIL API
+static void mfw_cam_save_image_cb(void *parameter);
+static void mfw_cam_get_viewfinder_param_cb(void *parameter);
+static void mfw_cam_set_viewfinder_param_cb(void *parameter);
+static void mfw_cam_set_viewfinder_mode_cb(void *parameter);
+static void mfw_cam_enable_viewfinder_mode_cb(void *parameter);
+static void mfw_cam_disable_viewfinder_mode_cb(void *parameter);
+
+//Local function prototypes
+void mfw_cam_set_viewfinder_param(T_CAMA_VIEWFINDER_PARAMETERS param);
+void mfw_cam_set_viewfinder_param_color(UBYTE blackandwhite);
+void mfw_cam_set_viewfinder_param_zoom(UBYTE zoom);
+
+extern  void display_saved_image(BOOL);
+
+/*
+** Public function Definitions
+*/
+
+/*******************************************************************************
+
+ $Function:		mfw_cam_init
+
+ $Description:		This function initialises the camil interface.
+
+ $Returns:		None
+
+ $Arguments:		None
+
+*******************************************************************************/
+void mfw_cam_init(void)
+{
+	T_FFS_DIR  dir;
+ 	T_FFS_RET ffsResult;
+   	TRACE_EVENT("mfw_cam_init()");
+
+        ffsResult = ffs_opendir(JPEG_CONTENT_DIR,&dir);                    
+        if(EFFS_NOTFOUND == ffsResult)
+        	{
+        		//Directory does not exsists, create it and initialize the table and write it to FFS
+			ffsResult = ffs_mkdir(JPEG_CONTENT_DIR);
+			if(EFFS_OK == ffsResult)
+			{
+				TRACE_EVENT("Create Dir Passed"); 
+    			}
+    			else
+       			 TRACE_EVENT("Create Dir Failed");    
+        	}
+	// Initialize CAMIL interface.
+	if (camil_init() != RV_OK)
+	{
+	    // @todo : use correct return code for error cases !
+	    return ;
+	}
+
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_cam_get_viewfinder_param_cb
+
+ $Description: Callback to get the viewfinder parameters.
+
+ $Returns: None 
+
+ $Arguments: Callback Parameter
+
+*******************************************************************************/
+static void mfw_cam_get_viewfinder_param_cb(void *parameter)
+{
+	viewfinder_parameters = ((T_CAMA_MSG *)parameter)->body.viewfinder_parameters;
+}
+
+/*******************************************************************************
+
+ $Function:		mfw_cam_exit
+
+ $Description:		This function will tidy up any resources used by the Mfw Camera Module
+ 				on Power Down
+
+ $Returns:		None
+
+ $Arguments:		None
+
+*******************************************************************************/
+void mfw_cam_exit(void)
+{
+
+	TRACE_EVENT("mfw_cam_exit()");
+
+	/* nothing to do here... RAM will be automatically cleaned, and the flash wasn't modified */
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_cam_enable_sensor_dummy_cb
+
+ $Description: dummy callback functions used to disable the camera
+
+ $Returns: None
+
+ $Arguments: Callback Parameter
+
+*******************************************************************************/
+static void mfw_cam_enable_sensor_dummy_cb(void *parameter)
+{
+	TRACE_EVENT("mfw_cam_enable_sensor_dummy_cb()");
+//Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
+//replaced the flag with the function call, to migrate to the new Lcd APIs	
+	dspl_control(DSPL_ACCESS_ENABLE);
+}
+
+
+/*******************************************************************************
+
+ $Function:     mfw_cam_disable_sensor
+
+ $Description:Disables the camera - Called by the MMI
+
+ $Returns: Execution status
+
+ $Arguments: None
+*******************************************************************************/
+SHORT mfw_cam_disable_sensor(void)
+{
+	TRACE_EVENT("mfw_cam_disable_sensor()");
+   	camil_enable_camera(FALSE, mfw_cam_enable_sensor_dummy_cb);
+
+   return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:     mfw_cam_enable_camera_cb
+
+ $Description: Callback for Enabling camera.
+
+ $Returns:  None
+
+ $Arguments: Callback Parameter
+
+*******************************************************************************/
+static void mfw_cam_enable_camera_cb(void *parameter)
+{
+
+	TRACE_EVENT("mfw_cam_enable_camera_cb()");
+	//Set the camera state to viewfinder.
+   camera_state = CAMERA_STATE_VIEWFINDER;
+    //Disable R2D refresh to stabilize lcd display of viewfinder
+//Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
+//replaced the flag with the function call, to migrate to the new Lcd APIs
+	dspl_control(DSPL_ACCESS_DISABLE);
+	//Set the viewfinder parameters
+   mfw_cam_set_viewfinder_param(viewfinder_parameters);
+}
+
+
+/*******************************************************************************
+
+ $Function:     mfw_cam_launch_viewfinder_dma
+
+ $Description:launch camera in viewfinder mode
+
+ $Returns:Execution status
+
+ $Arguments: None
+
+*******************************************************************************/
+SHORT mfw_cam_launch_viewfinder_dma(void)
+{
+      TRACE_EVENT("mfw_cam_launch_viewfinder_dma()");
+ 	camil_enable_camera (TRUE, mfw_cam_enable_camera_cb);
+   return 1;
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_cam_take_snapshot_cb
+
+ $Description: Callback for Camera  take snapshot function.
+
+ $Returns: None
+
+ $Arguments: Callback Parameter
+
+*******************************************************************************/
+static void mfw_cam_take_snapshot_cb(void *parameter)
+{
+
+  TRACE_EVENT("mfw_cam_take_snapshot_cb()");
+	//Set the camera state to Snapshot
+	camera_state = CAMERA_STATE_SNAPSHOT;
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_cam_take_snapshot
+
+ $Description:take a snapshot
+
+ $Returns:Execution status
+
+ $Arguments:		None
+
+*******************************************************************************/
+SHORT mfw_cam_take_snapshot(void)
+{
+   TRACE_EVENT("mfw_cam_take_snapshot()");   
+//Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
+//replaced the flag with the function call, to migrate to the new Lcd APIs
+	dspl_control(DSPL_ACCESS_DISABLE);
+	camil_take_snapshot(mfw_cam_take_snapshot_cb);
+  return 1;
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_camera_test_save_snapshot_cb
+
+ $Description:save snapshot in phone memory
+
+ $Returns:Execution status
+
+ $Arguments: None
+
+*******************************************************************************/
+SHORT mfw_cam_save_snapshot(void)
+{
+//Sep 13, 2005    REF: SPR 33992 xdeepadh
+//The fullpath will be included.
+	char filename[CT_FULL_PATH_LENGTH];
+
+	TRACE_EVENT("mfw_cam_save_snapshot()");
+	sprintf(filename,"%s/%s%d.jpg",JPEG_CONTENT_DIR, new_filename,(int)FFS_flashData.camera_file_counter);
+	TRACE_EVENT_P1("filename to be saved is %s",filename);
+	if(camil_save_image((UINT16)mfw_cam_get_quality_factor(),filename,mfw_cam_save_image_cb) == RV_OK)
+	{
+		TRACE_EVENT("mfw_cam_save_snapshot() passed");	
+		FFS_flashData.camera_file_counter++;
+		flash_write();
+		return MFW_CAM_OK;   	
+	}  
+	else  	
+	{
+		TRACE_EVENT("mfw_cam_save_snapshot() failed");  	
+		return MFW_CAM_FAILED;  
+	}
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_cam_save_image_cb
+
+ $Description: Callback for save image
+
+ $Returns:None
+
+ $Arguments: Callback Parameter
+
+*******************************************************************************/
+static void mfw_cam_save_image_cb(void *parameter)
+{
+	T_RV_RET status;
+	TRACE_EVENT("mfw_cam_save_image_cb()");
+	camera_state = CAMERA_STATE_VIEWFINDER;
+//Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipgn
+//replaced the flag with the function call, to migrate to the new Lcd APIs
+	dspl_control(DSPL_ACCESS_ENABLE);
+	if( ((T_CAMA_MSG*)parameter)->status != RV_OK)
+	{
+		TRACE_EVENT("ERROR SAVING IMAGE");
+		display_saved_image(FALSE);
+	}
+	else
+	{
+		TRACE_EVENT("IMAGE SAVED");
+		display_saved_image(TRUE);
+	}
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_cam_set_quality_factor
+		
+ $Description: Set the quality factor .This will be used while saving the jpeg image in ffs.
+		
+ $Returns: None
+	
+ $Arguments: factor-quality factor to be used to save the image.
+
+*******************************************************************************/
+void mfw_cam_set_quality_factor(UBYTE factor)
+{
+	TRACE_EVENT("mfw_cam_set_quality_factor()");
+	quality_factor = factor;
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_cam_get_quality_factor
+
+ $Description: This function returns the quality factor.
+
+ $Returns: The quality factor
+
+ $Arguments: None
+
+*******************************************************************************/
+
+UBYTE mfw_cam_get_quality_factor()
+{
+	TRACE_EVENT("mfw_cam_get_quality_factor()");
+	return quality_factor;
+}
+
+
+/*******************************************************************************
+
+ $Function:     mfw_cam_set_color
+
+ $Description:
+
+ $Returns:
+
+ $Arguments: 
+
+*******************************************************************************/
+void mfw_cam_set_color(UBYTE factor)
+{
+	TRACE_EVENT("mfw_cam_set_color()");
+}
+/*******************************************************************************
+
+ $Function:     mfw_cam_set_viewfinder_param_cb
+
+ $Description: Callback for the Viewfinder set parameters.
+
+ $Returns:None
+
+ $Arguments: Callback Parameter
+
+*******************************************************************************/
+static void mfw_cam_set_viewfinder_param_cb(void *parameter)
+{
+ TRACE_EVENT("mfw_cam_set_viewfinder_param_cb()");
+ 
+	configure_flag = FALSE;
+	/* start frame loop */
+	camil_set_viewfinder_mode(mfw_cam_set_viewfinder_mode_cb);
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_cam_set_viewfinder_param_color_cb
+
+ $Description: Callback for Viewfinder set Parameters
+
+ $Returns: None 
+
+ $Arguments: Callback Parameter
+
+*******************************************************************************/
+static void mfw_cam_set_viewfinder_param_color_cb(void *parameter)
+{
+  TRACE_EVENT("mfw_cam_set_viewfinder_param_color_cb()");
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_cam_set_viewfinder_param
+
+ $Description: This function sets the Viewfinder Parameters.
+ 			The camera will be started in the viewfinder mode.
+
+ $Returns: None
+
+ $Arguments: param- Viewfinder Parameters
+
+*******************************************************************************/
+
+void mfw_cam_set_viewfinder_param(T_CAMA_VIEWFINDER_PARAMETERS param)
+    {
+	TRACE_EVENT("mfw_cam_set_viewfinder_param()");
+	if(configure_flag)
+	{
+		camil_set_viewfinder_parameters(&param, mfw_cam_set_viewfinder_param_cb);
+	}
+	else
+	{
+	 	TRACE_EVENT("mfw_cam_set_viewfinder_param- no param chnaged.");
+		/* start frame loop */
+		camil_set_viewfinder_mode(mfw_cam_set_viewfinder_mode_cb);
+	}
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_cam_set_viewfinder_param_color
+
+ $Description: Sets the Viewfinder Parameter.
+
+ $Returns: None
+
+ $Arguments: blackandwhite- Viewfinder parameter
+
+*******************************************************************************/
+
+void mfw_cam_set_viewfinder_param_color(UBYTE blackandwhite)
+{
+	TRACE_EVENT("mfw_cam_set_viewfinder_param_color()");
+	viewfinder_parameters.black_and_white = blackandwhite;
+	//Configurations have changed. Set the configure_flag to TRUE.
+	configure_flag = TRUE;
+	//Set the Viewfinder parameters .
+	//camil_set_viewfinder_parameters(&viewfinder_parameters, mfw_cam_set_viewfinder_param_color_cb);
+}
+
+
+/*******************************************************************************
+
+ $Function:     mfw_cam_set_viewfinder_param_zoom
+
+ $Description:	Sets the Viewfinder Parameter.
+
+ $Returns: None
+
+ $Arguments: zoom- Viewfinder parameter
+
+*******************************************************************************/
+
+void mfw_cam_set_viewfinder_param_zoom(UBYTE zoom)
+{
+	TRACE_EVENT("mfw_cam_set_viewfinder_param_zoom()");
+	viewfinder_parameters.zoom = zoom;
+	//Configurations have chnaged. Set the configure_flag to TRUE.
+	configure_flag = TRUE;
+	//Set the Viewfinder parameters .
+	//camil_set_viewfinder_parameters(&viewfinder_parameters, mfw_cam_set_viewfinder_param_color_cb);
+}
+
+
+
+/*******************************************************************************
+
+ $Function:     mfw_cam_set_viewfinder_mode_cb
+
+ $Description: Callback for Setting Viewfinder.
+
+ $Returns: None
+
+ $Arguments: Callback Parameter
+
+*******************************************************************************/
+static void mfw_cam_set_viewfinder_mode_cb(void *parameter)
+{
+	TRACE_EVENT("mfw_cam_set_viewfinder_mode_cb()");
+	//added the refresh disable and state setting
+	//Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
+	//replaced the flag with the function call, to migrate to the new Lcd APIs
+	dspl_control(DSPL_ACCESS_DISABLE);
+	camera_state = CAMERA_STATE_VIEWFINDER;
+}
+
+
+/*******************************************************************************
+
+ $Function:     mfw_cam_set_viewfinder_mode
+
+ $Description: This function disables and reenables camera and sets the viewfinder mode.
+
+ $Returns:None
+
+ $Arguments: None
+
+*******************************************************************************/
+#ifdef ISAMPLE
+void  mfw_cam_set_viewfinder_mode(void)
+{
+   	TRACE_EVENT("mfw_cam_set_viewfinder_mode()");
+   	camera_state  =  CAMERA_STATE_VIEWFINDER;
+   	camil_set_viewfinder_mode(mfw_cam_set_viewfinder_mode_cb);
+}
+
+#else  //For ESAMPLE
+void  mfw_cam_set_viewfinder_mode(void)
+{
+	TRACE_EVENT("mfw_cam_set_viewfinder_mode()");
+	camil_enable_camera(FALSE, mfw_cam_disable_viewfinder_mode_cb);
+}
+#endif
+
+/*******************************************************************************
+
+ $Function:     mfw_cam_enable_viewfinder_mode_cb
+
+ $Description: Callback for camil_enable_camera
+
+ $Returns:None
+
+ $Arguments: Callback Parameter
+
+*******************************************************************************/
+static void mfw_cam_enable_viewfinder_mode_cb(void *parameter)
+{
+	TRACE_EVENT("mfw_cam_enable_viewfinder_mode_cb()");
+
+	//Disable R2D refresh (to be sure)
+//Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
+//replaced the flag with the function call, to migrate to the new Lcd APIs
+	dspl_control(DSPL_ACCESS_DISABLE);
+	camil_set_viewfinder_mode(mfw_cam_set_viewfinder_mode_cb);
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_cam_disable_viewfinder_mode_cb
+
+ $Description: Callback for disabling camera
+
+ $Returns:None
+
+ $Arguments: Callback Parameter
+
+*******************************************************************************/
+static void mfw_cam_disable_viewfinder_mode_cb(void *parameter)
+{
+	TRACE_EVENT("mfw_cam_disable_viewfinder_mode_cb()");
+	camil_enable_camera(TRUE, mfw_cam_enable_viewfinder_mode_cb);
+}
+
+
+
+