merge with master
[platform/core/multimedia/libmm-fileinfo.git] / include / mm_file_formats.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 _MMFILE_FORMATS_H_
23 #define _MMFILE_FORMATS_H_
24
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 #include <glib.h>
29
30 #define MAXSTREAMS              20
31 #define MMFILE_VIDEO_STREAM     0
32 #define MMFILE_AUDIO_STREAM     1
33
34 #define MMFILE_FORMAT_SUCCESS   1
35 #define MMFILE_FORMAT_FAIL      0
36
37
38 #define MM_FILE_SET_MEDIA_FILE_SRC(Media,Filename)              do { \
39         (Media).type = MM_FILE_SRC_TYPE_FILE; \
40         (Media).file.path = ((strstr(Filename,"file://")!=NULL)? Filename+7:Filename); \
41 } while (0);
42
43 #define MM_FILE_SET_MEDIA_MEM_SRC(Media,Memory,Size,Format)             do { \
44         (Media).type = MM_FILE_SRC_TYPE_MEMORY; \
45         (Media).memory.ptr = (Memory); \
46         (Media).memory.size = (Size); \
47         (Media).memory.format = (Format); \
48 } while (0);
49
50
51
52 enum {
53         MM_FILE_SRC_TYPE_FILE,
54         MM_FILE_SRC_TYPE_MEMORY,
55 };
56
57 enum {
58         MM_FILE_DRM_NONE = 0,   /*not drm file*/
59         MM_FILE_DRM_OMA,                /*oma drm*/
60         MM_FILE_DRM_DIVX,               /*divx drm*/
61 };
62
63
64 typedef struct _mm_file_source {
65         int             type;
66         union {
67                 struct {
68                         const char *path;
69                 } file;
70                 struct {
71                         const void *ptr;
72                         unsigned int size;
73                         int format;     /* _mmfileformats */
74                 } memory;
75         };
76 } MMFileSourceType;
77
78
79 typedef struct _mmfilesteam {
80         int     streamType;
81         int     codecId;
82         int     version;
83         int     bitRate;
84         int     framePerSec;
85         int     width;
86         int     height;
87         int     nbChannel;
88         int     samplePerSec;
89 } MMFileFormatStream;
90
91 typedef struct _mmfileformatframe {
92         unsigned char   bCompressed;
93         unsigned int    frameSize;
94         unsigned int    frameWidth;
95         unsigned int    frameHeight;
96         unsigned int    configLenth;
97         unsigned char   *frameData;
98         void                    *configData;
99         unsigned int    timestamp;
100         unsigned int    frameNumber;
101 } MMFileFormatFrame;
102
103
104 typedef struct _MMFileFormatContext MMFileFormatContext;
105
106 struct _MMFileFormatContext {
107         int notsupport;
108         int formatType;
109         int commandType;        /* TAG or CONTENTS */
110         int pre_checked;        /*filefomat already detected.*/
111
112         MMFileSourceType *filesrc;      /*ref only*/
113         char *uriFileName;
114
115         /* contents information */
116         int duration;   /* milliseconds */
117         int isseekable;
118         int isdrm;              /*drm type. see MM_FILE_DRM_XXX*/
119         int videoTotalTrackNum;
120         int audioTotalTrackNum;
121         int nbStreams;
122         int audioStreamId;
123         int videoStreamId;
124         MMFileFormatStream *streams[MAXSTREAMS];
125
126         /* thumbnail info */
127         MMFileFormatFrame *thumbNail;
128
129         /* tag info */
130         char *title;
131         char *artist;
132         char *author;
133         char *composer;
134         char *album;
135         char *copyright;
136         char *description;
137         char *comment;
138         char *genre;
139         char *classification;
140         char *year;
141         char *recDate;
142         char *tagTrackNum;
143         char *rating;
144         int artworkSize;
145         char *artworkMime;
146         unsigned char *artwork;
147         float  longitude;
148         float  latitude;
149         float  altitude;
150
151         char *conductor;
152         char *unsyncLyrics;
153         char *rotate;
154         GList *syncLyrics;
155         int syncLyricsNum;
156         
157         /* private data */
158         void *privateFormatData;
159         void *privateCodecData;
160
161         /* function pointer */
162         int (*ReadStream)       (MMFileFormatContext*);
163         int (*ReadFrame)        (MMFileFormatContext*,unsigned int,MMFileFormatFrame*);
164         int (*ReadTag)          (MMFileFormatContext*);
165         int (*Close)            (MMFileFormatContext*);
166 };
167
168 #ifndef __MMFILE_DYN_LOADING__
169 int mmfile_format_open                  (MMFileFormatContext **formatContext, MMFileSourceType *fileSrc);
170 int mmfile_format_read_stream   (MMFileFormatContext *formatContext);
171 int mmfile_format_read_frame    (MMFileFormatContext *formatContext, unsigned int timestamp, MMFileFormatFrame *frame);
172 int mmfile_format_read_tag              (MMFileFormatContext *formatContext);
173 int mmfile_format_close                 (MMFileFormatContext *formatContext);
174 #endif
175
176 #ifdef __cplusplus
177 }
178 #endif
179
180 #endif /* _MMFILE_FORMATS_H_ */
181