Remove unused functions
[platform/core/multimedia/libmm-fileinfo.git] / utils / include / mm_file_utils.h
1 /*
2  * libmm-fileinfo
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: Haejeong Kim <backto.kim@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21
22 #ifndef _MM_FILE_UTILS_H_
23 #define _MM_FILE_UTILS_H_
24
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28
29 #include <string.h>
30 #include <stdio.h>
31 #include <stdbool.h>
32 #include <stdlib.h>
33
34 #include <sys/types.h>
35 #include <sys/stat.h>
36 #include <fcntl.h>
37 #include <glib.h>
38
39 #include "mm_file_formats.h"
40 #include "mm_file_codecs.h"
41
42 #define MMFILE_UTIL_FAIL                -1
43 #define MMFILE_UTIL_SUCCESS     0
44
45 #define MMFILE_IO_FAILED                MMFILE_UTIL_FAIL
46 #define MMFILE_IO_SUCCESS               MMFILE_UTIL_SUCCESS
47 #define CAST_MM_HANDLE(x)                       (MMHandleType)(x)
48
49 #define MMFILE_SAFE_FREE(src)   {if (src) {free(src); src = NULL; } }
50
51 #ifndef TRUE
52 #define TRUE    (1 == 1)
53 #endif
54 #ifndef FALSE
55 #define FALSE   (!TRUE)
56 #endif
57
58 #define MM_FILE_INI_PATH        "/etc/multimedia/mm_file_config.ini"
59
60
61 /*////////////////////////////////////////////////////////////////////// */
62 /*                     ENDIAN UTIL API                                // */
63 /*////////////////////////////////////////////////////////////////////// */
64 inline unsigned int     mmfile_io_be_uint32(unsigned int value);
65 inline unsigned int     mmfile_io_le_uint32(unsigned int value);
66 inline int              mmfile_io_be_int32(unsigned int value);
67 inline int              mmfile_io_le_int32(unsigned int value);
68 inline unsigned short   mmfile_io_be_uint16(unsigned short value);
69 inline unsigned short   mmfile_io_le_uint16(unsigned short value);
70 inline short            mmfile_io_be_int16(unsigned short value);
71 inline short            mmfile_io_le_int16(unsigned short value);
72 inline float            mmfile_io_be_float32(float value);
73
74 typedef struct MMFileIOHandle {
75         struct MMFileIOFunc *iofunc;
76         int     flags;         /* file flags */
77         void   *privateData;
78         char   *fileName;
79 } MMFileIOHandle;
80
81 /*////////////////////////////////////////////////////////////////////// */
82 /*                     FILE HEADER CHECK API                          // */
83 /*////////////////////////////////////////////////////////////////////// */
84 int MMFileFormatIsValidMP3(MMFileIOHandle *pFileIO, const char *mmfileuri, int frameCnt);
85 int MMFileFormatIsValidAAC(MMFileIOHandle *pFileIO, const char *mmfileuri, int dummy);
86 int MMFileFormatIsValidASF(MMFileIOHandle *pFileIO, const char *mmfileuri, int dummy);
87 int MMFileFormatIsValidMP4(MMFileIOHandle *pFileIO, const char *mmfileuri, int dummy);
88 int MMFileFormatIsValidAVI(MMFileIOHandle *pFileIO, const char *mmfileuri, int dummy);
89 int MMFileFormatIsValidAMR(MMFileIOHandle *pFileIO, const char *mmfileuri, int dummy);
90 int MMFileFormatIsValidWAV(MMFileIOHandle *pFileIO, const char *mmfileuri, int dummy);
91 int MMFileFormatIsValidMMF(MMFileIOHandle *pFileIO, const char *mmfileuri, int dummy);
92 int MMFileFormatIsValidMID(MMFileIOHandle *pFileIO, const char *mmfileuri, int dummy);
93 int MMFileFormatIsValidIMY(MMFileIOHandle *pFileIO, const char *mmfileuri, int dummy);
94 int MMFileFormatIsValidWMA(MMFileIOHandle *pFileIO, const char *mmfileuri, int dummy);
95 int MMFileFormatIsValidWMV(MMFileIOHandle *pFileIO, const char *mmfileuri, int dummy);
96 int MMFileFormatIsValidOGG(MMFileIOHandle *pFileIO, const char *mmfileuri, int dummy);
97 int MMFileFormatIsValidREAL(MMFileIOHandle *pFileIO, const char *mmfileuri, int dummy);
98 int MMFileFormatIsValidMatroska(MMFileIOHandle *pFileIO, const char *mmfileuri, int dummy);
99 int MMFileFormatIsValidQT(MMFileIOHandle *pFileIO, const char *mmfileuri, int dummy);
100 int MMFileFormatIsValidFLAC(MMFileIOHandle *pFileIO, const char *mmfileuri, int dummy);
101 int MMFileFormatIsValidFLV(MMFileIOHandle *pFileIO, const char *mmfileuri, int dummy);
102 int MMFileFormatIsValidMPEGTS(MMFileIOHandle *pFileIO, const char *mmfileuri, int dummy);
103 int MMFileFormatIsValidMPEGPS(MMFileIOHandle *pFileIO, const char *mmfileuri, int dummy);
104 int MMFileFormatIsValidMPEGVIDEO(MMFileIOHandle *pFileIO, const char *mmfileuri, int dummy);
105 int MMFileFormatIsValidMPEGAUDIO(MMFileIOHandle *pFileIO, const char *mmfileuri, int dummy);
106 int MMFileFormatIsValidAIFF(MMFileIOHandle *pFileIO, const char *mmfileuri, int dummy);
107 int MMFileFormatIsValidAPE(MMFileIOHandle *pFileIO, const char *mmfileuri, int dummy);
108
109
110
111 /*////////////////////////////////////////////////////////////////////// */
112 /*                       IO HANDLER API                               // */
113 /*////////////////////////////////////////////////////////////////////// */
114 #define MMFILE_URI_MAX_LEN     512
115 #define MMFILE_FILE_URI        "file://"
116 #define MMFILE_FILE_URI_LEN    7
117 #define MMFILE_MEM_URI         "mem://"
118 #define MMFILE_MEM_URI_LEN     6
119 #define MMFILE_MMAP_URI        "mmap://"
120 #define MMFILE_MMAP_URI_LEN    7
121 #define MMFILE_AVIO_BUFFER_LEN          32768
122
123 #define MMFILE_RDONLY           O_RDONLY
124
125 #define MMFILE_SEEK_SET         SEEK_SET
126 #define MMFILE_SEEK_CUR         SEEK_CUR
127 #define MMFILE_SEEK_END         SEEK_END
128
129 typedef struct MMFileIOFunc {
130         const char      *handleName;
131         int     (*mmfile_open)(MMFileIOHandle *h, const char *filename, int flags);
132         int     (*mmfile_read)(MMFileIOHandle *h, unsigned char *buf, int size);
133         int     (*mmfile_write)(MMFileIOHandle *h, unsigned char *buf, int size);
134         int64_t(*mmfile_seek)(MMFileIOHandle *h, int64_t pos, int whence);
135         long long(*mmfile_tell)(MMFileIOHandle *h);
136         int     (*mmfile_close)(MMFileIOHandle *h);
137         struct MMFileIOFunc *next;
138 } MMFileIOFunc;
139
140
141 int mmfile_register_io_func(MMFileIOFunc *iofunc);
142 int mmfile_register_io_all();
143
144 int                     mmfile_open(MMFileIOHandle **h, const char *filename, int flags);
145 int                     mmfile_read(MMFileIOHandle *h, unsigned char *buf, int size);
146 int                     mmfile_write(MMFileIOHandle *h, unsigned char *buf, int size);
147 int64_t         mmfile_seek(MMFileIOHandle *h, int64_t pos, int whence);
148 long long       mmfile_tell(MMFileIOHandle *h);
149 int                     mmfile_close(MMFileIOHandle *h);
150
151
152
153 /*////////////////////////////////////////////////////////////////////// */
154 /*                            MIME  API                               // */
155 /*////////////////////////////////////////////////////////////////////// */
156 #define MMFILE_FILE_FMT_MAX_LEN 25
157 #define MMFILE_MIMETYPE_MAX_LEN 40
158 #define MMFILE_FILE_EXT_MAX_LEN 7
159
160 int mmfile_util_get_ffmpeg_format(const char *mime, char *ffmpegFormat);
161 int mmfile_util_get_mimetype(int formatId, char *mimeType, int buf_size);
162
163
164 /*////////////////////////////////////////////////////////////////////// */
165 /*                            PRINT API                               // */
166 /*////////////////////////////////////////////////////////////////////// */
167 void mmfile_format_print_contents(MMFileFormatContext *in);
168 void mmfile_format_print_tags(MMFileFormatContext *in);
169 void mmfile_codec_print(MMFileCodecContext *in);
170 void mmfile_format_print_frame(MMFileFormatFrame *in);
171
172
173
174
175 /*////////////////////////////////////////////////////////////////////// */
176 /*                            STRING API                              // */
177 /*////////////////////////////////////////////////////////////////////// */
178 char **mmfile_strsplit(const char *string, const char *delimiter);
179 void mmfile_strfreev(char **str_array);
180 int  mmfile_util_wstrlen(unsigned short *wText);
181 short *mmfile_swap_2byte_string(short *mszOutput, short *mszInput, int length);
182 char *mmfile_get_charset(const char *str);
183 char *mmfile_string_convert(const char *str, unsigned int len, const char *to_codeset, const char *from_codeset, gsize *bytes_read, unsigned int *bytes_written);
184 char *mmfile_strdup(const char *str);
185
186
187
188 /*////////////////////////////////////////////////////////////////////// */
189 /*                            LOCALE API                              // */
190 /*////////////////////////////////////////////////////////////////////// */
191 char *MMFileUtilGetLocale();
192
193
194
195
196 /*////////////////////////////////////////////////////////////////////// */
197 /*                            IMAGE API                               // */
198 /*////////////////////////////////////////////////////////////////////// */
199 typedef enum {
200         MMFILE_PIXEL_FORMAT_YUV420 = 0,
201         MMFILE_PIXEL_FORMAT_YUV422 = 1,
202         MMFILE_PIXEL_FORMAT_RGB565 = 2,
203         MMFILE_PIXEL_FORMAT_RGB888 = 3,
204         MMFILE_PIXEL_FORMAT_MAX,
205 } eMMFilePixelFormat;
206
207 int mmfile_util_image_convert(unsigned char *src, eMMFilePixelFormat src_fmt, int src_width, int src_height, unsigned char *dst, eMMFilePixelFormat dst_fmt, int dst_width, int dst_height);
208
209
210 #ifdef __MMFILE_MEM_TRACE__
211 /*////////////////////////////////////////////////////////////////////// */
212 /*                            MEMORY DEBUG API                        // */
213 /*////////////////////////////////////////////////////////////////////// */
214 void *mmfile_malloc_debug(unsigned int size, const char *func, unsigned int line);
215 void *mmfile_calloc_debug(unsigned int nmemb, unsigned int size, const char *func, unsigned int line);
216 void  mmfile_free_debug(void *ptr, const char *func, unsigned int line);
217 void *mmfile_realloc_debug(void *ptr, unsigned int size, const char *func, unsigned int line);
218 void *mmfile_memset_debug(void *s, int c, unsigned int n, const char *func, unsigned int line);
219 void *mmfile_memcpy_debug(void *dest, const void *src, unsigned int n, const char *func, unsigned int line);
220 char *mmfile_string_convert_debug(const char *str, unsigned int len, const char *to_codeset, const char *from_codeset,
221                                                                 int *bytes_read,
222                                                                 int *bytes_written,
223                                                                 const char *func,
224                                                                 unsigned int line);
225 char *mmfile_strdup_debug(const char *str, const char *func, unsigned int line);
226
227 #define mmfile_malloc(size)         mmfile_malloc_debug((size), __func__, __LINE__)
228 #define mmfile_calloc(nmemb, size)         mmfile_calloc_debug((nmemb), (size), __func__, __LINE__)
229 #define mmfile_free(ptr)            do { mmfile_free_debug((ptr), __func__, __LINE__); (ptr) = NULL; } while (0)
230 #define mmfile_realloc(ptr, size)   mmfile_realloc_debug((ptr), (size), __func__, __LINE__)
231 #define mmfile_memset(ptr, c, n)    mmfile_memset_debug((ptr), (c), (n),  __func__, __LINE__)
232 #define mmfile_memcpy(dest, src, n) mmfile_memcpy_debug((ptr), (src), (n), __func__, __LINE__)
233
234 #define mmfile_string_convert(str, len, to_codeset, from_codeset, bytes_read, bytes_written) mmfile_string_convert_debug((str), (len), (to_codeset), (from_codeset), (bytes_read), (bytes_written), __func__, __LINE__)
235 #define mmfile_strdup(x)   mmfile_strdup_debug((x), __func__, __LINE__)
236 #else
237 /*////////////////////////////////////////////////////////////////////// */
238 /*                            MEMORY API                              // */
239 /*////////////////////////////////////////////////////////////////////// */
240 void *mmfile_malloc(unsigned int size);
241 void *mmfile_calloc(unsigned int nmemb, unsigned int size);
242 #define mmfile_free(ptr)  do { if ((ptr)) { mmfile_free_r((ptr)); (ptr) = NULL; } } while (0)
243 void  mmfile_free_r(void *ptr);
244 void *mmfile_realloc(void *ptr, unsigned int size);
245 void *mmfile_memset(void *s, int c, unsigned int n);
246 void *mmfile_memcpy(void *dest, const void *src, unsigned int n);
247 #endif
248
249
250
251 /*////////////////////////////////////////////////////////////////////// */
252 /*                            TAG API                                 // */
253 /*////////////////////////////////////////////////////////////////////// */
254
255 #define MM_FILE_REVERSE_BYTE_ORDER_INT(i) ((int)((((i)&0xFF000000)>>24) | (((i)&0x00FF0000)>>8) | (((i)&0x0000FF00)<<8) | (((i)&0x000000FF)<<24)))
256 #define MM_FILE_REVERSE_BYTE_ORDER_SHORT(s) ((short)((((s)&0xFF00)>>8) | (((s)&0x00FF)<<8)))
257
258 #define _STRNCPY_EX(dst, src, size)   { if ((size > 0)) {strncpy((char*)(dst), (char*)(src), (size)); *((dst) + (size)) = '\0'; } }
259
260 inline static int __AvMemstr(unsigned char *mem, unsigned char *str, int str_len, int search_range)
261 {
262         int offset = 0;
263         unsigned char *pSrc = mem;
264
265         for (offset = 0; offset < search_range; offset++) {
266                 pSrc = mem + offset;
267                 if (memcmp(pSrc, str, str_len) == 0)
268                         return offset;
269         }
270
271         return -1;
272 }
273
274 #define IS_ID3V2_TAG(x) (((x))[0] == 0x49 && ((x))[1] == 0x44 && ((x))[2] == 0x33)
275 #define IS_INCLUDE_URL(x)       (((x))[0] == 0x2D && ((x))[1] == 0x2D && ((x))[2] == 0x3E)
276 #define IS_INCLUDE_URL_UTF16(x) (((x))[0] == 0x2D && ((x))[1] == NULL && ((x))[2] == 0x2D && ((x))[3] == NULL && ((x))[4] == 0x3E && ((x))[5] == NULL)
277 #define IS_ENCODEDBY_UTF16(x)   (((x))[0] == 0xFF && ((x))[1] == 0xFE)
278 #define IS_ENCODEDBY_UTF16_R(x) (((x))[0] == 0xFE && ((x))[1] == 0xFF)
279
280 #define NEWLINE_OF_UTF16(x)     (((x))[0] == 0xFF && ((x))[1] == 0xFE && ((x))[2] == 0x00 && ((x))[3] == 0x00)
281 #define NEWLINE_OF_UTF16_R(x)   (((x))[0] == 0xFE && ((x))[1] == 0xFF && ((x))[2] == 0x00 && ((x))[3] == 0x00)
282
283
284 #define AV_WM_LOCALCODE_SIZE_MAX                2
285 #define MP3_TAGv2_HEADER_LEN 10
286 #define MP3_TAGv2_23_TXT_HEADER_LEN 10
287 #define MP3_TAGv2_22_TXT_HEADER_LEN 6
288 #define TAGV1_SEEK_GAP 10
289
290
291 typedef enum {
292         AV_ID3V2_PICTURE_TYPE_MIN,
293         AV_ID3V2_PICTURE_TYPE_OTHER = AV_ID3V2_PICTURE_TYPE_MIN,
294         AV_ID3V2_PICTURE_TYPE_PNG_ONLY_FILEICON,
295         AV_ID3V2_PICTURE_TYPE_OTHER_FILEICON,
296         AV_ID3V2_PICTURE_TYPE_FRONT_COVER,
297         AV_ID3V2_PICTURE_TYPE_BACK_COVER,
298         AV_ID3V2_PICTURE_TYPE_LEAFLET_PAGE,
299         AV_ID3V2_PICTURE_TYPE_MEDIA_SIDEOFCD,
300         AV_ID3V2_PICTURE_TYPE_LEAD_ARTIST,
301         AV_ID3V2_PICTURE_TYPE_ARTIST_PERFORMER,
302         AV_ID3V2_PICTURE_TYPE_CONDUCTOR,
303         AV_ID3V2_PICTURE_TYPE_BAND_ORCHESTRA,
304         AV_ID3V2_PICTURE_TYPE_COMPOSER,
305         AV_ID3V2_PICTURE_TYPE_LYRICIST_TEXTWRITER,
306         AV_ID3V2_PICTURE_TYPE_RECORDING_LOCATION,
307         AV_ID3V2_PICTURE_TYPE_DURING_RECORDING,
308         AV_ID3V2_PICTURE_TYPE_DURING_PERFORMANCE,
309         AV_ID3V2_PICTURE_TYPE_MOVIE_VIDEO_SCREEN_CAPTURE,
310         AV_ID3V2_PICTURE_TYPE_BRIGHT_COLOURED_FISH,
311         AV_ID3V2_PICTURE_TYPE_ILLUSTRATION,
312         AV_ID3V2_PICTURE_TYPE_BAND_ARTIST_LOGOTYPE,
313         AV_ID3V2_PICTURE_TYPE_PUBLISHER_STUDIO_LOGOTYPE,
314
315         AV_ID3V2_PICTURE_TYPE_MAX,
316         AV_ID3V2_PICTURE_TYPE_UNKNOWN   = AV_ID3V2_PICTURE_TYPE_MAX /* Unknown picture type */
317
318 } AvID3v2PictureType;
319
320
321 #define MP3TAGINFO_SIZE                                                 128         /* file end 128 byte  */
322 #define MP3_ID3_TITLE_LENGTH                                    30
323 #define MP3_ID3_ARTIST_LENGTH                                   30
324 #define MP3_ID3_ALBUM_LENGTH                                    30
325 #define MP3_ID3_YEAR_LENGTH                                             4
326 #define MP3_ID3_DESCRIPTION_LENGTH                              30
327 #define MP3_ID3_GENRE_LENGTH                                    30
328
329 #define MP3_ID3_TRACKNUM_LENGTH                                 30
330 #define MP3_ID3_ENCBY_LENGTH                                    30
331 #define MP3_ID3_URL_LENGTH                                              100
332 #define MP3_ID3_FRAMEID_LENGTH                                  30
333 #define MP3_ID3_ORIGINARTIST_LENGTH                             30
334 #define MP3_ID3_COMPOSER_LENGTH                                 100
335 #define MP3_ID3_IMAGE_DESCRIPTION_MAX_LENGTH    65
336 #define MP3_ID3_IMAGE_MIME_TYPE_MAX_LENGTH              31
337 #define MP3_ID3_IMAGE_EXT_MAX_LENGTH                    4
338 #define TCC_FM_PATH_MOUNT_MMC                                   "/Mount/Mmc"
339
340
341
342 typedef enum {
343         AV_ID3V2_ISO_8859 = 0,
344         AV_ID3V2_UTF16,
345         AV_ID3V2_UTF16_BE,
346         AV_ID3V2_UTF8,
347         AV_ID3V2_MAX
348
349 } AvID3v2EncodingType;
350
351
352 typedef struct {
353         char    *pImageBuf;
354         char    *imageDescription;
355         char    imageMIMEType[MP3_ID3_IMAGE_MIME_TYPE_MAX_LENGTH];
356         char    imageExt[MP3_ID3_IMAGE_EXT_MAX_LENGTH];
357         int             pictureType;
358         int             imageLen;
359         int             imgDesLen;
360         int             imgMimetypeLen;
361         bool    bURLInfo;
362
363 } AvTagVer2ImageInfo;
364
365 typedef struct {
366         int             tagLen;
367         char    tagVersion;
368
369         bool    bTitleMarked;
370         bool    bArtistMarked;
371         bool    bAlbumMarked;
372         bool    bAlbum_ArtistMarked;
373         bool    bYearMarked;
374         bool    bDescriptionMarked;
375         bool    bGenreMarked;
376
377         bool    bTrackNumMarked;
378         bool    bEncByMarked;
379         bool    bURLMarked;
380         bool    bCopyRightMarked;
381         bool    bOriginArtistMarked;
382         bool    bComposerMarked;
383         bool    bImageMarked;
384         bool    bRecDateMarked;
385         bool    bPartOfASetMarked;
386         bool    bContentGroupMarked;
387         bool    bUnsyncLyricsMarked;
388         bool    bSyncLyricsMarked;
389
390         bool    bConductorMarked;
391 } AvTagVer2AdditionalData;
392
393
394 typedef struct {
395         int             titleLen;
396         int             artistLen;
397         int             authorLen;
398         int             copyrightLen;
399         int             commentLen;
400         int             ratingLen;
401         int             albumLen;
402         int             yearLen;
403         int             genreLen;
404         int             tracknumLen;
405         int             recdateLen;
406         int             partofsetLen;
407         int             conductorLen;
408         int             album_artistLen;
409
410 /* for PC Studio Podcast */
411         int             contentGroupLen;
412
413 /* for ID3V2 Tag */
414         int             encbyLen;
415         int             urlLen;
416         int             originartistLen;
417         int             composerLen;
418         int             unsynclyricsLen;
419         int             syncLyricsNum;
420
421 /* To send resolution info to appl from OEM */
422         int     width;
423         int     height;
424
425         unsigned int    bitRate;
426         unsigned int    sampleRate;
427         unsigned int    channels;
428         long long               duration;
429
430 /* for mp3 Info */
431         char                    *pToc;                  /* VBR??? SeekPosition?? ????? ???? TOC ??????? ?????? ??\EF\BF???? char ?��, 100 ????? ???? */
432         unsigned int    mpegVersion;    /* 1 : mpeg 1,    2 : mpeg 2, 3 : mpeg2.5 */
433         unsigned int    layer;                  /* 1 : layer1, 2 : layer2, 3 : layer3 */
434         unsigned int    channelIndex;   /* 0 : stereo, 1 : joint_stereo, 2 : dual_channel, 3 : mono */
435         unsigned int    objectType;
436         unsigned int    headerType;
437         long long               fileLen;                /* mp3 ?????? ??u ???? */
438         long                    headerPos;              /* mp3 ????\EF\BF?o?????? ??????? ??? */
439         long long               datafileLen;    /* ID3Tag???? ??????? ???? mp3 frame???? ????,  VBR??? XHEADDATA ?? bytes ?? ?????? */
440         int                             frameSize;              /* mp3 frame ?? ???? ??? */
441         int                             frameNum;               /* mp3 ????? ???????? ?? ?????��\EF\BF? */
442         bool                    bVbr;                   /* VBR mp3? */
443         bool                    bPadding;               /* Padding? */
444         bool                    bV1tagFound;
445
446         char                    *pTitle;                /*Title/songname/ */
447         char                    *pArtist;               /*Lead performer(s)/Soloist(s), */
448         char                    *pAuthor;               /*Author */
449         char                    *pCopyright;
450         char                    *pComment;
451         char                    *pAlbum;                /*Album/Movie/ */
452         char                    *pAlbum_Artist;
453         char                    *pYear;
454         char                    *pGenre;
455         char                    *pTrackNum;             /*Track number/Position in set */
456         char                    *pRecDate;              /*Recording dates */
457         char                    *pPartOfASet;           // Part of a set
458
459         char                    *pConductor;            /*[#TPE3 Conductor/performer refinement], ADDED: 2010-01-xx*/
460
461 /* for PC Studio Podcast */
462         char                    *pContentGroup;
463
464 /* for ID3V2 Tag */
465         char                    *pEncBy;                                /*Encoded by */
466         char                    *pURL;                                  /*User defined URL link frame for ID3V2 Tag */
467         char                    *pOriginArtist;                 /*Original artist(s)/performer(s) */
468         char                    *pComposer;                             /*Composer */
469         char                    *pUnsyncLyrics;                 /*Unsychronised lyrics/text transcription */
470         GList           *pSyncLyrics;                           /*Sychronised lyrics/text */
471
472         AvTagVer2ImageInfo                      imageInfo;      /*Album art   attached feature */
473         AvTagVer2AdditionalData         tagV2Info; /*Needed data for ID3 tag parsing */
474
475 /*for ID3V1 Tag */
476         unsigned char   genre;
477
478 } AvFileContentInfo;
479
480 typedef struct {
481         int             videocodec;
482         int             audiocodec;
483         int             width;
484         int             height;
485 } AvExtraInfo;
486
487 typedef struct {
488         unsigned long   time_info;
489         char                            *lyric_info;
490 } AvSynclyricsInfo;
491
492 void mm_file_free_synclyrics_list(GList *synclyrics_list);
493
494 inline static void mm_file_free_AvFileContentInfo(AvFileContentInfo *pInfo)
495 {
496         if (pInfo) {
497                 mmfile_free(pInfo->pToc);
498                 mmfile_free(pInfo->pTitle);
499                 mmfile_free(pInfo->pArtist);
500                 mmfile_free(pInfo->pAuthor);
501                 mmfile_free(pInfo->pCopyright);
502                 mmfile_free(pInfo->pComment);
503                 mmfile_free(pInfo->pAlbum);
504                 mmfile_free(pInfo->pAlbum_Artist);
505                 mmfile_free(pInfo->pYear);
506                 mmfile_free(pInfo->pGenre);
507                 mmfile_free(pInfo->pTrackNum);
508                 mmfile_free(pInfo->pRecDate);
509                 mmfile_free(pInfo->pPartOfASet);
510                 mmfile_free(pInfo->pConductor);
511                 mmfile_free(pInfo->pContentGroup);
512                 mmfile_free(pInfo->pEncBy);
513                 mmfile_free(pInfo->pURL);
514                 mmfile_free(pInfo->pOriginArtist);
515                 mmfile_free(pInfo->pComposer);
516                 mmfile_free(pInfo->pUnsyncLyrics);
517                 mmfile_free(pInfo->imageInfo.pImageBuf);
518                 mmfile_free(pInfo->imageInfo.imageDescription);
519                 if (strlen(pInfo->imageInfo.imageMIMEType) > 0)
520                         memset(pInfo->imageInfo.imageMIMEType, 0, MP3_ID3_IMAGE_MIME_TYPE_MAX_LENGTH);
521         }
522 }
523
524
525 bool    mm_file_id3tag_parse_v110(AvFileContentInfo *pInfo, unsigned char *buffer);  /*20050401 Condol : for MP3 content Info. */
526 bool    mm_file_id3tag_parse_v222(AvFileContentInfo *pInfo, unsigned char *buffer);
527 bool    mm_file_id3tag_parse_v223(AvFileContentInfo *pInfo, unsigned char *buffer);
528 bool    mm_file_id3tag_parse_v224(AvFileContentInfo *pInfo, unsigned char *buffer);
529 void    mm_file_id3tag_restore_content_info(AvFileContentInfo *pInfo);
530 int             MMFileUtilGetMetaDataFromMKV(MMFileFormatContext *formatContext);
531 int             MMFileUtilGetMetaDataFromMP4(MMFileFormatContext *formatContext);
532 int             ParseSpatialVideoMetadataFromXMLString(const char *xmlStr, MMFileFormatContext *formatContext);
533
534
535 #ifdef __cplusplus
536 }
537 #endif
538
539 #endif /*_MMFILE_UTILS_H_*/
540