14bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber/*
24bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber * Copyright (C) 2014 The Android Open Source Project
34bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber *
44bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
54bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber * you may not use this file except in compliance with the License.
64bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber * You may obtain a copy of the License at
74bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber *
84bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
94bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber *
104bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber * Unless required by applicable law or agreed to in writing, software
114bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
124bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber * See the License for the specific language governing permissions and
144bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber * limitations under the License.
154bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber */
164bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber
174bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber#ifndef DATA_URI_SOURCE_H_
184bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber
194bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber#define DATA_URI_SOURCE_H_
204bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber
214bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber#include <media/stagefright/DataSource.h>
224bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber#include <media/stagefright/foundation/ABase.h>
234bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber
244bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Hubernamespace android {
254bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber
264bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huberstruct ABuffer;
274bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber
284bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huberstruct DataURISource : public DataSource {
294bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber    static sp<DataURISource> Create(const char *uri);
304bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber
314bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber    virtual status_t initCheck() const;
324bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber    virtual ssize_t readAt(off64_t offset, void *data, size_t size);
334bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber    virtual status_t getSize(off64_t *size);
344bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber
354bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huberprotected:
364bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber    virtual ~DataURISource();
374bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber
384bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huberprivate:
394bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber    sp<ABuffer> mBuffer;
404bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber
414bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber    DataURISource(const sp<ABuffer> &buffer);
424bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber
434bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber    DISALLOW_EVIL_CONSTRUCTORS(DataURISource);
444bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber};
454bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber
464bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber}  // namespace android
474bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber
484bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber#endif  // DATA_URI_SOURCE_H_
494bbfff2dbf3968c267c3b2ea9f8912a38372a9daAndreas Huber
50