Remove duplicated code and unused parameter pre_checked
[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 #include "mm_file.h"
30
31 #define MAXSTREAMS              20
32 #define MMFILE_VIDEO_STREAM     0
33 #define MMFILE_AUDIO_STREAM     1
34
35 #define MMFILE_FORMAT_SUCCESS   1
36 #define MMFILE_FORMAT_FAIL      0
37
38
39 #define MM_FILE_SET_MEDIA_FILE_SRC(Media, Filename)             do { \
40                 (Media).type = MM_FILE_SRC_TYPE_FILE; \
41                 (Media).file.path = ((strstr(Filename, "file://") != NULL) ? Filename+7 : Filename); \
42         } while (0);
43
44 #define MM_FILE_SET_MEDIA_MEM_SRC(Media, Memory, Size, Format)          do { \
45                 (Media).type = MM_FILE_SRC_TYPE_MEMORY; \
46                 (Media).memory.ptr = (Memory); \
47                 (Media).memory.size = (Size); \
48                 (Media).memory.format = (Format); \
49         } while (0);
50
51
52
53 enum {
54         MM_FILE_SRC_TYPE_FILE,
55         MM_FILE_SRC_TYPE_MEMORY,
56 };
57
58 typedef struct _mm_file_source {
59         int             type;
60         union {
61                 struct {
62                         const char *path;
63                 } file;
64                 struct {
65                         const void *ptr;
66                         unsigned int size;
67                         int format;     /* _mmfileformats */
68                 } memory;
69         };
70 } MMFileSourceType;
71
72
73 typedef struct _mmfilesteam {
74         int     streamType;
75         int     codecId;
76         int     version;
77         int     bitRate;
78         int     framePerSec;
79         int     width;
80         int     height;
81         int     nbChannel;
82         int     samplePerSec;
83         int     bitPerSample;
84         bool is_uhqa;
85 } MMFileFormatStream;
86
87 typedef struct _mmfileformatframe {
88         unsigned char   bCompressed;
89         unsigned int    frameSize;
90         unsigned int    frameWidth;
91         unsigned int    frameHeight;
92         unsigned int    configLenth;
93         unsigned char   *frameData;
94         void                    *configData;
95         unsigned int    timestamp;
96         unsigned int    frameNumber;
97 } MMFileFormatFrame;
98
99
100 typedef struct _MMFileFormatContext MMFileFormatContext;
101
102 struct _MMFileFormatContext {
103         int notsupport;
104         int formatType;
105         int commandType;        /* TAG or CONTENTS */
106
107         MMFileSourceType *filesrc;      /*ref only*/
108         char *uriFileName;
109
110         /* contents information */
111         int duration;   /* milliseconds */
112         int isseekable;
113         int videoTotalTrackNum;
114         int audioTotalTrackNum;
115         int nbStreams;
116         int audioStreamId;
117         int videoStreamId;
118         MMFileFormatStream *streams[MAXSTREAMS];
119
120         /* thumbnail info */
121         MMFileFormatFrame *thumbNail;
122
123         /* tag info */
124         char *title;
125         char *artist;
126         char *author;
127         char *composer;
128         char *album;
129         char *album_artist;
130         char *copyright;
131         char *description;
132         char *comment;
133         char *genre;
134         char *classification;
135         char *year;
136         char *recDate;
137         char *part_of_set;
138         char *tagTrackNum;
139         char *rating;
140         int artworkSize;
141         char *artworkMime;
142         unsigned char *artwork;
143         float  longitude;
144         float  latitude;
145         float  altitude;
146
147         char *conductor;
148         char *unsyncLyrics;
149         char *rotate;
150         GList *syncLyrics;
151         int syncLyricsNum;
152         int cdis;
153         int smta;
154         int isSpherical;
155         int isStitched;
156         char *stitchingSoftware;
157         char *projectionType;
158         char *stereoMode;
159         int sourceCount;
160         int initViewHeading;
161         int initViewPitch;
162         int initViewRoll;
163         int timestamp;
164         int fullPanoWidth;
165         int fullPanoHeight;
166         int croppedAreaImageWidth;
167         int croppedAreaImageHeight;
168         int croppedAreaLeft;
169         int croppedAreaTop;
170         MMFILE_AMBISONIC_TYPE ambisonicType;
171         MMFILE_AMBISONIC_FORMAT ambisonicFormat;
172         MMFILE_AMBISONIC_ORDER ambisonicOrder;
173         unsigned stereoModeV2;
174         char *metadataSourceV2;
175         unsigned projTypeV2;
176         unsigned poseYawV2;
177         unsigned posePitchV2;
178         unsigned poseRollV2;
179         unsigned cbmpLayoutV2;
180         unsigned cbmpPaddingV2;
181         unsigned equiBoundsTopV2;
182         unsigned equiBoundsBottomV2;
183         unsigned equiBoundsLeftV2;
184         unsigned equiBoundsRightV2;
185
186         /* private data */
187         void *privateFormatData;
188         void *privateCodecData;
189
190         /* function pointer */
191         int (*ReadStream)(MMFileFormatContext *);
192         int (*ReadFrame)(MMFileFormatContext *, unsigned int, MMFileFormatFrame *);
193         int (*ReadTag)(MMFileFormatContext *);
194         int (*Close)(MMFileFormatContext *);
195 };
196
197 #ifndef __MMFILE_DYN_LOADING__
198 int mmfile_format_open(MMFileFormatContext **formatContext, MMFileSourceType *fileSrc);
199 int mmfile_format_read_stream(MMFileFormatContext *formatContext);
200 int mmfile_format_read_frame(MMFileFormatContext *formatContext, unsigned int timestamp, MMFileFormatFrame *frame);
201 int mmfile_format_read_tag(MMFileFormatContext *formatContext);
202 int mmfile_format_close(MMFileFormatContext *formatContext);
203 #endif
204
205 #ifdef __cplusplus
206 }
207 #endif
208
209 #endif /* _MMFILE_FORMATS_H_ */
210