14b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen/* 24b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen * Copyright (C) 2009 The Android Open Source Project 34b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen * 44b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen * Licensed under the Apache License, Version 2.0 (the "License"); 54b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen * you may not use this file except in compliance with the License. 64b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen * You may obtain a copy of the License at 74b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen * 84b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen * http://www.apache.org/licenses/LICENSE-2.0 94b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen * 104b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen * Unless required by applicable law or agreed to in writing, software 114b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen * distributed under the License is distributed on an "AS IS" BASIS, 124b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen * See the License for the specific language governing permissions and 144b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen * limitations under the License. 154b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen */ 164b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen 178e9d67a1356881d7dce75c83d8c6639a562d1a7aJames Dong#include <media/stagefright/foundation/ADebug.h> 184b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen 194b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen#include "StreamSource.h" 204b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen 214b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chennamespace android { 224b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen 234b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta ChenStreamSource::StreamSource(SkStream *stream) 244b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen : mStream(stream) { 254b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen CHECK(stream != NULL); 264b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen mSize = stream->getLength(); 274b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen} 284b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen 294b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta ChenStreamSource::~StreamSource() { 304b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen delete mStream; 314b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen mStream = NULL; 324b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen} 334b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen 34b355012797dfd503eee9f80ed06bc30a17cc3318Wei-Ta Chenstatus_t StreamSource::initCheck() const { 354b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen return mStream != NULL ? OK : NO_INIT; 364b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen} 374b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen 38b1262a8b1dd23abad64465f9ffd25c44facdf4d2James Dongssize_t StreamSource::readAt(off64_t offset, void *data, size_t size) { 394b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen Mutex::Autolock autoLock(mLock); 404b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen 414b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen mStream->rewind(); 424b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen mStream->skip(offset); 434b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen ssize_t result = mStream->read(data, size); 444b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen 454b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen return result; 464b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen} 474b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen 48b1262a8b1dd23abad64465f9ffd25c44facdf4d2James Dongstatus_t StreamSource::getSize(off64_t *size) { 494b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen *size = mSize; 504b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen return OK; 514b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen} 524b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen 534b6f4942fcef3300b407d9a07a680c07b162333fWei-Ta Chen} // namespace android 54