summaryrefslogtreecommitdiffstats
path: root/libcamera
diff options
context:
space:
mode:
authorPawit Pornkitprasan <p.pawit@gmail.com>2012-02-05 17:40:27 +0700
committerPawit Pornkitprasan <p.pawit@gmail.com>2012-02-05 17:40:27 +0700
commitba0febbd24c8ed1a2a2534aaf496627f89101385 (patch)
tree6ff7ceefee356c2ae9e9cd535a402ada1a06b72e /libcamera
parent1ba745f850d1bb55e30c43d2a71811705cf41e46 (diff)
downloaddevice_samsung_aries-common-ba0febbd24c8ed1a2a2534aaf496627f89101385.zip
device_samsung_aries-common-ba0febbd24c8ed1a2a2534aaf496627f89101385.tar.gz
device_samsung_aries-common-ba0febbd24c8ed1a2a2534aaf496627f89101385.tar.bz2
aries-common: libcamera: Send GPS info to CE147
Diffstat (limited to 'libcamera')
-rwxr-xr-xlibcamera/SecCamera.cpp57
1 files changed, 56 insertions, 1 deletions
diff --git a/libcamera/SecCamera.cpp b/libcamera/SecCamera.cpp
index cb6ad10..7ea19e8 100755
--- a/libcamera/SecCamera.cpp
+++ b/libcamera/SecCamera.cpp
@@ -1208,7 +1208,20 @@ int SecCamera::setSnapshotCmd(void)
CHECK(ret);
// Additional calls needed for CE147
- // TODO: GPS
+
+ // GPS
+ ret = fimc_v4l2_s_ext_ctrl(m_cam_fd, V4L2_CID_CAMERA_GPS_LATITUDE, &gpsInfoLatitude);
+ CHECK(ret);
+ ret = fimc_v4l2_s_ext_ctrl(m_cam_fd, V4L2_CID_CAMERA_GPS_LONGITUDE, &gpsInfoLongitude);
+ CHECK(ret);
+ ret = fimc_v4l2_s_ext_ctrl(m_cam_fd, V4L2_CID_CAMERA_GPS_ALTITUDE, &gpsInfoAltitude);
+ CHECK(ret);
+ ret = fimc_v4l2_s_ext_ctrl(m_cam_fd, V4L2_CID_CAMERA_GPS_PROCESSINGMETHOD,
+ mExifInfo.gps_processing_method);
+ CHECK(ret);
+ unsigned long temp = m_gps_timestamp;
+ ret = fimc_v4l2_s_ext_ctrl(m_cam_fd, V4L2_CID_CAMERA_GPS_TIMESTAMP, &temp);
+ CHECK(ret);
// Time
time_t rawtime;
@@ -2520,6 +2533,23 @@ int SecCamera::setGPSLatitude(const char *gps_latitude)
m_gps_latitude = lround(strtod(gps_latitude, NULL) * 10000000);
}
+ if (m_camera_id == CAMERA_ID_BACK) {
+ if (m_gps_enabled) {
+ long tmp = (m_gps_latitude >= 0) ? m_gps_latitude : -m_gps_latitude;
+ gpsInfoLatitude.north_south = m_gps_latitude < 0;
+ gpsInfoLatitude.dgree = tmp / 10000000;
+ tmp = (tmp % 10000000) * 60;
+ gpsInfoLatitude.minute = tmp / 10000000;
+ gpsInfoLatitude.second = (tmp % 10000000) * 60 / 10000000;
+ }
+ else {
+ gpsInfoLatitude.north_south = 0;
+ gpsInfoLatitude.dgree = 0;
+ gpsInfoLatitude.minute = 0;
+ gpsInfoLatitude.second = 0;
+ }
+ }
+
LOGV("%s(m_gps_latitude(%ld))", __func__, m_gps_latitude);
return 0;
}
@@ -2534,6 +2564,23 @@ int SecCamera::setGPSLongitude(const char *gps_longitude)
m_gps_longitude = lround(strtod(gps_longitude, NULL) * 10000000);
}
+ if (m_camera_id == CAMERA_ID_BACK) {
+ if (m_gps_enabled) {
+ long tmp = (m_gps_longitude >= 0) ? m_gps_longitude : -m_gps_longitude;
+ gpsInfoLongitude.east_west = m_gps_longitude < 0;
+ gpsInfoLongitude.dgree = tmp / 10000000;
+ tmp = (tmp % 10000000) * 60;
+ gpsInfoLongitude.minute = tmp / 10000000;
+ gpsInfoLongitude.second = (tmp % 10000000) * 60 / 10000000;
+ }
+ else {
+ gpsInfoLongitude.east_west = 0;
+ gpsInfoLongitude.dgree = 0;
+ gpsInfoLongitude.minute = 0;
+ gpsInfoLongitude.second = 0;
+ }
+ }
+
LOGV("%s(m_gps_longitude(%ld))", __func__, m_gps_longitude);
return 0;
}
@@ -2547,6 +2594,14 @@ int SecCamera::setGPSAltitude(const char *gps_altitude)
m_gps_altitude = lround(strtod(gps_altitude, NULL) * 100);
}
+ if (m_camera_id == CAMERA_ID_BACK) {
+ gpsInfoAltitude.plus_minus = (m_gps_altitude >= 0);
+ long tmp = gpsInfoAltitude.plus_minus ? m_gps_altitude : -m_gps_altitude;
+ gpsInfoAltitude.dgree = tmp / 100;
+ gpsInfoAltitude.minute = tmp % 100;
+ gpsInfoAltitude.second = 0;
+ }
+
LOGV("%s(m_gps_altitude(%ld))", __func__, m_gps_altitude);
return 0;
}