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