SA2-417 issue fix.
[framework/osp/vision.git] / src / FUixVision_QrCodeGeneratorImpl.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2013 Samsung Electronics Co., Ltd.
4 //
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
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0
10 //
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.
16 //
17
18 #include "FUixVision_QrCodeGeneratorImpl.h"
19
20 namespace Tizen { namespace Uix { namespace Vision
21 {
22
23 _QrCodeGeneratorImpl::_QrCodeGeneratorImpl(void)
24 {
25
26 }
27
28 _QrCodeGeneratorImpl::~_QrCodeGeneratorImpl(void)
29 {
30
31 }
32
33 bool
34 _QrCodeGeneratorImpl::Encode(const char* message, QrCodeMode mode, QrCodeErrorCorrectionLevel error_level, bool compatibility)
35 {
36     sari2::QRCodeMode sariMode(sari2::QR_MODE_UTF8);
37     sari2::QRCodeErrorCorrectionLevel errorLevel(sari2::QR_ECL_Q);
38
39     switch(mode)
40     {
41     case Tizen::Uix::Vision::QR_CODE_MODE_ALPHANUMERIC:
42         sariMode = sari2::QR_MODE_ALPHANUMERIC; break;
43     case Tizen::Uix::Vision::QR_CODE_MODE_BYTE:
44         sariMode = sari2::QR_MODE_BYTE; break;
45     case Tizen::Uix::Vision::QR_CODE_MODE_UTF8:
46         sariMode = sari2::QR_MODE_UTF8; break;
47     default:
48         break;
49     }
50
51     switch(error_level)
52     {
53     case Tizen::Uix::Vision::QR_CODE_ERROR_CORRECTION_LEVEL_H:
54         errorLevel= sari2::QR_ECL_H;    break;
55     case Tizen::Uix::Vision::QR_CODE_ERROR_CORRECTION_LEVEL_L:
56         errorLevel = sari2::QR_ECL_L;   break;
57     case Tizen::Uix::Vision::QR_CODE_ERROR_CORRECTION_LEVEL_M:
58         errorLevel = sari2::QR_ECL_M;   break;
59     case Tizen::Uix::Vision::QR_CODE_ERROR_CORRECTION_LEVEL_Q:
60         errorLevel = sari2::QR_ECL_Q;   break;
61     default:
62         break;
63     }
64     return __qrCodeGenerator.encode(message, sariMode, errorLevel, compatibility);
65 }
66
67 bool
68 _QrCodeGeneratorImpl::GetSize(int& width, int& height)
69 {
70     return __qrCodeGenerator.getSize((unsigned int&)width, (unsigned int&)height);
71 }
72
73 bool
74 _QrCodeGeneratorImpl::SaveToFile(const Tizen::Base::String& imagepath, Tizen::Media::ImageFormat imageFormat, int& width, int& height)
75 {
76     if(!GetSize(width, height))
77     {
78         return false;
79     }
80
81     unsigned char* grayBuffer = new unsigned char[(width * height * 3) >> 1];
82     if(!SaveToBuffer(grayBuffer))
83     {
84         return false;
85     }
86
87     memset(grayBuffer + width * height, 128, (width * height) >> 1);
88     Tizen::Media::ImageBuffer imBuf;
89     result r = imBuf.Construct(width, height, Tizen::Media::MEDIA_PIXEL_FORMAT_YUV420P, grayBuffer, (width * height * 3) >> 1);
90     delete[] grayBuffer;
91     if(IsFailed(r))
92     {
93         return false;
94     }
95
96     r = imBuf.EncodeToFile(imagepath, imageFormat, true);
97     if(IsFailed(r))
98     {
99         return false;
100     }
101
102     return true;
103 }
104
105 bool
106 _QrCodeGeneratorImpl::SaveToBuffer(unsigned char* image)
107 {
108     return __qrCodeGenerator.saveToBuffer(image);
109 }
110
111 _QrCodeGeneratorImpl*
112 _QrCodeGeneratorImpl::GetInstance(QrCodeGenerator* pQrGenerator)
113 {
114     return pQrGenerator->__pQrCodeGeneratorImpl;
115 }
116
117 const _QrCodeGeneratorImpl*
118 _QrCodeGeneratorImpl::GetInstance(const QrCodeGenerator* pQrGenerator)
119 {
120     return pQrGenerator->__pQrCodeGeneratorImpl;
121 }
122
123 } } } //Tizen::Uix::Vision