From 1ae06e8fbbad6ef0ae3841dacaf53708892a350e Mon Sep 17 00:00:00 2001 From: KyungYoun Date: Thu, 30 May 2013 18:08:29 +0900 Subject: [PATCH] Apply video recording bitrate dynamically Change-Id: I8738f1a6af02e68969f1b7e97659b06c4cca0991 Signed-off-by: KyungYoun --- src/FMedia_CameraTypes.h | 2 + src/FMedia_CameraUtil.cpp | 93 ---------------------------------------- src/FMedia_CameraUtil.h | 2 - src/FMedia_RecorderUtil.cpp | 92 ++++++++------------------------------- src/FMedia_RecorderUtil.h | 3 +- src/FMedia_VideoRecorderImpl.cpp | 2 +- 6 files changed, 24 insertions(+), 170 deletions(-) diff --git a/src/FMedia_CameraTypes.h b/src/FMedia_CameraTypes.h index 4621e5f..b3278bd 100755 --- a/src/FMedia_CameraTypes.h +++ b/src/FMedia_CameraTypes.h @@ -95,8 +95,10 @@ enum _ResolutionType _RES_1280X720, _RES_1280X960, _RES_1392X1392, + _RES_1440X1080, _RES_1600X1200, _RES_1920X1080, + _RES_2048X1536, _RES_MAX = 0xfe, }; diff --git a/src/FMedia_CameraUtil.cpp b/src/FMedia_CameraUtil.cpp index 708f9c0..db5d401 100755 --- a/src/FMedia_CameraUtil.cpp +++ b/src/FMedia_CameraUtil.cpp @@ -855,99 +855,6 @@ _CameraUtil::GetOspExifOrientation(camera_attr_tag_orientation_e mmAttr, CameraE return findFlag ? E_SUCCESS : E_UNSUPPORTED_TYPE; } -_ResolutionType -_CameraUtil::ConvertResolutionType(const Tizen::Graphics::Dimension &resolution) -{ - _ResolutionType resolutionType = _RES_NONE; - - if ( resolution.width == 128 && resolution.height == 96 ) - { - resolutionType = _RES_128X96; - } - else if ( resolution.width == 160 && resolution.height == 120 ) - { - resolutionType = _RES_160X120; - } - else if ( resolution.width == 176 && resolution.height == 144 ) - { - resolutionType = _RES_176X144; - } - else if ( resolution.width == 176 && resolution.height == 176 ) - { - resolutionType = _RES_176X176; - } - else if ( resolution.width == 240 && resolution.height == 320 ) - { - resolutionType = _RES_240X320; - } - else if ( resolution.width == 320 && resolution.height == 240 ) - { - resolutionType = _RES_320X240; - } - else if ( resolution.width == 240 && resolution.height == 400 ) - { - resolutionType = _RES_240X400; - } - else if ( resolution.width == 400 && resolution.height == 240 ) - { - resolutionType = _RES_400X240; - } - else if ( resolution.width == 352 && resolution.height == 288 ) - { - resolutionType = _RES_352X288; - } - else if ( resolution.width == 480 && resolution.height == 360 ) - { - resolutionType = _RES_480X360; - } - else if ( resolution.width == 640 && resolution.height == 360 ) - { - resolutionType = _RES_640X360; - } - else if ( resolution.width == 640 && resolution.height == 480 ) - { - resolutionType = _RES_640X480; - } - else if ( resolution.width == 720 && resolution.height == 480 ) - { - resolutionType = _RES_720X480; - } - else if ( resolution.width == 800 && resolution.height == 480 ) - { - resolutionType = _RES_800X480; - } - else if ( resolution.width == 800 && resolution.height == 600 ) - { - resolutionType = _RES_800X600; - } - else if ( resolution.width == 960 && resolution.height == 720 ) - { - resolutionType = _RES_960X720; - } - else if ( resolution.width == 1280 && resolution.height == 720 ) - { - resolutionType = _RES_1280X720; - } - else if ( resolution.width == 1280 && resolution.height == 960 ) - { - resolutionType = _RES_1280X960; - } - else if ( resolution.width == 1392 && resolution.height == 1392 ) - { - resolutionType = _RES_1392X1392; - } - else if ( resolution.width == 1600 && resolution.height == 1200 ) - { - resolutionType = _RES_1600X1200; - } - else if ( resolution.width == 1920 && resolution.height == 1080 ) - { - resolutionType = _RES_1920X1080; - } - - return resolutionType; -} - typedef struct { CameraDirection physicalDirection; diff --git a/src/FMedia_CameraUtil.h b/src/FMedia_CameraUtil.h index 3716a3a..d88988f 100755 --- a/src/FMedia_CameraUtil.h +++ b/src/FMedia_CameraUtil.h @@ -92,8 +92,6 @@ public: static result GetDisplayRotation(CameraDirection physicalDirection, Tizen::Graphics::_BufferInfoImpl::Orientation orientation, CameraRotation& displayRotation); static result GetDisplayRotation(CameraDirection physicalDirection, CameraRotation physicalRotation, Tizen::Graphics::_BufferInfoImpl::Orientation orientation, CameraRotation& displayRotation); - static _ResolutionType ConvertResolutionType(const Tizen::Graphics::Dimension &resolution); - static result ConvertColorScale(const Tizen::Base::ByteBuffer& srcBuf, Tizen::Base::ByteBuffer& dstBuf, const Tizen::Graphics::Dimension& dim); private: diff --git a/src/FMedia_RecorderUtil.cpp b/src/FMedia_RecorderUtil.cpp index d2d9ae3..56b3db3 100755 --- a/src/FMedia_RecorderUtil.cpp +++ b/src/FMedia_RecorderUtil.cpp @@ -306,93 +306,39 @@ _RecorderUtil::GetMmAudioQuality(CodecType audioCodec, RecordingQuality quality, typedef struct { int mmAttrBitrate; - _ResolutionType resolution; + int width; //max boundary + int height; // min boundary RecordingQuality quality; }_VideoQualityTable; static const _VideoQualityTable _VIDEO_QUALITY[] = { - {48000, _RES_128X96, RECORDING_QUALITY_LOW}, - {64000, _RES_128X96, RECORDING_QUALITY_MEDIUM}, - {80000, _RES_128X96, RECORDING_QUALITY_HIGH}, - {72000, _RES_160X120, RECORDING_QUALITY_LOW}, - {97000, _RES_160X120, RECORDING_QUALITY_MEDIUM}, - {120000, _RES_160X120, RECORDING_QUALITY_HIGH}, - {96000, _RES_176X144, RECORDING_QUALITY_LOW}, - {128000, _RES_176X144, RECORDING_QUALITY_MEDIUM}, - {160000, _RES_176X144, RECORDING_QUALITY_HIGH}, - {96000, _RES_176X176, RECORDING_QUALITY_LOW}, - {128000, _RES_176X176, RECORDING_QUALITY_MEDIUM}, - {160000, _RES_176X176, RECORDING_QUALITY_HIGH}, - {96000, _RES_240X320, RECORDING_QUALITY_LOW}, - {128000, _RES_240X320, RECORDING_QUALITY_MEDIUM}, - {160000, _RES_240X320, RECORDING_QUALITY_HIGH}, - {96000, _RES_320X240, RECORDING_QUALITY_LOW}, - {128000, _RES_320X240, RECORDING_QUALITY_MEDIUM}, - {160000, _RES_320X240, RECORDING_QUALITY_HIGH}, - {96000, _RES_240X400, RECORDING_QUALITY_LOW}, - {128000, _RES_240X400, RECORDING_QUALITY_MEDIUM}, - {160000, _RES_240X400, RECORDING_QUALITY_HIGH}, - {96000, _RES_400X240, RECORDING_QUALITY_LOW}, - {128000, _RES_400X240, RECORDING_QUALITY_MEDIUM}, - {160000, _RES_400X240, RECORDING_QUALITY_HIGH}, - {96000, _RES_352X288, RECORDING_QUALITY_LOW}, - {128000, _RES_352X288, RECORDING_QUALITY_MEDIUM}, - {160000, _RES_352X288, RECORDING_QUALITY_HIGH}, - {96000, _RES_480X360, RECORDING_QUALITY_LOW}, - {128000, _RES_480X360, RECORDING_QUALITY_MEDIUM}, - {160000, _RES_480X360, RECORDING_QUALITY_HIGH}, - {96000, _RES_640X360, RECORDING_QUALITY_LOW}, - {128000, _RES_640X360, RECORDING_QUALITY_MEDIUM}, - {160000, _RES_640X360, RECORDING_QUALITY_HIGH}, - - {2000000, _RES_640X480, RECORDING_QUALITY_LOW}, - {2500000, _RES_640X480, RECORDING_QUALITY_MEDIUM}, - {3000000, _RES_640X480, RECORDING_QUALITY_HIGH}, - {2200000, _RES_720X480, RECORDING_QUALITY_LOW}, - {2800000, _RES_720X480, RECORDING_QUALITY_MEDIUM}, - {3300000, _RES_720X480, RECORDING_QUALITY_HIGH}, - - {96000, _RES_800X480, RECORDING_QUALITY_LOW}, - {128000, _RES_800X480, RECORDING_QUALITY_MEDIUM}, - {160000, _RES_800X480, RECORDING_QUALITY_HIGH}, - {96000, _RES_800X600, RECORDING_QUALITY_LOW}, - {128000, _RES_800X600, RECORDING_QUALITY_MEDIUM}, - {160000, _RES_800X600, RECORDING_QUALITY_HIGH}, - - {2000000, _RES_960X720, RECORDING_QUALITY_LOW}, - {2500000, _RES_960X720, RECORDING_QUALITY_MEDIUM}, - {3000000, _RES_960X720, RECORDING_QUALITY_HIGH}, - - {2000000, _RES_1280X720, RECORDING_QUALITY_LOW}, - {2500000, _RES_1280X720, RECORDING_QUALITY_MEDIUM}, - {3000000, _RES_1280X720, RECORDING_QUALITY_HIGH}, - - {2000000, _RES_1280X960, RECORDING_QUALITY_LOW}, - {2500000, _RES_1280X960, RECORDING_QUALITY_MEDIUM}, - {3000000, _RES_1280X960, RECORDING_QUALITY_HIGH}, - - {2000000, _RES_1392X1392, RECORDING_QUALITY_LOW}, - {2500000, _RES_1392X1392, RECORDING_QUALITY_MEDIUM}, - {3000000, _RES_1392X1392, RECORDING_QUALITY_HIGH}, - - {2200000, _RES_1600X1200, RECORDING_QUALITY_LOW}, - {2800000, _RES_1600X1200, RECORDING_QUALITY_MEDIUM}, - {3300000, _RES_1600X1200, RECORDING_QUALITY_HIGH}, - {2200000, _RES_1920X1080, RECORDING_QUALITY_LOW}, - {2800000, _RES_1920X1080, RECORDING_QUALITY_MEDIUM}, - {3300000, _RES_1920X1080, RECORDING_QUALITY_HIGH}, + {48000, 128, 96, RECORDING_QUALITY_LOW}, + {64000, 128, 96, RECORDING_QUALITY_MEDIUM}, + {80000, 128, 96, RECORDING_QUALITY_HIGH}, + + {72000, 162, 120, RECORDING_QUALITY_LOW}, + {97000, 160, 120, RECORDING_QUALITY_MEDIUM}, + {120000, 160, 120, RECORDING_QUALITY_HIGH}, + + {96000, 800, 600, RECORDING_QUALITY_LOW}, + {128000, 800, 600, RECORDING_QUALITY_MEDIUM}, + {160000, 800, 600, RECORDING_QUALITY_HIGH}, + + {96000, 0xfffe, 0xfffe, RECORDING_QUALITY_LOW}, + {160000, 0xfffe, 0xfffe, RECORDING_QUALITY_MEDIUM}, + {4000000, 0xfffe, 0xfffe, RECORDING_QUALITY_HIGH}, }; result -_RecorderUtil::GetMmVideoQuality(_ResolutionType resolution, RecordingQuality quality, int& mmAttrBitrate) +_RecorderUtil::GetMmVideoQuality(const Tizen::Graphics::Dimension& dim, RecordingQuality quality, int& mmAttrBitrate) { bool findFlag = false; int size = sizeof(_VIDEO_QUALITY)/sizeof(_VIDEO_QUALITY[0]); for (int i = 0; i < size; i++) { - if (_VIDEO_QUALITY[i].resolution == resolution && _VIDEO_QUALITY[i].quality == quality) + if (_VIDEO_QUALITY[i].width >= dim.width && _VIDEO_QUALITY[i].height >= dim.height && _VIDEO_QUALITY[i].quality == quality) { mmAttrBitrate = _VIDEO_QUALITY[i].mmAttrBitrate; findFlag = true; diff --git a/src/FMedia_RecorderUtil.h b/src/FMedia_RecorderUtil.h index 2b14bda..9bd27da 100755 --- a/src/FMedia_RecorderUtil.h +++ b/src/FMedia_RecorderUtil.h @@ -25,6 +25,7 @@ #define _FMEDIA_INTERNAL_RECORDER_UTIL_H_ #include +#include #include #include #include @@ -52,7 +53,7 @@ public: static result GetOspAudioContainer(recorder_file_format_e mmAttr, MediaContainerType& value); static result GetMmAudioQuality(CodecType audioCodec, RecordingQuality quality, int& mmAttrSamplerate, int& mmAttrChannel, int& mmAttrBitrate); - static result GetMmVideoQuality(_ResolutionType resolution, RecordingQuality quality, int& mmAttrBitrate); + static result GetMmVideoQuality(const Tizen::Graphics::Dimension& dim, RecordingQuality quality, int& mmAttrBitrate); static result GetMmRotation(RecordingRotation value, recorder_rotation_e& mmAttr); static result GetOspRotation(recorder_rotation_e mmAttr, RecordingRotation& value); diff --git a/src/FMedia_VideoRecorderImpl.cpp b/src/FMedia_VideoRecorderImpl.cpp index 1ac2ad2..d6d9db6 100755 --- a/src/FMedia_VideoRecorderImpl.cpp +++ b/src/FMedia_VideoRecorderImpl.cpp @@ -1160,7 +1160,7 @@ _VideoRecorderImpl::SetQualityAttr(RecordingQuality quality, CodecType audioCod r = ConvertResult(err); SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Bitrate set failed. attr:%d", GetErrorMessage(r), attrAudioBitrate); } - r = _RecorderUtil::GetMmVideoQuality(_CameraUtil::ConvertResolutionType(__recordingResolution), quality, attrVideoBitrate); + r = _RecorderUtil::GetMmVideoQuality(__recordingResolution, quality, attrVideoBitrate); SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. videoCodec:%d, quality:%d", GetErrorMessage(r), videoCodec, quality); err = recorder_attr_set_video_encoder_bitrate(__handle, attrVideoBitrate); -- 2.7.4