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