imagingextensions/imageadaptationextensions/iclextjpegapi/src/IclExtJpegApi.cpp
author hgs
Wed, 08 Sep 2010 10:05:56 +0530
changeset 3 08469e5bb63e
permissions -rw-r--r--
201036
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  Implementation of CVisualFrame, CExtJpegDecoder and CExtJpegEncoder
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
// INCLUDE FILES
hgs
parents:
diff changeset
    19
#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
hgs
parents:
diff changeset
    20
#include <icl_uids_def.hrh>
hgs
parents:
diff changeset
    21
#endif
hgs
parents:
diff changeset
    22
#include "IclExtJpegApi.h"
hgs
parents:
diff changeset
    23
#include "IclExtJpegApiFrameImpl.h"
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
/*****************************************************/
hgs
parents:
diff changeset
    27
/* Visual Frame Data Structure in Extended ICL API   */
hgs
parents:
diff changeset
    28
/*****************************************************/
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
// ---------------------------------------------------------
hgs
parents:
diff changeset
    31
// CVisualFrame* CVisualFrame::NewL
hgs
parents:
diff changeset
    32
// Two-phased constructor.
hgs
parents:
diff changeset
    33
// ---------------------------------------------------------
hgs
parents:
diff changeset
    34
//
hgs
parents:
diff changeset
    35
EXPORT_C CVisualFrame* CVisualFrame::NewL( 
hgs
parents:
diff changeset
    36
                                    TDes8& aBuffer, 
hgs
parents:
diff changeset
    37
                                    const TSize& aDimension, 
hgs
parents:
diff changeset
    38
                                    TInt aFrameFormat )
hgs
parents:
diff changeset
    39
    {
hgs
parents:
diff changeset
    40
    
hgs
parents:
diff changeset
    41
    CVisualFrame* self = new ( ELeave ) CVisualFrame();
hgs
parents:
diff changeset
    42
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    43
    self->iVisualFrameImpl = CVisualFrameImpl::NewL( aBuffer, aDimension, aFrameFormat );
hgs
parents:
diff changeset
    44
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
    return self;
hgs
parents:
diff changeset
    47
    }
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
// ---------------------------------------------------------
hgs
parents:
diff changeset
    50
// CVisualFrame* CVisualFrame::NewL
hgs
parents:
diff changeset
    51
// Two-phased constructor.
hgs
parents:
diff changeset
    52
// ---------------------------------------------------------
hgs
parents:
diff changeset
    53
//
hgs
parents:
diff changeset
    54
EXPORT_C CVisualFrame* CVisualFrame::NewL( 
hgs
parents:
diff changeset
    55
                                    RChunk& aChunk, 
hgs
parents:
diff changeset
    56
                                    TInt aSize, 
hgs
parents:
diff changeset
    57
                                    TInt aMaxSize, 
hgs
parents:
diff changeset
    58
                                    TInt aDataOffset,
hgs
parents:
diff changeset
    59
                                    const TSize& aDimension, 
hgs
parents:
diff changeset
    60
                                    TInt aFrameFormat )
hgs
parents:
diff changeset
    61
    {
hgs
parents:
diff changeset
    62
    CVisualFrame* self = new ( ELeave ) CVisualFrame();
hgs
parents:
diff changeset
    63
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    64
    self->iVisualFrameImpl = CVisualFrameImpl::NewL( aChunk, aSize, aMaxSize, 
hgs
parents:
diff changeset
    65
                                                     aDataOffset, aDimension, aFrameFormat );
hgs
parents:
diff changeset
    66
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
    return self;
hgs
parents:
diff changeset
    69
    }
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
// ---------------------------------------------------------
hgs
parents:
diff changeset
    72
// CVisualFrame* CVisualFrame::NewL
hgs
parents:
diff changeset
    73
// Two-phased constructor.
hgs
parents:
diff changeset
    74
// ---------------------------------------------------------
hgs
parents:
diff changeset
    75
//
hgs
parents:
diff changeset
    76
EXPORT_C CVisualFrame* CVisualFrame::NewL( 
hgs
parents:
diff changeset
    77
                                    TDes8& aBuffer, 
hgs
parents:
diff changeset
    78
                                    const TSize& aDimension, 
hgs
parents:
diff changeset
    79
                                    TInt aFrameFormat, 
hgs
parents:
diff changeset
    80
                                    const TFrameLayout& aFrameLayout )
hgs
parents:
diff changeset
    81
    {
hgs
parents:
diff changeset
    82
    CVisualFrame* self = new ( ELeave ) CVisualFrame();
hgs
parents:
diff changeset
    83
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    84
    self->iVisualFrameImpl = CVisualFrameImpl::NewL( aBuffer, aDimension, 
hgs
parents:
diff changeset
    85
                                                     aFrameFormat, aFrameLayout );
hgs
parents:
diff changeset
    86
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
    87
hgs
parents:
diff changeset
    88
    return self;
hgs
parents:
diff changeset
    89
    }
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
// ---------------------------------------------------------
hgs
parents:
diff changeset
    92
// CVisualFrame* CVisualFrame::NewL
hgs
parents:
diff changeset
    93
// Two-phased constructor.
hgs
parents:
diff changeset
    94
// ---------------------------------------------------------
hgs
parents:
diff changeset
    95
//
hgs
parents:
diff changeset
    96
EXPORT_C CVisualFrame* CVisualFrame::NewL( 
hgs
parents:
diff changeset
    97
                                    RChunk& aChunk, 
hgs
parents:
diff changeset
    98
                                    TInt aSize, 
hgs
parents:
diff changeset
    99
                                    TInt aMaxSize, 
hgs
parents:
diff changeset
   100
                                    const TSize& aDimension, 
hgs
parents:
diff changeset
   101
                                    TInt aFrameFormat, 
hgs
parents:
diff changeset
   102
                                    const TFrameLayout& aFrameLayout )
hgs
parents:
diff changeset
   103
    {
hgs
parents:
diff changeset
   104
    CVisualFrame* self = new ( ELeave ) CVisualFrame();
hgs
parents:
diff changeset
   105
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
   106
    self->iVisualFrameImpl = CVisualFrameImpl::NewL( aChunk, aSize, aMaxSize, 
hgs
parents:
diff changeset
   107
                                                     aDimension, aFrameFormat, 
hgs
parents:
diff changeset
   108
                                                     aFrameLayout );
hgs
parents:
diff changeset
   109
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
    return self;
hgs
parents:
diff changeset
   112
    }
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
// ----------------------------------------------------------
hgs
parents:
diff changeset
   115
// CVisualFrame::DataChunkL
hgs
parents:
diff changeset
   116
// ----------------------------------------------------------
hgs
parents:
diff changeset
   117
//
hgs
parents:
diff changeset
   118
EXPORT_C const RChunk& CVisualFrame::DataChunkL() const
hgs
parents:
diff changeset
   119
    {
hgs
parents:
diff changeset
   120
    return iVisualFrameImpl->DataChunkL();
hgs
parents:
diff changeset
   121
    }
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
// ----------------------------------------------------------
hgs
parents:
diff changeset
   124
// CVisualFrame::DataPtrL
hgs
parents:
diff changeset
   125
// ----------------------------------------------------------
hgs
parents:
diff changeset
   126
//
hgs
parents:
diff changeset
   127
EXPORT_C TPtr8 CVisualFrame::DataPtrL() const
hgs
parents:
diff changeset
   128
    {
hgs
parents:
diff changeset
   129
    return iVisualFrameImpl->DataPtrL();
hgs
parents:
diff changeset
   130
    }
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
// ----------------------------------------------------------
hgs
parents:
diff changeset
   133
// CVisualFrame::Dimension
hgs
parents:
diff changeset
   134
// ----------------------------------------------------------
hgs
parents:
diff changeset
   135
//
hgs
parents:
diff changeset
   136
EXPORT_C TSize CVisualFrame::Dimension() const
hgs
parents:
diff changeset
   137
    {
hgs
parents:
diff changeset
   138
    return iVisualFrameImpl->Dimension();
hgs
parents:
diff changeset
   139
    }
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
// ----------------------------------------------------------
hgs
parents:
diff changeset
   142
// CVisualFrame::FrameFormat
hgs
parents:
diff changeset
   143
// ----------------------------------------------------------
hgs
parents:
diff changeset
   144
//
hgs
parents:
diff changeset
   145
EXPORT_C TInt CVisualFrame::FrameFormat() const
hgs
parents:
diff changeset
   146
    {
hgs
parents:
diff changeset
   147
    return iVisualFrameImpl->FrameFormat2();
hgs
parents:
diff changeset
   148
    }
hgs
parents:
diff changeset
   149
        
hgs
parents:
diff changeset
   150
// ----------------------------------------------------------
hgs
parents:
diff changeset
   151
// CVisualFrame::DataOffset
hgs
parents:
diff changeset
   152
// ----------------------------------------------------------
hgs
parents:
diff changeset
   153
//
hgs
parents:
diff changeset
   154
EXPORT_C TInt CVisualFrame::DataOffset() const
hgs
parents:
diff changeset
   155
    {
hgs
parents:
diff changeset
   156
    return iVisualFrameImpl->DataOffset();
hgs
parents:
diff changeset
   157
    }
hgs
parents:
diff changeset
   158
        
hgs
parents:
diff changeset
   159
// ----------------------------------------------------------
hgs
parents:
diff changeset
   160
// CVisualFrame::Size
hgs
parents:
diff changeset
   161
// ----------------------------------------------------------
hgs
parents:
diff changeset
   162
//
hgs
parents:
diff changeset
   163
EXPORT_C TInt CVisualFrame::Size() const
hgs
parents:
diff changeset
   164
    {
hgs
parents:
diff changeset
   165
    return iVisualFrameImpl->Size();
hgs
parents:
diff changeset
   166
    }
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
// ----------------------------------------------------------
hgs
parents:
diff changeset
   169
// CVisualFrame::SetSizeL
hgs
parents:
diff changeset
   170
// ----------------------------------------------------------
hgs
parents:
diff changeset
   171
//
hgs
parents:
diff changeset
   172
EXPORT_C void CVisualFrame::SetSizeL( TInt aSize )
hgs
parents:
diff changeset
   173
    {
hgs
parents:
diff changeset
   174
    iVisualFrameImpl->SetSizeL( aSize );
hgs
parents:
diff changeset
   175
    }
hgs
parents:
diff changeset
   176
    
hgs
parents:
diff changeset
   177
// ----------------------------------------------------------
hgs
parents:
diff changeset
   178
// CVisualFrame::MaxSize
hgs
parents:
diff changeset
   179
// ----------------------------------------------------------
hgs
parents:
diff changeset
   180
//
hgs
parents:
diff changeset
   181
EXPORT_C TInt CVisualFrame::MaxSize() const
hgs
parents:
diff changeset
   182
    {
hgs
parents:
diff changeset
   183
    return iVisualFrameImpl->MaxSize();
hgs
parents:
diff changeset
   184
    }
hgs
parents:
diff changeset
   185
         
hgs
parents:
diff changeset
   186
// ----------------------------------------------------------
hgs
parents:
diff changeset
   187
// CVisualFrame::DataContainer
hgs
parents:
diff changeset
   188
// ----------------------------------------------------------
hgs
parents:
diff changeset
   189
//
hgs
parents:
diff changeset
   190
EXPORT_C CVisualFrame::TDataContainer CVisualFrame::DataContainer() const
hgs
parents:
diff changeset
   191
    {
hgs
parents:
diff changeset
   192
    return ( TDataContainer )iVisualFrameImpl->DataContainer();
hgs
parents:
diff changeset
   193
    }
hgs
parents:
diff changeset
   194
        
hgs
parents:
diff changeset
   195
// ----------------------------------------------------------
hgs
parents:
diff changeset
   196
// CVisualFrame::FrameLayout
hgs
parents:
diff changeset
   197
// ----------------------------------------------------------
hgs
parents:
diff changeset
   198
//
hgs
parents:
diff changeset
   199
EXPORT_C const CVisualFrame::TFrameLayout& CVisualFrame::FrameLayout() const
hgs
parents:
diff changeset
   200
    {
hgs
parents:
diff changeset
   201
    return iVisualFrameImpl->FrameLayout2();
hgs
parents:
diff changeset
   202
    }
hgs
parents:
diff changeset
   203
hgs
parents:
diff changeset
   204
// ----------------------------------------------------------
hgs
parents:
diff changeset
   205
// CVisualFrame::~CVisualFrame
hgs
parents:
diff changeset
   206
// Destructor
hgs
parents:
diff changeset
   207
// ----------------------------------------------------------
hgs
parents:
diff changeset
   208
//
hgs
parents:
diff changeset
   209
EXPORT_C CVisualFrame::~CVisualFrame()
hgs
parents:
diff changeset
   210
    {
hgs
parents:
diff changeset
   211
    delete iVisualFrameImpl;
hgs
parents:
diff changeset
   212
    } 
hgs
parents:
diff changeset
   213
hgs
parents:
diff changeset
   214
// ---------------------------------------------------------
hgs
parents:
diff changeset
   215
// CVisualFrame* CVisualFrame::NewL
hgs
parents:
diff changeset
   216
// Two-phased constructor.
hgs
parents:
diff changeset
   217
// ---------------------------------------------------------
hgs
parents:
diff changeset
   218
//
hgs
parents:
diff changeset
   219
EXPORT_C CVisualFrame* CVisualFrame::NewL( const CImageFrame* aImageFrame )
hgs
parents:
diff changeset
   220
    {
hgs
parents:
diff changeset
   221
    CVisualFrame* self = new ( ELeave ) CVisualFrame();
hgs
parents:
diff changeset
   222
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
   223
    self->iVisualFrameImpl = CVisualFrameImpl::NewL( aImageFrame );
hgs
parents:
diff changeset
   224
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
   225
hgs
parents:
diff changeset
   226
    return self;
hgs
parents:
diff changeset
   227
    }
hgs
parents:
diff changeset
   228
hgs
parents:
diff changeset
   229
// ----------------------------------------------------------
hgs
parents:
diff changeset
   230
// CVisualFrame::GetImageFrameL
hgs
parents:
diff changeset
   231
// ----------------------------------------------------------
hgs
parents:
diff changeset
   232
//
hgs
parents:
diff changeset
   233
EXPORT_C CImageFrame* CVisualFrame::GetImageFrameL()
hgs
parents:
diff changeset
   234
    {
hgs
parents:
diff changeset
   235
    return iVisualFrameImpl->GetImageFrameL();    
hgs
parents:
diff changeset
   236
    }
hgs
parents:
diff changeset
   237
hgs
parents:
diff changeset
   238
hgs
parents:
diff changeset
   239
/*****************************************************/
hgs
parents:
diff changeset
   240
/* Extended ICL Jpeg Decoder API                     */
hgs
parents:
diff changeset
   241
/*****************************************************/
hgs
parents:
diff changeset
   242
hgs
parents:
diff changeset
   243
// ---------------------------------------------------------
hgs
parents:
diff changeset
   244
// CExtJpegDecoder* CExtJpegDecoder::NewL
hgs
parents:
diff changeset
   245
// Two-phased constructor.
hgs
parents:
diff changeset
   246
// ---------------------------------------------------------
hgs
parents:
diff changeset
   247
//
hgs
parents:
diff changeset
   248
EXPORT_C CExtJpegDecoder* CExtJpegDecoder::NewL()
hgs
parents:
diff changeset
   249
    {
hgs
parents:
diff changeset
   250
    return new (ELeave) CExtJpegDecoder();
hgs
parents:
diff changeset
   251
    }
hgs
parents:
diff changeset
   252
hgs
parents:
diff changeset
   253
// ---------------------------------------------------------
hgs
parents:
diff changeset
   254
// CExtJpegDecoder* CExtJpegDecoder::FileNewL
hgs
parents:
diff changeset
   255
// Creates, initializes and returns a pointer to an object of 
hgs
parents:
diff changeset
   256
// class CExtJpegDecoder
hgs
parents:
diff changeset
   257
// ---------------------------------------------------------
hgs
parents:
diff changeset
   258
//
hgs
parents:
diff changeset
   259
EXPORT_C CExtJpegDecoder* CExtJpegDecoder::FileNewL( 
hgs
parents:
diff changeset
   260
                                        RFs& aFs, const TDesC& aSourceFilename, 
hgs
parents:
diff changeset
   261
                                        const TDesC8& aMIMEType, 
hgs
parents:
diff changeset
   262
                                        const TOptions aOptions )
hgs
parents:
diff changeset
   263
    {
hgs
parents:
diff changeset
   264
    CExtJpegDecoder* dec = reinterpret_cast<CExtJpegDecoder*>( 
hgs
parents:
diff changeset
   265
                                CImageDecoder::FileNewL( aFs, aSourceFilename, 
hgs
parents:
diff changeset
   266
                                aMIMEType, aOptions ) );
hgs
parents:
diff changeset
   267
    CleanupStack::PushL( dec );
hgs
parents:
diff changeset
   268
    if ( dec->CapabilitiesL() < ECapNone )
hgs
parents:
diff changeset
   269
        {
hgs
parents:
diff changeset
   270
        User::Leave( KErrNotFound );
hgs
parents:
diff changeset
   271
        }
hgs
parents:
diff changeset
   272
    CleanupStack::Pop();
hgs
parents:
diff changeset
   273
    return dec;
hgs
parents:
diff changeset
   274
    }
hgs
parents:
diff changeset
   275
hgs
parents:
diff changeset
   276
// ---------------------------------------------------------
hgs
parents:
diff changeset
   277
// CExtJpegDecoder* CExtJpegDecoder::FileNewL
hgs
parents:
diff changeset
   278
// Creates, initializes and returns a pointer to an object of 
hgs
parents:
diff changeset
   279
// class CExtJpegDecoder
hgs
parents:
diff changeset
   280
// ---------------------------------------------------------
hgs
parents:
diff changeset
   281
//
hgs
parents:
diff changeset
   282
EXPORT_C CExtJpegDecoder* CExtJpegDecoder::FileNewL( 
hgs
parents:
diff changeset
   283
                                        RFs& aFs, 
hgs
parents:
diff changeset
   284
                                        const TDesC& aSourceFilename, 
hgs
parents:
diff changeset
   285
                                        const TOptions aOptions, 
hgs
parents:
diff changeset
   286
                                        const TUid aImageType, 
hgs
parents:
diff changeset
   287
                                        const TUid aImageSubType, 
hgs
parents:
diff changeset
   288
                                        const TUid aDecoderUid )
hgs
parents:
diff changeset
   289
    {
hgs
parents:
diff changeset
   290
    CExtJpegDecoder* dec = reinterpret_cast<CExtJpegDecoder*>( 
hgs
parents:
diff changeset
   291
                                CImageDecoder::FileNewL( aFs, aSourceFilename, aOptions, 
hgs
parents:
diff changeset
   292
                                aImageType, aImageSubType, aDecoderUid ) );
hgs
parents:
diff changeset
   293
    CleanupStack::PushL( dec );
hgs
parents:
diff changeset
   294
    if ( dec->CapabilitiesL() < ECapNone )
hgs
parents:
diff changeset
   295
        {
hgs
parents:
diff changeset
   296
        User::Leave( KErrNotFound );
hgs
parents:
diff changeset
   297
        }
hgs
parents:
diff changeset
   298
    CleanupStack::Pop();
hgs
parents:
diff changeset
   299
    return dec;
hgs
parents:
diff changeset
   300
    }
hgs
parents:
diff changeset
   301
hgs
parents:
diff changeset
   302
// ---------------------------------------------------------
hgs
parents:
diff changeset
   303
// CExtJpegDecoder* CExtJpegDecoder::DataNewL
hgs
parents:
diff changeset
   304
// Creates, initializes and returns a pointer to an object of 
hgs
parents:
diff changeset
   305
// class CExtJpegDecoder
hgs
parents:
diff changeset
   306
// ---------------------------------------------------------
hgs
parents:
diff changeset
   307
//
hgs
parents:
diff changeset
   308
EXPORT_C CExtJpegDecoder* CExtJpegDecoder::DataNewL( 
hgs
parents:
diff changeset
   309
                                        RFs& aFs, 
hgs
parents:
diff changeset
   310
                                        const TDesC8& aSourceData, 
hgs
parents:
diff changeset
   311
                                        const TDesC8& aMIMEType, 
hgs
parents:
diff changeset
   312
                                        const TOptions aOptions )
hgs
parents:
diff changeset
   313
    {
hgs
parents:
diff changeset
   314
    CExtJpegDecoder* dec = reinterpret_cast<CExtJpegDecoder*>( 
hgs
parents:
diff changeset
   315
                                CImageDecoder::DataNewL( aFs, aSourceData, 
hgs
parents:
diff changeset
   316
                                aMIMEType, aOptions ) );
hgs
parents:
diff changeset
   317
    CleanupStack::PushL( dec );
hgs
parents:
diff changeset
   318
    if ( dec->CapabilitiesL() < ECapNone )
hgs
parents:
diff changeset
   319
        {
hgs
parents:
diff changeset
   320
        User::Leave( KErrNotFound );
hgs
parents:
diff changeset
   321
        }
hgs
parents:
diff changeset
   322
    CleanupStack::Pop();
hgs
parents:
diff changeset
   323
    return dec;
hgs
parents:
diff changeset
   324
    }
hgs
parents:
diff changeset
   325
hgs
parents:
diff changeset
   326
// ---------------------------------------------------------
hgs
parents:
diff changeset
   327
// CExtJpegDecoder* CExtJpegDecoder::DataNewL
hgs
parents:
diff changeset
   328
// Creates, initializes and returns a pointer to an object of 
hgs
parents:
diff changeset
   329
// class CExtJpegDecoder
hgs
parents:
diff changeset
   330
// ---------------------------------------------------------
hgs
parents:
diff changeset
   331
//
hgs
parents:
diff changeset
   332
EXPORT_C CExtJpegDecoder* CExtJpegDecoder::DataNewL( 
hgs
parents:
diff changeset
   333
                                        RFs& aFs, 
hgs
parents:
diff changeset
   334
                                        const TDesC8& aSourceData, 
hgs
parents:
diff changeset
   335
                                        const TOptions aOptions, 
hgs
parents:
diff changeset
   336
                                        const TUid aImageType, 
hgs
parents:
diff changeset
   337
                                        const TUid aImageSubType, 
hgs
parents:
diff changeset
   338
                                        const TUid aDecoderUid )
hgs
parents:
diff changeset
   339
    {
hgs
parents:
diff changeset
   340
    CExtJpegDecoder* dec = reinterpret_cast<CExtJpegDecoder*>( 
hgs
parents:
diff changeset
   341
                                CImageDecoder::DataNewL( aFs, aSourceData, aOptions, 
hgs
parents:
diff changeset
   342
                                aImageType, aImageSubType, aDecoderUid ) );
hgs
parents:
diff changeset
   343
    CleanupStack::PushL( dec );
hgs
parents:
diff changeset
   344
    if ( dec->CapabilitiesL() < ECapNone )
hgs
parents:
diff changeset
   345
        {
hgs
parents:
diff changeset
   346
        User::Leave( KErrNotFound );
hgs
parents:
diff changeset
   347
        }
hgs
parents:
diff changeset
   348
    CleanupStack::Pop();
hgs
parents:
diff changeset
   349
    return dec;
hgs
parents:
diff changeset
   350
    }
hgs
parents:
diff changeset
   351
hgs
parents:
diff changeset
   352
// ---------------------------------------------------------
hgs
parents:
diff changeset
   353
// CExtJpegDecoder* CExtJpegDecoder::DataNewL
hgs
parents:
diff changeset
   354
// Creates, initializes and returns a pointer to an object of 
hgs
parents:
diff changeset
   355
// class CExtJpegDecoder
hgs
parents:
diff changeset
   356
// ---------------------------------------------------------
hgs
parents:
diff changeset
   357
//
hgs
parents:
diff changeset
   358
EXPORT_C CExtJpegDecoder* CExtJpegDecoder::DataNewL( 
hgs
parents:
diff changeset
   359
                                        RFs& aFs, 
hgs
parents:
diff changeset
   360
                                        const CVisualFrame* aSourceData, 
hgs
parents:
diff changeset
   361
                                        const TDesC8& aMIMEType, 
hgs
parents:
diff changeset
   362
                                        const TOptions aOptions )
hgs
parents:
diff changeset
   363
    {
hgs
parents:
diff changeset
   364
    
hgs
parents:
diff changeset
   365
    TUint8* sourcePtr = NULL;
hgs
parents:
diff changeset
   366
    CVisualFrame* sourceDataFrame = const_cast<CVisualFrame*>( aSourceData );
hgs
parents:
diff changeset
   367
    if ( sourceDataFrame->DataContainer() == CVisualFrame::EInChunk )
hgs
parents:
diff changeset
   368
        {
hgs
parents:
diff changeset
   369
        sourcePtr = sourceDataFrame->DataChunkL().Base() + sourceDataFrame->DataOffset();
hgs
parents:
diff changeset
   370
        }
hgs
parents:
diff changeset
   371
    else if ( sourceDataFrame->DataContainer() == CVisualFrame::EInDescriptor )
hgs
parents:
diff changeset
   372
        {
hgs
parents:
diff changeset
   373
        sourcePtr = const_cast<TUint8*>( sourceDataFrame->DataPtrL().Ptr() ) 
hgs
parents:
diff changeset
   374
                                       + sourceDataFrame->DataOffset();
hgs
parents:
diff changeset
   375
        }
hgs
parents:
diff changeset
   376
    else
hgs
parents:
diff changeset
   377
        {
hgs
parents:
diff changeset
   378
        User::Leave( KErrArgument );            
hgs
parents:
diff changeset
   379
        }
hgs
parents:
diff changeset
   380
    TPtrC8 sourceData( sourcePtr, sourceDataFrame->Size() );
hgs
parents:
diff changeset
   381
    CExtJpegDecoder* dec = reinterpret_cast<CExtJpegDecoder*>( 
hgs
parents:
diff changeset
   382
                                CImageDecoder::DataNewL( aFs, sourceData, 
hgs
parents:
diff changeset
   383
                                aMIMEType, aOptions ) );
hgs
parents:
diff changeset
   384
    CleanupStack::PushL( dec );
hgs
parents:
diff changeset
   385
    if ( dec->CapabilitiesL() < ECapNone )
hgs
parents:
diff changeset
   386
        {
hgs
parents:
diff changeset
   387
        User::Leave( KErrNotFound );
hgs
parents:
diff changeset
   388
        }
hgs
parents:
diff changeset
   389
    CleanupStack::Pop();
hgs
parents:
diff changeset
   390
    return dec;
hgs
parents:
diff changeset
   391
    }
hgs
parents:
diff changeset
   392
hgs
parents:
diff changeset
   393
// ---------------------------------------------------------
hgs
parents:
diff changeset
   394
// CExtJpegDecoder* CExtJpegDecoder::DataNewL
hgs
parents:
diff changeset
   395
// Creates, initializes and returns a pointer to an object of 
hgs
parents:
diff changeset
   396
// class CExtJpegDecoder
hgs
parents:
diff changeset
   397
// ---------------------------------------------------------
hgs
parents:
diff changeset
   398
//
hgs
parents:
diff changeset
   399
EXPORT_C CExtJpegDecoder* CExtJpegDecoder::DataNewL( 
hgs
parents:
diff changeset
   400
                                        RFs& aFs, 
hgs
parents:
diff changeset
   401
                                        const CVisualFrame* aSourceData, 
hgs
parents:
diff changeset
   402
                                        const TOptions aOptions, 
hgs
parents:
diff changeset
   403
                                        const TUid aImageType, 
hgs
parents:
diff changeset
   404
                                        const TUid aImageSubType, 
hgs
parents:
diff changeset
   405
                                        const TUid aDecoderUid )
hgs
parents:
diff changeset
   406
    {
hgs
parents:
diff changeset
   407
    TUint8* sourcePtr = NULL;
hgs
parents:
diff changeset
   408
    CVisualFrame* sourceDataFrame = const_cast<CVisualFrame*>( aSourceData );    
hgs
parents:
diff changeset
   409
    if ( sourceDataFrame->DataContainer() == CVisualFrame::EInChunk )
hgs
parents:
diff changeset
   410
        {
hgs
parents:
diff changeset
   411
        sourcePtr = sourceDataFrame->DataChunkL().Base() + sourceDataFrame->DataOffset();
hgs
parents:
diff changeset
   412
        }
hgs
parents:
diff changeset
   413
    else if ( aSourceData->DataContainer() == CVisualFrame::EInDescriptor )
hgs
parents:
diff changeset
   414
        {
hgs
parents:
diff changeset
   415
        sourcePtr = const_cast<TUint8*>( sourceDataFrame->DataPtrL().Ptr() ) 
hgs
parents:
diff changeset
   416
                                       + sourceDataFrame->DataOffset();
hgs
parents:
diff changeset
   417
        }
hgs
parents:
diff changeset
   418
    else
hgs
parents:
diff changeset
   419
        {
hgs
parents:
diff changeset
   420
        User::Leave( KErrArgument );            
hgs
parents:
diff changeset
   421
        }
hgs
parents:
diff changeset
   422
hgs
parents:
diff changeset
   423
    TPtrC8 sourceData( sourcePtr, sourceDataFrame->Size() );
hgs
parents:
diff changeset
   424
    CExtJpegDecoder* dec = reinterpret_cast<CExtJpegDecoder*>( 
hgs
parents:
diff changeset
   425
                                CImageDecoder::DataNewL( aFs, sourceData, aOptions, 
hgs
parents:
diff changeset
   426
                                aImageType, aImageSubType, aDecoderUid ) );
hgs
parents:
diff changeset
   427
    CleanupStack::PushL( dec );
hgs
parents:
diff changeset
   428
    if ( dec->CapabilitiesL() < ECapNone )
hgs
parents:
diff changeset
   429
        {
hgs
parents:
diff changeset
   430
        User::Leave( KErrNotFound );
hgs
parents:
diff changeset
   431
        }
hgs
parents:
diff changeset
   432
    CleanupStack::Pop();
hgs
parents:
diff changeset
   433
    return dec;
hgs
parents:
diff changeset
   434
    }
hgs
parents:
diff changeset
   435
hgs
parents:
diff changeset
   436
// ----------------------------------------------------------
hgs
parents:
diff changeset
   437
// CExtJpegDecoder::~CExtJpegDecoder
hgs
parents:
diff changeset
   438
// Destructor
hgs
parents:
diff changeset
   439
// ----------------------------------------------------------
hgs
parents:
diff changeset
   440
//
hgs
parents:
diff changeset
   441
EXPORT_C CExtJpegDecoder::~CExtJpegDecoder()
hgs
parents:
diff changeset
   442
    {
hgs
parents:
diff changeset
   443
    }
hgs
parents:
diff changeset
   444
hgs
parents:
diff changeset
   445
// ----------------------------------------------------------
hgs
parents:
diff changeset
   446
// CExtJpegDecoder::SetCroppingL
hgs
parents:
diff changeset
   447
// ----------------------------------------------------------
hgs
parents:
diff changeset
   448
//
hgs
parents:
diff changeset
   449
EXPORT_C void CExtJpegDecoder::SetCroppingL( TRect aCropRect )
hgs
parents:
diff changeset
   450
    {
hgs
parents:
diff changeset
   451
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
   452
    CustomSyncL( ECapCropping );
hgs
parents:
diff changeset
   453
    CustomSyncL( reinterpret_cast<TInt>( &aCropRect ) );
hgs
parents:
diff changeset
   454
    CustomSyncL( EEnd );
hgs
parents:
diff changeset
   455
    }
hgs
parents:
diff changeset
   456
hgs
parents:
diff changeset
   457
// ----------------------------------------------------------
hgs
parents:
diff changeset
   458
// CExtJpegDecoder::SetStreamingL
hgs
parents:
diff changeset
   459
// ----------------------------------------------------------
hgs
parents:
diff changeset
   460
//
hgs
parents:
diff changeset
   461
EXPORT_C void CExtJpegDecoder::SetStreamingL( TSize& aMacroBlockSize )
hgs
parents:
diff changeset
   462
    {
hgs
parents:
diff changeset
   463
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
   464
    CustomSyncL( ECapStreaming );
hgs
parents:
diff changeset
   465
    CustomSyncL( reinterpret_cast<TInt>( &aMacroBlockSize ) );
hgs
parents:
diff changeset
   466
    CustomSyncL( EEnd );
hgs
parents:
diff changeset
   467
    }
hgs
parents:
diff changeset
   468
hgs
parents:
diff changeset
   469
// ----------------------------------------------------------
hgs
parents:
diff changeset
   470
// CExtJpegDecoder::SetRotationL
hgs
parents:
diff changeset
   471
// ----------------------------------------------------------
hgs
parents:
diff changeset
   472
//
hgs
parents:
diff changeset
   473
EXPORT_C void CExtJpegDecoder::SetRotationL( TInt aDegree )
hgs
parents:
diff changeset
   474
    {
hgs
parents:
diff changeset
   475
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
   476
    CustomSyncL( ECapRotation );
hgs
parents:
diff changeset
   477
    CustomSyncL( aDegree );
hgs
parents:
diff changeset
   478
    CustomSyncL( EEnd );
hgs
parents:
diff changeset
   479
    }
hgs
parents:
diff changeset
   480
hgs
parents:
diff changeset
   481
// ----------------------------------------------------------
hgs
parents:
diff changeset
   482
// CExtJpegDecoder::SetFlippingL
hgs
parents:
diff changeset
   483
// ----------------------------------------------------------
hgs
parents:
diff changeset
   484
//
hgs
parents:
diff changeset
   485
EXPORT_C void CExtJpegDecoder::SetFlippingL()
hgs
parents:
diff changeset
   486
    {
hgs
parents:
diff changeset
   487
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
   488
    CustomSyncL( ECapFlipping );
hgs
parents:
diff changeset
   489
    CustomSyncL( EEnd );
hgs
parents:
diff changeset
   490
    }
hgs
parents:
diff changeset
   491
hgs
parents:
diff changeset
   492
// ----------------------------------------------------------
hgs
parents:
diff changeset
   493
// CExtJpegDecoder::SetMirroringL
hgs
parents:
diff changeset
   494
// ----------------------------------------------------------
hgs
parents:
diff changeset
   495
//
hgs
parents:
diff changeset
   496
EXPORT_C void CExtJpegDecoder::SetMirroringL()
hgs
parents:
diff changeset
   497
    {
hgs
parents:
diff changeset
   498
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
   499
    CustomSyncL( ECapMirroring );
hgs
parents:
diff changeset
   500
    CustomSyncL( EEnd );
hgs
parents:
diff changeset
   501
    }
hgs
parents:
diff changeset
   502
hgs
parents:
diff changeset
   503
// ----------------------------------------------------------
hgs
parents:
diff changeset
   504
// CExtJpegDecoder::SetDctDecodingL
hgs
parents:
diff changeset
   505
// ----------------------------------------------------------
hgs
parents:
diff changeset
   506
//
hgs
parents:
diff changeset
   507
EXPORT_C void CExtJpegDecoder::SetDctDecodingL()
hgs
parents:
diff changeset
   508
    {
hgs
parents:
diff changeset
   509
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
   510
    CustomSyncL( ECapDctDecoding );
hgs
parents:
diff changeset
   511
    CustomSyncL( EEnd );
hgs
parents:
diff changeset
   512
    }
hgs
parents:
diff changeset
   513
hgs
parents:
diff changeset
   514
// ----------------------------------------------------------
hgs
parents:
diff changeset
   515
// CExtJpegDecoder::ConvertL
hgs
parents:
diff changeset
   516
// ----------------------------------------------------------
hgs
parents:
diff changeset
   517
//
hgs
parents:
diff changeset
   518
EXPORT_C void CExtJpegDecoder::ConvertL( 
hgs
parents:
diff changeset
   519
                        TRequestStatus* aRequestStatus, 
hgs
parents:
diff changeset
   520
                        const CVisualFrame* aDestinationFrame, 
hgs
parents:
diff changeset
   521
                        TInt& aNoOfDecodedMBlocks,
hgs
parents:
diff changeset
   522
                        TInt aFrameNumber )
hgs
parents:
diff changeset
   523
    {
hgs
parents:
diff changeset
   524
    iIsExtConvert = ETrue;
hgs
parents:
diff changeset
   525
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
   526
    CustomSyncL( EConvert );
hgs
parents:
diff changeset
   527
    CustomSyncL( reinterpret_cast<TInt>( aDestinationFrame ) );
hgs
parents:
diff changeset
   528
    CustomSyncL( reinterpret_cast<TInt>( &aNoOfDecodedMBlocks ) );
hgs
parents:
diff changeset
   529
    CustomSyncL( aFrameNumber );
hgs
parents:
diff changeset
   530
    CustomSyncL( EReadyForAsync );
hgs
parents:
diff changeset
   531
    CustomAsync( aRequestStatus, 0 );
hgs
parents:
diff changeset
   532
    }
hgs
parents:
diff changeset
   533
hgs
parents:
diff changeset
   534
// ----------------------------------------------------------
hgs
parents:
diff changeset
   535
// CExtJpegDecoder::ContinueConvertL
hgs
parents:
diff changeset
   536
// ----------------------------------------------------------
hgs
parents:
diff changeset
   537
//
hgs
parents:
diff changeset
   538
EXPORT_C void CExtJpegDecoder::ContinueConvertL( 
hgs
parents:
diff changeset
   539
                        TRequestStatus* aRequestStatus, 
hgs
parents:
diff changeset
   540
                        const CVisualFrame* aDestinationFrame, 
hgs
parents:
diff changeset
   541
                        TInt& aNoOfDecodedMBlocks,
hgs
parents:
diff changeset
   542
                        TInt aFrameNumber )
hgs
parents:
diff changeset
   543
    {
hgs
parents:
diff changeset
   544
    iIsExtConvert = ETrue;
hgs
parents:
diff changeset
   545
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
   546
    CustomSyncL( EContinueConvert );
hgs
parents:
diff changeset
   547
    CustomSyncL( reinterpret_cast<TInt>( aDestinationFrame ) );
hgs
parents:
diff changeset
   548
    CustomSyncL( reinterpret_cast<TInt>( &aNoOfDecodedMBlocks ) );
hgs
parents:
diff changeset
   549
    CustomSyncL( aFrameNumber );
hgs
parents:
diff changeset
   550
    CustomSyncL( EReadyForAsync );
hgs
parents:
diff changeset
   551
    CustomAsync( aRequestStatus, 0 );
hgs
parents:
diff changeset
   552
    }
hgs
parents:
diff changeset
   553
hgs
parents:
diff changeset
   554
// ----------------------------------------------------------
hgs
parents:
diff changeset
   555
// CExtJpegDecoder::SupportedFormatsL
hgs
parents:
diff changeset
   556
// ----------------------------------------------------------
hgs
parents:
diff changeset
   557
//
hgs
parents:
diff changeset
   558
EXPORT_C TInt CExtJpegDecoder::SupportedFormatsL()
hgs
parents:
diff changeset
   559
    {
hgs
parents:
diff changeset
   560
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
   561
    CustomSyncL( ESupportedFormats );
hgs
parents:
diff changeset
   562
    TInt retVal = KErrNotFound;
hgs
parents:
diff changeset
   563
    CustomSyncL( reinterpret_cast<TInt>( &retVal ) );
hgs
parents:
diff changeset
   564
    CustomSyncL( EEnd );
hgs
parents:
diff changeset
   565
    return retVal;
hgs
parents:
diff changeset
   566
    }
hgs
parents:
diff changeset
   567
hgs
parents:
diff changeset
   568
// ----------------------------------------------------------
hgs
parents:
diff changeset
   569
// CExtJpegDecoder::CapabilitiesL
hgs
parents:
diff changeset
   570
// ----------------------------------------------------------
hgs
parents:
diff changeset
   571
//
hgs
parents:
diff changeset
   572
EXPORT_C TInt CExtJpegDecoder::CapabilitiesL()
hgs
parents:
diff changeset
   573
    {
hgs
parents:
diff changeset
   574
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
   575
    CustomSyncL( ECapabilities );
hgs
parents:
diff changeset
   576
    TInt retVal = KErrNotFound;
hgs
parents:
diff changeset
   577
    CustomSyncL( reinterpret_cast<TInt>( &retVal ) );
hgs
parents:
diff changeset
   578
    CustomSyncL( EEnd );
hgs
parents:
diff changeset
   579
    return retVal;
hgs
parents:
diff changeset
   580
    }
hgs
parents:
diff changeset
   581
hgs
parents:
diff changeset
   582
// ----------------------------------------------------------
hgs
parents:
diff changeset
   583
// CExtJpegDecoder::CExtJpegDecoder
hgs
parents:
diff changeset
   584
// ----------------------------------------------------------
hgs
parents:
diff changeset
   585
//
hgs
parents:
diff changeset
   586
CExtJpegDecoder::CExtJpegDecoder() : CJPEGImageFrameDecoder()
hgs
parents:
diff changeset
   587
    {
hgs
parents:
diff changeset
   588
    }
hgs
parents:
diff changeset
   589
hgs
parents:
diff changeset
   590
// ----------------------------------------------------------
hgs
parents:
diff changeset
   591
// CExtJpegDecoder::Convert
hgs
parents:
diff changeset
   592
// ----------------------------------------------------------
hgs
parents:
diff changeset
   593
//
hgs
parents:
diff changeset
   594
EXPORT_C  void CExtJpegDecoder::Convert( TRequestStatus* aRequestStatus,
hgs
parents:
diff changeset
   595
                                         CFbsBitmap& aDestination, TInt aFrameNumber )    
hgs
parents:
diff changeset
   596
    {
hgs
parents:
diff changeset
   597
    iIsExtConvert = EFalse;
hgs
parents:
diff changeset
   598
    CImageDecoder::Convert( aRequestStatus, aDestination, aFrameNumber );
hgs
parents:
diff changeset
   599
    }
hgs
parents:
diff changeset
   600
hgs
parents:
diff changeset
   601
// ----------------------------------------------------------
hgs
parents:
diff changeset
   602
// CExtJpegDecoder::Convert
hgs
parents:
diff changeset
   603
// ----------------------------------------------------------
hgs
parents:
diff changeset
   604
//
hgs
parents:
diff changeset
   605
EXPORT_C  void CExtJpegDecoder::Convert( TRequestStatus* aRequestStatus, 
hgs
parents:
diff changeset
   606
                                         CFbsBitmap& aDestination, 
hgs
parents:
diff changeset
   607
                                         CFbsBitmap& aDestinationMask, TInt aFrameNumber )
hgs
parents:
diff changeset
   608
    {
hgs
parents:
diff changeset
   609
    iIsExtConvert = EFalse;
hgs
parents:
diff changeset
   610
    CImageDecoder::Convert( aRequestStatus, aDestination, aDestinationMask, aFrameNumber );
hgs
parents:
diff changeset
   611
    }
hgs
parents:
diff changeset
   612
    
hgs
parents:
diff changeset
   613
// ----------------------------------------------------------
hgs
parents:
diff changeset
   614
// CExtJpegDecoder::ContinueConvert
hgs
parents:
diff changeset
   615
// ----------------------------------------------------------
hgs
parents:
diff changeset
   616
//
hgs
parents:
diff changeset
   617
EXPORT_C void CExtJpegDecoder::ContinueConvert( TRequestStatus* aRequestStatus )
hgs
parents:
diff changeset
   618
    {
hgs
parents:
diff changeset
   619
    if( iIsExtConvert )
hgs
parents:
diff changeset
   620
        {
hgs
parents:
diff changeset
   621
        User::RequestComplete( aRequestStatus, KErrUnknown );
hgs
parents:
diff changeset
   622
        }
hgs
parents:
diff changeset
   623
    else
hgs
parents:
diff changeset
   624
        {
hgs
parents:
diff changeset
   625
        CImageDecoder::ContinueConvert( aRequestStatus );
hgs
parents:
diff changeset
   626
        }    
hgs
parents:
diff changeset
   627
    } 
hgs
parents:
diff changeset
   628
      
hgs
parents:
diff changeset
   629
// ----------------------------------------------------------
hgs
parents:
diff changeset
   630
// CExtJpegDecoder* CExtJpegDecoder::FileNewL
hgs
parents:
diff changeset
   631
// Creates, initializes and returns a pointer to an object of 
hgs
parents:
diff changeset
   632
// class CExtJpegDecoder
hgs
parents:
diff changeset
   633
// ----------------------------------------------------------
hgs
parents:
diff changeset
   634
//                             
hgs
parents:
diff changeset
   635
EXPORT_C CExtJpegDecoder* CExtJpegDecoder::FileNewL( 
hgs
parents:
diff changeset
   636
                            const TDecoderType aDecoderType,
hgs
parents:
diff changeset
   637
                            RFs& aFs, 
hgs
parents:
diff changeset
   638
                            const TDesC& aSourceFileName, 
hgs
parents:
diff changeset
   639
                            const TOptions aOptions )
hgs
parents:
diff changeset
   640
    {
hgs
parents:
diff changeset
   641
    TInt versionMin = KMinSwVersion;
hgs
parents:
diff changeset
   642
    TInt versionMax = KMaxSwVersion;
hgs
parents:
diff changeset
   643
    if ( aDecoderType == EHwImplementation )
hgs
parents:
diff changeset
   644
        {
hgs
parents:
diff changeset
   645
        versionMin = KMinHwVersion;
hgs
parents:
diff changeset
   646
        versionMax = KMaxHwVersion;
hgs
parents:
diff changeset
   647
        }
hgs
parents:
diff changeset
   648
    TUid uId = GetUidByVersionRangeL( versionMin, versionMax );
hgs
parents:
diff changeset
   649
    if ( uId == KNullUid )
hgs
parents:
diff changeset
   650
        {
hgs
parents:
diff changeset
   651
        User::Leave( KErrNotFound );
hgs
parents:
diff changeset
   652
        }
hgs
parents:
diff changeset
   653
    return CExtJpegDecoder::FileNewL( aFs, aSourceFileName, aOptions, 
hgs
parents:
diff changeset
   654
                                      KImageTypeJPGUid, KNullUid, uId );
hgs
parents:
diff changeset
   655
    }
hgs
parents:
diff changeset
   656
hgs
parents:
diff changeset
   657
// ----------------------------------------------------------
hgs
parents:
diff changeset
   658
// CExtJpegDecoder* CExtJpegDecoder::DataNewL
hgs
parents:
diff changeset
   659
// Creates, initializes and returns a pointer to an object of 
hgs
parents:
diff changeset
   660
// class CExtJpegDecoder
hgs
parents:
diff changeset
   661
// ----------------------------------------------------------
hgs
parents:
diff changeset
   662
// 
hgs
parents:
diff changeset
   663
EXPORT_C CExtJpegDecoder* CExtJpegDecoder::DataNewL( 
hgs
parents:
diff changeset
   664
                            const TDecoderType aDecoderType,
hgs
parents:
diff changeset
   665
                            RFs& aFs, 
hgs
parents:
diff changeset
   666
                            const TDesC8& aSourceData, 
hgs
parents:
diff changeset
   667
                            const TOptions aOptions )
hgs
parents:
diff changeset
   668
    {
hgs
parents:
diff changeset
   669
    TInt versionMin = KMinSwVersion;
hgs
parents:
diff changeset
   670
    TInt versionMax = KMaxSwVersion;
hgs
parents:
diff changeset
   671
    if ( aDecoderType == EHwImplementation )
hgs
parents:
diff changeset
   672
        {
hgs
parents:
diff changeset
   673
        versionMin = KMinHwVersion;
hgs
parents:
diff changeset
   674
        versionMax = KMaxHwVersion;
hgs
parents:
diff changeset
   675
        }
hgs
parents:
diff changeset
   676
    TUid uId = GetUidByVersionRangeL( versionMin, versionMax );
hgs
parents:
diff changeset
   677
    if ( uId == KNullUid )
hgs
parents:
diff changeset
   678
        {
hgs
parents:
diff changeset
   679
        User::Leave( KErrNotFound );
hgs
parents:
diff changeset
   680
        }
hgs
parents:
diff changeset
   681
    return CExtJpegDecoder::DataNewL( aFs, aSourceData, aOptions, 
hgs
parents:
diff changeset
   682
                                      KImageTypeJPGUid, KNullUid, uId );
hgs
parents:
diff changeset
   683
hgs
parents:
diff changeset
   684
    }
hgs
parents:
diff changeset
   685
                                    
hgs
parents:
diff changeset
   686
// ----------------------------------------------------------
hgs
parents:
diff changeset
   687
// CExtJpegDecoder* CExtJpegDecoder::DataNewL
hgs
parents:
diff changeset
   688
// Creates, initializes and returns a pointer to an object of 
hgs
parents:
diff changeset
   689
// class CExtJpegDecoder
hgs
parents:
diff changeset
   690
// ----------------------------------------------------------
hgs
parents:
diff changeset
   691
// 
hgs
parents:
diff changeset
   692
EXPORT_C CExtJpegDecoder* CExtJpegDecoder::DataNewL( 
hgs
parents:
diff changeset
   693
                            const TDecoderType aDecoderType, 
hgs
parents:
diff changeset
   694
                            RFs& aFs, 
hgs
parents:
diff changeset
   695
                            const CVisualFrame* aSourceData, 
hgs
parents:
diff changeset
   696
                            const TOptions aOptions )
hgs
parents:
diff changeset
   697
    {
hgs
parents:
diff changeset
   698
    TInt versionMin = KMinSwVersion;
hgs
parents:
diff changeset
   699
    TInt versionMax = KMaxSwVersion;
hgs
parents:
diff changeset
   700
    if ( aDecoderType == EHwImplementation )
hgs
parents:
diff changeset
   701
        {
hgs
parents:
diff changeset
   702
        versionMin = KMinHwVersion;
hgs
parents:
diff changeset
   703
        versionMax = KMaxHwVersion;
hgs
parents:
diff changeset
   704
        }
hgs
parents:
diff changeset
   705
    TUid uId = GetUidByVersionRangeL( versionMin, versionMax );
hgs
parents:
diff changeset
   706
    if ( uId == KNullUid )
hgs
parents:
diff changeset
   707
        {
hgs
parents:
diff changeset
   708
        User::Leave( KErrNotFound );
hgs
parents:
diff changeset
   709
        }
hgs
parents:
diff changeset
   710
    return CExtJpegDecoder::DataNewL( aFs, aSourceData, aOptions, 
hgs
parents:
diff changeset
   711
                                      KImageTypeJPGUid, KNullUid, uId );
hgs
parents:
diff changeset
   712
    }
hgs
parents:
diff changeset
   713
    
hgs
parents:
diff changeset
   714
    
hgs
parents:
diff changeset
   715
// ----------------------------------------------------------
hgs
parents:
diff changeset
   716
// CExtJpegDecoder::GetUidByVersionRangeL
hgs
parents:
diff changeset
   717
// ----------------------------------------------------------
hgs
parents:
diff changeset
   718
// 
hgs
parents:
diff changeset
   719
TUid CExtJpegDecoder::GetUidByVersionRangeL( TInt aMinVersion, TInt aMaxVersion )
hgs
parents:
diff changeset
   720
    {
hgs
parents:
diff changeset
   721
    TUid uId = KNullUid;
hgs
parents:
diff changeset
   722
    TUid propertyUid = KUidSwCodec; 
hgs
parents:
diff changeset
   723
    
hgs
parents:
diff changeset
   724
    RUidDataArray implArray;
hgs
parents:
diff changeset
   725
    // based on the version decide what kind of codec to fetch
hgs
parents:
diff changeset
   726
    if( ( aMinVersion == KMinSwVersion ) && ( aMaxVersion == KMaxSwVersion ) )
hgs
parents:
diff changeset
   727
        {
hgs
parents:
diff changeset
   728
        propertyUid = KUidSwCodec; 
hgs
parents:
diff changeset
   729
        }
hgs
parents:
diff changeset
   730
    else if( ( aMinVersion == KMinHwVersion ) && ( aMaxVersion == KMaxHwVersion ) )
hgs
parents:
diff changeset
   731
        {
hgs
parents:
diff changeset
   732
        propertyUid = KUidHwCodec; 
hgs
parents:
diff changeset
   733
        }
hgs
parents:
diff changeset
   734
        
hgs
parents:
diff changeset
   735
    // property array to be verified
hgs
parents:
diff changeset
   736
    const TUid properties[] = { propertyUid, KImageTypeJPGUid };
hgs
parents:
diff changeset
   737
    
hgs
parents:
diff changeset
   738
    // Request existing plugins with the desired properties
hgs
parents:
diff changeset
   739
    TRAPD( getIntErr, CImageDecoder::GetInterfaceImplementationsL( 
hgs
parents:
diff changeset
   740
                                                properties, 
hgs
parents:
diff changeset
   741
                                                2, 
hgs
parents:
diff changeset
   742
                                                implArray ) ); 
hgs
parents:
diff changeset
   743
	CleanupClosePushL( implArray );                                                
hgs
parents:
diff changeset
   744
    User::LeaveIfError( getIntErr );
hgs
parents:
diff changeset
   745
    
hgs
parents:
diff changeset
   746
    TInt count = implArray.Count();
hgs
parents:
diff changeset
   747
    for( --count; uId == KNullUid && count >= 0; --count )
hgs
parents:
diff changeset
   748
        {
hgs
parents:
diff changeset
   749
        // Get the Jpeg decoder UID and find out whether it is requested
hgs
parents:
diff changeset
   750
        // type of decoder by version number.
hgs
parents:
diff changeset
   751
        TUid tempUid = implArray[ count ];
hgs
parents:
diff changeset
   752
        CImplementationInformationType* implInfo = NULL;
hgs
parents:
diff changeset
   753
        TRAPD( error, implInfo = 
hgs
parents:
diff changeset
   754
            CImageDecoder::GetImplementationInformationL( tempUid ) );
hgs
parents:
diff changeset
   755
            
hgs
parents:
diff changeset
   756
        User::LeaveIfError( error );
hgs
parents:
diff changeset
   757
                
hgs
parents:
diff changeset
   758
        // check the opaque data and version no
hgs
parents:
diff changeset
   759
        TInt version = implInfo->Version();
hgs
parents:
diff changeset
   760
        if ( ( implInfo->OpaqueData().Find( KJpgMimeType ) != KErrNotFound )
hgs
parents:
diff changeset
   761
            && ( version <= aMaxVersion ) && ( version >= aMinVersion ) )
hgs
parents:
diff changeset
   762
            {
hgs
parents:
diff changeset
   763
            uId = tempUid;
hgs
parents:
diff changeset
   764
            }
hgs
parents:
diff changeset
   765
        delete implInfo;    
hgs
parents:
diff changeset
   766
        } // for - count
hgs
parents:
diff changeset
   767
    CleanupStack::PopAndDestroy(&implArray);
hgs
parents:
diff changeset
   768
    return uId;
hgs
parents:
diff changeset
   769
hgs
parents:
diff changeset
   770
    }
hgs
parents:
diff changeset
   771
hgs
parents:
diff changeset
   772
hgs
parents:
diff changeset
   773
hgs
parents:
diff changeset
   774
/*****************************************************/
hgs
parents:
diff changeset
   775
/* Extended ICL Jpeg Encoder API                     */
hgs
parents:
diff changeset
   776
/*****************************************************/
hgs
parents:
diff changeset
   777
hgs
parents:
diff changeset
   778
hgs
parents:
diff changeset
   779
// ---------------------------------------------------------
hgs
parents:
diff changeset
   780
// CExtJpegEncoder* CExtJpegEncoder::NewL
hgs
parents:
diff changeset
   781
// Two-phased constructor.
hgs
parents:
diff changeset
   782
// ---------------------------------------------------------
hgs
parents:
diff changeset
   783
//
hgs
parents:
diff changeset
   784
EXPORT_C CExtJpegEncoder* CExtJpegEncoder::NewL()
hgs
parents:
diff changeset
   785
    {
hgs
parents:
diff changeset
   786
    return new (ELeave) CExtJpegEncoder();
hgs
parents:
diff changeset
   787
    }
hgs
parents:
diff changeset
   788
hgs
parents:
diff changeset
   789
// ---------------------------------------------------------
hgs
parents:
diff changeset
   790
// CExtJpegEncoder* CExtJpegEncoder::FileNewL
hgs
parents:
diff changeset
   791
// Creates, initializes and returns a pointer to an object of 
hgs
parents:
diff changeset
   792
// class CExtJpegEncoder
hgs
parents:
diff changeset
   793
// ---------------------------------------------------------
hgs
parents:
diff changeset
   794
//
hgs
parents:
diff changeset
   795
EXPORT_C CExtJpegEncoder* CExtJpegEncoder::FileNewL( 
hgs
parents:
diff changeset
   796
                                            RFs& aFs, 
hgs
parents:
diff changeset
   797
                                            const TDesC& aDestinationFilename, 
hgs
parents:
diff changeset
   798
                                            const TDesC8& aMIMEType, 
hgs
parents:
diff changeset
   799
                                            const TOptions aOptions )
hgs
parents:
diff changeset
   800
    {
hgs
parents:
diff changeset
   801
    CExtJpegEncoder* enc = reinterpret_cast<CExtJpegEncoder*>( 
hgs
parents:
diff changeset
   802
                                CImageEncoder::FileNewL( aFs, aDestinationFilename, 
hgs
parents:
diff changeset
   803
                                aMIMEType, aOptions ) );
hgs
parents:
diff changeset
   804
    CleanupStack::PushL( enc );
hgs
parents:
diff changeset
   805
    if ( enc->CapabilitiesL() < ECapNone )
hgs
parents:
diff changeset
   806
        {
hgs
parents:
diff changeset
   807
        User::Leave( KErrNotFound );
hgs
parents:
diff changeset
   808
        }
hgs
parents:
diff changeset
   809
    CleanupStack::Pop();
hgs
parents:
diff changeset
   810
    return enc;
hgs
parents:
diff changeset
   811
    }
hgs
parents:
diff changeset
   812
hgs
parents:
diff changeset
   813
// ---------------------------------------------------------
hgs
parents:
diff changeset
   814
// CExtJpegEncoder* CExtJpegEncoder::FileNewL
hgs
parents:
diff changeset
   815
// Creates, initializes and returns a pointer to an object of 
hgs
parents:
diff changeset
   816
// class CExtJpegEncoder
hgs
parents:
diff changeset
   817
// ---------------------------------------------------------
hgs
parents:
diff changeset
   818
//
hgs
parents:
diff changeset
   819
EXPORT_C CExtJpegEncoder* CExtJpegEncoder::FileNewL( 
hgs
parents:
diff changeset
   820
                                            RFs& aFs, 
hgs
parents:
diff changeset
   821
                                            const TDesC& aDestinationFilename, 
hgs
parents:
diff changeset
   822
                                            const TOptions aOptions, 
hgs
parents:
diff changeset
   823
                                            const TUid aImageType, 
hgs
parents:
diff changeset
   824
                                            const TUid aImageSubType, 
hgs
parents:
diff changeset
   825
                                            const TUid aEncoderUid )
hgs
parents:
diff changeset
   826
    {
hgs
parents:
diff changeset
   827
    CExtJpegEncoder* enc = reinterpret_cast<CExtJpegEncoder*>( 
hgs
parents:
diff changeset
   828
                                CImageEncoder::FileNewL( aFs, aDestinationFilename, 
hgs
parents:
diff changeset
   829
                                aOptions, aImageType, aImageSubType, aEncoderUid ) );
hgs
parents:
diff changeset
   830
    CleanupStack::PushL( enc );
hgs
parents:
diff changeset
   831
    if ( enc->CapabilitiesL() < ECapNone )
hgs
parents:
diff changeset
   832
        {
hgs
parents:
diff changeset
   833
        User::Leave( KErrNotFound );
hgs
parents:
diff changeset
   834
        }
hgs
parents:
diff changeset
   835
    CleanupStack::Pop();
hgs
parents:
diff changeset
   836
    return enc;
hgs
parents:
diff changeset
   837
    }
hgs
parents:
diff changeset
   838
hgs
parents:
diff changeset
   839
// ---------------------------------------------------------
hgs
parents:
diff changeset
   840
// CExtJpegEncoder* CExtJpegEncoder::DataNewL
hgs
parents:
diff changeset
   841
// Creates, initializes and returns a pointer to an object of 
hgs
parents:
diff changeset
   842
// class CExtJpegEncoder
hgs
parents:
diff changeset
   843
// ---------------------------------------------------------
hgs
parents:
diff changeset
   844
//
hgs
parents:
diff changeset
   845
EXPORT_C CExtJpegEncoder* CExtJpegEncoder::DataNewL( 
hgs
parents:
diff changeset
   846
                                            HBufC8*& aDestinationData, 
hgs
parents:
diff changeset
   847
                                            const TDesC8& aMIMEType, 
hgs
parents:
diff changeset
   848
                                            const TOptions aOptions )
hgs
parents:
diff changeset
   849
    {
hgs
parents:
diff changeset
   850
    CExtJpegEncoder* enc = reinterpret_cast<CExtJpegEncoder*>( 
hgs
parents:
diff changeset
   851
                                CImageEncoder::DataNewL( aDestinationData, 
hgs
parents:
diff changeset
   852
                                aMIMEType, aOptions ) );
hgs
parents:
diff changeset
   853
    CleanupStack::PushL( enc );
hgs
parents:
diff changeset
   854
    if ( enc->CapabilitiesL() < ECapNone )
hgs
parents:
diff changeset
   855
        {
hgs
parents:
diff changeset
   856
        User::Leave( KErrNotFound );
hgs
parents:
diff changeset
   857
        }
hgs
parents:
diff changeset
   858
    CleanupStack::Pop();
hgs
parents:
diff changeset
   859
    return enc;
hgs
parents:
diff changeset
   860
    }
hgs
parents:
diff changeset
   861
hgs
parents:
diff changeset
   862
// ---------------------------------------------------------
hgs
parents:
diff changeset
   863
// CExtJpegEncoder* CExtJpegEncoder::DataNewL
hgs
parents:
diff changeset
   864
// Creates, initializes and returns a pointer to an object of 
hgs
parents:
diff changeset
   865
// class CExtJpegEncoder
hgs
parents:
diff changeset
   866
// ---------------------------------------------------------
hgs
parents:
diff changeset
   867
//
hgs
parents:
diff changeset
   868
EXPORT_C CExtJpegEncoder* CExtJpegEncoder::DataNewL( 
hgs
parents:
diff changeset
   869
                                            HBufC8*& aDestinationData, 
hgs
parents:
diff changeset
   870
                                            const TOptions aOptions, 
hgs
parents:
diff changeset
   871
                                            const TUid aImageType, 
hgs
parents:
diff changeset
   872
                                            const TUid aImageSubType, 
hgs
parents:
diff changeset
   873
                                            const TUid aEncoderUid )
hgs
parents:
diff changeset
   874
    {
hgs
parents:
diff changeset
   875
    CExtJpegEncoder* enc = reinterpret_cast<CExtJpegEncoder*>( 
hgs
parents:
diff changeset
   876
                                CImageEncoder::DataNewL( aDestinationData, 
hgs
parents:
diff changeset
   877
                                aOptions, aImageType, aImageSubType, aEncoderUid ) );
hgs
parents:
diff changeset
   878
    CleanupStack::PushL( enc );
hgs
parents:
diff changeset
   879
    if ( enc->CapabilitiesL() < ECapNone )
hgs
parents:
diff changeset
   880
        {
hgs
parents:
diff changeset
   881
        User::Leave( KErrNotFound );
hgs
parents:
diff changeset
   882
        }
hgs
parents:
diff changeset
   883
    CleanupStack::Pop();
hgs
parents:
diff changeset
   884
    return enc;
hgs
parents:
diff changeset
   885
    }
hgs
parents:
diff changeset
   886
hgs
parents:
diff changeset
   887
// ---------------------------------------------------------
hgs
parents:
diff changeset
   888
// CExtJpegEncoder* CExtJpegEncoder::DataNewL
hgs
parents:
diff changeset
   889
// Creates, initializes and returns a pointer to an object of 
hgs
parents:
diff changeset
   890
// class CExtJpegEncoder
hgs
parents:
diff changeset
   891
// ---------------------------------------------------------
hgs
parents:
diff changeset
   892
//
hgs
parents:
diff changeset
   893
EXPORT_C CExtJpegEncoder* CExtJpegEncoder::DataNewL( 
hgs
parents:
diff changeset
   894
                                            const CVisualFrame* aDestinationData, 
hgs
parents:
diff changeset
   895
                                            const TDesC8& aMIMEType, 
hgs
parents:
diff changeset
   896
                                            const TOptions aOptions )
hgs
parents:
diff changeset
   897
    {
hgs
parents:
diff changeset
   898
    HBufC8* tmp = NULL;
hgs
parents:
diff changeset
   899
    CExtJpegEncoder* enc = reinterpret_cast<CExtJpegEncoder*>( 
hgs
parents:
diff changeset
   900
                                CImageEncoder::DataNewL( tmp, 
hgs
parents:
diff changeset
   901
                                aMIMEType, aOptions ) );
hgs
parents:
diff changeset
   902
    CleanupStack::PushL( enc );
hgs
parents:
diff changeset
   903
    if ( enc->CapabilitiesL() < ECapNone )
hgs
parents:
diff changeset
   904
        {
hgs
parents:
diff changeset
   905
        User::Leave( KErrNotFound );
hgs
parents:
diff changeset
   906
        }
hgs
parents:
diff changeset
   907
    enc->CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
   908
    enc->CustomSyncL( EDestVisualFrame );
hgs
parents:
diff changeset
   909
    enc->CustomSyncL( reinterpret_cast<TInt>( aDestinationData ) );
hgs
parents:
diff changeset
   910
    enc->CustomSyncL( EEnd );
hgs
parents:
diff changeset
   911
    CleanupStack::Pop();
hgs
parents:
diff changeset
   912
    return enc;
hgs
parents:
diff changeset
   913
    }
hgs
parents:
diff changeset
   914
hgs
parents:
diff changeset
   915
// ---------------------------------------------------------
hgs
parents:
diff changeset
   916
// CExtJpegEncoder* CExtJpegEncoder::DataNewL
hgs
parents:
diff changeset
   917
// Creates, initializes and returns a pointer to an object of 
hgs
parents:
diff changeset
   918
// class CExtJpegEncoder
hgs
parents:
diff changeset
   919
// ---------------------------------------------------------
hgs
parents:
diff changeset
   920
//
hgs
parents:
diff changeset
   921
EXPORT_C CExtJpegEncoder* CExtJpegEncoder::DataNewL( 
hgs
parents:
diff changeset
   922
                                            const CVisualFrame* aDestinationData, 
hgs
parents:
diff changeset
   923
                                            const TOptions aOptions, 
hgs
parents:
diff changeset
   924
                                            const TUid aImageType, 
hgs
parents:
diff changeset
   925
                                            const TUid aImageSubType, 
hgs
parents:
diff changeset
   926
                                            const TUid aEncoderUid )
hgs
parents:
diff changeset
   927
    {
hgs
parents:
diff changeset
   928
    HBufC8* tmp = NULL;
hgs
parents:
diff changeset
   929
    CExtJpegEncoder* enc = reinterpret_cast<CExtJpegEncoder*>( 
hgs
parents:
diff changeset
   930
                            CImageEncoder::DataNewL( tmp, aOptions, 
hgs
parents:
diff changeset
   931
                            aImageType, aImageSubType, aEncoderUid ) );
hgs
parents:
diff changeset
   932
    CleanupStack::PushL( enc );
hgs
parents:
diff changeset
   933
    if ( enc->CapabilitiesL() < ECapNone )
hgs
parents:
diff changeset
   934
        {
hgs
parents:
diff changeset
   935
        User::Leave( KErrNotFound );
hgs
parents:
diff changeset
   936
        }
hgs
parents:
diff changeset
   937
    enc->CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
   938
    enc->CustomSyncL( EDestVisualFrame );
hgs
parents:
diff changeset
   939
    enc->CustomSyncL( reinterpret_cast<TInt>( aDestinationData ) );
hgs
parents:
diff changeset
   940
    enc->CustomSyncL( EEnd );
hgs
parents:
diff changeset
   941
    CleanupStack::Pop();
hgs
parents:
diff changeset
   942
    return enc;
hgs
parents:
diff changeset
   943
    }
hgs
parents:
diff changeset
   944
hgs
parents:
diff changeset
   945
// ---------------------------------------------------------
hgs
parents:
diff changeset
   946
// CExtJpegEncoder::~CExtJpegEncoder
hgs
parents:
diff changeset
   947
// Destructor.
hgs
parents:
diff changeset
   948
// ---------------------------------------------------------
hgs
parents:
diff changeset
   949
//
hgs
parents:
diff changeset
   950
EXPORT_C CExtJpegEncoder::~CExtJpegEncoder()
hgs
parents:
diff changeset
   951
    {
hgs
parents:
diff changeset
   952
    }
hgs
parents:
diff changeset
   953
hgs
parents:
diff changeset
   954
// ---------------------------------------------------------
hgs
parents:
diff changeset
   955
// CExtJpegEncoder::SetStreamingL
hgs
parents:
diff changeset
   956
// ---------------------------------------------------------
hgs
parents:
diff changeset
   957
//
hgs
parents:
diff changeset
   958
EXPORT_C void CExtJpegEncoder::SetStreamingL( TSize& aMacroBlockSize, 
hgs
parents:
diff changeset
   959
                                              const CFrameImageData* aFrameImageData )
hgs
parents:
diff changeset
   960
    {
hgs
parents:
diff changeset
   961
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
   962
    CustomSyncL( ECapStreaming );
hgs
parents:
diff changeset
   963
    CustomSyncL( reinterpret_cast<TInt>( &aMacroBlockSize ) );
hgs
parents:
diff changeset
   964
    CustomSyncL( reinterpret_cast<TInt>( aFrameImageData ) );
hgs
parents:
diff changeset
   965
    CustomSyncL( EEnd );
hgs
parents:
diff changeset
   966
    }
hgs
parents:
diff changeset
   967
hgs
parents:
diff changeset
   968
// ---------------------------------------------------------
hgs
parents:
diff changeset
   969
// CExtJpegEncoder::SetImageReplaceL
hgs
parents:
diff changeset
   970
// ---------------------------------------------------------
hgs
parents:
diff changeset
   971
//
hgs
parents:
diff changeset
   972
EXPORT_C void CExtJpegEncoder::SetImageReplaceL( const CVisualFrame* aReplaceImage, 
hgs
parents:
diff changeset
   973
                                                 TPoint aReplacePoint )
hgs
parents:
diff changeset
   974
    {
hgs
parents:
diff changeset
   975
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
   976
    CustomSyncL( ECapImageReplacing );
hgs
parents:
diff changeset
   977
    CustomSyncL( reinterpret_cast<TInt>( aReplaceImage ) );
hgs
parents:
diff changeset
   978
    CustomSyncL( reinterpret_cast<TInt>( &aReplacePoint ) );
hgs
parents:
diff changeset
   979
    CustomSyncL( EEnd );
hgs
parents:
diff changeset
   980
    }
hgs
parents:
diff changeset
   981
hgs
parents:
diff changeset
   982
// ---------------------------------------------------------
hgs
parents:
diff changeset
   983
// CExtJpegEncoder::SetBitmapReplaceL
hgs
parents:
diff changeset
   984
// ---------------------------------------------------------
hgs
parents:
diff changeset
   985
//
hgs
parents:
diff changeset
   986
EXPORT_C void CExtJpegEncoder::SetBitmapReplaceL( const CFbsBitmap& aReplaceBitmap, 
hgs
parents:
diff changeset
   987
                                                  TPoint aReplacePoint )
hgs
parents:
diff changeset
   988
    {
hgs
parents:
diff changeset
   989
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
   990
    CustomSyncL( ECapBitmapReplacing );
hgs
parents:
diff changeset
   991
    CustomSyncL( reinterpret_cast<TInt>( &aReplaceBitmap ) );
hgs
parents:
diff changeset
   992
    CustomSyncL( reinterpret_cast<TInt>( &aReplacePoint ) );
hgs
parents:
diff changeset
   993
    CustomSyncL( EEnd );
hgs
parents:
diff changeset
   994
    }
hgs
parents:
diff changeset
   995
hgs
parents:
diff changeset
   996
// ---------------------------------------------------------
hgs
parents:
diff changeset
   997
// CExtJpegEncoder::SetBitmapOverlayL
hgs
parents:
diff changeset
   998
// ---------------------------------------------------------
hgs
parents:
diff changeset
   999
//
hgs
parents:
diff changeset
  1000
EXPORT_C void CExtJpegEncoder::SetBitmapOverlayL( const CFbsBitmap& aOverlayBitmap, 
hgs
parents:
diff changeset
  1001
                                                  TUint aAlphaValue, TPoint aOverlayPoint )
hgs
parents:
diff changeset
  1002
    {
hgs
parents:
diff changeset
  1003
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
  1004
    CustomSyncL( ECapBitmapOverlay );
hgs
parents:
diff changeset
  1005
    CustomSyncL( reinterpret_cast<TInt>( &aOverlayBitmap ) );
hgs
parents:
diff changeset
  1006
    CustomSyncL( aAlphaValue );
hgs
parents:
diff changeset
  1007
    CustomSyncL( reinterpret_cast<TInt>( &aOverlayPoint ) );
hgs
parents:
diff changeset
  1008
    CustomSyncL( EEnd );
hgs
parents:
diff changeset
  1009
    }
hgs
parents:
diff changeset
  1010
hgs
parents:
diff changeset
  1011
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1012
// CExtJpegEncoder::SetLosslessRotationL
hgs
parents:
diff changeset
  1013
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1014
//
hgs
parents:
diff changeset
  1015
EXPORT_C void CExtJpegEncoder::SetLosslessRotationL( TInt aDegree )
hgs
parents:
diff changeset
  1016
    {
hgs
parents:
diff changeset
  1017
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
  1018
    CustomSyncL( ECapLosslessRotation );
hgs
parents:
diff changeset
  1019
    CustomSyncL( aDegree );
hgs
parents:
diff changeset
  1020
    CustomSyncL( EEnd );
hgs
parents:
diff changeset
  1021
    }
hgs
parents:
diff changeset
  1022
hgs
parents:
diff changeset
  1023
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1024
// CExtJpegEncoder::SetLosslessFlippingL
hgs
parents:
diff changeset
  1025
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1026
//
hgs
parents:
diff changeset
  1027
EXPORT_C void CExtJpegEncoder::SetLosslessFlippingL()
hgs
parents:
diff changeset
  1028
    {
hgs
parents:
diff changeset
  1029
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
  1030
    CustomSyncL( ECapLosslessFlipping );
hgs
parents:
diff changeset
  1031
    CustomSyncL( EEnd );
hgs
parents:
diff changeset
  1032
    }
hgs
parents:
diff changeset
  1033
hgs
parents:
diff changeset
  1034
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1035
// CExtJpegEncoder::SetLosslessMirroringL
hgs
parents:
diff changeset
  1036
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1037
//
hgs
parents:
diff changeset
  1038
EXPORT_C void CExtJpegEncoder::SetLosslessMirroringL()
hgs
parents:
diff changeset
  1039
    {
hgs
parents:
diff changeset
  1040
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
  1041
    CustomSyncL( ECapLosslessMirroring );
hgs
parents:
diff changeset
  1042
    CustomSyncL( EEnd );
hgs
parents:
diff changeset
  1043
    }
hgs
parents:
diff changeset
  1044
hgs
parents:
diff changeset
  1045
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1046
// CExtJpegEncoder::SetDctEncodingL
hgs
parents:
diff changeset
  1047
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1048
//
hgs
parents:
diff changeset
  1049
EXPORT_C void CExtJpegEncoder::SetDctEncodingL()
hgs
parents:
diff changeset
  1050
    {
hgs
parents:
diff changeset
  1051
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
  1052
    CustomSyncL( ECapDctEncoding );
hgs
parents:
diff changeset
  1053
    CustomSyncL( EEnd );
hgs
parents:
diff changeset
  1054
    }
hgs
parents:
diff changeset
  1055
    
hgs
parents:
diff changeset
  1056
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1057
// CExtJpegEncoder::ProvideNewDestDataL
hgs
parents:
diff changeset
  1058
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1059
//
hgs
parents:
diff changeset
  1060
EXPORT_C void CExtJpegEncoder::ProvideNewDestDataL( const CVisualFrame* aDestinationData )
hgs
parents:
diff changeset
  1061
    {
hgs
parents:
diff changeset
  1062
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
  1063
    CustomSyncL( ENewDestData );
hgs
parents:
diff changeset
  1064
    CustomSyncL( reinterpret_cast<TInt>( aDestinationData ) );
hgs
parents:
diff changeset
  1065
    CustomSyncL( EEnd );
hgs
parents:
diff changeset
  1066
    }
hgs
parents:
diff changeset
  1067
hgs
parents:
diff changeset
  1068
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1069
// CExtJpegEncoder::ConvertL
hgs
parents:
diff changeset
  1070
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1071
//
hgs
parents:
diff changeset
  1072
EXPORT_C void CExtJpegEncoder::ConvertL( 
hgs
parents:
diff changeset
  1073
                TRequestStatus* aRequestStatus, 
hgs
parents:
diff changeset
  1074
                const CVisualFrame* aSourceFrame, 
hgs
parents:
diff changeset
  1075
                TInt& aNoOfEncodedMBlocks,
hgs
parents:
diff changeset
  1076
                const CFrameImageData* aFrameImageData )
hgs
parents:
diff changeset
  1077
    {
hgs
parents:
diff changeset
  1078
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
  1079
    CustomSyncL( EConvert );
hgs
parents:
diff changeset
  1080
    CustomSyncL( reinterpret_cast<TInt>( aSourceFrame ) );
hgs
parents:
diff changeset
  1081
    CustomSyncL( reinterpret_cast<TInt>( &aNoOfEncodedMBlocks ) );
hgs
parents:
diff changeset
  1082
    CustomSyncL( reinterpret_cast<TInt>( aFrameImageData ) );
hgs
parents:
diff changeset
  1083
    CustomSyncL( EReadyForAsync );
hgs
parents:
diff changeset
  1084
    CustomAsync( aRequestStatus, 0 );
hgs
parents:
diff changeset
  1085
    }
hgs
parents:
diff changeset
  1086
hgs
parents:
diff changeset
  1087
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1088
// CExtJpegEncoder::ContinueConvertL
hgs
parents:
diff changeset
  1089
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1090
//
hgs
parents:
diff changeset
  1091
EXPORT_C void CExtJpegEncoder::ContinueConvertL( 
hgs
parents:
diff changeset
  1092
                TRequestStatus* aRequestStatus, 
hgs
parents:
diff changeset
  1093
                const CVisualFrame* aSourceFrame,
hgs
parents:
diff changeset
  1094
                TInt& aNoOfEncodedMBlocks )
hgs
parents:
diff changeset
  1095
    {
hgs
parents:
diff changeset
  1096
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
  1097
    CustomSyncL( EContinueConvert );
hgs
parents:
diff changeset
  1098
    CustomSyncL( reinterpret_cast<TInt>( aSourceFrame ) );
hgs
parents:
diff changeset
  1099
    CustomSyncL( reinterpret_cast<TInt>( &aNoOfEncodedMBlocks ) );
hgs
parents:
diff changeset
  1100
    CustomSyncL( EReadyForAsync );
hgs
parents:
diff changeset
  1101
    CustomAsync( aRequestStatus, 0 );
hgs
parents:
diff changeset
  1102
    }
hgs
parents:
diff changeset
  1103
hgs
parents:
diff changeset
  1104
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1105
// CExtJpegEncoder::SupportedFormatsL
hgs
parents:
diff changeset
  1106
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1107
//
hgs
parents:
diff changeset
  1108
EXPORT_C TInt CExtJpegEncoder::SupportedFormatsL()
hgs
parents:
diff changeset
  1109
    {
hgs
parents:
diff changeset
  1110
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
  1111
    CustomSyncL( ESupportedFormats );
hgs
parents:
diff changeset
  1112
    TInt retVal = KErrNotFound;
hgs
parents:
diff changeset
  1113
    CustomSyncL( reinterpret_cast<TInt>( &retVal ) );
hgs
parents:
diff changeset
  1114
    CustomSyncL( EEnd );
hgs
parents:
diff changeset
  1115
    return retVal;
hgs
parents:
diff changeset
  1116
    }
hgs
parents:
diff changeset
  1117
hgs
parents:
diff changeset
  1118
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1119
// CExtJpegEncoder::CapabilitiesL
hgs
parents:
diff changeset
  1120
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1121
//
hgs
parents:
diff changeset
  1122
EXPORT_C TInt CExtJpegEncoder::CapabilitiesL()
hgs
parents:
diff changeset
  1123
    {
hgs
parents:
diff changeset
  1124
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
  1125
    CustomSyncL( ECapabilities );
hgs
parents:
diff changeset
  1126
    TInt retVal = KErrNotFound;
hgs
parents:
diff changeset
  1127
    CustomSyncL( reinterpret_cast<TInt>( &retVal ) );
hgs
parents:
diff changeset
  1128
    CustomSyncL( EEnd );
hgs
parents:
diff changeset
  1129
    return retVal;
hgs
parents:
diff changeset
  1130
    }
hgs
parents:
diff changeset
  1131
hgs
parents:
diff changeset
  1132
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1133
// CExtJpegEncoder::CExtJpegEncoder
hgs
parents:
diff changeset
  1134
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1135
//
hgs
parents:
diff changeset
  1136
CExtJpegEncoder::CExtJpegEncoder() : CJPEGImageFrameEncoder()
hgs
parents:
diff changeset
  1137
    {
hgs
parents:
diff changeset
  1138
    }
hgs
parents:
diff changeset
  1139
hgs
parents:
diff changeset
  1140
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1141
// CExtJpegEncoder* CExtJpegEncoder::FileNewL
hgs
parents:
diff changeset
  1142
// Creates, initializes and returns a pointer to an object of 
hgs
parents:
diff changeset
  1143
// class CExtJpegEncoder
hgs
parents:
diff changeset
  1144
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1145
//
hgs
parents:
diff changeset
  1146
EXPORT_C CExtJpegEncoder* CExtJpegEncoder::FileNewL( 
hgs
parents:
diff changeset
  1147
                            const TEncoderType aEncoderType,
hgs
parents:
diff changeset
  1148
                            RFs& aFs, 
hgs
parents:
diff changeset
  1149
                            const TDesC& aDestinationFilename, 
hgs
parents:
diff changeset
  1150
                            const TOptions aOptions )
hgs
parents:
diff changeset
  1151
    {
hgs
parents:
diff changeset
  1152
    TInt versionMin = KMinSwVersion;
hgs
parents:
diff changeset
  1153
    TInt versionMax = KMaxSwVersion;
hgs
parents:
diff changeset
  1154
    if ( aEncoderType == EHwImplementation )
hgs
parents:
diff changeset
  1155
        {
hgs
parents:
diff changeset
  1156
        versionMin = KMinHwVersion;
hgs
parents:
diff changeset
  1157
        versionMax = KMaxHwVersion;
hgs
parents:
diff changeset
  1158
        }
hgs
parents:
diff changeset
  1159
    TUid uId = GetUidByVersionRangeL( versionMin, versionMax );
hgs
parents:
diff changeset
  1160
    if ( uId == KNullUid )
hgs
parents:
diff changeset
  1161
        {
hgs
parents:
diff changeset
  1162
        User::Leave( KErrNotFound );
hgs
parents:
diff changeset
  1163
        }
hgs
parents:
diff changeset
  1164
    return CExtJpegEncoder::FileNewL( aFs, aDestinationFilename, aOptions, 
hgs
parents:
diff changeset
  1165
                                      KImageTypeJPGUid, KNullUid, uId );
hgs
parents:
diff changeset
  1166
    }
hgs
parents:
diff changeset
  1167
hgs
parents:
diff changeset
  1168
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1169
// CExtJpegEncoder* CExtJpegEncoder::DataNewL
hgs
parents:
diff changeset
  1170
// Creates, initializes and returns a pointer to an object of 
hgs
parents:
diff changeset
  1171
// class CExtJpegEncoder
hgs
parents:
diff changeset
  1172
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1173
//
hgs
parents:
diff changeset
  1174
EXPORT_C CExtJpegEncoder* CExtJpegEncoder::DataNewL( 
hgs
parents:
diff changeset
  1175
                            const TEncoderType aEncoderType,
hgs
parents:
diff changeset
  1176
                            HBufC8*& aDestinationData, 
hgs
parents:
diff changeset
  1177
                            const TOptions aOptions )
hgs
parents:
diff changeset
  1178
    {
hgs
parents:
diff changeset
  1179
    TInt versionMin = KMinSwVersion;
hgs
parents:
diff changeset
  1180
    TInt versionMax = KMaxSwVersion;
hgs
parents:
diff changeset
  1181
    if ( aEncoderType == EHwImplementation )
hgs
parents:
diff changeset
  1182
        {
hgs
parents:
diff changeset
  1183
        versionMin = KMinHwVersion;
hgs
parents:
diff changeset
  1184
        versionMax = KMaxHwVersion;
hgs
parents:
diff changeset
  1185
        }
hgs
parents:
diff changeset
  1186
    TUid uId = GetUidByVersionRangeL( versionMin, versionMax );
hgs
parents:
diff changeset
  1187
    if ( uId == KNullUid )
hgs
parents:
diff changeset
  1188
        {
hgs
parents:
diff changeset
  1189
        User::Leave( KErrNotFound );
hgs
parents:
diff changeset
  1190
        }
hgs
parents:
diff changeset
  1191
    return CExtJpegEncoder::DataNewL( aDestinationData, aOptions, 
hgs
parents:
diff changeset
  1192
                                      KImageTypeJPGUid, KNullUid, uId );
hgs
parents:
diff changeset
  1193
hgs
parents:
diff changeset
  1194
    }
hgs
parents:
diff changeset
  1195
                                    
hgs
parents:
diff changeset
  1196
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1197
// CExtJpegEncoder* CExtJpegEncoder::DataNewL
hgs
parents:
diff changeset
  1198
// Creates, initializes and returns a pointer to an object of 
hgs
parents:
diff changeset
  1199
// class CExtJpegEncoder
hgs
parents:
diff changeset
  1200
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1201
//           
hgs
parents:
diff changeset
  1202
EXPORT_C CExtJpegEncoder* CExtJpegEncoder::DataNewL( 
hgs
parents:
diff changeset
  1203
                            const TEncoderType aEncoderType, 
hgs
parents:
diff changeset
  1204
                            const CVisualFrame* aDestinationData, 
hgs
parents:
diff changeset
  1205
                            const TOptions aOptions )
hgs
parents:
diff changeset
  1206
    {
hgs
parents:
diff changeset
  1207
    TInt versionMin = KMinSwVersion;
hgs
parents:
diff changeset
  1208
    TInt versionMax = KMaxSwVersion;
hgs
parents:
diff changeset
  1209
    if ( aEncoderType == EHwImplementation )
hgs
parents:
diff changeset
  1210
        {
hgs
parents:
diff changeset
  1211
        versionMin = KMinHwVersion;
hgs
parents:
diff changeset
  1212
        versionMax = KMaxHwVersion;
hgs
parents:
diff changeset
  1213
        }
hgs
parents:
diff changeset
  1214
    TUid uId = GetUidByVersionRangeL( versionMin, versionMax );
hgs
parents:
diff changeset
  1215
    if ( uId == KNullUid )
hgs
parents:
diff changeset
  1216
        {
hgs
parents:
diff changeset
  1217
        User::Leave( KErrNotFound );
hgs
parents:
diff changeset
  1218
        }
hgs
parents:
diff changeset
  1219
    return CExtJpegEncoder::DataNewL( aDestinationData, aOptions, 
hgs
parents:
diff changeset
  1220
                                      KImageTypeJPGUid, KNullUid, uId );
hgs
parents:
diff changeset
  1221
    }
hgs
parents:
diff changeset
  1222
    
hgs
parents:
diff changeset
  1223
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1224
// CExtJpegEncoder::GetDestinationDataSizeL
hgs
parents:
diff changeset
  1225
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1226
//
hgs
parents:
diff changeset
  1227
EXPORT_C TInt CExtJpegEncoder::GetDestinationDataSizeL()
hgs
parents:
diff changeset
  1228
    {
hgs
parents:
diff changeset
  1229
    CustomSyncL( KExtensionUID );
hgs
parents:
diff changeset
  1230
    CustomSyncL( EDestDataSize );
hgs
parents:
diff changeset
  1231
    TInt retVal = KErrNotFound;
hgs
parents:
diff changeset
  1232
    CustomSyncL( reinterpret_cast<TInt>( &retVal ) );
hgs
parents:
diff changeset
  1233
    CustomSyncL( EEnd );
hgs
parents:
diff changeset
  1234
    return retVal;
hgs
parents:
diff changeset
  1235
    }
hgs
parents:
diff changeset
  1236
hgs
parents:
diff changeset
  1237
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1238
// CExtJpegEncoder::GetUidByVersionRangeL
hgs
parents:
diff changeset
  1239
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1240
//
hgs
parents:
diff changeset
  1241
TUid CExtJpegEncoder::GetUidByVersionRangeL( TInt aMinVersion, TInt aMaxVersion )
hgs
parents:
diff changeset
  1242
    {
hgs
parents:
diff changeset
  1243
    TUid uId = KNullUid;
hgs
parents:
diff changeset
  1244
    TUid propertyUid = KUidSwCodec; 
hgs
parents:
diff changeset
  1245
    
hgs
parents:
diff changeset
  1246
    // based on the version decide what kind of codec to fetch
hgs
parents:
diff changeset
  1247
    if( ( aMinVersion == KMinSwVersion ) && ( aMaxVersion == KMaxSwVersion ) )
hgs
parents:
diff changeset
  1248
        {
hgs
parents:
diff changeset
  1249
        propertyUid = KUidSwCodec; 
hgs
parents:
diff changeset
  1250
        }
hgs
parents:
diff changeset
  1251
    else if( ( aMinVersion == KMinHwVersion ) && ( aMaxVersion == KMaxHwVersion ) )
hgs
parents:
diff changeset
  1252
        {
hgs
parents:
diff changeset
  1253
        propertyUid = KUidHwCodec; 
hgs
parents:
diff changeset
  1254
        }
hgs
parents:
diff changeset
  1255
        
hgs
parents:
diff changeset
  1256
    // property array to be verified
hgs
parents:
diff changeset
  1257
    const TUid properties[] = { propertyUid, KImageTypeJPGUid };
hgs
parents:
diff changeset
  1258
    
hgs
parents:
diff changeset
  1259
    RUidDataArray implArray;
hgs
parents:
diff changeset
  1260
    // Request existing plugins with the desired properties
hgs
parents:
diff changeset
  1261
    TRAPD( getIntErr, CImageEncoder::GetInterfaceImplementationsL( 
hgs
parents:
diff changeset
  1262
                                                properties, 
hgs
parents:
diff changeset
  1263
                                                2, 
hgs
parents:
diff changeset
  1264
                                                implArray ) ); 
hgs
parents:
diff changeset
  1265
    CleanupClosePushL( implArray );
hgs
parents:
diff changeset
  1266
    User::LeaveIfError( getIntErr );
hgs
parents:
diff changeset
  1267
    
hgs
parents:
diff changeset
  1268
    TInt count = implArray.Count();
hgs
parents:
diff changeset
  1269
    for( --count; uId == KNullUid && count >= 0; --count )
hgs
parents:
diff changeset
  1270
        {
hgs
parents:
diff changeset
  1271
        // Check all encoders and find the one having Jpeg mime type, 
hgs
parents:
diff changeset
  1272
        TUid tempUid = implArray[ count ];
hgs
parents:
diff changeset
  1273
        
hgs
parents:
diff changeset
  1274
        // Get the same encoder UID and find out more info for testing
hgs
parents:
diff changeset
  1275
        TUid uId2 = { KEncoderInterfaceUidValue };
hgs
parents:
diff changeset
  1276
        RImplInfoPtrArray implInfo;
hgs
parents:
diff changeset
  1277
        REComSession::ListImplementationsL( uId2, implInfo );
hgs
parents:
diff changeset
  1278
        TInt count2 = implInfo.Count();
hgs
parents:
diff changeset
  1279
        uId2 = tempUid;
hgs
parents:
diff changeset
  1280
        for ( --count2; uId == KNullUid && count2 >= 0; --count2 )
hgs
parents:
diff changeset
  1281
            {
hgs
parents:
diff changeset
  1282
            CImplementationInformation& implInfoCur = *implInfo[count2];
hgs
parents:
diff changeset
  1283
            if ( ( implInfoCur.ImplementationUid() == uId2 ) && 
hgs
parents:
diff changeset
  1284
                ( implInfoCur.OpaqueData().Find( KJpgMimeType ) != KErrNotFound ) ) 
hgs
parents:
diff changeset
  1285
                {
hgs
parents:
diff changeset
  1286
                uId = uId2; 
hgs
parents:
diff changeset
  1287
                }
hgs
parents:
diff changeset
  1288
			}
hgs
parents:
diff changeset
  1289
        implInfo.ResetAndDestroy();
hgs
parents:
diff changeset
  1290
        } // for - count
hgs
parents:
diff changeset
  1291
        
hgs
parents:
diff changeset
  1292
    CleanupStack::PopAndDestroy( &implArray );   
hgs
parents:
diff changeset
  1293
    return uId;
hgs
parents:
diff changeset
  1294
    }
hgs
parents:
diff changeset
  1295
hgs
parents:
diff changeset
  1296
// End of File