#include "mm_file_debug.h"
#include "mm_file_formats.h"
#include "mm_file_format_frame.h"
-#include "mm_file_codecs.h"
#include "mm_file_utils.h"
-
-#include <sys/time.h>
-
-/*#define CHECK_TIME */
-
-#ifdef CHECK_TIME
-int64_t gettime(void)
-{
- struct timeval tv;
- gettimeofday(&tv, NULL);
- return (int64_t)tv.tv_sec * 1000000 + tv.tv_usec;
-}
-#endif
-
-
/**
* Defines.
*/
MM_FILE_INVALID,
};
-enum {
+typedef enum {
MM_FILE_PARSE_TYPE_SIMPLE, /*parse audio/video track num only*/
MM_FILE_PARSE_TYPE_NORMAL, /*parse infomation without thumbnail*/
MM_FILE_PARSE_TYPE_ALL, /*parse all infomation*/
MM_FILE_PARSE_TYPE_SAFE, /*parse infomation without both thumbnail and stream full-searching*/
-};
+} MMFILE_PARSE_TYPE;
typedef struct {
int type;
typedef struct {
void *formatFuncHandle;
- void *codecFuncHandle;
} MMFILE_FUNC_HANDLE;
{(char *)"tag-synclyrics-num", MM_ATTRS_TYPE_INT, MM_ATTRS_FLAG_RW, (void *)0},
{(char *)"tag-synclyrics", MM_ATTRS_TYPE_DATA, MM_ATTRS_FLAG_RW, (void *)NULL},
{(char *)"tag-recdate", MM_ATTRS_TYPE_STRING, MM_ATTRS_FLAG_RW, (void *)NULL},
+ {(char *)"tag-part-of-set", MM_ATTRS_TYPE_STRING, MM_ATTRS_FLAG_RW, (void *)NULL},
{(char *)"tag-rotate", MM_ATTRS_TYPE_STRING, MM_ATTRS_FLAG_RW, (void *)NULL},
{(char *)"tag-cdis", MM_ATTRS_TYPE_INT, MM_ATTRS_FLAG_RW, (void *)0},
{(char *)"tag-smta", MM_ATTRS_TYPE_INT, MM_ATTRS_FLAG_RW, (void *)0},
#ifdef __MMFILE_DYN_LOADING__
#define MMFILE_FORMAT_SO_FILE_NAME LIBDIR"/libmmfile_formats.so"
-#define MMFILE_CODEC_SO_FILE_NAME LIBDIR"/libmmfile_codecs.so"
-
-int (*mmfile_format_open)(MMFileFormatContext **formatContext, MMFileSourceType *fileSrc);
-int (*mmfile_format_read_stream)(MMFileFormatContext *formatContext);
-int (*mmfile_format_read_frame)(MMFileFormatContext *formatContext, unsigned int timestamp, MMFileFormatFrame *frame);
-int (*mmfile_format_read_tag)(MMFileFormatContext *formatContext);
-int (*mmfile_format_close)(MMFileFormatContext *formatContext);
-int (*mmfile_codec_open)(MMFileCodecContext **codecContext, int codecType, int codecId, MMFileCodecFrame *input);
-int (*mmfile_codec_decode)(MMFileCodecContext *codecContext, MMFileCodecFrame *output);
-int (*mmfile_codec_close)(MMFileCodecContext *codecContext);
-int (*mmfile_format_get_frame)(const char *path, double timestamp, bool is_accurate, unsigned char **frame, int *size, int *width, int *height);
-int (*mmfile_format_get_frame_from_memory)(const void *data, unsigned int datasize, double timestamp, bool is_accurate, unsigned char **frame, int *size, int *width, int *height);
+
+static int (*mmfile_format_open)(MMFileFormatContext **formatContext, MMFileSourceType *fileSrc);
+static int (*mmfile_format_read_stream)(MMFileFormatContext *formatContext);
+static int (*mmfile_format_read_frame)(MMFileFormatContext *formatContext, unsigned int timestamp, MMFileFormatFrame *frame);
+static int (*mmfile_format_read_tag)(MMFileFormatContext *formatContext);
+static int (*mmfile_format_close)(MMFileFormatContext *formatContext);
+static int (*mmfile_format_get_frame)(const char *path, double timestamp, bool is_accurate, unsigned char **frame, int *size, int *width, int *height);
+static int (*mmfile_format_get_frame_from_memory)(const void *data, unsigned int datasize, double timestamp, bool is_accurate, unsigned char **frame, int *size, int *width, int *height);
#endif
#ifdef __MMFILE_DYN_LOADING__
static int _load_dynamic_functions(MMFILE_FUNC_HANDLE *pHandle)
{
-/* static int dll_func_initialized = 0; //disabled */
-
- int ret = 0;
-
- /* Get from function argument */
void *formatFuncHandle = NULL;
- void *codecFuncHandle = NULL;
-
- /* disabled
- if (dll_func_initialized) {
- return 1;
- }
- */
formatFuncHandle = dlopen(MMFILE_FORMAT_SO_FILE_NAME, RTLD_LAZY);
- if (!formatFuncHandle) {
- debug_error(DEBUG, "error: %s\n", "libmmfile_formats.so open error");
- ret = 0;
- goto exception;
- }
+ mm_file_retvm_if_fails(DEBUG, formatFuncHandle, FILEINFO_ERROR_FILE_INTERNAL);
mmfile_format_open = dlsym(formatFuncHandle, "mmfile_format_open");
mmfile_format_read_stream = dlsym(formatFuncHandle, "mmfile_format_read_stream");
!mmfile_format_close) {
debug_error(DEBUG, "error: %s\n", "format function load error");
- ret = 0;
goto exception;
}
- /*closed at app termination.*/
- /*dlclose (formatFuncHandle); */
-
- codecFuncHandle = dlopen(MMFILE_CODEC_SO_FILE_NAME, RTLD_LAZY | RTLD_GLOBAL);
- if (!codecFuncHandle) {
- debug_error(DEBUG, "error: %s\n", "libmmfile_codecs.so open error");
- ret = 0;
- goto exception;
- }
-
- mmfile_codec_open = dlsym(codecFuncHandle, "mmfile_codec_open");
- mmfile_codec_decode = dlsym(codecFuncHandle, "mmfile_codec_decode");
- mmfile_codec_close = dlsym(codecFuncHandle, "mmfile_codec_close");
-
- if (!mmfile_codec_open || !mmfile_codec_decode || !mmfile_codec_close) {
- debug_error(DEBUG, "error: %s\n", "codec function load error");
- ret = 0;
- goto exception;
- }
-
- /*closed at app termination.*/
- /*dlclose (codecFuncHandle); */
-
-/* dll_func_initialized = 1; // disabled */
-
- pHandle->codecFuncHandle = codecFuncHandle;
pHandle->formatFuncHandle = formatFuncHandle;
- return 1;
+ return FILEINFO_ERROR_NONE;
exception:
- if (formatFuncHandle) dlclose(formatFuncHandle);
- if (codecFuncHandle) dlclose(codecFuncHandle);
+ if (formatFuncHandle)
+ dlclose(formatFuncHandle);
- return ret;
+ return FILEINFO_ERROR_FILE_INTERNAL;
}
static void _unload_dynamic_functions(MMFILE_FUNC_HANDLE *pHandle)
{
debug_fenter(RELEASE);
- if (pHandle->formatFuncHandle) {
+ if (pHandle->formatFuncHandle)
dlclose(pHandle->formatFuncHandle);
- }
- if (pHandle->codecFuncHandle) {
- dlclose(pHandle->codecFuncHandle);
- }
debug_fleave(RELEASE);
}
-
#endif /* __MMFILE_DYN_LOADING__ */
/**
* local functions.
*/
-static int
-_is_file_exist(const char *filename)
+static int _is_file_readable(const char *filename)
{
- int ret = FILEINFO_ERROR_NONE;
- if (filename) {
- const char *to_access = (strstr(filename, "file://") != NULL) ? filename + 7 : filename;
- ret = access(to_access, R_OK);
- if (ret < 0) {
- if (errno == EACCES || errno == EPERM) {
- debug_error(DEBUG, "Permission denied [%s]", to_access);
- ret = FILEINFO_ERROR_PERMISSION_DENIED;
- } else {
- debug_error(DEBUG, "Not exist file [%s]", to_access);
- ret = FILEINFO_ERROR_FILE_NOT_FOUND;
- }
+ mm_file_retvm_if_fails(DEBUG, filename, FILEINFO_ERROR_INVALID_ARGUMENT);
+
+ if (access(filename, R_OK) == -1) {
+ if (errno == EACCES || errno == EPERM) {
+ debug_error(DEBUG, "Permission denied [%s]", filename);
+ return FILEINFO_ERROR_PERMISSION_DENIED;
+ } else {
+ debug_error(DEBUG, "Not exist file [%s]", filename);
+ return FILEINFO_ERROR_FILE_NOT_FOUND;
}
}
- return ret;
+
+ return FILEINFO_ERROR_NONE;
}
-static int
-_info_set_attr_media(MMHandleType attrs, MMFileFormatContext *formatContext)
+static int _info_set_attr_media(MMHandleType attrs, MMFileFormatContext *formatContext)
{
int ret = 0;
if (formatContext->commandType == MM_FILE_TAG) {
- if (formatContext->title) mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_TITLE, formatContext->title);
- if (formatContext->artist) mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_ARTIST, formatContext->artist);
- if (formatContext->author) mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_AUTHOR, formatContext->author);
- if (formatContext->composer && formatContext->author == NULL)
+ mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_TITLE, formatContext->title);
+ mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_ARTIST, formatContext->artist);
+ if (formatContext->author)
+ mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_AUTHOR, formatContext->author);
+ else
mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_AUTHOR, formatContext->composer);
- if (formatContext->album) mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_ALBUM, formatContext->album);
- if (formatContext->album_artist) mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_ALBUM_ARTIST, formatContext->album_artist);
- if (formatContext->copyright) mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_COPYRIGHT, formatContext->copyright);
- if (formatContext->description) mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_DESCRIPTION, formatContext->description);
- if (formatContext->comment) mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_COMMENT, formatContext->comment);
- if (formatContext->genre) mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_GENRE, formatContext->genre);
- if (formatContext->classification) mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_CLASSIFICATION, formatContext->classification);
- if (formatContext->year) mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_DATE, formatContext->year);
- if (formatContext->tagTrackNum) mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_TRACK_NUM, formatContext->tagTrackNum);
- if (formatContext->rating) mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_RATING, formatContext->rating);
- if (formatContext->conductor) mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_CONDUCTOR, formatContext->conductor);
- if (formatContext->recDate) mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_RECDATE, formatContext->recDate);
- if (formatContext->rotate) mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_ROTATE, formatContext->rotate);
+ mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_ALBUM, formatContext->album);
+ mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_ALBUM_ARTIST, formatContext->album_artist);
+ mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_COPYRIGHT, formatContext->copyright);
+ mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_DESCRIPTION, formatContext->description);
+ mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_COMMENT, formatContext->comment);
+ mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_GENRE, formatContext->genre);
+ mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_CLASSIFICATION, formatContext->classification);
+ mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_DATE, formatContext->year);
+ mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_TRACK_NUM, formatContext->tagTrackNum);
+ mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_RATING, formatContext->rating);
+ mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_CONDUCTOR, formatContext->conductor);
+ mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_RECDATE, formatContext->recDate);
+ mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_POS, formatContext->part_of_set);
+
+ mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_ROTATE, formatContext->rotate);
mm_attrs_set_double_by_name(attrs, MM_FILE_TAG_LONGITUDE, formatContext->longitude);
mm_attrs_set_double_by_name(attrs, MM_FILE_TAG_LATIDUE, formatContext->latitude);
mm_attrs_set_double_by_name(attrs, MM_FILE_TAG_ALTIDUE, formatContext->altitude);
mm_attrs_set_int_by_name(attrs, MM_FILE_TAG_SPHERICAL, formatContext->isSpherical);
mm_attrs_set_int_by_name(attrs, MM_FILE_TAG_SPHERICAL_STITCHED, formatContext->isStitched);
- if (formatContext->stitchingSoftware) mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_SPHERICAL_STITCHING_SOFTWARE, formatContext->stitchingSoftware);
- if (formatContext->projectionType) mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_SPHERICAL_PROJECTION_TYPE, formatContext->projectionType);
- if (formatContext->stereoMode) mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_SPHERICAL_STEREO_MODE, formatContext->stereoMode);
+ mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_SPHERICAL_STITCHING_SOFTWARE, formatContext->stitchingSoftware);
+ mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_SPHERICAL_PROJECTION_TYPE, formatContext->projectionType);
+ mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_SPHERICAL_STEREO_MODE, formatContext->stereoMode);
mm_attrs_set_int_by_name(attrs, MM_FILE_TAG_SPHERICAL_SOURCE_COUNT, formatContext->sourceCount);
mm_attrs_set_int_by_name(attrs, MM_FILE_TAG_SPHERICAL_INIT_VIEW_HEADING, formatContext->initViewHeading);
mm_attrs_set_int_by_name(attrs, MM_FILE_TAG_SPHERICAL_INIT_VIEW_PITCH, formatContext->initViewPitch);
mm_attrs_set_int_by_name(attrs, MM_FILE_TAG_AMBISONIC_ORDER, formatContext->ambisonicOrder);
mm_attrs_set_int_by_name(attrs, MM_FILE_TAG_SPHERICAL_V2_STEREO_MODE, formatContext->stereoModeV2);
- if (formatContext->metadataSourceV2) mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_SPHERICAL_V2_METADATA_SOURCE, formatContext->metadataSourceV2);
+ mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_SPHERICAL_V2_METADATA_SOURCE, formatContext->metadataSourceV2);
mm_attrs_set_int_by_name(attrs, MM_FILE_TAG_SPHERICAL_V2_PROJ_TYPE, formatContext->projTypeV2);
mm_attrs_set_int_by_name(attrs, MM_FILE_TAG_SPHERICAL_V2_POSE_YAW, formatContext->poseYawV2);
mm_attrs_set_int_by_name(attrs, MM_FILE_TAG_SPHERICAL_V2_POSE_PITCH, formatContext->posePitchV2);
mm_attrs_set_int_by_name(attrs, MM_FILE_TAG_SPHERICAL_V2_EQUI_BOUNDS_LEFT, formatContext->equiBoundsLeftV2);
mm_attrs_set_int_by_name(attrs, MM_FILE_TAG_SPHERICAL_V2_EQUI_BOUNDS_RIGHT, formatContext->equiBoundsRightV2);
- if ((formatContext->syncLyricsNum > 0) && (formatContext->syncLyrics))
- mm_attrs_set_data_by_name(attrs, MM_FILE_TAG_SYNCLYRICS, formatContext->syncLyrics, formatContext->syncLyricsNum);
+ mm_attrs_set_data_by_name(attrs, MM_FILE_TAG_SYNCLYRICS, formatContext->syncLyrics, formatContext->syncLyricsNum);
- if (formatContext->unsyncLyrics) mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_UNSYNCLYRICS, formatContext->unsyncLyrics);
+ mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_UNSYNCLYRICS, formatContext->unsyncLyrics);
if (formatContext->artwork && formatContext->artworkSize > 0) {
- void *artworkCopy = NULL;
- artworkCopy = mmfile_malloc((formatContext->artworkSize));
- if (NULL != artworkCopy) {
- memcpy(artworkCopy, formatContext->artwork, formatContext->artworkSize);
- mm_attrs_set_data_by_name(attrs, MM_FILE_TAG_ARTWORK, artworkCopy, formatContext->artworkSize);
- mm_attrs_set_int_by_name(attrs, MM_FILE_TAG_ARTWORK_SIZE, formatContext->artworkSize);
- if (formatContext->artworkMime) mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_ARTWORK_MIME, formatContext->artworkMime);
- }
+ void *artworkCopy = g_memdup2(formatContext->artwork, formatContext->artworkSize);
+
+ mm_attrs_set_data_by_name(attrs, MM_FILE_TAG_ARTWORK, artworkCopy, formatContext->artworkSize);
+ mm_attrs_set_int_by_name(attrs, MM_FILE_TAG_ARTWORK_SIZE, formatContext->artworkSize);
+ mm_attrs_set_string_by_name(attrs, MM_FILE_TAG_ARTWORK_MIME, formatContext->artworkMime);
}
} else if (formatContext->commandType == MM_FILE_CONTENTS) {
/*get duration*/
if (formatContext->thumbNail && formatContext->thumbNail->frameData) {
void *thumbNailCopy = NULL;
- thumbNailCopy = mmfile_malloc(formatContext->thumbNail->frameSize);
+ thumbNailCopy = g_memdup2(formatContext->thumbNail->frameData, formatContext->thumbNail->frameSize);
- if (NULL != thumbNailCopy) {
- memcpy(thumbNailCopy, formatContext->thumbNail->frameData, formatContext->thumbNail->frameSize);
- mm_attrs_set_data_by_name(attrs, MM_FILE_CONTENT_VIDEO_THUMBNAIL, thumbNailCopy, formatContext->thumbNail->frameSize);
- mm_attrs_set_int_by_name(attrs, MM_FILE_CONTENT_VIDEO_WIDTH, formatContext->thumbNail->frameWidth);
- mm_attrs_set_int_by_name(attrs, MM_FILE_CONTENT_VIDEO_HEIGHT, formatContext->thumbNail->frameHeight);
- }
+ mm_attrs_set_data_by_name(attrs, MM_FILE_CONTENT_VIDEO_THUMBNAIL, thumbNailCopy, formatContext->thumbNail->frameSize);
+ mm_attrs_set_int_by_name(attrs, MM_FILE_CONTENT_VIDEO_WIDTH, formatContext->thumbNail->frameWidth);
+ mm_attrs_set_int_by_name(attrs, MM_FILE_CONTENT_VIDEO_HEIGHT, formatContext->thumbNail->frameHeight);
}
}
}
static int
+__get_contents_thumbnail(MMFileFormatContext *formatContext)
+{
+ int ret = FILEINFO_ERROR_NONE;
+ MMFileFormatFrame frameContext = {0, };
+ MMFileFormatFrame *thumbnail = NULL;
+
+ mm_file_retvm_if_fails(DEBUG, formatContext, FILEINFO_ERROR_FILE_INTERNAL);
+
+ if (MMFILE_FORMAT_FAIL == mmfile_format_read_frame(formatContext, _SEEK_POINT_, &frameContext)) {
+ debug_error(DEBUG, "error: mmfile_format_read_frame\n");
+ ret = FILEINFO_ERROR_FILE_INTERNAL;
+ goto exception;
+ }
+
+ /* set video thumbnail */
+ thumbnail = g_new0(MMFileFormatFrame, 1);
+
+ thumbnail->frameSize = frameContext.frameSize;
+ thumbnail->frameWidth = frameContext.frameWidth;
+ thumbnail->frameHeight = frameContext.frameHeight;
+ thumbnail->frameData = frameContext.frameData;
+ thumbnail->frameDataFree = frameContext.frameDataFree;
+ thumbnail->configLenth = 0;
+ thumbnail->configData = NULL;
+
+#ifdef __MMFILE_TEST_MODE__
+ mmfile_format_print_frame(thumbnail);
+#endif
+
+ formatContext->thumbNail = thumbnail;
+
+ /* because #MMFILE_FORMAT_SUCCESS is different with #FILEINFO_ERROR_NONE */
+ return FILEINFO_ERROR_NONE;
+exception:
+ mmfile_free(thumbnail);
+ if (frameContext.frameDataFree)
+ frameContext.frameDataFree(frameContext.frameData);
+ else
+ mmfile_free(frameContext.frameData);
+ mmfile_free(frameContext.configData);
+
+ return ret;
+}
+
+static int
_get_contents_info(MMHandleType attrs, MMFileSourceType *src, MMFILE_PARSE_INFO *parse)
{
MMFileFormatContext *formatContext = NULL;
- MMFileCodecContext *codecContext = NULL;
- MMFileFormatFrame frameContext = {0, };
- MMFileCodecFrame codecFrame = {0, };
- MMFileCodecFrame decodedFrame = {0, };
-
int ret = 0;
- if (!src || !parse)
- return FILEINFO_ERROR_FILE_INTERNAL;
+ mm_file_retvm_if_fails(DEBUG, src, FILEINFO_ERROR_FILE_INTERNAL);
+ mm_file_retvm_if_fails(DEBUG, parse, FILEINFO_ERROR_FILE_INTERNAL);
- ret = mmfile_format_open(&formatContext, src);
- if (MMFILE_FORMAT_FAIL == ret || formatContext == NULL) {
+ if (MMFILE_FORMAT_FAIL == mmfile_format_open(&formatContext, src) || formatContext == NULL) {
debug_error(DEBUG, "error: mmfile_format_open\n");
ret = FILEINFO_ERROR_FILE_INTERNAL;
goto exception;
if (parse->type >= MM_FILE_PARSE_TYPE_NORMAL) {
if (parse->type == MM_FILE_PARSE_TYPE_SAFE)
formatContext->cdis = 1;
- ret = mmfile_format_read_stream(formatContext);
- if (MMFILE_FORMAT_FAIL == ret) {
+
+ if (MMFILE_FORMAT_FAIL == mmfile_format_read_stream(formatContext)) {
debug_error(DEBUG, "error: mmfile_format_read_stream\n");
ret = FILEINFO_ERROR_FILE_INTERNAL;
goto exception;
parse->video_track_num = formatContext->videoTotalTrackNum;
/* check uhqa content*/
- if (formatContext->streams[MMFILE_AUDIO_STREAM] != NULL) {
+ if (formatContext->streams[MMFILE_AUDIO_STREAM] != NULL)
parse->is_uhqa = formatContext->streams[MMFILE_AUDIO_STREAM]->is_uhqa;
- } else {
- parse->is_uhqa = FALSE;
- }
-
- if (parse->type >= MM_FILE_PARSE_TYPE_ALL) {
- if (formatContext->videoTotalTrackNum > 0) {
+ else
+ parse->is_uhqa = false;
+ if (parse->type >= MM_FILE_PARSE_TYPE_ALL && formatContext->videoTotalTrackNum > 0) {
/*why below code needed?
This API is for extracting some attributes not metadata(TAG). mm_file_create_content_attrs() use this API.
but MMFileUtilGetMetaDataFromMP4() Extract just TAG info. That is needed for mm_file_create_tag_attrs()*/
#if 0
- if (parse->type != MM_FILE_PARSE_TYPE_SAFE) {
- if (formatContext->formatType == MM_FILE_FORMAT_3GP || formatContext->formatType == MM_FILE_FORMAT_MP4) {
- MMFileUtilGetMetaDataFromMP4(formatContext);
- }
+ if (parse->type != MM_FILE_PARSE_TYPE_SAFE) {
+ if (formatContext->formatType == MM_FILE_FORMAT_3GP || formatContext->formatType == MM_FILE_FORMAT_MP4) {
+ MMFileUtilGetMetaDataFromMP4(formatContext);
}
+ }
#endif
- MMFileFormatStream *videoStream = formatContext->streams[MMFILE_VIDEO_STREAM];
- unsigned int timestamp = _SEEK_POINT_;
-
- ret = mmfile_format_read_frame(formatContext, timestamp, &frameContext);
- if (MMFILE_FORMAT_FAIL == ret) {
- debug_error(DEBUG, "error: mmfile_format_read_frame\n");
- ret = FILEINFO_ERROR_FILE_INTERNAL;
- goto warning;
- }
-
- if (frameContext.bCompressed) {
- codecFrame.frameDataSize = frameContext.frameSize;
- codecFrame.width = frameContext.frameWidth;
- codecFrame.height = frameContext.frameHeight;
- codecFrame.frameData = frameContext.frameData;
- codecFrame.configLen = frameContext.configLenth;
- codecFrame.configData = frameContext.configData;
- codecFrame.version = videoStream->version;
-
- ret = mmfile_codec_open(&codecContext, MMFILE_VIDEO_DECODE, videoStream->codecId, &codecFrame);
- if (MMFILE_FORMAT_FAIL == ret) {
- debug_error(DEBUG, "error: mmfile_codec_open\n");
- ret = FILEINFO_ERROR_FILE_INTERNAL;
- goto warning;
- }
-
- ret = mmfile_codec_decode(codecContext, &decodedFrame);
- if (MMFILE_FORMAT_FAIL == ret) {
- debug_error(DEBUG, "error: mmfile_codec_decode\n");
- ret = FILEINFO_ERROR_FILE_INTERNAL;
- goto warning;
- }
-
- /* set video thumbnail */
- formatContext->thumbNail = mmfile_malloc(sizeof(MMFileFormatFrame));
- if (NULL == formatContext->thumbNail) {
- debug_error(DEBUG, "error: mmfile_malloc\n");
- ret = FILEINFO_ERROR_FILE_INTERNAL;
- goto warning;
- }
-
- formatContext->thumbNail->frameSize = decodedFrame.frameDataSize;
- formatContext->thumbNail->frameWidth = decodedFrame.width;
- formatContext->thumbNail->frameHeight = decodedFrame.height;
- formatContext->thumbNail->frameData = decodedFrame.frameData;
- formatContext->thumbNail->configLenth = 0;
- formatContext->thumbNail->configData = NULL;
- } else {
- formatContext->thumbNail = mmfile_malloc(sizeof(MMFileFormatFrame));
- if (NULL == formatContext->thumbNail) {
- debug_error(DEBUG, "error: mmfile_format_read_frame\n");
- ret = FILEINFO_ERROR_FILE_INTERNAL;
- goto warning;
- }
-
- formatContext->thumbNail->frameSize = frameContext.frameSize;
- formatContext->thumbNail->frameWidth = frameContext.frameWidth;
- formatContext->thumbNail->frameHeight = frameContext.frameHeight;
- formatContext->thumbNail->frameData = frameContext.frameData;
- formatContext->thumbNail->configLenth = 0;
- formatContext->thumbNail->configData = NULL;
- }
+ ret = __get_contents_thumbnail(formatContext);
+ if (FILEINFO_ERROR_NONE != ret) {
+ debug_error(DEBUG, "error: __get_contents_thumbnail\n");
+ ret = FILEINFO_ERROR_NONE;
}
}
} else {
parse->video_track_num = formatContext->videoTotalTrackNum;
}
-#ifdef __MMFILE_TEST_MODE__
- mmfile_format_print_frame(&frameContext);
-#endif
-
- formatContext->commandType = MM_FILE_CONTENTS;
-
- if (parse->type >= MM_FILE_PARSE_TYPE_NORMAL)
- _info_set_attr_media(attrs, formatContext);
-
- if (frameContext.bCompressed) {
- mmfile_free(frameContext.frameData);
- mmfile_free(frameContext.configData);
-
- if (decodedFrame.frameData) {
- mmfile_free(decodedFrame.frameData);
- formatContext->thumbNail->frameData = NULL;
- }
- if (decodedFrame.configData) {
- mmfile_free(decodedFrame.configData);
- formatContext->thumbNail->configData = NULL;
- }
- } else {
- if (frameContext.frameData) {
- mmfile_free(frameContext.frameData);
- formatContext->thumbNail->frameData = NULL;
- }
- if (frameContext.configData) {
- mmfile_free(frameContext.configData);
- formatContext->thumbNail->configData = NULL;
- }
- }
-
- if (formatContext) {
- mmfile_format_close(formatContext);
- }
- if (codecContext) {
- mmfile_codec_close(codecContext);
- }
-
- return FILEINFO_ERROR_NONE;
-
-warning:
formatContext->commandType = MM_FILE_CONTENTS;
- if (frameContext.bCompressed) {
- mmfile_free(frameContext.frameData);
- mmfile_free(frameContext.configData);
-
- if (decodedFrame.frameData) {
- mmfile_free(decodedFrame.frameData);
- if (formatContext->thumbNail)
- formatContext->thumbNail->frameData = NULL;
- }
-
- if (decodedFrame.configData) {
- mmfile_free(decodedFrame.configData);
- if (formatContext->thumbNail)
- formatContext->thumbNail->configData = NULL;
- }
- } else {
- if (frameContext.frameData) {
- mmfile_free(frameContext.frameData);
- if (formatContext->thumbNail)
- formatContext->thumbNail->frameData = NULL;
- }
-
- if (frameContext.configData) {
- mmfile_free(frameContext.configData);
- if (formatContext->thumbNail)
- formatContext->thumbNail->configData = NULL;
- }
- }
-
if (parse->type >= MM_FILE_PARSE_TYPE_NORMAL)
_info_set_attr_media(attrs, formatContext);
- if (formatContext) {
- mmfile_format_close(formatContext);
- }
- if (codecContext) {
- mmfile_codec_close(codecContext);
+ if (formatContext->thumbNail) {
+ if (formatContext->thumbNail->frameDataFree)
+ formatContext->thumbNail->frameDataFree(formatContext->thumbNail->frameData);
+ else
+ mmfile_free(formatContext->thumbNail->frameData);
+ mmfile_free(formatContext->thumbNail->configData);
+ mmfile_free(formatContext->thumbNail);
}
- return FILEINFO_ERROR_NONE;
-
exception:
- if (frameContext.bCompressed) {
- mmfile_free(frameContext.frameData);
- mmfile_free(frameContext.configData);
-
- if (decodedFrame.frameData) {
- mmfile_free(decodedFrame.frameData);
- if (formatContext->thumbNail)
- formatContext->thumbNail->frameData = NULL;
- }
-
- if (decodedFrame.configData) {
- mmfile_free(decodedFrame.configData);
- if (formatContext->thumbNail)
- formatContext->thumbNail->configData = NULL;
- }
- } else {
- if (frameContext.frameData) {
- mmfile_free(frameContext.frameData);
- if (formatContext->thumbNail)
- formatContext->thumbNail->frameData = NULL;
- }
-
- if (frameContext.configData) {
- mmfile_free(frameContext.configData);
- if (formatContext->thumbNail)
- formatContext->thumbNail->configData = NULL;
- }
- }
-
- if (formatContext) {
+ if (formatContext)
mmfile_format_close(formatContext);
- }
- /* if (codecContext) { mmfile_codec_close(codecContext); } */ /*dead code*/
return ret;
}
static int
-_get_tag_info(MMHandleType attrs, MMFileSourceType *src)
+_get_tag_info(MMHandleType attrs, MMFileSourceType *src, bool extract_albumart)
{
MMFileFormatContext *formatContext = NULL;
int ret = 0;
goto exception;
}
+ /* Set albumart flag */
+ formatContext->extract_artwork = extract_albumart;
+
ret = mmfile_format_read_tag(formatContext);
if (MMFILE_FORMAT_FAIL == ret) {
debug_warning(DEBUG, "reading tag is fail\n");
/**
* global functions.
*/
-int mm_file_get_attrs(MMHandleType attrs, char **err_attr_name, const char *first_attribute_name, ...)
+int mm_file_get_attrs(MMHandleType attrs, const char *first_attribute_name, ...)
{
int ret = FILEINFO_ERROR_NONE;
va_list var_args;
+ char *err_attr_name = NULL;
- if (!attrs) {
- debug_error(DEBUG, "Invalid arguments [attrs 0]\n");
- return FILEINFO_ERROR_INVALID_ARGUMENT;
- }
-
- if (first_attribute_name == NULL) {
- debug_error(DEBUG, "Invalid arguments [first_attribute_name null]\n");
- return FILEINFO_ERROR_INVALID_ARGUMENT;
- }
+ mm_file_retvm_if_fails(DEBUG, attrs, FILEINFO_ERROR_INVALID_ARGUMENT);
+ mm_file_retvm_if_fails(DEBUG, first_attribute_name, FILEINFO_ERROR_INVALID_ARGUMENT);
/* get requested attributes */
va_start(var_args, first_attribute_name);
- ret = mm_attrs_get_valist(attrs, err_attr_name, first_attribute_name, var_args);
+ ret = mm_attrs_get_valist(attrs, &err_attr_name, first_attribute_name, var_args);
va_end(var_args);
if (ret != FILEINFO_ERROR_NONE) {
if (err_attr_name) {
- debug_error(DEBUG, "failed to get %s\n", *err_attr_name);
+ debug_error(DEBUG, "failed to get %s\n", err_attr_name);
+ free(err_attr_name);
}
}
debug_fenter(RELEASE);
- if (tag_attrs == NULL) {
- debug_error(DEBUG, "invalid handle");
- return FILEINFO_ERROR_INVALID_ARGUMENT;
- }
+ mm_file_retvm_if_fails(DEBUG, tag_attrs, FILEINFO_ERROR_INVALID_ARGUMENT);
ret = mm_attrs_get_data_by_name(tag_attrs, MM_FILE_TAG_SYNCLYRICS, (void **)&synclyrics_list);
if (ret != FILEINFO_ERROR_NONE) {
return ret;
}
- if (synclyrics_list != NULL) {
+ mm_file_retvm_if_fails(RELEASE, synclyrics_list, FILEINFO_ERROR_ATTR_NOT_EXIST);
- sync_lyric_item = (AvSynclyricsInfo *)g_list_nth_data(synclyrics_list, index);
+ sync_lyric_item = (AvSynclyricsInfo *)g_list_nth_data(synclyrics_list, index);
- if (sync_lyric_item == NULL) {
- debug_warning(RELEASE, "synclyric item is NULL");
- return FILEINFO_ERROR_ATTR_NOT_EXIST;
- }
+ mm_file_retvm_if_fails(RELEASE, sync_lyric_item, FILEINFO_ERROR_ATTR_NOT_EXIST);
- *time_info = sync_lyric_item->time_info;
- *lyrics = sync_lyric_item->lyric_info;
-
- } else {
- debug_warning(RELEASE, "synclyrics_list is NULL");
- return FILEINFO_ERROR_ATTR_NOT_EXIST;
- }
+ *time_info = sync_lyric_item->time_info;
+ *lyrics = sync_lyric_item->lyric_info;
return ret;
-
}
-int mm_file_create_tag_attrs(MMHandleType *tag_attrs, const char *filename)
+static int __mm_file_create_tag_attrs(MMHandleType *tag_attrs, const char *filename, bool extract_albumart)
{
int ret = FILEINFO_ERROR_NONE;
MMHandleType attrs = NULL;
debug_fenter(RELEASE);
- /* Check argument here */
- if (tag_attrs == NULL) {
- debug_error(DEBUG, "Invalid arguments [tag null]\n");
- return FILEINFO_ERROR_INVALID_ARGUMENT;
- }
- if (filename == NULL) {
- debug_error(DEBUG, "Invalid arguments [filename null]\n");
- return FILEINFO_ERROR_INVALID_ARGUMENT;
- }
- if (strlen(filename) == 0) {
- debug_error(DEBUG, "Invalid arguments [filename size 0]\n");
- return FILEINFO_ERROR_INVALID_ARGUMENT;
- }
+ mm_file_retvm_if_fails(DEBUG, tag_attrs, FILEINFO_ERROR_INVALID_ARGUMENT);
+ ret = _is_file_readable(filename);
+ if (ret != FILEINFO_ERROR_NONE)
+ return ret;
#ifdef __MMFILE_DYN_LOADING__
MMFILE_FUNC_HANDLE func_handle;
ret = _load_dynamic_functions(&func_handle);
- if (ret == 0) {
+ if (ret != FILEINFO_ERROR_NONE) {
debug_error(DEBUG, "load library error\n");
- return FILEINFO_ERROR_FILE_INTERNAL;
+ return ret;
}
#endif
/*set source file infomation*/
MM_FILE_SET_MEDIA_FILE_SRC(src, filename);
- ret = _is_file_exist(filename);
- if (ret != FILEINFO_ERROR_NONE) {
- goto END;
- }
-
/*set attrs*/
ret = mm_attrs_new(g_tag_attrs, ARRAY_SIZE(g_tag_attrs), "tag", NULL, NULL, &attrs);
if (ret) {
goto END;
}
- ret = _get_tag_info(attrs, &src);
+ ret = _get_tag_info(attrs, &src, extract_albumart);
if (ret != FILEINFO_ERROR_NONE) {
mm_attrs_free(attrs);
attrs = NULL;
return ret;
}
+int mm_file_create_tag_attrs(MMHandleType *tag_attrs, const char *filename)
+{
+ return __mm_file_create_tag_attrs(tag_attrs, filename, true);
+}
+
+int mm_file_create_tag_attrs_no_albumart(MMHandleType *tag_attrs, const char *filename)
+{
+ return __mm_file_create_tag_attrs(tag_attrs, filename, false);
+}
-EXPORT_API
int mm_file_destroy_tag_attrs(MMHandleType tag_attrs)
{
void *artwork = NULL;
debug_fenter(RELEASE);
- if (tag_attrs == NULL) {
- debug_error(DEBUG, "invalid handle.\n");
- return FILEINFO_ERROR_INVALID_ARGUMENT;
- }
+ mm_file_retvm_if_fails(DEBUG, tag_attrs, FILEINFO_ERROR_INVALID_ARGUMENT);
ret = mm_attrs_get_data_by_name(tag_attrs, MM_FILE_TAG_ARTWORK, &artwork);
mmfile_free(artwork);
return ret;
}
-EXPORT_API
-int mm_file_create_content_attrs(MMHandleType *contents_attrs, const char *filename)
+static int __create_content_attrs(MMHandleType *contents_attrs, const char *filename, MMFILE_PARSE_TYPE parse_type)
{
MMHandleType attrs = NULL;
MMFileSourceType src = {0, };
debug_fenter(RELEASE);
- /* Check argument here */
- if (contents_attrs == NULL) {
- debug_error(DEBUG, "Invalid arguments [contents null]\n");
- return FILEINFO_ERROR_INVALID_ARGUMENT;
- }
- if (filename == NULL) {
- debug_error(DEBUG, "Invalid arguments [filename null]\n");
- return FILEINFO_ERROR_INVALID_ARGUMENT;
- }
- if (strlen(filename) == 0) {
- debug_error(DEBUG, "Invalid arguments [filename size 0]\n");
- return FILEINFO_ERROR_INVALID_ARGUMENT;
- }
+ mm_file_retvm_if_fails(DEBUG, contents_attrs, FILEINFO_ERROR_INVALID_ARGUMENT);
+ ret = _is_file_readable(filename);
+ if (ret != FILEINFO_ERROR_NONE)
+ return ret;
#ifdef __MMFILE_DYN_LOADING__
MMFILE_FUNC_HANDLE func_handle;
-#ifdef CHECK_TIME
- int64_t ti;
- ti = gettime();
-#endif
-
ret = _load_dynamic_functions(&func_handle);
- if (ret == 0) {
+ if (ret != FILEINFO_ERROR_NONE) {
debug_error(DEBUG, "load library error\n");
- return FILEINFO_ERROR_FILE_INTERNAL;
+ return ret;
}
-
-#ifdef CHECK_TIME
- debug_msg(DEBUG, "_load_dynamic_functions() = %lld\n", gettime() - ti);
-#endif
-
#endif
-
/*set source file infomation*/
MM_FILE_SET_MEDIA_FILE_SRC(src, filename);
- ret = _is_file_exist(filename);
- if (ret != FILEINFO_ERROR_NONE) {
- goto END;
- }
-
/*set attrs*/
ret = mm_attrs_new(g_content_attrs, ARRAY_SIZE(g_content_attrs), "content", NULL, NULL, &attrs);
if (ret) {
}
- parse.type = MM_FILE_PARSE_TYPE_ALL;
+ parse.type = parse_type;
ret = _get_contents_info(attrs, &src, &parse);
if (ret != FILEINFO_ERROR_NONE) {
mm_attrs_free(attrs);
END:
#ifdef __MMFILE_DYN_LOADING__
-
-#ifdef CHECK_TIME
- ti = gettime();
-#endif
-
_unload_dynamic_functions(&func_handle);
-
-#ifdef CHECK_TIME
- debug_msg(DEBUG, "_unload_dynamic_functions() = %lld\n", gettime() - ti);
-#endif
-
#endif
debug_fleave(RELEASE);
}
-EXPORT_API
-int mm_file_create_tag_attrs_from_memory(MMHandleType *tag_attrs, const void *data, unsigned int size, int format)
+int mm_file_create_content_attrs(MMHandleType *contents_attrs, const char *filename)
+{
+ return __create_content_attrs(contents_attrs, filename, MM_FILE_PARSE_TYPE_ALL);
+}
+
+
+static int __mm_file_create_tag_attrs_from_memory(MMHandleType *tag_attrs, const void *data, unsigned int size, int format, bool extract_albumart)
{
MMHandleType attrs = NULL;
MMFileSourceType src;
debug_fenter(RELEASE);
- /* Check argument here */
- if (tag_attrs == NULL || data == NULL) {
- debug_error(DEBUG, "Invalid arguments\n");
- return FILEINFO_ERROR_INVALID_ARGUMENT;
- }
+ mm_file_retvm_if_fails(DEBUG, tag_attrs, FILEINFO_ERROR_INVALID_ARGUMENT);
+ mm_file_retvm_if_fails(DEBUG, data, FILEINFO_ERROR_INVALID_ARGUMENT);
#ifdef __MMFILE_DYN_LOADING__
MMFILE_FUNC_HANDLE func_handle;
ret = _load_dynamic_functions(&func_handle);
- if (ret == 0) {
+ if (ret != FILEINFO_ERROR_NONE) {
debug_error(DEBUG, "load library error\n");
- return FILEINFO_ERROR_FILE_INTERNAL;
+ return ret;
}
#endif
}
/*parse.type = MM_FILE_PARSE_TYPE_ALL;*/
- ret = _get_tag_info(attrs, &src);
+ ret = _get_tag_info(attrs, &src, extract_albumart);
if (ret != FILEINFO_ERROR_NONE) {
mm_attrs_free(attrs);
attrs = NULL;
return ret;
}
+int mm_file_create_tag_attrs_from_memory(MMHandleType *tag_attrs, const void *data, unsigned int size, int format)
+{
+ return __mm_file_create_tag_attrs_from_memory(tag_attrs, data, size, format, true);
+}
+
+int mm_file_create_tag_attrs_no_albumart_from_memory(MMHandleType *tag_attrs, const void *data, unsigned int size, int format)
+{
+ return __mm_file_create_tag_attrs_from_memory(tag_attrs, data, size, format, false);
+}
-EXPORT_API
int mm_file_create_content_attrs_from_memory(MMHandleType *contents_attrs, const void *data, unsigned int size, int format)
{
MMHandleType attrs = NULL;
debug_fenter(RELEASE);
- /* Check argument here */
- if (contents_attrs == NULL || data == NULL) {
- debug_error(DEBUG, "Invalid arguments\n");
- return FILEINFO_ERROR_INVALID_ARGUMENT;
- }
+ mm_file_retvm_if_fails(DEBUG, contents_attrs, FILEINFO_ERROR_INVALID_ARGUMENT);
+ mm_file_retvm_if_fails(DEBUG, data, FILEINFO_ERROR_INVALID_ARGUMENT);
#ifdef __MMFILE_DYN_LOADING__
MMFILE_FUNC_HANDLE func_handle;
ret = _load_dynamic_functions(&func_handle);
- if (ret == 0) {
+ if (ret != FILEINFO_ERROR_NONE) {
debug_error(DEBUG, "load library error\n");
- return FILEINFO_ERROR_FILE_INTERNAL;
+ return ret;
}
#endif
}
-EXPORT_API
+
int mm_file_destroy_content_attrs(MMHandleType contents_attrs)
{
void *thumbnail = NULL;
debug_fenter(RELEASE);
- if (contents_attrs == NULL) {
- debug_error(DEBUG, "invalid handle.\n");
- return FILEINFO_ERROR_INVALID_ARGUMENT;
- }
+ mm_file_retvm_if_fails(DEBUG, contents_attrs, FILEINFO_ERROR_INVALID_ARGUMENT);
ret = mm_attrs_get_data_by_name(contents_attrs, MM_FILE_CONTENT_VIDEO_THUMBNAIL, &thumbnail);
mmfile_free(thumbnail);
}
-EXPORT_API
+
int mm_file_get_stream_info(const char *filename, int *audio_stream_num, int *video_stream_num)
{
MMFileSourceType src = {0, };
debug_fenter(RELEASE);
- if (filename == NULL || strlen(filename) == 0 || audio_stream_num == NULL || video_stream_num == NULL) {
- debug_error(DEBUG, "Invalid arguments\n");
- return FILEINFO_ERROR_INVALID_ARGUMENT;
- }
+ mm_file_retvm_if_fails(DEBUG, audio_stream_num, FILEINFO_ERROR_INVALID_ARGUMENT);
+ mm_file_retvm_if_fails(DEBUG, video_stream_num, FILEINFO_ERROR_INVALID_ARGUMENT);
+
+ ret = _is_file_readable(filename);
+ if (ret != FILEINFO_ERROR_NONE)
+ return ret;
#ifdef __MMFILE_DYN_LOADING__
MMFILE_FUNC_HANDLE func_handle;
ret = _load_dynamic_functions(&func_handle);
- if (ret == 0) {
+ if (ret != FILEINFO_ERROR_NONE) {
debug_error(DEBUG, "load library error\n");
- return FILEINFO_ERROR_FILE_INTERNAL;
+ return ret;
}
#endif
/*set source file infomation*/
MM_FILE_SET_MEDIA_FILE_SRC(src, filename);
- ret = _is_file_exist(filename);
- if (ret != FILEINFO_ERROR_NONE) {
- goto END;
- }
parse.type = MM_FILE_PARSE_TYPE_SIMPLE;
ret = _get_contents_info(NULL, &src, &parse);
*audio_stream_num = parse.audio_track_num;
*video_stream_num = parse.video_track_num;
-END:
#ifdef __MMFILE_DYN_LOADING__
_unload_dynamic_functions(&func_handle);
#endif
return ret;
}
-EXPORT_API
+
int mm_file_create_content_attrs_simple(MMHandleType *contents_attrs, const char *filename)
{
- MMHandleType attrs = NULL;
- MMFileSourceType src = {0, };
- MMFILE_PARSE_INFO parse = {0, };
- int ret = 0;
-
- debug_fenter(RELEASE);
-
-#ifdef __MMFILE_DYN_LOADING__
- MMFILE_FUNC_HANDLE func_handle;
-
- ret = _load_dynamic_functions(&func_handle);
- if (ret == 0) {
- debug_error(DEBUG, "load library error\n");
- return FILEINFO_ERROR_FILE_INTERNAL;
- }
-#endif
- if (filename == NULL) {
- ret = FILEINFO_ERROR_INVALID_ARGUMENT;
- goto END;
- } else {
- if (strlen(filename) == 0) {
- ret = FILEINFO_ERROR_INVALID_ARGUMENT;
- goto END;
- }
- }
-
- /*set source file infomation*/
- MM_FILE_SET_MEDIA_FILE_SRC(src, filename);
-
- ret = _is_file_exist(filename);
- if (ret != FILEINFO_ERROR_NONE) {
- goto END;
- }
-
- /*set attrs*/
- ret = mm_attrs_new(g_content_attrs, ARRAY_SIZE(g_content_attrs), "content", NULL, NULL, &attrs);
- if (ret) {
- debug_error(DEBUG, "attribute internal error.\n");
- ret = FILEINFO_ERROR_FILE_INTERNAL;
- goto END;
- }
-
- parse.type = MM_FILE_PARSE_TYPE_NORMAL;
- ret = _get_contents_info(attrs, &src, &parse);
- if (ret != FILEINFO_ERROR_NONE) {
- mm_attrs_free(attrs);
- attrs = NULL;
- debug_error(DEBUG, "failed to get contents: %s\n", filename);
- }
-
- *contents_attrs = attrs;
-
-END:
-#ifdef __MMFILE_DYN_LOADING__
- _unload_dynamic_functions(&func_handle);
-#endif
-
- debug_fleave(RELEASE);
-
- return ret;
+ return __create_content_attrs(contents_attrs, filename, MM_FILE_PARSE_TYPE_NORMAL);
}
-EXPORT_API
+
int mm_file_create_content_attrs_safe(MMHandleType *contents_attrs, const char *filename)
{
- MMHandleType attrs = NULL;
- MMFileSourceType src = {0, };
- MMFILE_PARSE_INFO parse = {0, };
- int ret = 0;
-
- debug_fenter(RELEASE);
-
-#ifdef __MMFILE_DYN_LOADING__
- MMFILE_FUNC_HANDLE func_handle;
-
- ret = _load_dynamic_functions(&func_handle);
- if (ret == 0) {
- debug_error(DEBUG, "load library error\n");
- return FILEINFO_ERROR_FILE_INTERNAL;
- }
-#endif
- if (filename == NULL) {
- ret = FILEINFO_ERROR_INVALID_ARGUMENT;
- goto END;
- } else {
- if (strlen(filename) == 0) {
- ret = FILEINFO_ERROR_INVALID_ARGUMENT;
- goto END;
- }
- }
-
- /*set source file infomation*/
- MM_FILE_SET_MEDIA_FILE_SRC(src, filename);
-
- ret = _is_file_exist(filename);
- if (ret != FILEINFO_ERROR_NONE) {
- goto END;
- }
-
- /*set attrs*/
- ret = mm_attrs_new(g_content_attrs, ARRAY_SIZE(g_content_attrs), "content", NULL, NULL, &attrs);
- if (ret) {
- debug_error(DEBUG, "attribute internal error.\n");
- ret = FILEINFO_ERROR_FILE_INTERNAL;
- goto END;
- }
-
- parse.type = MM_FILE_PARSE_TYPE_SAFE;
- ret = _get_contents_info(attrs, &src, &parse);
- if (ret != FILEINFO_ERROR_NONE) {
- mm_attrs_free(attrs);
- attrs = NULL;
- debug_error(DEBUG, "failed to get contents: %s\n", filename);
- }
-
- *contents_attrs = attrs;
-
-END:
-#ifdef __MMFILE_DYN_LOADING__
- _unload_dynamic_functions(&func_handle);
-#endif
-
- debug_fleave(RELEASE);
-
- return ret;
+ return __create_content_attrs(contents_attrs, filename, MM_FILE_PARSE_TYPE_SAFE);
}
-EXPORT_API
+
int mm_file_get_video_frame(const char *path, double timestamp, bool is_accurate, unsigned char **frame, int *size, int *width, int *height)
{
int ret = 0;
void *formatFuncHandle = NULL;
- if (path == NULL) {
- debug_error(DEBUG, "Invalid arguments [Path is Null]\n");
- return FILEINFO_ERROR_INVALID_ARGUMENT;
- }
+ mm_file_retvm_if_fails(DEBUG, path, FILEINFO_ERROR_INVALID_ARGUMENT);
#ifdef __MMFILE_DYN_LOADING__
/* Get from function argument */
goto exception;
}
- if (formatFuncHandle) dlclose(formatFuncHandle);
+ if (formatFuncHandle)
+ dlclose(formatFuncHandle);
return FILEINFO_ERROR_NONE;
exception:
- if (formatFuncHandle) dlclose(formatFuncHandle);
+ if (formatFuncHandle)
+ dlclose(formatFuncHandle);
return FILEINFO_ERROR_FILE_INTERNAL;
}
-EXPORT_API
+
int mm_file_get_video_frame_from_memory(const void *data, unsigned int datasize, double timestamp, bool is_accurate, unsigned char **frame, int *size, int *width, int *height)
{
int ret = 0;
void *formatFuncHandle = NULL;
- if (data == NULL) {
- debug_error(DEBUG, "Invalid arguments [data is Null]\n");
- return FILEINFO_ERROR_INVALID_ARGUMENT;
- }
-
- if (datasize == 0) {
- debug_error(DEBUG, "Invalid arguments [datasize is zero]\n");
- return FILEINFO_ERROR_INVALID_ARGUMENT;
- }
+ mm_file_retvm_if_fails(DEBUG, data, FILEINFO_ERROR_INVALID_ARGUMENT);
+ mm_file_retvm_if_fails(DEBUG, datasize != 0, FILEINFO_ERROR_INVALID_ARGUMENT);
#ifdef __MMFILE_DYN_LOADING__
/* Get from function argument */
goto exception;
}
- if (formatFuncHandle) dlclose(formatFuncHandle);
+ if (formatFuncHandle)
+ dlclose(formatFuncHandle);
return FILEINFO_ERROR_NONE;
exception:
- if (formatFuncHandle) dlclose(formatFuncHandle);
+ if (formatFuncHandle)
+ dlclose(formatFuncHandle);
return FILEINFO_ERROR_FILE_INTERNAL;
}
-EXPORT_API
+
int mm_file_check_uhqa(const char *filename, bool *is_uhqa)
{
MMHandleType attrs = NULL;
MMFILE_PARSE_INFO parse = {0, };
int ret = 0;
+ ret = _is_file_readable(filename);
+ if (ret != FILEINFO_ERROR_NONE)
+ return ret;
+
#ifdef __MMFILE_DYN_LOADING__
MMFILE_FUNC_HANDLE func_handle;
ret = _load_dynamic_functions(&func_handle);
- if (ret == 0) {
+ if (ret != FILEINFO_ERROR_NONE) {
debug_error(DEBUG, "load library error\n");
- return FILEINFO_ERROR_FILE_INTERNAL;
+ return ret;
}
#endif
- if (filename == NULL) {
- ret = FILEINFO_ERROR_INVALID_ARGUMENT;
- goto END;
- } else {
- if (strlen(filename) == 0) {
- ret = FILEINFO_ERROR_INVALID_ARGUMENT;
- goto END;
- }
- }
/*set source file infomation*/
MM_FILE_SET_MEDIA_FILE_SRC(src, filename);
- ret = _is_file_exist(filename);
- if (ret != FILEINFO_ERROR_NONE) {
- goto END;
- }
-
/*set attrs*/
ret = mm_attrs_new(g_content_attrs, ARRAY_SIZE(g_content_attrs), "content", NULL, NULL, &attrs);
if (ret) {
*is_uhqa = parse.is_uhqa;
} else {
debug_error(DEBUG, "_get_contents_info failed\n");
- *is_uhqa = FALSE;
+ *is_uhqa = false;
}
mm_attrs_free(attrs);
- attrs = NULL;
END:
#ifdef __MMFILE_DYN_LOADING__