DataSource.h revision dcd25efb46c41c8d24a0a9cf61fb57f84149709e
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2009 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
569a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes * you may not use this file except in compliance with the License.
669a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes * You may obtain a copy of the License at
769a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
969a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1169a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
1269a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1369a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes * See the License for the specific language governing permissions and
1469a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef DATA_SOURCE_H_
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DATA_SOURCE_H_
20cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen
21cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen#include <sys/types.h>
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
230795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopian#include <utils/Errors.h>
240795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopian#include <utils/KeyedVector.h>
25f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten#include <utils/List.h>
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/RefBase.h>
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/threads.h>
280769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross#include <drm/DrmManagerClient.h>
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
30ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampenamespace android {
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass String8;
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass DataSource : public RefBase {
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    enum Flags {
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        kWantsPrefetching      = 1,
38c6a410164e1fd728cf7873493baacca7bc29548dMark Salyzyn        kStreamedFromLocalHost = 2,
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    };
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
41c6a410164e1fd728cf7873493baacca7bc29548dMark Salyzyn    static sp<DataSource> CreateFromURI(
42c6a410164e1fd728cf7873493baacca7bc29548dMark Salyzyn            const char *uri,
43c6a410164e1fd728cf7873493baacca7bc29548dMark Salyzyn            const KeyedVector<String8, String8> *headers = NULL);
44c6a410164e1fd728cf7873493baacca7bc29548dMark Salyzyn
456af763bec7c3f4d50fee8dd0046409bb8a7fe8f6Glenn Kasten    DataSource() {}
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
47160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate    virtual status_t initCheck() const = 0;
48a5109a878eeff22e32ee5ce1b1cd15e8daad5234San Mehat
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual ssize_t readAt(off_t offset, void *data, size_t size) = 0;
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
510f0b4919667f418b249c497f5ad3e83fdf4437e5Andreas Gampe    // Convenience methods:
520f0b4919667f418b249c497f5ad3e83fdf4437e5Andreas Gampe    bool getUInt16(off_t offset, uint16_t *x);
530f0b4919667f418b249c497f5ad3e83fdf4437e5Andreas Gampe
54160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate    // May return ERROR_UNSUPPORTED.
55160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate    virtual status_t getSize(off_t *size);
56160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate
57160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate    virtual uint32_t flags() {
58160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate        return 0;
59f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten    }
604c0c4df7cfa0b4228ef547aa940674393cb2ab77Ruben Brunk
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ////////////////////////////////////////////////////////////////////////////
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
634c0c4df7cfa0b4228ef547aa940674393cb2ab77Ruben Brunk    bool sniff(String8 *mimeType, float *confidence);
644c0c4df7cfa0b4228ef547aa940674393cb2ab77Ruben Brunk
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    typedef bool (*SnifferFunc)(
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            const sp<DataSource> &source, String8 *mimeType, float *confidence);
674c0c4df7cfa0b4228ef547aa940674393cb2ab77Ruben Brunk
684c0c4df7cfa0b4228ef547aa940674393cb2ab77Ruben Brunk    static void RegisterSniffer(SnifferFunc func);
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static void RegisterDefaultSniffers();
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
714c0c4df7cfa0b4228ef547aa940674393cb2ab77Ruben Brunk    // for DRM
724c0c4df7cfa0b4228ef547aa940674393cb2ab77Ruben Brunk    virtual DecryptHandle* DrmInitialization(DrmManagerClient *client) {
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return NULL;
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual void getDrmInfo(DecryptHandle **handle, DrmManagerClient **client) {};
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprotected:
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual ~DataSource() {}
804c0c4df7cfa0b4228ef547aa940674393cb2ab77Ruben Brunk
81e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehatprivate:
824c0c4df7cfa0b4228ef547aa940674393cb2ab77Ruben Brunk    static Mutex gSnifferMutex;
834c0c4df7cfa0b4228ef547aa940674393cb2ab77Ruben Brunk    static List<SnifferFunc> gSniffers;
844c0c4df7cfa0b4228ef547aa940674393cb2ab77Ruben Brunk
85e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat    DataSource(const DataSource &);
864c0c4df7cfa0b4228ef547aa940674393cb2ab77Ruben Brunk    DataSource &operator=(const DataSource &);
874c0c4df7cfa0b4228ef547aa940674393cb2ab77Ruben Brunk};
88e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat
894c0c4df7cfa0b4228ef547aa940674393cb2ab77Ruben Brunk}  // namespace android
904c0c4df7cfa0b4228ef547aa940674393cb2ab77Ruben Brunk
914c0c4df7cfa0b4228ef547aa940674393cb2ab77Ruben Brunk#endif  // DATA_SOURCE_H_
924c0c4df7cfa0b4228ef547aa940674393cb2ab77Ruben Brunk