Line data Source code
1 : /*
2 : * Copyright (C) 2009 The Android Open Source Project
3 : *
4 : * Licensed under the Apache License, Version 2.0 (the "License");
5 : * you may not use this file except in compliance with the License.
6 : * You may obtain a copy of the License at
7 : *
8 : * http://www.apache.org/licenses/LICENSE-2.0
9 : *
10 : * Unless required by applicable law or agreed to in writing, software
11 : * distributed under the License is distributed on an "AS IS" BASIS,
12 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 : * See the License for the specific language governing permissions and
14 : * limitations under the License.
15 : */
16 :
17 : #ifndef DATA_SOURCE_H_
18 :
19 : #define DATA_SOURCE_H_
20 :
21 : #include <sys/types.h>
22 :
23 : #include <media/stagefright/MediaErrors.h>
24 : #include <utils/RefBase.h>
25 :
26 : namespace stagefright {
27 :
28 : class String8;
29 :
30 : class DataSource : public RefBase {
31 : public:
32 : enum Flags {
33 : kWantsPrefetching = 1,
34 : kStreamedFromLocalHost = 2,
35 : kIsCachingDataSource = 4,
36 : kIsHTTPBasedSource = 8,
37 : };
38 :
39 0 : DataSource() {}
40 :
41 : virtual status_t initCheck() const = 0;
42 :
43 : virtual ssize_t readAt(off64_t offset, void *data, size_t size) = 0;
44 :
45 : // Convenience methods:
46 : bool getUInt16(off64_t offset, uint16_t *x);
47 : bool getUInt24(off64_t offset, uint32_t *x); // 3 byte int, returned as a 32-bit int
48 : bool getUInt32(off64_t offset, uint32_t *x);
49 : bool getUInt64(off64_t offset, uint64_t *x);
50 :
51 : // May return ERROR_UNSUPPORTED.
52 : virtual status_t getSize(off64_t *size);
53 :
54 0 : virtual uint32_t flags() {
55 0 : return 0;
56 : }
57 :
58 0 : virtual status_t reconnectAtOffset(off64_t offset) {
59 0 : return ERROR_UNSUPPORTED;
60 : }
61 :
62 : #if 0
63 : ////////////////////////////////////////////////////////////////////////////
64 :
65 : bool sniff(String8 *mimeType, float *confidence, sp<AMessage> *meta);
66 :
67 : // The sniffer can optionally fill in "meta" with an AMessage containing
68 : // a dictionary of values that helps the corresponding extractor initialize
69 : // its state without duplicating effort already exerted by the sniffer.
70 : typedef bool (*SnifferFunc)(
71 : const sp<DataSource> &source, String8 *mimeType,
72 : float *confidence, sp<AMessage> *meta);
73 :
74 : static void RegisterSniffer(SnifferFunc func);
75 : static void RegisterDefaultSniffers();
76 :
77 : // for DRM
78 : virtual sp<DecryptHandle> DrmInitialization(const char *mime = NULL) {
79 : return NULL;
80 : }
81 : virtual void getDrmInfo(sp<DecryptHandle> &handle, DrmManagerClient **client) {};
82 :
83 : virtual String8 getUri() {
84 : return String8();
85 : }
86 : #endif
87 :
88 : virtual String8 getMIMEType() const;
89 :
90 : protected:
91 0 : virtual ~DataSource() {}
92 :
93 : private:
94 : DataSource(const DataSource &);
95 : DataSource &operator=(const DataSource &);
96 : };
97 :
98 : } // namespace stagefright
99 :
100 : #endif // DATA_SOURCE_H_
|