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