152 } |
154 } |
153 |
155 |
154 PRINT( _L("Camera <= CCamImageDecoder::StartConversionL") ); |
156 PRINT( _L("Camera <= CCamImageDecoder::StartConversionL") ); |
155 } |
157 } |
156 |
158 |
157 |
159 // --------------------------------------------------------------------------- |
158 void CCamImageDecoder::StartIconConversionL( TDesC* aFilePath ) |
160 // CCamImageDecoder::StartIconConversionL |
159 { |
161 // --------------------------------------------------------------------------- |
160 PRINT( _L("Camera => CCamImageDecoder::StartConversionL 2") ); |
162 // |
161 |
163 void CCamImageDecoder::StartIconConversionL( TDesC* aFilePath, TSize& aSize ) |
162 // Data for CImageDecoder must be available throughout the conversion. |
164 { |
163 // Need to stop any outstanding operation before deleting the descriptor. |
165 PRINT3( _L("Camera => CCamImageDecoder::StartIconConversionL, file:[%S], size:(%d,%d)"), |
164 Cancel(); |
166 &(*aFilePath), aSize.iWidth, aSize.iHeight ); |
165 |
167 |
166 PRINT( _L("Camera <> CCamImageDecoder: Creating decoder..") ); |
168 // Delete any previous bitmaps, if any |
167 |
169 delete iDecodedBitmap, |
168 delete iDecoder; |
170 iDecodedBitmap = NULL; |
169 iDecoder = NULL; |
171 delete iDecodedMask; |
170 |
172 iDecodedMask = NULL; |
171 CImageDecoder::TOptions options = (CImageDecoder::TOptions) (CImageDecoder::EOptionNoDither ); |
173 |
172 iDecoder = CImageDecoder::FileNewL( iFs, *aFilePath , options, KImageTypeSVGUid ); |
174 // Create bitmap for use while decoding |
173 |
175 CFbsBitmap* frameBuffer = new (ELeave) CFbsBitmap; |
174 if( iDecoder->FrameCount() > 0 ) |
176 CleanupStack::PushL( frameBuffer ); |
175 { |
177 |
176 const TFrameInfo& info( iDecoder->FrameInfo() ); |
178 TFontSpec spec; |
177 |
179 if ( !iSvgEngine ) |
178 #ifdef _DEBUG |
180 { |
179 TSize size = info.iOverallSizeInPixels; |
181 iSvgEngine = CSvgEngineInterfaceImpl::NewL( frameBuffer, NULL, spec ); |
180 PRINT2( _L("Camera <> CCamImageDecoder: Bmp size(%d,%d)"), size.iWidth, size.iHeight ); |
182 } |
181 PRINT1( _L("Camera <> CCamImageDecoder: Bmp dispmode(%d)"), info.iFrameDisplayMode ); |
183 |
182 #endif |
184 TInt domHandle = KErrNotFound; |
183 |
185 MSvgError* serr = iSvgEngine->PrepareDom( *aFilePath, domHandle ); |
|
186 PRINT3( _L("Camera <> prepare svg dom reader, warning:%d, err code:%d, description:[%S]"), |
|
187 serr->IsWarning(), serr->ErrorCode(), &(serr->Description()) ); |
|
188 if ( serr->HasError() && !serr->IsWarning() ) |
|
189 { |
|
190 PRINT1( _L("Camera <> leaving with error:%d"), serr->SystemErrorCode() ); |
|
191 User::Leave( serr->SystemErrorCode() ); |
|
192 } |
|
193 |
|
194 // create image bitmap |
184 PRINT( _L("Camera <> CCamImageDecoder: Create bitmap for snapshot..") ); |
195 PRINT( _L("Camera <> CCamImageDecoder: Create bitmap for snapshot..") ); |
185 if( !iDecodedBitmap ) iDecodedBitmap = new (ELeave) CFbsBitmap; |
196 if( !iDecodedBitmap ) iDecodedBitmap = new (ELeave) CFbsBitmap; |
186 else iDecodedBitmap->Reset(); |
197 else iDecodedBitmap->Reset(); |
187 |
198 |
188 if( !iDecodedMask ) iDecodedMask = new (ELeave) CFbsBitmap; |
199 if( !iDecodedMask ) iDecodedMask = new (ELeave) CFbsBitmap; |
189 else iDecodedMask->Reset(); |
200 else iDecodedMask->Reset(); |
190 |
201 |
191 TRAPD ( createError, |
202 TRAPD ( createError, |
192 { |
203 { |
193 iDecodedBitmap->Create( info.iOverallSizeInPixels, info.iFrameDisplayMode ); |
204 iDecodedBitmap->Create( aSize, EColor64K ); |
194 iDecodedMask->Create( info.iOverallSizeInPixels, EGray256 ); |
205 iDecodedMask->Create( aSize, EGray256 ); |
195 } ); |
206 } ); |
196 if( KErrNone != createError ) |
207 if( createError ) |
197 { |
208 { |
|
209 PRINT1( _L("Camera <> Error while creating bitmaps:%d"), createError ); |
198 delete iDecodedBitmap; |
210 delete iDecodedBitmap; |
199 iDecodedBitmap = NULL; |
211 iDecodedBitmap = NULL; |
200 delete iDecodedMask; |
212 delete iDecodedMask; |
201 iDecodedMask = NULL; |
213 iDecodedMask = NULL; |
202 User::Leave( createError ); |
214 User::Leave( createError ); |
203 } |
215 } |
204 |
216 |
205 PRINT( _L("Camera <> CCamImageDecoder: start conversion..") ); |
217 // create soft mask |
206 iRetryCounter = 0; |
218 iSvgEngine->SetViewportHeight((CSvgDocumentImpl *)domHandle, aSize.iHeight); |
207 iDecoder->Convert( &iStatus, *iDecodedBitmap, *iDecodedMask, 0 ); |
219 iSvgEngine->SetViewportWidth((CSvgDocumentImpl *)domHandle, aSize.iWidth); |
208 SetActive(); |
220 |
209 } |
221 // render svg image |
210 else |
222 serr = iSvgEngine->RenderDom( domHandle, iDecodedBitmap, iDecodedMask ); |
211 { |
223 PRINT3( _L("Camera <> render svg, warning:%d, err code:%d, description:[%S]"), |
212 PRINT( _L("Camera <> CCamImageDecoder: No frame provided, leave..") ); |
224 serr->IsWarning(), serr->ErrorCode(), &(serr->Description()) ); |
213 User::Leave( KErrNotFound ); |
225 if ( serr->HasError() && !serr->IsWarning() ) |
214 } |
226 { |
215 |
227 PRINT1( _L("Camera <> leaving with error:%d"), serr->SystemErrorCode() ); |
216 PRINT( _L("Camera <= CCamImageDecoder::StartConversionL 2") ); |
228 User::Leave( serr->SystemErrorCode() ); |
217 } |
229 } |
|
230 |
|
231 CleanupStack::PopAndDestroy( frameBuffer ); |
|
232 if ( !IsActive() ) |
|
233 { |
|
234 SetActive(); |
|
235 } |
|
236 |
|
237 PRINT( _L("Camera <= CCamImageDecoder::StartIconConversionL") ); |
|
238 } |
|
239 |
218 |
240 |
219 // --------------------------------------------------------------------------- |
241 // --------------------------------------------------------------------------- |
220 // --------------------------------------------------------------------------- |
242 // --------------------------------------------------------------------------- |
221 // |
243 // |
222 TDesC8* |
244 TDesC8* |