/*
* Copyright (c) 2003, 2004 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description: Exif v2.2 file format modifier API implementation
*
*/
// INCLUDE FILES
#include "ExifModifyImpl.h"
#include "ExifReadImpl.h"
#include "ExifTagImpl.h"
#include "ExifCore.h"
#include "ExifCommon.h"
// ============================ CLASS CExifModify ==============================
// ============================ MEMBER FUNCTIONS ===============================
// -----------------------------------------------------------------------------
// CExifModify::NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
EXPORT_C CExifModify* CExifModify::NewL(
const TDesC8& aExifData,
CExifModify::TOperationMode aOperationMode )
{
return CExifModifyImpl::NewL( aExifData, STATIC_CAST( TBool,
aOperationMode ), CExifModify::ENoOptions );
}
EXPORT_C CExifModify* CExifModify::NewL(
const TDesC8& aExifData,
CExifModify::TOperationMode aOperationMode,
TUint aExifModifyOption )
{
return CExifModifyImpl::NewL( aExifData, STATIC_CAST( TBool,
aOperationMode ), aExifModifyOption );
}
// -----------------------------------------------------------------------------
// CExifModify::NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
EXPORT_C CExifModify* CExifModify::NewL()
{
return CExifModifyImpl::NewL();
}
// Destructor
CExifModify::~CExifModify()
{
}
// ============================ CLASS CExifModifyImpl ==========================
// ============================ MEMBER FUNCTIONS ===============================
// -----------------------------------------------------------------------------
// CExifModifyImpl::CExifModifyImpl
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CExifModifyImpl::CExifModifyImpl()
{
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::ConstructL
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::ConstructL( const TDesC8& aInData, TBool aCreate, TUint aExifModifyOption )
{
iExifModifyOption = aExifModifyOption;
TUint readOption = CExifRead::ENoOptions;
if ( aExifModifyOption & CExifModify::ENoJpegParsing )
{
readOption |= CExifRead::EFastJpegParsing;
}
if ( aExifModifyOption & CExifModify::ENoTagChecking )
{
readOption |= CExifRead::ENoTagChecking;
}
iExifRead = CExifReadImpl::NewL( aInData, aCreate, readOption );
iExifCore = iExifRead->iExifCore;
if ( !aCreate )
{
if ( iExifCore->IfdExists( EIfdGps ) )
{
iExifCore->SetTagDataL( KIdGpsVersion, KGpsVersion );
}
}
iExifCore->SetTagDataL( KIdExifVersion, KExifVersion );
iExifCore->SetTagDataL( KIdFlashPixVersion, KFlashPixVersion );
// Keep some data from the beginning, middle and end for cross-checking.
iCrossCheckLength = aInData.Length();
iCrossCheckBegin = TExifCommon::Uint32L(
CONST_CAST( TUint8*, aInData.Ptr() ) );
iCrossCheckMiddle = TExifCommon::Uint32L(
CONST_CAST( TUint8*, aInData.Ptr() ) + aInData.Length() / 2 );
iCrossCheckEnd = TExifCommon::Uint32L(
CONST_CAST( TUint8*, aInData.Ptr() ) + aInData.Length() - 5 );
User::LeaveIfError( iExifCore->Finalize() );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::ConstructL
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::ConstructL()
{
iExifModifyOption = CExifModify::ENoOptions;
iExifRead = CExifReadImpl::NewL();
iExifCore = iExifRead->iExifCore;
iExifCore->SetTagDataL( KIdExifVersion, KExifVersion );
iExifCore->SetTagDataL( KIdFlashPixVersion, KFlashPixVersion );
// No cross-checking since there is no input data.
iCrossCheckLength = 0;
User::LeaveIfError( iExifCore->Finalize() );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CExifModifyImpl* CExifModifyImpl::NewL( const TDesC8& aExifData, TBool aCreate, TUint aExifModifyOption )
{
CExifModifyImpl* self = new( ELeave ) CExifModifyImpl();
CleanupStack::PushL( self );
self->ConstructL( aExifData, aCreate, aExifModifyOption );
CleanupStack::Pop();
return self;
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CExifModifyImpl* CExifModifyImpl::NewL()
{
CExifModifyImpl* self = new( ELeave ) CExifModifyImpl();
CleanupStack::PushL( self );
self->ConstructL();
CleanupStack::Pop();
return self;
}
// Destructor
CExifModifyImpl::~CExifModifyImpl()
{
if ( iExifRead )
{
delete iExifRead;
}
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::Reader
// Returns a constant pointer to a CExifRead instance that can be used to
// parse the associated Exif image.
// -----------------------------------------------------------------------------
//
const CExifRead* CExifModifyImpl::Reader() const
{
return iExifRead;
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetTagL
// Inserts/Updates the given tag in the specified IFD structure of the Exif data
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetTagL(
TExifIfdType aIfdType,
TExifTagInfo aExifTagInfo,
const TDesC8& aTagData )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
// Check if ASCII string terminates with NULL character.
// If not add NULL.
HBufC8* buffer = NULL;
if ( ( aExifTagInfo.iDataType == CExifTag::ETagAscii ) &&
( aTagData.Ptr()[aTagData.Length() - 1] ) )
{
++aExifTagInfo.iDataCount;
buffer = HBufC8::NewL( aTagData.Length() + 1 );
buffer->Des().Copy( aTagData );
*( CONST_CAST( TUint8*, buffer->Des().Ptr() ) +
aTagData.Length() ) = NULL;
buffer->Des().SetLength( aTagData.Length() + 1 );
}
else
{
buffer = aTagData.AllocL();
}
CleanupStack::PushL( buffer );
CExifTagImpl* tag = NULL;
if ( iExifModifyOption & CExifModify::ENoTagChecking )
{
tag = CExifTagImpl::NewL( aExifTagInfo, buffer, EFalse );
}
else
{
tag = CExifTagImpl::NewL( aExifTagInfo, buffer, ETrue );
}
CleanupStack::Pop( buffer );
CleanupStack::PushL( tag );
switch ( tag->TagInfo().iId )
{
case KIdExifIfdPointer:
case KIdGpsIfdPointer:
case KIdIntOpIfdPointer:
case KIdJpegInterchangeFormat:
case KIdJpegInterchangeFormatLength:
case KIdExifVersion:
case KIdGpsVersion:
case KIdFlashPixVersion:
case KIdCompression:
User::Leave( KErrNotSupported );
default:
break;
}
if ( iExifModifyOption & CExifModify::ENoTagChecking )
{
iExifCore->InsertTagL( aIfdType, tag, EFalse );
}
else
{
iExifCore->InsertTagL( aIfdType, tag, ETrue );
}
CleanupStack::Pop( tag );
if ( aIfdType == EIfdGps )
{
iExifCore->SetTagDataL( KIdGpsVersion, KGpsVersion );
}
TInt error = iExifCore->Finalize();
if ( error )
{
iExifCore->DeleteTag( aIfdType, aExifTagInfo.iId );
User::Leave( error );
}
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::DeleteTag
// Removes the tag with the given tag ID from the specified IFD structure in
// the Exif data.
// -----------------------------------------------------------------------------
//
TInt CExifModifyImpl::DeleteTag( TExifIfdType aIfdType, TUint16 aTagId )
{
if ( !iExifCore )
{
return KErrGeneral;
}
switch ( aTagId )
{
case KIdExifIfdPointer:
case KIdGpsIfdPointer:
case KIdIntOpIfdPointer:
case KIdJpegInterchangeFormat:
case KIdJpegInterchangeFormatLength:
case KIdExifVersion:
case KIdGpsVersion:
case KIdFlashPixVersion:
case KIdCompression:
return KErrNotSupported;
default:
if ( !TExifCommon::IsValidTagId( aTagId ) )
{
return KErrNotSupported;
}
}
TInt error = iExifCore->DeleteTag( aIfdType, aTagId );
if ( error )
{
return error;
}
return iExifCore->Finalize();
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::DeleteIfd
// Removes the specified IFD structure and all its tags from the Exif data.
// -----------------------------------------------------------------------------
//
TInt CExifModifyImpl::DeleteIfd( TExifIfdType aIfdType )
{
if ( !iExifCore )
{
return KErrGeneral;
}
if ( ( aIfdType == EIfd0 ) || ( aIfdType == EIfdExif ) )
{
return KErrArgument;
}
TInt error = iExifCore->DeleteIfd( aIfdType );
if ( error )
{
return error;
}
return iExifCore->Finalize();
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetThumbnailL
// Inserts/Updates the given thumbnail Jpeg image data into the 1st IFD
// structure in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetThumbnailL( const TDesC8& aThumbnailData )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
TDesC8* data = aThumbnailData.AllocL();
CleanupStack::PushL( data );
iExifCore->InsertThumbnailL( data );
CleanupStack::Pop( data );
TInt error = iExifCore->Finalize();
if ( error )
{
iExifCore->RemoveThumbnail();
User::Leave( error );
}
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::RemoveThumbnail
// Removes the thumbnail Jpeg image data from the 1st IFD structure in the Exif
// data.
// -----------------------------------------------------------------------------
//
TInt CExifModifyImpl::RemoveThumbnail()
{
if ( !iExifCore )
{
return KErrGeneral;
}
TInt error = iExifCore->RemoveThumbnail();
if ( error )
{
return error;
}
return iExifCore->Finalize();
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::WriteDataL
// Flushes the Exif data into the given data buffer, and releases the internal
// structures.
// -----------------------------------------------------------------------------
//
HBufC8* CExifModifyImpl::WriteDataL( const TDesC8& aInData )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
// Input Jpeg or Exif data is provided at instantiation (or not)
TBool inputProvidedEarly = iCrossCheckLength;
// Input Jpeg or Exif data is provided for this function (or not)
TBool inputProvidedLate = aInData.Length();
if ( inputProvidedEarly )
{
if ( inputProvidedLate )
{
// Cross-check. Check if content of aInData is identical with
// the descriptor provided during instantiation.
if ( aInData.Length() != iCrossCheckLength )
{
User::Leave(KErrArgument);
}
TUint32 crossCheck = TExifCommon::Uint32L(
CONST_CAST( TUint8*, aInData.Ptr() ) );
if ( crossCheck != iCrossCheckBegin )
{
User::Leave(KErrArgument);
}
crossCheck = TExifCommon::Uint32L(
CONST_CAST( TUint8*, aInData.Ptr() + aInData.Length() / 2 ) );
if ( crossCheck != iCrossCheckMiddle )
{
User::Leave(KErrArgument);
}
crossCheck = TExifCommon::Uint32L(
CONST_CAST( TUint8*, aInData.Ptr() + aInData.Length() - 5 ) );
if ( crossCheck != iCrossCheckEnd )
{
User::Leave(KErrArgument);
}
}
}
else
{
if ( inputProvidedLate )
{
iExifRead->ParseJpegDataL( aInData );
}
}
User::LeaveIfError( iExifCore->Finalize() );
if ( !iExifCore->IsValid() )
{
User::Leave( KErrNotReady );
}
TUint totalSize = 0;
if ( inputProvidedLate )
{
iExifCore->SetDataStartPtr( CONST_CAST( TUint8*, aInData.Ptr() ) );
totalSize = iExifCore->TotalSize();
}
else
{
totalSize = iExifCore->App1Size() + 2;
}
// Allocation amount is even for 2-byte alignment
HBufC8* exifData = HBufC8::NewLC( totalSize + ( totalSize % 2 ) );
exifData->Des().SetLength( totalSize + ( totalSize % 2 ) );
TUint pos = 0;
if ( inputProvidedLate )
{
iExifCore->WriteJpegHeaderL( exifData, pos );
iExifCore->WriteExifDataL( exifData, pos );
TPtr8 ptr( CONST_CAST( TUint8*, exifData->Ptr() ) + pos,
iExifCore->JpegSize() );
User::LeaveIfError( iExifCore->GetJpegData( ptr ) );
}
else
{
iExifCore->WriteExifDataL( exifData, pos );
}
exifData->Des().SetLength( totalSize );
CleanupStack::Pop();
return exifData;
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetImageDescriptionL
// Inserts/Updates given ImageDescription in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetImageDescriptionL( const TDesC8& aImageDescription )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdImageDescription, aImageDescription );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetMakeL
// Inserts/Updates given Make in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetMakeL( const TDesC8& aMake )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdMake, aMake );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetModelL
// Inserts/Updates given Model in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetModelL( const TDesC8& aModel )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdModel, aModel );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetOrientationL
// Inserts/Updates given Orientation in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetOrientationL( TUint16 aOrientation )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdOrientation, aOrientation );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetXResolutionL
// Inserts/Updates given X Resolution in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetXResolutionL(
TUint32 aXResolution1,
TUint32 aXResolution2 )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdXResolution, aXResolution1, aXResolution2 );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetYResolutionL
// Inserts/Updates given Y Resolution in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetYResolutionL(
TUint32 aYResolution1,
TUint32 aYResolution2 )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdYResolution, aYResolution1, aYResolution2 );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetResolutionUnitL
// Inserts/Updates given Resolution Unit in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetResolutionUnitL( TUint16 aResolutionUnit )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdResolutionUnit, aResolutionUnit );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetTransferFunctionL
// Inserts/Updates given Transfer Function in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetTransferFunctionL( const TDesC8& aTransferFunction )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdTransferFunction, aTransferFunction );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetDateTimeL
// Inserts/Updates given Date Time in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetDateTimeL( const TDesC8& aDateTime )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdDateTime, aDateTime );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetYCbCrPositioningL
// Inserts/Updates given YCbCr Positioning in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetYCbCrPositioningL( TUint16 aYCbCrPositioning )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdYCbCrPositioning, aYCbCrPositioning );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetSoftwareL
// Inserts/Updates given Software in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetSoftwareL( const TDesC8& aSoftware )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdSoftware, aSoftware );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetCopyrightL
// Inserts/Updates given Copyright in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetCopyrightL( const TDesC8& aCopyright )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdCopyright, aCopyright );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetExposureTimeL
// Inserts/Updates given Exposure Time in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetExposureTimeL(
TUint32 aExposureTime1,
TUint32 aExposureTime2 )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdExposureTime, aExposureTime1, aExposureTime2 );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetComponentsConfigurationL
// Inserts/Updates given Components Configuration in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetComponentsConfigurationL(
TUint8 aFirstComponent, TUint8 aSecondComponent,
TUint8 aThirdComponent, TUint8 aFourthComponent )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
TUint32 componentsConfiguration = ( aFourthComponent << 24 ) +
( aThirdComponent << 16 ) + ( aSecondComponent << 8 ) + aFirstComponent;
iExifCore->SetTagDataL( KIdComponentsConfiguration,
componentsConfiguration );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetFlashL
// Inserts/Updates given Flash in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetFlashL( TUint16 aFlash )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdFlash, aFlash );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetColorSpaceL
// Inserts/Updates given Color Space in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetColorSpaceL( TUint16 aColorSpace )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdColorSpace, aColorSpace );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetPixelXDimensionL
// Inserts/Updates given Pixel X Dimension in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetPixelXDimensionL( TUint32 aPixelXDimension )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdPixelXDimension, aPixelXDimension );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetPixelYDimensionL
// Inserts/Updates given Pixel Y Dimension in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetPixelYDimensionL( TUint32 aPixelYDimension )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdPixelYDimension, aPixelYDimension );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetExposureModeL
// Inserts/Updates given Exposure Mode in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetExposureModeL( TUint16 aExposureMode )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdExposureMode, aExposureMode );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetWhiteBalanceL
// Inserts/Updates given White Balance in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetWhiteBalanceL( TUint16 aWhiteBalance )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdWhiteBalance, aWhiteBalance );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetSceneCaptureTypeL
// Inserts/Updates given Scene Capture Type in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetSceneCaptureTypeL( TUint16 aSceneCaptureType )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdSceneCaptureType, aSceneCaptureType );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetExposureProgramL
// Inserts/Updates given Exposure Program in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetExposureProgramL( TUint16 aExposureProgram )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdExposureProgram, aExposureProgram );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetIsoSpeedRatingsL
// Inserts/Updates given Iso Speed Ratings in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetIsoSpeedRatingsL( const TDesC8& aIsoSpeedRatings )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdIsoSpeedRatings, aIsoSpeedRatings );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetDateTimeOriginalL
// Inserts/Updates given Date Time Original in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetDateTimeOriginalL( const TDesC8& aDateTimeOriginal )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdDateTimeOriginal, aDateTimeOriginal );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetDateTimeDigitizedL
// Inserts/Updates given Date Time Digitized in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetDateTimeDigitizedL( const TDesC8& aDateTimeDigitized )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdDateTimeDigitized, aDateTimeDigitized );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetApertureValueL
// Inserts/Updates given Aperture Value in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetApertureValueL(
TUint32 aApertureValue1,
TUint32 aApertureValue2 )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL(
KIdApertureValue, aApertureValue1, aApertureValue2 );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetExposureBiasValueL
// Inserts/Updates given Exposure Bias Value in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetExposureBiasValueL(
TInt32 aExposureBiasValue1,
TInt32 aExposureBiasValue2 )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdExposureBiasValue,
aExposureBiasValue1, aExposureBiasValue2 );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetMeteringModeL
// Inserts/Updates given Metering Mode in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetMeteringModeL( TUint16 aMeteringMode )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdMeteringMode, aMeteringMode );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetLightSourceL
// Inserts/Updates given Light Source in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetLightSourceL( TUint16 aLightSource )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdLightSource, aLightSource );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetMakerNoteL
// Inserts/Updates given Maker Note in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetMakerNoteL( const TDesC8& aMakerNote )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdMakerNote, aMakerNote );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetUserCommentL
// Inserts/Updates given User Comment in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetUserCommentL( const TDesC8& aUserComment )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdUserComment, aUserComment );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetRelatedSoundFileL
// Inserts/Updates given Related Sound File in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetRelatedSoundFileL( const TDesC8& aRelatedSoundFile )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdRelatedSoundFile, aRelatedSoundFile );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetFileSourceL
// Inserts/Updates given FileSource in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetFileSourceL(TInt8 aFileSource )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdFileSource, aFileSource );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetDigitalZoomRatioL
// Inserts/Updates given Digital Zoom Ratio in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetDigitalZoomRatioL(
TUint32 aDigitalZoomRatio1,
TUint32 aDigitalZoomRatio2 )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdDigitalZoomRatio,
aDigitalZoomRatio1, aDigitalZoomRatio2 );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetContrastL
// Inserts/Updates given Contrast in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetContrastL( TUint16 aContrast )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdContrast, aContrast );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetSaturationL
// Inserts/Updates given Saturation in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetSaturationL( TUint16 aSaturation )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdSaturation, aSaturation );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetSharpnessL
// Inserts/Updates given Sharpness in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetSharpnessL( TUint16 aSharpness )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdSharpness, aSharpness );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetThumbnailXResolutionL
// Inserts/Updates given Thumbnail X Resolution in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetThumbnailXResolutionL(
TUint32 aXResolution1,
TUint32 aXResolution2 )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetThumbnailTagDataL(KIdXResolution,
aXResolution1, aXResolution2 );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetThumbnailYResolutionL
// Inserts/Updates given Thumbnail Y Resolution in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetThumbnailYResolutionL(
TUint32 aYResolution1,
TUint32 aYResolution2 )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetThumbnailTagDataL(KIdYResolution,
aYResolution1, aYResolution2 );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetThumbnailResolutionUnitL
// Inserts/Updates given Thumbnail Resolution Unit in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetThumbnailResolutionUnitL( TUint16 aResolutionUnit )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetThumbnailTagDataL(KIdResolutionUnit, aResolutionUnit );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetShutterSpeedValueL
// Inserts/Updates given Shutter Speed Value in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetShutterSpeedValueL(
TInt32 aShutterSpeedValue1,
TInt32 aShutterSpeedValue2 )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL(KIdShutterSpeedValue,
aShutterSpeedValue1, aShutterSpeedValue2 );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetBrightnessValueL
// Inserts/Updates given Brightness Value in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetBrightnessValueL(
TInt32 aBrightnessValue1,
TInt32 aBrightnessValue2 )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL(KIdBrightnessValue,
aBrightnessValue1, aBrightnessValue2 );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetCustomRenderedL
// Inserts/Updates given Custom Rendered in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetCustomRenderedL( TUint16 aCustomRendered )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdCustomRendered, aCustomRendered );
}
// -----------------------------------------------------------------------------
// CExifModifyImpl::SetGainControlL
// Inserts/Updates given Gain Control in the Exif data.
// -----------------------------------------------------------------------------
//
void CExifModifyImpl::SetGainControlL( TUint16 aGainControl )
{
if ( !iExifCore )
{
User::Leave( KErrGeneral );
}
iExifCore->SetTagDataL( KIdGainControl, aGainControl );
}