2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
19 * @file FMedia_CamcorderUtil.cpp
20 * @brief This file contains the utility of camera.
24 #include <FBaseSysLog.h>
25 #include "FMedia_CameraUtil.h"
26 #include "FMedia_Ffmpeg.h"
28 using namespace Tizen::Graphics;
30 namespace Tizen { namespace Media
35 camera_pixel_format_e mmFormat;
36 MediaPixelFormat mediaFormat;
37 Tizen::Graphics::PixelFormat grpFormat;
41 const static _PixelConvertTable _PIXEL_CONVERT[] =
43 { ::CAMERA_PIXEL_FORMAT_NV12, MEDIA_PIXEL_FORMAT_NV12, PIXEL_FORMAT_NV12, 1.5 },
44 { ::CAMERA_PIXEL_FORMAT_I420, MEDIA_PIXEL_FORMAT_YUV420P, PIXEL_FORMAT_YCbCr420_PLANAR, 1.5 },
45 { ::CAMERA_PIXEL_FORMAT_YUYV, MEDIA_PIXEL_FORMAT_YUYV422, (Tizen::Graphics::PixelFormat)-1, 2.0 },
46 { ::CAMERA_PIXEL_FORMAT_UYVY, MEDIA_PIXEL_FORMAT_UYVY422, PIXEL_FORMAT_UYVY, 2.0 },
47 { ::CAMERA_PIXEL_FORMAT_RGB565, MEDIA_PIXEL_FORMAT_RGB565LE, PIXEL_FORMAT_RGB565, 2.0 },
48 { ::CAMERA_PIXEL_FORMAT_RGBA, MEDIA_PIXEL_FORMAT_RGBA8888, PIXEL_FORMAT_R8G8B8A8, 4.0 },
49 { ::CAMERA_PIXEL_FORMAT_ARGB, MEDIA_PIXEL_FORMAT_BGRA8888, PIXEL_FORMAT_ARGB8888, 4.0 },
50 { ::CAMERA_PIXEL_FORMAT_JPEG, MEDIA_PIXEL_FORMAT_NONE , PIXEL_FORMAT_JPEG, 0.0}, //MediaPixelFormat does not express the compressed type.
54 _CameraUtil::GetOspMediaPixelFormat(camera_pixel_format_e mmFormat, MediaPixelFormat& mediaFormat, double& sizeRatio)
56 for (unsigned int i = 0; i < sizeof(_PIXEL_CONVERT)/sizeof(_PIXEL_CONVERT[0]); i++ )
58 if ( mmFormat == _PIXEL_CONVERT[i].mmFormat )
60 mediaFormat = _PIXEL_CONVERT[i].mediaFormat;
61 sizeRatio = _PIXEL_CONVERT[i].sizeRatio;
68 _CameraUtil::GetOspMediaPixelFormat(Tizen::Graphics::PixelFormat grpFormat, MediaPixelFormat& mediaFormat, double& sizeRatio)
70 for (unsigned int i = 0; i < sizeof(_PIXEL_CONVERT)/sizeof(_PIXEL_CONVERT[0]); i++ )
72 if ( grpFormat == _PIXEL_CONVERT[i].grpFormat )
74 mediaFormat = _PIXEL_CONVERT[i].mediaFormat;
75 sizeRatio = _PIXEL_CONVERT[i].sizeRatio;
82 _CameraUtil::_CameraUtil::GetOspGrpPixelFormat(camera_pixel_format_e mmFormat, Tizen::Graphics::PixelFormat& grpFormat)
84 bool findFlag = false;
85 int size = sizeof(_PIXEL_CONVERT)/sizeof(_PIXEL_CONVERT[0]);
87 for (int i = 0; i < size; i++)
89 if ((_PIXEL_CONVERT[i].mmFormat == mmFormat) &&
90 ((_PIXEL_CONVERT[i].grpFormat >= PIXEL_FORMAT_RGB565) && (_PIXEL_CONVERT[i].grpFormat <= PIXEL_FORMAT_UYVY)))
92 grpFormat = _PIXEL_CONVERT[i].grpFormat;
97 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
101 _CameraUtil::_CameraUtil::GetMmPixelFormat(Tizen::Graphics::PixelFormat grpFormat, camera_pixel_format_e& mmFormat)
103 bool findFlag = false;
104 int size = sizeof(_PIXEL_CONVERT)/sizeof(_PIXEL_CONVERT[0]);
106 for (int i = 0; i < size; i++)
108 if (_PIXEL_CONVERT[i].grpFormat == grpFormat)
110 mmFormat = _PIXEL_CONVERT[i].mmFormat;
115 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
120 camera_pixel_format_e mmAttr;
124 const static _CodecConvertTable _CODEC_CONVERT[] =
126 { ::CAMERA_PIXEL_FORMAT_JPEG, CODEC_JPEG },
130 _CameraUtil::GetOspCodecType(camera_pixel_format_e mmAttr, CodecType value)
132 bool findFlag = false;
133 int size = sizeof(_CODEC_CONVERT)/sizeof(_CODEC_CONVERT[0]);
135 for (int i = 0; i < size; i++)
137 if (_CODEC_CONVERT[i].mmAttr == mmAttr)
139 value = _CODEC_CONVERT[i].value;
144 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
149 CameraSelection selection;
150 camera_flip_e mmAttr;
151 CameraFlipType value;
154 static const _CameraFlipTable _CAMERA_FLIP[] =
156 {CAMERA_PRIMARY, ::CAMERA_FLIP_NONE, CAMERA_FLIP_NONE},
157 {CAMERA_PRIMARY, ::CAMERA_FLIP_HORIZONTAL, CAMERA_FLIP_HORIZONTAL},
158 {CAMERA_PRIMARY, ::CAMERA_FLIP_VERTICAL, CAMERA_FLIP_VERTICAL},
159 // {CAMERA_PRIMARY, ::CAMERA_FLIP_BOTH, },
160 {CAMERA_SECONDARY, ::CAMERA_FLIP_NONE, CAMERA_FLIP_NONE},
161 {CAMERA_SECONDARY, ::CAMERA_FLIP_HORIZONTAL, CAMERA_FLIP_HORIZONTAL},
162 {CAMERA_SECONDARY, ::CAMERA_FLIP_VERTICAL, CAMERA_FLIP_VERTICAL},
163 // {CAMERA_SECONDARY, ::CAMERA_FLIP_BOTH, },
167 _CameraUtil::GetMmFlip(CameraSelection selection, CameraFlipType value, camera_flip_e& mmAttr)
169 bool findFlag = false;
170 int size = sizeof(_CAMERA_FLIP)/sizeof(_CAMERA_FLIP[0]);
172 for (int i = 0; i < size; i++)
174 if (_CAMERA_FLIP[i].selection == selection && _CAMERA_FLIP[i].value == value)
176 mmAttr = _CAMERA_FLIP[i].mmAttr;
181 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
185 _CameraUtil::GetOspFlip(camera_flip_e mmAttr, CameraFlipType& value)
187 bool findFlag = false;
188 int size = sizeof(_CAMERA_FLIP)/sizeof(_CAMERA_FLIP[0]);
190 for (int i = 0; i < size; i++)
192 if (_CAMERA_FLIP[i].mmAttr == mmAttr)
194 value = _CAMERA_FLIP[i].value;
199 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
204 camera_rotation_e mmAttr;
205 CameraRotation value;
206 }_CameraRotationTable;
208 static const _CameraRotationTable _CAMERA_ROTATION[] =
210 {::CAMERA_ROTATION_NONE, CAMERA_ROTATION_NONE},
211 {::CAMERA_ROTATION_90, CAMERA_ROTATION_90},
212 {::CAMERA_ROTATION_180, CAMERA_ROTATION_180},
213 {::CAMERA_ROTATION_270, CAMERA_ROTATION_270},
217 _CameraUtil::GetMmRotation(CameraRotation value, camera_rotation_e& mmAttr)
219 bool findFlag = false;
220 int size = sizeof(_CAMERA_ROTATION)/sizeof(_CAMERA_ROTATION[0]);
222 for (int i = 0; i < size; i++)
224 if (_CAMERA_ROTATION[i].value == value)
226 mmAttr = _CAMERA_ROTATION[i].mmAttr;
231 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
235 _CameraUtil::GetOspRotation(camera_rotation_e mmAttr, CameraRotation& value)
237 bool findFlag = false;
238 int size = sizeof(_CAMERA_ROTATION)/sizeof(_CAMERA_ROTATION[0]);
240 for (int i = 0; i < size; i++)
242 if (_CAMERA_ROTATION[i].mmAttr == mmAttr)
244 value = _CAMERA_ROTATION[i].value;
249 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
254 camera_attr_fps_e mmAttr;
258 static const _CameraFpsTable _CAMERA_FPS[] =
260 {::CAMERA_ATTR_FPS_8, 8},
261 {::CAMERA_ATTR_FPS_15, 15},
262 {::CAMERA_ATTR_FPS_24, 24},
263 {::CAMERA_ATTR_FPS_25, 25},
264 {::CAMERA_ATTR_FPS_30, 30},
265 // This means that below fps are not supported in osp.
266 // {::CAMERA_ATTR_FPS_AUTO, 0xffffffff},
267 // {::CAMERA_ATTR_FPS_60, 60},
268 // {::CAMERA_ATTR_FPS_120, 120},
272 _CameraUtil::GetMmFps(int value, camera_attr_fps_e& mmAttr)
274 bool findFlag = false;
275 int size = sizeof(_CAMERA_FPS)/sizeof(_CAMERA_FPS[0]);
277 for (int i = 0; i < size; i++)
279 if (_CAMERA_FPS[i].value == value)
281 mmAttr = _CAMERA_FPS[i].mmAttr;
286 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
290 _CameraUtil::GetOspFps(camera_attr_fps_e mmAttr, int& value)
292 bool findFlag = false;
293 int size = sizeof(_CAMERA_FPS)/sizeof(_CAMERA_FPS[0]);
295 for (int i = 0; i < size; i++)
297 if (_CAMERA_FPS[i].mmAttr == mmAttr)
299 value = _CAMERA_FPS[i].value;
304 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
309 camera_attr_effect_mode_e mmAttr;
313 static const _CameraEffectTable _CAMERA_EFFECT[] =
315 // {::CAMERA_ATTR_EFFECT_NONE, CAMERA_EFFECT_COLOR},
316 {::CAMERA_ATTR_EFFECT_NONE, CAMERA_EFFECT_NONE},
317 {::CAMERA_ATTR_EFFECT_MONO, CAMERA_EFFECT_BW},
318 {::CAMERA_ATTR_EFFECT_SEPIA, CAMERA_EFFECT_SEPIA},
319 {::CAMERA_ATTR_EFFECT_NEGATIVE, CAMERA_EFFECT_NEGATIVE},
320 // {::CAMERA_ATTR_EFFECT_BLUE, },
321 // {::CAMERA_ATTR_EFFECT_GREEN, },
322 // {::CAMERA_ATTR_EFFECT_AQUA, },
323 // {::CAMERA_ATTR_EFFECT_VIOLET, },
324 // {::CAMERA_ATTR_EFFECT_ORANGE, },
325 // {::CAMERA_ATTR_EFFECT_GRAY, CAMERA_EFFECT_BW},
326 // {::CAMERA_ATTR_EFFECT_RED, },
327 // {::CAMERA_ATTR_EFFECT_ANTIQUE, },
328 // {::CAMERA_ATTR_EFFECT_WARM, },
329 // {::CAMERA_ATTR_EFFECT_PINK, },
330 // {::CAMERA_ATTR_EFFECT_YELLOW, },
331 // {::CAMERA_ATTR_EFFECT_PURPLE, },
332 // {::CAMERA_ATTR_EFFECT_EMBOSS, },
333 // {::CAMERA_ATTR_EFFECT_OUTLINE, },
334 {::CAMERA_ATTR_EFFECT_SOLARIZATION, CAMERA_EFFECT_SOLARIZE},
335 // {::CAMERA_ATTR_EFFECT_SKETCH, },
336 // {, CAMERA_EFFECT_NIGHT},
340 _CameraUtil::GetMmEffect(CameraEffect value, camera_attr_effect_mode_e& mmAttr)
342 bool findFlag = false;
343 int size = sizeof(_CAMERA_EFFECT)/sizeof(_CAMERA_EFFECT[0]);
345 for (int i = 0; i < size; i++)
347 if (_CAMERA_EFFECT[i].value == value)
349 mmAttr = _CAMERA_EFFECT[i].mmAttr;
354 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
358 _CameraUtil::GetOspEffect(camera_attr_effect_mode_e mmAttr, CameraEffect& value)
360 bool findFlag = false;
361 int size = sizeof(_CAMERA_EFFECT)/sizeof(_CAMERA_EFFECT[0]);
363 for (int i = 0; i < size; i++)
365 if (_CAMERA_EFFECT[i].mmAttr == mmAttr)
367 value = _CAMERA_EFFECT[i].value;
372 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
377 camera_attr_whitebalance_e mmAttr;
378 CameraWhiteBalance value;
381 static const _CameraWbTable _CAMERA_WB[] =
383 // {::CAMERA_ATTR_WHITE_BALANCE_NONE, },
384 {::CAMERA_ATTR_WHITE_BALANCE_AUTOMATIC, CAMERA_WHITE_BALANCE_AUTO},
385 {::CAMERA_ATTR_WHITE_BALANCE_DAYLIGHT, CAMERA_WHITE_BALANCE_SUNNY},
386 {::CAMERA_ATTR_WHITE_BALANCE_CLOUDY, CAMERA_WHITE_BALANCE_CLOUDY},
387 {::CAMERA_ATTR_WHITE_BALANCE_FLUORESCENT, CAMERA_WHITE_BALANCE_FLUORESCENT},
388 {::CAMERA_ATTR_WHITE_BALANCE_INCANDESCENT, CAMERA_WHITE_BALANCE_TUNGSTEN},
389 // {::CAMERA_ATTR_WHITE_BALANCE_SHADE, },
390 // {::CAMERA_ATTR_WHITE_BALANCE_HORIZON, },
391 // {::CAMERA_ATTR_WHITE_BALANCE_FLASH, },
392 // {::CAMERA_ATTR_WHITE_BALANCE_CUSTOM, },
396 _CameraUtil::GetMmWhiteBalance(CameraWhiteBalance value, camera_attr_whitebalance_e& mmAttr)
398 bool findFlag = false;
399 int size = sizeof(_CAMERA_WB)/sizeof(_CAMERA_WB[0]);
401 for (int i = 0; i < size; i++)
403 if (_CAMERA_WB[i].value == value)
405 mmAttr = _CAMERA_WB[i].mmAttr;
410 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
414 _CameraUtil::GetOspWhiteBalance(camera_attr_whitebalance_e mmAttr, CameraWhiteBalance& value)
416 bool findFlag = false;
417 int size = sizeof(_CAMERA_WB)/sizeof(_CAMERA_WB[0]);
419 for (int i = 0; i < size; i++)
421 if (_CAMERA_WB[i].mmAttr == mmAttr)
423 value = _CAMERA_WB[i].value;
428 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
433 camera_attr_scene_mode_e mmAttr;
434 CameraSceneMode value;
437 static const _CameraSceneTable _CAMERA_SCENE_MODE[] =
439 {::CAMERA_ATTR_SCENE_MODE_NORMAL, CAMERA_SCENE_OFF},
440 // {::, CAMERA_SCENE_AUTO},
441 {::CAMERA_ATTR_SCENE_MODE_PORTRAIT, CAMERA_SCENE_PORTRAIT},
442 {::CAMERA_ATTR_SCENE_MODE_LANDSCAPE, CAMERA_SCENE_LANDSCAPE},
443 {::CAMERA_ATTR_SCENE_MODE_SPORTS, CAMERA_SCENE_SPORTS},
444 {::CAMERA_ATTR_SCENE_MODE_PARTY_N_INDOOR, CAMERA_SCENE_PARTY_INDOOR},
445 {::CAMERA_ATTR_SCENE_MODE_BEACH_N_INDOOR, CAMERA_SCENE_BEACH_SHOW},
446 {::CAMERA_ATTR_SCENE_MODE_SUNSET, CAMERA_SCENE_SUNSET},
447 {::CAMERA_ATTR_SCENE_MODE_DUSK_N_DAWN, CAMERA_SCENE_DUSK_DAWN},
448 {::CAMERA_ATTR_SCENE_MODE_FALL_COLOR, CAMERA_SCENE_AUTUMN_COLOR},
449 {::CAMERA_ATTR_SCENE_MODE_NIGHT_SCENE, CAMERA_SCENE_NIGHT},
450 {::CAMERA_ATTR_SCENE_MODE_FIREWORK, CAMERA_SCENE_FIREWORK},
451 {::CAMERA_ATTR_SCENE_MODE_TEXT, CAMERA_SCENE_TEXT},
452 {::CAMERA_ATTR_SCENE_MODE_SHOW_WINDOW, CAMERA_SCENE_SHOW_WINDOW},
453 {::CAMERA_ATTR_SCENE_MODE_CANDLE_LIGHT, CAMERA_SCENE_CANDLELIGHT},
454 {::CAMERA_ATTR_SCENE_MODE_BACKLIGHT, CAMERA_SCENE_BACKLIGHT},
458 _CameraUtil::GetMmSceneMode(CameraSceneMode value, camera_attr_scene_mode_e& mmAttr)
460 bool findFlag = false;
461 int size = sizeof(_CAMERA_SCENE_MODE)/sizeof(_CAMERA_SCENE_MODE[0]);
463 for (int i = 0; i < size; i++)
465 if (_CAMERA_SCENE_MODE[i].value == value)
467 mmAttr = _CAMERA_SCENE_MODE[i].mmAttr;
472 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
476 _CameraUtil::GetOspSceneMode(camera_attr_scene_mode_e mmAttr, CameraSceneMode& value)
478 bool findFlag = false;
479 int size = sizeof(_CAMERA_SCENE_MODE)/sizeof(_CAMERA_SCENE_MODE[0]);
481 for (int i = 0; i < size; i++)
483 if (_CAMERA_SCENE_MODE[i].mmAttr == mmAttr)
485 value = _CAMERA_SCENE_MODE[i].value;
490 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
495 camera_attr_af_mode_e mmAttr;
496 CameraFocusMode value;
498 CameraFocusMode additionalValue;
499 }_CameraFocusModeTable;
501 static const _CameraFocusModeTable _CAMERA_FOCUS_MODE[] =
503 // {::CAMERA_ATTR_AF_NONE, CAMERA_FOCUS_MODE_NONE, false, CAMERA_FOCUS_MODE_NONE},
504 {::CAMERA_ATTR_AF_NORMAL, CAMERA_FOCUS_MODE_NORMAL, true, CAMERA_FOCUS_MODE_CONTINUOUS_AUTO},
505 {::CAMERA_ATTR_AF_MACRO, CAMERA_FOCUS_MODE_MACRO, false, CAMERA_FOCUS_MODE_NONE},
506 // {::CAMERA_ATTR_INFINITE, CAMERA_FOCUS_MODE_INFINITE, false, },
510 _CameraUtil::GetMmFocusMode(CameraFocusMode value, camera_attr_af_mode_e& mmAttr)
512 bool findFlag = false;
513 int size = sizeof(_CAMERA_FOCUS_MODE)/sizeof(_CAMERA_FOCUS_MODE[0]);
515 for (int i = 0; i < size; i++)
517 if (_CAMERA_FOCUS_MODE[i].value == value
518 || (_CAMERA_FOCUS_MODE[i].additionalValue != CAMERA_FOCUS_MODE_NONE && _CAMERA_FOCUS_MODE[i].additionalValue == value))
520 mmAttr = _CAMERA_FOCUS_MODE[i].mmAttr;
525 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
529 _CameraUtil::GetOspFocusMode(camera_attr_af_mode_e mmAttr, CameraFocusMode& value)
531 bool findFlag = false;
532 int size = sizeof(_CAMERA_FOCUS_MODE)/sizeof(_CAMERA_FOCUS_MODE[0]);
534 for (int i = 0; i < size; i++)
536 if (_CAMERA_FOCUS_MODE[i].mmAttr == mmAttr)
538 value = _CAMERA_FOCUS_MODE[i].value;
543 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
547 _CameraUtil::GetOspFocusMode(camera_attr_af_mode_e mmAttr, CameraFocusMode& value, bool& additionalMode, CameraFocusMode& additionalValue)
549 bool findFlag = false;
550 int size = sizeof(_CAMERA_FOCUS_MODE)/sizeof(_CAMERA_FOCUS_MODE[0]);
552 for (int i = 0; i < size; i++)
554 if (_CAMERA_FOCUS_MODE[i].mmAttr == mmAttr)
556 value = _CAMERA_FOCUS_MODE[i].value;
558 if (_CAMERA_FOCUS_MODE[i].additionalMode == true)
560 additionalMode = true;
561 additionalValue = _CAMERA_FOCUS_MODE[i].additionalValue;
568 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
573 camera_attr_iso_e mmAttr;
574 CameraIsoLevel value;
577 static const _CameraIsoTable _CAMERA_ISO[] =
579 {::CAMERA_ATTR_ISO_AUTO, CAMERA_ISO_AUTO},
580 {::CAMERA_ATTR_ISO_50, CAMERA_ISO_50},
581 {::CAMERA_ATTR_ISO_100, CAMERA_ISO_100},
582 {::CAMERA_ATTR_ISO_200, CAMERA_ISO_200},
583 {::CAMERA_ATTR_ISO_400, CAMERA_ISO_400},
584 {::CAMERA_ATTR_ISO_800, CAMERA_ISO_800},
585 {::CAMERA_ATTR_ISO_1600, CAMERA_ISO_1600},
586 // {::CAMERA_ATTR_ISO_3200, },
587 {::CAMERA_ATTR_ISO_AUTO, CAMERA_ISO_DEFAULT},
588 {::CAMERA_ATTR_ISO_100, CAMERA_ISO_MIN},
589 {::CAMERA_ATTR_ISO_800, CAMERA_ISO_MAX},
590 //Todo : Max ISO of U1 target is 800. Someday,
591 // We will implement that ISO MAX is setted to the highest thing among surpported ISO.
595 _CameraUtil::GetMmIso(CameraIsoLevel value, camera_attr_iso_e& mmAttr)
597 bool findFlag = false;
598 int size = sizeof(_CAMERA_ISO)/sizeof(_CAMERA_ISO[0]);
600 for (int i = 0; i < size; i++)
602 if (_CAMERA_ISO[i].value == value)
604 mmAttr = _CAMERA_ISO[i].mmAttr;
609 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
613 _CameraUtil::GetOspIso(camera_attr_iso_e mmAttr, CameraIsoLevel& value)
615 bool findFlag = false;
616 int size = sizeof(_CAMERA_ISO)/sizeof(_CAMERA_ISO[0]);
618 for (int i = 0; i < size; i++)
620 if (_CAMERA_ISO[i].mmAttr == mmAttr)
622 value = _CAMERA_ISO[i].value;
627 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
632 camera_attr_exposure_mode_e mmAttr;
633 CameraMeteringMode value;
634 }_CameraMeteringModeTable;
636 static const _CameraMeteringModeTable _CAMERA_METERING_MODE[] =
638 {::CAMERA_ATTR_EXPOSURE_MODE_OFF, CAMERA_METERING_MODE_NONE},
639 {::CAMERA_ATTR_EXPOSURE_MODE_ALL, CAMERA_METERING_MODE_AVERAGE},
640 {::CAMERA_ATTR_EXPOSURE_MODE_CENTER, CAMERA_METERING_MODE_CENTER_WEIGHTED},
641 {::CAMERA_ATTR_EXPOSURE_MODE_SPOT, CAMERA_METERING_MODE_SPOT},
642 // {::CAMERA_ATTR_EXPOSURE_MODE_CUSTOM, CAMERA_METERING_MODE_CUSTOM},
646 _CameraUtil::GetMmMeteringMode(CameraMeteringMode value, camera_attr_exposure_mode_e& mmAttr)
648 bool findFlag = false;
649 int size = sizeof(_CAMERA_METERING_MODE)/sizeof(_CAMERA_METERING_MODE[0]);
651 for (int i = 0; i < size; i++)
653 if (_CAMERA_METERING_MODE[i].value == value)
655 mmAttr = _CAMERA_METERING_MODE[i].mmAttr;
660 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
664 _CameraUtil::GetOspMeteringMode(camera_attr_exposure_mode_e mmAttr, CameraMeteringMode& value)
666 bool findFlag = false;
667 int size = sizeof(_CAMERA_METERING_MODE)/sizeof(_CAMERA_METERING_MODE[0]);
669 for (int i = 0; i < size; i++)
671 if (_CAMERA_METERING_MODE[i].mmAttr == mmAttr)
673 value = _CAMERA_METERING_MODE[i].value;
678 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
683 camera_attr_flash_mode_e mmAttr;
684 CameraFlashMode value;
685 }_CameraFlashModeTable;
687 static const _CameraFlashModeTable _FLASH_MODE[] =
689 {::CAMERA_ATTR_FLASH_MODE_OFF, CAMERA_FLASH_MODE_OFF},
690 {::CAMERA_ATTR_FLASH_MODE_ON, CAMERA_FLASH_MODE_ON},
691 {::CAMERA_ATTR_FLASH_MODE_AUTO, CAMERA_FLASH_MODE_AUTO},
692 {::CAMERA_ATTR_FLASH_MODE_REDEYE_REDUCTION, CAMERA_FLASH_MODE_RED_EYE_REDUCTION},
693 // {::CAMERA_ATTR_FLASH_MODE_SLOW_SYNC, CAMERA_FLASH_MODE_SLOW_SYNC},
694 // {::CAMERA_ATTR_FLASH_MODE_FRONT_CURTAIN, CAMERA_FLASH_MODE_FRONT_CURTAIN},
695 // {::CAMERA_ATTR_FLASH_MODE_REAR_CURTAIN, CAMERA_FLASH_MODE_REAR_CURTAIN},
696 {::CAMERA_ATTR_FLASH_MODE_PERMANENT, CAMERA_FLASH_MODE_CONTINUOUS},
700 _CameraUtil::GetMmFlashMode(CameraFlashMode value, camera_attr_flash_mode_e& mmAttr)
702 bool findFlag = false;
703 int size = sizeof(_FLASH_MODE)/sizeof(_FLASH_MODE[0]);
705 for (int i = 0; i < size; i++)
707 if (_FLASH_MODE[i].value == value)
709 mmAttr = _FLASH_MODE[i].mmAttr;
714 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
718 _CameraUtil::GetOspFlashMode(camera_attr_flash_mode_e mmAttr, CameraFlashMode& value)
720 bool findFlag = false;
721 int size = sizeof(_FLASH_MODE)/sizeof(_FLASH_MODE[0]);
723 for (int i = 0; i < size; i++)
725 if (_FLASH_MODE[i].mmAttr == mmAttr)
727 value = _FLASH_MODE[i].value;
732 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
739 }_CameraQualityTable;
741 static const _CameraQualityTable _CAMERA_QUALITY[] =
743 {30, CAMERA_QUALITY_NORMAL},
744 {70, CAMERA_QUALITY_FINE},
745 {100, CAMERA_QUALITY_SUPER_FINE},
746 // {, CAMERA_QUALITY_MAX},
750 _CameraUtil::GetMmQuality(CameraQuality value, int& mmAttr)
752 bool findFlag = false;
753 int size = sizeof(_CAMERA_QUALITY)/sizeof(_CAMERA_QUALITY[0]);
755 for (int i = 0; i < size; i++)
757 if (_CAMERA_QUALITY[i].value == value)
759 mmAttr = _CAMERA_QUALITY[i].mmAttr;
764 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
768 _CameraUtil::GetOspQuality(int mmAttr, CameraQuality& value)
770 bool findFlag = false;
771 int size = sizeof(_CAMERA_QUALITY)/sizeof(_CAMERA_QUALITY[0]);
773 for (int i = 0; i < size; i++)
775 if (_CAMERA_QUALITY[i].mmAttr == mmAttr)
777 value = _CAMERA_QUALITY[i].value;
782 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
787 camera_attr_tag_orientation_e mmAttr;
788 CameraExifOrientation orientation;
789 CameraRotation rotation;
790 }_CameraExifOrientationTable;
792 static const _CameraExifOrientationTable _CAMERA_EXIF_ORIENTATION[] =
794 {::CAMERA_ATTR_TAG_ORIENTATION_TOP_LEFT, CAMERA_EXIF_ORIENTATION_TOP_LEFT, CAMERA_ROTATION_NONE},
795 {::CAMERA_ATTR_TAG_ORIENTATION_TOP_RIGHT, CAMERA_EXIF_ORIENTATION_TOP_RIGHT, (CameraRotation)-1},
796 {::CAMERA_ATTR_TAG_ORIENTATION_BOTTOM_RIGHT, CAMERA_EXIF_ORIENTATION_BOTTOM_RIGHT, CAMERA_ROTATION_180},
797 {::CAMERA_ATTR_TAG_ORIENTATION_BOTTOM_LEFT, CAMERA_EXIF_ORIENTATION_BOTTOM_LEFT, (CameraRotation)-1},
798 {::CAMERA_ATTR_TAG_ORIENTATION_LEFT_TOP, CAMERA_EXIF_ORIENTATION_LEFT_TOP, (CameraRotation)-1},
799 {::CAMERA_ATTR_TAG_ORIENTATION_RIGHT_TOP, CAMERA_EXIF_ORIENTATION_RIGHT_TOP, CAMERA_ROTATION_90},
800 {::CAMERA_ATTR_TAG_ORIENTATION_RIGHT_BOTTOM, CAMERA_EXIF_ORIENTATION_RIGHT_BOTTOM, (CameraRotation)-1},
801 {::CAMERA_ATTR_TAG_ORIENTATION_LEFT_BOTTOM, CAMERA_EXIF_ORIENTATION_LEFT_BOTTOM, CAMERA_ROTATION_270},
805 _CameraUtil::GetMmExifOrientation(CameraExifOrientation value, camera_attr_tag_orientation_e& mmAttr)
807 bool findFlag = false;
808 int size = sizeof(_CAMERA_EXIF_ORIENTATION)/sizeof(_CAMERA_EXIF_ORIENTATION[0]);
810 for (int i = 0; i < size; i++)
812 if (_CAMERA_EXIF_ORIENTATION[i].orientation == value)
814 mmAttr = _CAMERA_EXIF_ORIENTATION[i].mmAttr;
819 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
823 _CameraUtil::GetMmExifOrientation(CameraRotation value, camera_attr_tag_orientation_e& mmAttr)
825 bool findFlag = false;
826 int size = sizeof(_CAMERA_EXIF_ORIENTATION)/sizeof(_CAMERA_EXIF_ORIENTATION[0]);
828 for (int i = 0; i < size; i++)
830 if (_CAMERA_EXIF_ORIENTATION[i].rotation == value)
832 mmAttr = _CAMERA_EXIF_ORIENTATION[i].mmAttr;
837 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
841 _CameraUtil::GetOspExifOrientation(camera_attr_tag_orientation_e mmAttr, CameraExifOrientation& value)
843 bool findFlag = false;
844 int size = sizeof(_CAMERA_EXIF_ORIENTATION)/sizeof(_CAMERA_EXIF_ORIENTATION[0]);
846 for (int i = 0; i < size; i++)
848 if (_CAMERA_EXIF_ORIENTATION[i].mmAttr == mmAttr)
850 value = _CAMERA_EXIF_ORIENTATION[i].orientation;
855 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
860 CameraDirection physicalDirection;
861 _BufferInfoImpl::Orientation orientation;
862 CameraRotation displayRotation;
863 }_CameraNormalRotationTable;
865 // If the OverlayRegion type is NORMAL. _BufferInfoImpl::ROTATION_0
866 static const _CameraNormalRotationTable _CAMERA_NORMAL_ROTATION[] =
869 {CAMERA_DIRECTION_BACK, _BufferInfoImpl::ORIENTATION_PORTRAIT, CAMERA_ROTATION_NONE},
870 {CAMERA_DIRECTION_BACK, _BufferInfoImpl::ORIENTATION_LANDSCAPE_REVERSE, CAMERA_ROTATION_90},
871 {CAMERA_DIRECTION_BACK, _BufferInfoImpl::ORIENTATION_PORTRAIT_REVERSE, CAMERA_ROTATION_180},
872 {CAMERA_DIRECTION_BACK, _BufferInfoImpl::ORIENTATION_LANDSCAPE, CAMERA_ROTATION_270},
874 {CAMERA_DIRECTION_FRONT, _BufferInfoImpl::ORIENTATION_PORTRAIT, CAMERA_ROTATION_NONE},
875 {CAMERA_DIRECTION_FRONT, _BufferInfoImpl::ORIENTATION_LANDSCAPE_REVERSE, CAMERA_ROTATION_90},
876 {CAMERA_DIRECTION_FRONT, _BufferInfoImpl::ORIENTATION_PORTRAIT_REVERSE, CAMERA_ROTATION_180},
877 {CAMERA_DIRECTION_FRONT, _BufferInfoImpl::ORIENTATION_LANDSCAPE, CAMERA_ROTATION_270},
881 _CameraUtil::GetDisplayRotation(CameraDirection physicalDirection, _BufferInfoImpl::Orientation orientation, CameraRotation& displayRotation)
883 bool findFlag = false;
884 int size = sizeof(_CAMERA_NORMAL_ROTATION)/sizeof(_CAMERA_NORMAL_ROTATION[0]);
886 for (int i = 0; i < size; i++)
888 if (_CAMERA_NORMAL_ROTATION[i].physicalDirection == physicalDirection && _CAMERA_NORMAL_ROTATION[i].orientation == orientation)
890 displayRotation = _CAMERA_NORMAL_ROTATION[i].displayRotation;
895 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
900 CameraDirection physicalDirection;
901 CameraRotation physicalRotation;
902 _BufferInfoImpl::Orientation orientation;
903 CameraRotation displayRotation;
904 }_CameraAutoRotationTable;
911 // In case of internal automatic rotation. not _BufferInfoImpl::ROTATION_0
912 static const _CameraAutoRotationTable _CAMERA_AUTO_ROTATION[] =
915 {CAMERA_DIRECTION_BACK, CAMERA_ROTATION_NONE, _BufferInfoImpl::Orientation(ANY_VALUE), CAMERA_ROTATION_NONE},
916 {CAMERA_DIRECTION_BACK, CAMERA_ROTATION_90, _BufferInfoImpl::Orientation(ANY_VALUE), CAMERA_ROTATION_270},
917 {CAMERA_DIRECTION_BACK, CAMERA_ROTATION_180, _BufferInfoImpl::Orientation(ANY_VALUE), CAMERA_ROTATION_180},
918 {CAMERA_DIRECTION_BACK, CAMERA_ROTATION_270, _BufferInfoImpl::Orientation(ANY_VALUE), CAMERA_ROTATION_90},
920 #if defined (_OSP_EMUL_)
921 {CAMERA_DIRECTION_FRONT, CAMERA_ROTATION_270, _BufferInfoImpl::ORIENTATION_PORTRAIT, CAMERA_ROTATION_90},
922 {CAMERA_DIRECTION_FRONT, CAMERA_ROTATION_270, _BufferInfoImpl::ORIENTATION_LANDSCAPE_REVERSE, CAMERA_ROTATION_270},
923 {CAMERA_DIRECTION_FRONT, CAMERA_ROTATION_270, _BufferInfoImpl::ORIENTATION_PORTRAIT_REVERSE, CAMERA_ROTATION_90},
924 {CAMERA_DIRECTION_FRONT, CAMERA_ROTATION_270, _BufferInfoImpl::ORIENTATION_LANDSCAPE, CAMERA_ROTATION_270},
926 {CAMERA_DIRECTION_FRONT, CAMERA_ROTATION_90, _BufferInfoImpl::ORIENTATION_PORTRAIT, CAMERA_ROTATION_270},
927 {CAMERA_DIRECTION_FRONT, CAMERA_ROTATION_90, _BufferInfoImpl::ORIENTATION_LANDSCAPE_REVERSE, CAMERA_ROTATION_90},
928 {CAMERA_DIRECTION_FRONT, CAMERA_ROTATION_90, _BufferInfoImpl::ORIENTATION_PORTRAIT_REVERSE, CAMERA_ROTATION_NONE},
929 {CAMERA_DIRECTION_FRONT, CAMERA_ROTATION_90, _BufferInfoImpl::ORIENTATION_LANDSCAPE, CAMERA_ROTATION_90},
931 {CAMERA_DIRECTION_FRONT, CAMERA_ROTATION_270, _BufferInfoImpl::ORIENTATION_PORTRAIT, CAMERA_ROTATION_90},
932 {CAMERA_DIRECTION_FRONT, CAMERA_ROTATION_270, _BufferInfoImpl::ORIENTATION_LANDSCAPE_REVERSE, CAMERA_ROTATION_270},
933 {CAMERA_DIRECTION_FRONT, CAMERA_ROTATION_270, _BufferInfoImpl::ORIENTATION_PORTRAIT_REVERSE, CAMERA_ROTATION_180},
934 {CAMERA_DIRECTION_FRONT, CAMERA_ROTATION_270, _BufferInfoImpl::ORIENTATION_LANDSCAPE, CAMERA_ROTATION_270},
939 _CameraUtil::GetDisplayRotation(CameraDirection physicalDirection, CameraRotation physicalRotation, _BufferInfoImpl::Orientation orientation, CameraRotation& displayRotation)
941 bool findFlag = false;
942 int size = sizeof(_CAMERA_AUTO_ROTATION)/sizeof(_CAMERA_AUTO_ROTATION[0]);
944 for (int i = 0; i < size; i++)
946 if (_CAMERA_AUTO_ROTATION[i].physicalDirection == physicalDirection && _CAMERA_AUTO_ROTATION[i].physicalRotation == physicalRotation)
948 if (_CAMERA_AUTO_ROTATION[i].orientation == orientation ||
949 (_CAMERA_AUTO_ROTATION[i].orientation < _BufferInfoImpl::ORIENTATION_PORTRAIT // Any value is ok.
950 || _CAMERA_AUTO_ROTATION[i].orientation > _BufferInfoImpl::ORIENTATION_LANDSCAPE_REVERSE))
952 displayRotation = _CAMERA_AUTO_ROTATION[i].displayRotation;
958 return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE;
961 // Convert from YUYV to YUV420P only.
963 _CameraUtil::ConvertColorScale(const Tizen::Base::ByteBuffer& srcBuf, Tizen::Base::ByteBuffer& dstBuf, const Tizen::Graphics::Dimension& dim)
966 int width = dim.width;
967 int height = dim.height;
968 uint8_t *pDestBuf = null;
971 SwsContext *pSws = null;
973 frame.data[0] = (uint8_t *)srcBuf.GetPointer();
974 frame.data[1] = frame.data[0] + (width * height);
975 frame.data[2] = frame.data[1] + ((width * height)/2);
977 frame.linesize[0] = width;
978 frame.linesize[1] = width / 2;
979 frame.linesize[2] = width / 2;
980 frame.linesize[3] = 0;
982 pDestBuf = (uint8_t *)dstBuf.GetPointer();
984 picture.data[0] = (uint8_t*)pDestBuf;
985 picture.data[1] = pDestBuf + (width * height);
986 picture.data[2] = pDestBuf + ((width * height * 5)/ 4);
989 picture.linesize[0] = width;
990 picture.linesize[1] = width / 2;
991 picture.linesize[2] = width / 2;
992 picture.linesize[3] = 0;
994 pSws = sws_getCachedContext(pSws, width, height, PIX_FMT_YUYV422,
995 width, height, PIX_FMT_YUV420P, SWS_FAST_BILINEAR, NULL, NULL, NULL);
998 SysLogException(NID_MEDIA, false, "[E_SYSTEM] A system error has been occurred. Failed to get sws context.");
1002 r = sws_scale(pSws, frame.data, frame.linesize, 0, height, picture.data, picture.linesize);
1004 SysLog(NID_MEDIA, "[E_SUCCESS] Converted buffer.");