16c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath/*
26c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath * Copyright (C) 2011 The Android Open Source Project
36c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath *
46c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath * Licensed under the Apache License, Version 2.0 (the "License");
56c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath * you may not use this file except in compliance with the License.
66c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath * You may obtain a copy of the License at
76c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath *
86c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath *      http://www.apache.org/licenses/LICENSE-2.0
96c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath *
106c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath * Unless required by applicable law or agreed to in writing, software
116c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath * distributed under the License is distributed on an "AS IS" BASIS,
126c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath * See the License for the specific language governing permissions and
146c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath * limitations under the License.
156c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath */
166c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath
176c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath#ifndef DATA_URI_SOURCE_H_
186c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath
196c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath#define DATA_URI_SOURCE_H_
206c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath
216c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath#include <stdio.h>
226c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath
236c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath#include <media/stagefright/DataSource.h>
246c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath#include <media/stagefright/MediaErrors.h>
256c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath#include <media/stagefright/foundation/AString.h>
266c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath
276c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamathnamespace android {
286c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath
296c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamathclass DataUriSource : public DataSource {
306c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamathpublic:
316c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath    DataUriSource(const char *uri);
326c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath
336c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath    virtual status_t initCheck() const {
346c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath        return mInited;
356c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath    }
366c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath
376c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath    virtual ssize_t readAt(off64_t offset, void *data, size_t size);
386c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath
396c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath    virtual status_t getSize(off64_t *size) {
406c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath        if (mInited != OK) {
416c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath            return mInited;
426c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath        }
436c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath
446c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath        *size = mData.size();
456c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath        return OK;
466c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath    }
476c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath
486c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath    virtual String8 getUri() {
496c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath        return mDataUri;
506c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath    }
516c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath
526c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath    virtual String8 getMIMEType() const {
536c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath        return mMimeType;
546c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath    }
556c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath
566c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamathprotected:
576c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath    virtual ~DataUriSource() {
586c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath        // Nothing to delete.
596c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath    }
606c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath
616c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamathprivate:
626c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath    const String8 mDataUri;
636c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath
646c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath    String8 mMimeType;
656c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath    // Use AString because individual bytes may not be valid UTF8 chars.
666c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath    AString mData;
676c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath    status_t mInited;
686c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath
696c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath    // Disallow copy and assign.
706c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath    DataUriSource(const DataUriSource &);
716c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath    DataUriSource &operator=(const DataUriSource &);
726c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath};
736c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath
746c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath}  // namespace android
756c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath
766c83e3be2921009ff7dcfced2a3eda7811b8b041Narayan Kamath#endif  // DATA_URI_SOURCE_H_
77