#include <new>
#include <stdlib.h>
+#include <aul/aul.h>
#include <mime_type.h>
#include <FAppApp.h>
#include <FBaseByteBuffer.h>
#include "FCnt_ImageMetadataImpl.h"
#include "FCnt_VideoMetadataImpl.h"
-
using namespace std;
using namespace Tizen::App;
using namespace Tizen::Base;
namespace Tizen { namespace Content
{
+
// Types of content, format supported and default values
static const int _IMAGE_BUFF_LENGTH = 100;
static const int _THUMBNAIL_IMAGE_WIDTH = 80;
static const int _THUMBNAIL_IMAGE_HEIGHT = 60;
static const int _MINUTES = 60;
static const int _SECONDS = 3600;
+static const double DEFAULT_COORDINATE = -200.0;
ImageMetadata*
_ContentManagerUtilImpl::GetImageMetaN(const String& contentPath, bool internal)
pMetadata->height = dim.height;
pMetadata->contentPath = contentPath;
+ String tizenPath(L"");
+ String changedPath(L"");
+ r = ChangeMediaFilePath(contentPath, tizenPath, changedPath);
+ SysTryReturn(NID_CNT, r == E_SUCCESS, null, r, "[%s] Failed to perform ChangeMediaFilePath.", GetErrorMessage(r));
+
if (imgType == IMG_FORMAT_JPG)
{
- unique_ptr<char[]> pFileName(_StringConverter::CopyToCharArrayN(contentPath));
+ unique_ptr<char[]> pFileName(_StringConverter::CopyToCharArrayN(tizenPath));
SysTryReturn(NID_CNT, pFileName != null, null, E_OUT_OF_MEMORY,
"[E_OUT_OF_MEMORY] The memory is insufficient.");
ExifEntry** pEntries = null;
const char* pData = null;
char buf[_IMAGE_BUFF_LENGTH] = {0, };
- char mmBuff[_IMAGE_BUFF_LENGTH] = {0, }; // to store minutes value of GPS data
- char ssBuff[_IMAGE_BUFF_LENGTH] = {0, }; // to store seconds value of GPS data
ExifContent* pExifcont[EXIF_IFD_COUNT];
- int index = 0;
char latitudeRef = 0; // to store latitude reference (quadrasphere designation 'N', 'S', 'W' or 'E')
char longitudeRef = 0; // to store longitude reference (quadrasphere designation 'N', 'S', 'W' or 'E')
unsigned int entryCount = 0;
+ bool isOrientation = false;
+ bool isLatitude = false;
+ bool isLongitude = false;
for (int i = 0; i < EXIF_IFD_COUNT; i++)
{
SysTryReturn(NID_CNT, pMetadata->pDateTime != null, null, E_OUT_OF_MEMORY,
"[E_OUT_OF_MEMORY] The memory is insufficient.");
}
- else if (tag == EXIF_TAG_ORIENTATION)
+ else if (tag == EXIF_TAG_ORIENTATION && !isOrientation)
{
//get the byte order(little endian or big endian) before extracting orientation type
byteOrder = exif_data_get_byte_order(pEntries[j]->parent->parent);
pMetadata->orientation = static_cast<ImageOrientationType>(exif_get_short(pEntries[j]->data, byteOrder));
+
+ isOrientation = true;
}
else if (tag == EXIF_TAG_SOFTWARE)
{
{
latitudeRef = buf[0]; // GPS Latitude reference value will be 'N'(NORTH) or 'S'(SOUTH)
}
- else if (tag == EXIF_TAG_GPS_LATITUDE)
+ else if (tag == EXIF_TAG_GPS_LATITUDE && !isLatitude)
{
String tempLatitude(buf);
- String delim(L",");
+ if (!tempLatitude.Contains(L","))
+ {
+ pMetadata->latitude = DEFAULT_COORDINATE;
+ isLatitude = true;
+ continue;
+ }
+
+ int firstComma = 0;
+ int lastComma = 0;
+
+ r = tempLatitude.IndexOf(',', 0, firstComma);
+ SysTryReturn(NID_CNT, !IsFailed(r), null, E_INVALID_ARG, "[%s] Failed to perform IndexOf operation.", GetErrorMessage(r));
+
+ r = tempLatitude.SetCharAt('/', firstComma);
+ SysTryReturn(NID_CNT, !IsFailed(r), null, E_INVALID_ARG, "[%s] Failed to perform SetCharAt operation.", GetErrorMessage(r));
+
+ r = tempLatitude.LastIndexOf(',', tempLatitude.GetLength() - 1, lastComma);
+ SysTryReturn(NID_CNT, !IsFailed(r), null, E_INVALID_ARG, "[%s] Failed to perform IndexOf operation.", GetErrorMessage(r));
+ r = tempLatitude.SetCharAt('/', lastComma);
+ SysTryReturn(NID_CNT, !IsFailed(r), null, E_INVALID_ARG, "[%s] Failed to perform SetCharAt operation.", GetErrorMessage(r));
+
+ String delim(L"/");
StringTokenizer strTok(tempLatitude, delim);
String token[3] = {L"", };
int count = 0;
- while (strTok.HasMoreTokens())
+ while (strTok.HasMoreTokens() && count < 3)
{
strTok.GetNextToken(token[count++]);
}
- double ddVal = _LocalizedNumParser::ToDouble(token[0], "C"); // degree value
+ double ddVal = _LocalizedNumParser::ToDouble(token[0], ""); // degree value
r = GetLastResult();
SysTryReturn(NID_CNT, !IsFailed(r), null, E_INVALID_ARG, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
- double mmVal = _LocalizedNumParser::ToDouble(token[1], "C"); // minutes value
+ double mmVal = _LocalizedNumParser::ToDouble(token[1], ""); // minutes value
r = GetLastResult();
SysTryReturn(NID_CNT, !IsFailed(r), null, E_INVALID_ARG, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
- double ssVal = _LocalizedNumParser::ToDouble(token[2], "C"); // seconds value
+ double ssVal = _LocalizedNumParser::ToDouble(token[2], ""); // seconds value
r = GetLastResult();
SysTryReturn(NID_CNT, !IsFailed(r), null, E_INVALID_ARG, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
{
pMetadata->latitude = (pMetadata->latitude * (double)(-1));
}
+ isLatitude = true;
}
else if (tag == EXIF_TAG_GPS_LONGITUDE_REF)
{
longitudeRef = buf[0]; // GPS Longitude reference value will be 'W'(WEST) or 'E'(EAST)
}
- else if (tag == EXIF_TAG_GPS_LONGITUDE)
+ else if (tag == EXIF_TAG_GPS_LONGITUDE && !isLongitude)
{
String tempLongitude(buf);
- String delim(L",");
+ if (!tempLongitude.Contains(L","))
+ {
+ pMetadata->longitude = DEFAULT_COORDINATE;
+ isLongitude = true;
+ continue;
+ }
+
+ int firstComma = 0;
+ int lastComma = 0;
+
+ r = tempLongitude.IndexOf(',', 0, firstComma);
+ SysTryReturn(NID_CNT, !IsFailed(r), null, E_INVALID_ARG, "[%s] Failed to perform IndexOf operation.", GetErrorMessage(r));
+ r = tempLongitude.SetCharAt('/', firstComma);
+ SysTryReturn(NID_CNT, !IsFailed(r), null, E_INVALID_ARG, "[%s] Failed to perform SetCharAt operation.", GetErrorMessage(r));
+
+ r = tempLongitude.LastIndexOf(',', tempLongitude.GetLength() - 1, lastComma);
+ SysTryReturn(NID_CNT, !IsFailed(r), null, E_INVALID_ARG, "[%s] Failed to perform IndexOf operation.", GetErrorMessage(r));
+
+ r = tempLongitude.SetCharAt('/', lastComma);
+ SysTryReturn(NID_CNT, !IsFailed(r), null, E_INVALID_ARG, "[%s] Failed to perform SetCharAt operation.", GetErrorMessage(r));
+
+ String delim(L"/");
StringTokenizer strTok(tempLongitude, delim);
String token[3] = {L"", };
int count = 0;
- while (strTok.HasMoreTokens())
+ while (strTok.HasMoreTokens() && count < 3)
{
strTok.GetNextToken(token[count++]);
}
- double ddVal = _LocalizedNumParser::ToDouble(token[0], "C"); // degree value
+ double ddVal = _LocalizedNumParser::ToDouble(token[0], ""); // degree value
r = GetLastResult();
SysTryReturn(NID_CNT, !IsFailed(r), null, r, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
- double mmVal = _LocalizedNumParser::ToDouble(token[1], "C"); // minutes value
+ double mmVal = _LocalizedNumParser::ToDouble(token[1], ""); // minutes value
r = GetLastResult();
SysTryReturn(NID_CNT, !IsFailed(r), null, r, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
- double ssVal = _LocalizedNumParser::ToDouble(token[2], "C"); // seconds value
+ double ssVal = _LocalizedNumParser::ToDouble(token[2], ""); // seconds value
r = GetLastResult();
SysTryReturn(NID_CNT, !IsFailed(r), null, r, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
{
pMetadata->longitude = (pMetadata->longitude * (double)(-1));
}
+ isLongitude = true;
}
else if (tag == EXIF_TAG_WHITE_BALANCE)
{
pMetadata->contentPath = contentPath;
+ String tizenPath(L"");
+ String changedPath(L"");
+ result r = ChangeMediaFilePath(contentPath, tizenPath, changedPath);
+ SysTryReturn(NID_CNT, r == E_SUCCESS, null, r, "[%s] Failed to perform ChangeMediaFilePath.", GetErrorMessage(r));
+
// Create the metadata extractor handle
metadata_extractor_h tempExtractor = NULL;
int retVal = metadata_extractor_create(&tempExtractor);
- result r = ErrorMapToRetVal(retVal);
+ r = ErrorMapToRetVal(retVal);
SysTryReturn(NID_CNT, retVal == METADATA_EXTRACTOR_ERROR_NONE, null, r,
"[%s] metadata_extractor_create failed.", GetErrorMessage(r));
"[E_OUT_OF_MEMORY] The memory is insufficient.");
// Set file path of content to extract the metadata
- unique_ptr<char[]> pFileName(_StringConverter::CopyToCharArrayN(contentPath));
+ unique_ptr<char[]> pFileName(_StringConverter::CopyToCharArrayN(tizenPath));
SysTryReturn(NID_CNT, pFileName != null, null, E_OUT_OF_MEMORY,
"[E_OUT_OF_MEMORY] The memory is insufficient.");
pMetadata->contentPath = contentPath;
+ String tizenPath(L"");
+ String changedPath(L"");
+ result r = ChangeMediaFilePath(contentPath, tizenPath, changedPath);
+ SysTryReturn(NID_CNT, r == E_SUCCESS, null, r, "[%s] Failed to perform ChangeMediaFilePath.", GetErrorMessage(r));
+
// Create the metadata extractor handle
metadata_extractor_h tempExtractor = NULL;
int retVal = metadata_extractor_create(&tempExtractor);
- result r = ErrorMapToRetVal(retVal);
+ r = ErrorMapToRetVal(retVal);
SysTryReturn(NID_CNT, retVal == METADATA_EXTRACTOR_ERROR_NONE, null, r,
"[%s] metadata_extractor_create failed.", GetErrorMessage(r));
"[E_OUT_OF_MEMORY] The memory insufficient.");
// Set file path of content to extract the metadata
- unique_ptr<char[]> pFileName(_StringConverter::CopyToCharArrayN(contentPath));
+ unique_ptr<char[]> pFileName(_StringConverter::CopyToCharArrayN(tizenPath));
SysTryReturn(NID_CNT, pFileName != null, null, E_OUT_OF_MEMORY,
"[E_OUT_OF_MEMORY] The memory is insufficient.");
ImageFormat imgType = IMG_FORMAT_NONE;
int imageWidth = 0;
int imageHeight = 0;
+ bool isOrientation = false;
+ bool isLatitude = false;
+ bool isLongitude = false;
result r = ImageBuffer::GetImageInfo(byteBuffer, imgType, imageWidth, imageHeight);
SysTryReturn(NID_CNT, r == E_SUCCESS, null, E_INVALID_ARG,
ExifEntry** pEntries = null;
const char* pData = null;
char buf[_IMAGE_BUFF_LENGTH] = {0, };
- char mmBuff[_IMAGE_BUFF_LENGTH] = {0, }; // to store minutes value of GPS data
- char ssBuff[_IMAGE_BUFF_LENGTH] = {0, }; // to store seconds value of GPS data
ExifContent* pExifcont[EXIF_IFD_COUNT];
- int index = 0;
char latitudeRef = 0; // to store latitude reference (quadrasphere designation 'N', 'S', 'W' or 'E')
char longitudeRef = 0; // to store longitude reference (quadrasphere designation 'N', 'S', 'W' or 'E')
unsigned int entryCount = 0;
SysTryReturn(NID_CNT, pMetadata->pDateTime != null, null, E_OUT_OF_MEMORY,
"[E_OUT_OF_MEMORY] The memory is insufficient.");
}
- else if (tag == EXIF_TAG_ORIENTATION)
+ else if (tag == EXIF_TAG_ORIENTATION && !isOrientation)
{
//get the byte order(little endian or big endian) before extracting orientation type
byteOrder = exif_data_get_byte_order(pEntries[j]->parent->parent);
pMetadata->orientation = static_cast<ImageOrientationType>(exif_get_short(pEntries[j]->data, byteOrder));
+
+ isOrientation = true;
}
else if (tag == EXIF_TAG_SOFTWARE)
{
{
latitudeRef = buf[0]; // GPS Latitude reference value will be 'N'(NORTH) or 'S'(SOUTH)
}
- else if (tag == EXIF_TAG_GPS_LATITUDE)
+ else if (tag == EXIF_TAG_GPS_LATITUDE && !isLatitude)
{
String tempLatitude(buf);
- String delim(L",");
+ if (!tempLatitude.Contains(L","))
+ {
+ pMetadata->latitude = DEFAULT_COORDINATE;
+ isLatitude = true;
+ continue;
+ }
+
+ int firstComma = 0;
+ int lastComma = 0;
+ r = tempLatitude.IndexOf(',', 0, firstComma);
+ SysTryReturn(NID_CNT, !IsFailed(r), null, E_INVALID_ARG, "[%s] Failed to perform IndexOf operation.", GetErrorMessage(r));
+
+ r = tempLatitude.SetCharAt('/', firstComma);
+ SysTryReturn(NID_CNT, !IsFailed(r), null, E_INVALID_ARG, "[%s] Failed to perform SetCharAt operation.", GetErrorMessage(r));
+
+ r = tempLatitude.LastIndexOf(',', tempLatitude.GetLength() - 1, lastComma);
+ SysTryReturn(NID_CNT, !IsFailed(r), null, E_INVALID_ARG, "[%s] Failed to perform IndexOf operation.", GetErrorMessage(r));
+
+ r = tempLatitude.SetCharAt('/', lastComma);
+ SysTryReturn(NID_CNT, !IsFailed(r), null, E_INVALID_ARG, "[%s] Failed to perform SetCharAt operation.", GetErrorMessage(r));
+
+ String delim(L"/");
StringTokenizer strTok(tempLatitude, delim);
String token[3] = {L"", };
int count = 0;
- while (strTok.HasMoreTokens())
+ while (strTok.HasMoreTokens() && count < 3)
{
strTok.GetNextToken(token[count++]);
}
- double ddVal = _LocalizedNumParser::ToDouble(token[0], "C"); // degree value
+ double ddVal = _LocalizedNumParser::ToDouble(token[0], ""); // degree value
r = GetLastResult();
SysTryReturn(NID_CNT, !IsFailed(r), null, r, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
- double mmVal = _LocalizedNumParser::ToDouble(token[1], "C"); // minutes value
+ double mmVal = _LocalizedNumParser::ToDouble(token[1], ""); // minutes value
r = GetLastResult();
SysTryReturn(NID_CNT, !IsFailed(r), null, r, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
- double ssVal = _LocalizedNumParser::ToDouble(token[2], "C"); // seconds value
+ double ssVal = _LocalizedNumParser::ToDouble(token[2], ""); // seconds value
r = GetLastResult();
SysTryReturn(NID_CNT, !IsFailed(r), null, r, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
{
pMetadata->latitude = (pMetadata->latitude * (double)(-1));
}
+ isLatitude = true;
}
else if (tag == EXIF_TAG_GPS_LONGITUDE_REF)
{
longitudeRef = buf[0]; // GPS Longitude reference value will be 'W'(WEST) or 'E'(EAST)
}
- else if (tag == EXIF_TAG_GPS_LONGITUDE)
+ else if (tag == EXIF_TAG_GPS_LONGITUDE && !isLongitude)
{
String tempLongitude(buf);
- String delim(L",");
+ if (!tempLongitude.Contains(L","))
+ {
+ pMetadata->longitude = DEFAULT_COORDINATE;
+ isLongitude = true;
+ continue;
+ }
+
+ int firstComma = 0;
+ int lastComma = 0;
+
+ r = tempLongitude.IndexOf(',', 0, firstComma);
+ SysTryReturn(NID_CNT, !IsFailed(r), null, E_INVALID_ARG, "[%s] Failed to perform IndexOf operation.", GetErrorMessage(r));
+
+ r = tempLongitude.SetCharAt('/', firstComma);
+ SysTryReturn(NID_CNT, !IsFailed(r), null, E_INVALID_ARG, "[%s] Failed to perform SetCharAt operation.", GetErrorMessage(r));
+ r = tempLongitude.LastIndexOf(',', tempLongitude.GetLength() - 1, lastComma);
+ SysTryReturn(NID_CNT, !IsFailed(r), null, E_INVALID_ARG, "[%s] Failed to perform IndexOf operation.", GetErrorMessage(r));
+
+ r = tempLongitude.SetCharAt('/', lastComma);
+ SysTryReturn(NID_CNT, !IsFailed(r), null, E_INVALID_ARG, "[%s] Failed to perform SetCharAt operation.", GetErrorMessage(r));
+
+ String delim(L"/");
StringTokenizer strTok(tempLongitude, delim);
String token[3] = {L"", };
int count = 0;
- while (strTok.HasMoreTokens())
+ while (strTok.HasMoreTokens() && count < 3)
{
strTok.GetNextToken(token[count++]);
}
- double ddVal = _LocalizedNumParser::ToDouble(token[0], "C"); // degree value
+ double ddVal = _LocalizedNumParser::ToDouble(token[0], ""); // degree value
r = GetLastResult();
SysTryReturn(NID_CNT, !IsFailed(r), null, r, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
- double mmVal = _LocalizedNumParser::ToDouble(token[1], "C"); // minutes value
+ double mmVal = _LocalizedNumParser::ToDouble(token[1], ""); // minutes value
r = GetLastResult();
SysTryReturn(NID_CNT, !IsFailed(r), null, r, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
- double ssVal = _LocalizedNumParser::ToDouble(token[2], "C"); // seconds value
+ double ssVal = _LocalizedNumParser::ToDouble(token[2], ""); // seconds value
r = GetLastResult();
SysTryReturn(NID_CNT, !IsFailed(r), null, r, "[E_INVALID_ARG] Failed to perform ToDouble operation.");
{
pMetadata->longitude = (pMetadata->longitude * (double)(-1));
}
+ isLongitude = true;
}
else if (tag == EXIF_TAG_WHITE_BALANCE)
{
ClearLastResult();
ContentType contentType = CONTENT_TYPE_UNKNOWN;
+ String mimeType(L"");
if (!internal)
{
SysTryReturn(NID_CNT, VerifyFilePathCompatibility(contentPath), contentType, E_INVALID_ARG,
"[E_INVALID_ARG] The path is not compatible.");
}
- SysTryReturn(NID_CNT, contentPath.GetLength() != 0, contentType, E_INVALID_ARG,
+
+ String tizenPath(L"");
+ String changedPath(L"");
+ result r = ChangeMediaFilePath(contentPath, tizenPath, changedPath);
+ SysTryReturn(NID_CNT, !IsFailed(r), contentType, r, "[%s] Failed to perform ChangeMediaFilePathCompat.", GetErrorMessage(r));
+
+ SysTryReturn(NID_CNT, changedPath.GetLength() != 0, contentType, E_INVALID_ARG,
"[E_INVALID_ARG] The length of contentPath is 0.");
- SysTryReturn(NID_CNT, _FileImpl::IsFileExist(contentPath), contentType, E_FILE_NOT_FOUND,
+ SysTryReturn(NID_CNT, _FileImpl::IsFileExist(changedPath), contentType, E_FILE_NOT_FOUND,
"[E_FILE_NOT_FOUND] The file corresponding to contentPath could not be found.");
- String fileExt = _FileImpl::GetFileExtension(contentPath);
- result r = GetLastResult();
- SysTryReturn(NID_CNT, !IsFailed(r), contentType, r, "[%s] GetFileExtension failed.", GetErrorMessage(r));
+ String fileExt = _FileImpl::GetFileExtension(changedPath);
+ r = GetLastResult();
- unique_ptr<char[]> pFormat(_StringConverter::CopyToCharArrayN(fileExt));
- SysTryReturn(NID_CNT, pFormat != null, contentType, E_OUT_OF_MEMORY,
- "[E_OUT_OF_MEMORY] The memory is insufficient.");
+ if (!IsFailed(r))
+ {
+ unique_ptr<char[]> pFormat(_StringConverter::CopyToCharArrayN(fileExt));
+ SysTryReturn(NID_CNT, pFormat != null, contentType, E_OUT_OF_MEMORY,
+ "[E_OUT_OF_MEMORY] The memory is insufficient.");
- char* pTempMimeType = null;
- int retVal = mime_type_get_mime_type(pFormat.get(), &pTempMimeType);
- SysTryReturn(NID_CNT, retVal == METADATA_EXTRACTOR_ERROR_NONE, contentType, E_INVALID_ARG,
- "[E_INVALID_ARG] mime_type_get_mime_type failed.");
- SysTryReturn(NID_CNT, pTempMimeType != null, contentType, E_INVALID_ARG,
- "[E_INVALID_ARG] mime_type_get_mime_type failed.");
+ char* pTempMimeType = null;
+ int retVal = mime_type_get_mime_type(pFormat.get(), &pTempMimeType);
+ SysTryReturn(NID_CNT, retVal == METADATA_EXTRACTOR_ERROR_NONE, contentType, E_INVALID_ARG,
+ "[E_INVALID_ARG] mime_type_get_mime_type failed.");
+ SysTryReturn(NID_CNT, pTempMimeType != null, contentType, E_INVALID_ARG,
+ "[E_INVALID_ARG] mime_type_get_mime_type failed.");
- unique_ptr<char, CharDeleter> pMimeType;
- pMimeType.reset(pTempMimeType);
+ unique_ptr<char, CharDeleter> pMimeType;
+ pMimeType.reset(pTempMimeType);
- SysLog(NID_CNT, "The MIME type for %ls is %s", fileExt.GetPointer(), pTempMimeType);
+ SysLog(NID_CNT, "The MIME type for %ls is %s", fileExt.GetPointer(), pTempMimeType);
- String mimeType(pMimeType.get());
+ r = mimeType.Append(pMimeType.get());
+ SysTryReturn(NID_CNT, !IsFailed(r), contentType, E_OUT_OF_MEMORY,
+ "[E_OUT_OF_MEMORY] Failed to perform Append operation.");
+ }
+ else
+ {
+ ClearLastResult();
+
+ SysLog(NID_CNT, "[%s] Failed to perform GetFileExtension operation.", GetErrorMessage(r));
+
+ unique_ptr<char[]> pTempPath(_StringConverter::CopyToCharArrayN(tizenPath));
+ SysTryReturn(NID_CNT, pTempPath != null, contentType, E_OUT_OF_MEMORY,
+ "[E_OUT_OF_MEMORY] The memory is insufficient.");
+
+ char tempType[255] = {0, };
+ int ret = aul_get_mime_from_file(pTempPath.get(), tempType, sizeof(tempType));
+ SysTryReturn(NID_CNT, ret == AUL_R_OK, contentType, E_INVALID_ARG,
+ "[E_INVALID_ARG] Failed to perform aul_get_mime_from_file operation.");
+
+ r = mimeType.Append(tempType);
+ SysTryReturn(NID_CNT, !IsFailed(r), contentType, E_OUT_OF_MEMORY,
+ "[E_OUT_OF_MEMORY] Failed to perform Append operation.");
+ }
if (mimeType.Contains(L"image"))
{
}
else if (mimeType.Contains(L"video"))
{
- String format;
- fileExt.ToLowerCase(format);
-
- if (format == L"3gp" || format == L"mp4")
+ if (mimeType == L"video/3gpp" || mimeType == L"video/mp4")
{
- return CheckStream(contentPath);
+ return CheckStream(tizenPath);
}
return CONTENT_TYPE_VIDEO;
}
}
else
{
+ // The return value is CONTENT_TYPE_VIDEO because CreaetContent have to success, even if the content is invalid.
r = ErrorMapToRetVal(retVal);
- SysTryReturn(NID_CNT, retVal == METADATA_EXTRACTOR_ERROR_NONE, contentType, r,
+ SysTryReturn(NID_CNT, retVal == METADATA_EXTRACTOR_ERROR_NONE, CONTENT_TYPE_VIDEO, r,
"[%s] metadata_extractor_get_metadata failed.", GetErrorMessage(r));
}
}
else
{
+ // The return value is CONTENT_TYPE_VIDEO because CreaetContent have to success, even if the content is invalid.
r = ErrorMapToRetVal(retVal);
- SysTryReturn(NID_CNT, retVal == METADATA_EXTRACTOR_ERROR_NONE, contentType, r,
+ SysTryReturn(NID_CNT, retVal == METADATA_EXTRACTOR_ERROR_NONE, CONTENT_TYPE_VIDEO, r,
"[%s] metadata_extractor_get_metadata failed.", GetErrorMessage(r));
}
return r;
}
+
+result
+_ContentManagerUtilImpl::ChangeMediaFilePath(const String& contentPath, String& tizenPath, String& changedPath)
+{
+ result r = E_SUCCESS;
+
+ tizenPath = contentPath;
+ changedPath = contentPath;
+
+ // If the api version is 2.0, the content path has to be changed.
+ if (_AppInfo::GetApiVersion() == _API_VERSION_2_0 && _AppInfo::IsOspCompat())
+ {
+ if ((contentPath.StartsWith(Environment::GetMediaPath(), 0)) || (contentPath.StartsWith(Environment::GetExternalStoragePath(), 0)))
+ {
+ tizenPath = contentPath;
+
+ r = _FileImpl::ConvertPhysicalToVirtualPath(contentPath, changedPath);
+ SysTryReturnResult(NID_CNT, !IsFailed(r), E_INVALID_ARG,
+ "[%s] Failed to convert physical path to virtual path.", GetErrorMessage(E_INVALID_ARG));
+ }
+ else if ((contentPath.StartsWith(OSP_MEDIA_PHONE, 0)) || (contentPath.StartsWith(OSP_MEDIA_MMC, 0)) || (contentPath.StartsWith(OSP_HOME, 0)))
+ {
+ changedPath = contentPath;
+
+ r = _FileImpl::ConvertVirtualToPhysicalPath(contentPath, tizenPath);
+ SysTryReturnResult(NID_CNT, !IsFailed(r), E_INVALID_ARG,
+ "[%s] Failed to convert virtual path to physical path.", GetErrorMessage(E_INVALID_ARG));
+ }
+ else
+ {
+ SysLogException(NID_CNT, E_INVALID_ARG, "[%s] The path is not supported.", GetErrorMessage(E_INVALID_ARG));
+ return E_INVALID_ARG;
+ }
+ }
+
+ return r;
+}
+
}}