diff options
author | Andreas Huber <andih@google.com> | 2009-09-11 07:47:55 -0700 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2009-09-11 07:49:50 -0700 |
commit | 6026a514248f0c603d0e8c4a3f542abab3fa1509 (patch) | |
tree | 8ca481e734537e9bfcdee28c8199100ce71d18dc /cmds/stagefright | |
parent | d304ae583d862250a21b5949fc3dbdf3af1febac (diff) | |
download | frameworks_base-6026a514248f0c603d0e8c4a3f542abab3fa1509.zip frameworks_base-6026a514248f0c603d0e8c4a3f542abab3fa1509.tar.gz frameworks_base-6026a514248f0c603d0e8c4a3f542abab3fa1509.tar.bz2 |
Move JPEGSource.{cpp,h} into libstagefright.
Diffstat (limited to 'cmds/stagefright')
-rw-r--r-- | cmds/stagefright/Android.mk | 1 | ||||
-rw-r--r-- | cmds/stagefright/JPEGSource.cpp | 234 | ||||
-rw-r--r-- | cmds/stagefright/JPEGSource.h | 59 | ||||
-rw-r--r-- | cmds/stagefright/stagefright.cpp | 3 |
4 files changed, 1 insertions, 296 deletions
diff --git a/cmds/stagefright/Android.mk b/cmds/stagefright/Android.mk index 51a0649..4550d1a 100644 --- a/cmds/stagefright/Android.mk +++ b/cmds/stagefright/Android.mk @@ -3,7 +3,6 @@ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES:= \ - JPEGSource.cpp \ stagefright.cpp LOCAL_SHARED_LIBRARIES := \ diff --git a/cmds/stagefright/JPEGSource.cpp b/cmds/stagefright/JPEGSource.cpp deleted file mode 100644 index 25c772f..0000000 --- a/cmds/stagefright/JPEGSource.cpp +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright (C) 2009 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// #define LOG_NDEBUG 0 -#define LOG_TAG "JPEGSource" -#include <utils/Log.h> - -#include "JPEGSource.h" - -#include <media/stagefright/DataSource.h> -#include <media/stagefright/MediaBufferGroup.h> -#include <media/stagefright/MediaDebug.h> -#include <media/stagefright/MediaDefs.h> -#include <media/stagefright/MediaErrors.h> -#include <media/stagefright/MetaData.h> - -#define JPEG_SOF0 0xC0 /* nStart Of Frame N*/ -#define JPEG_SOF1 0xC1 /* N indicates which compression process*/ -#define JPEG_SOF2 0xC2 /* Only SOF0-SOF2 are now in common use*/ -#define JPEG_SOF3 0xC3 -#define JPEG_SOF5 0xC5 /* NB: codes C4 and CC are NOT SOF markers*/ -#define JPEG_SOF6 0xC6 -#define JPEG_SOF7 0xC7 -#define JPEG_SOF9 0xC9 -#define JPEG_SOF10 0xCA -#define JPEG_SOF11 0xCB -#define JPEG_SOF13 0xCD -#define JPEG_SOF14 0xCE -#define JPEG_SOF15 0xCF -#define JPEG_SOI 0xD8 /* nStart Of Image (beginning of datastream)*/ -#define JPEG_EOI 0xD9 /* End Of Image (end of datastream)*/ -#define JPEG_SOS 0xDA /* nStart Of Scan (begins compressed data)*/ -#define JPEG_JFIF 0xE0 /* Jfif marker*/ -#define JPEG_EXIF 0xE1 /* Exif marker*/ -#define JPEG_COM 0xFE /* COMment */ -#define JPEG_DQT 0xDB -#define JPEG_DHT 0xC4 -#define JPEG_DRI 0xDD - -namespace android { - -JPEGSource::JPEGSource(const sp<DataSource> &source) - : mSource(source), - mGroup(NULL), - mStarted(false), - mSize(0), - mWidth(0), - mHeight(0), - mOffset(0) { - CHECK_EQ(parseJPEG(), OK); - CHECK(mSource->getSize(&mSize) == OK); -} - -JPEGSource::~JPEGSource() { - if (mStarted) { - stop(); - } -} - -status_t JPEGSource::start(MetaData *) { - if (mStarted) { - return UNKNOWN_ERROR; - } - - mGroup = new MediaBufferGroup; - mGroup->add_buffer(new MediaBuffer(mSize)); - - mOffset = 0; - - mStarted = true; - - return OK; -} - -status_t JPEGSource::stop() { - if (!mStarted) { - return UNKNOWN_ERROR; - } - - delete mGroup; - mGroup = NULL; - - mStarted = false; - - return OK; -} - -sp<MetaData> JPEGSource::getFormat() { - sp<MetaData> meta = new MetaData; - meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_IMAGE_JPEG); - meta->setInt32(kKeyWidth, mWidth); - meta->setInt32(kKeyHeight, mHeight); - meta->setInt32(kKeyMaxInputSize, mSize); - - return meta; -} - -status_t JPEGSource::read( - MediaBuffer **out, const ReadOptions *options) { - *out = NULL; - - int64_t seekTimeUs; - if (options != NULL && options->getSeekTo(&seekTimeUs)) { - return UNKNOWN_ERROR; - } - - MediaBuffer *buffer; - mGroup->acquire_buffer(&buffer); - - ssize_t n = mSource->read_at(mOffset, buffer->data(), mSize - mOffset); - - if (n <= 0) { - buffer->release(); - buffer = NULL; - - return UNKNOWN_ERROR; - } - - buffer->set_range(0, n); - - mOffset += n; - - *out = buffer; - - return OK; -} - -status_t JPEGSource::parseJPEG() { - mWidth = 0; - mHeight = 0; - - off_t i = 0; - - uint16_t soi; - if (!mSource->getUInt16(i, &soi)) { - return ERROR_IO; - } - - i += 2; - - if (soi != 0xffd8) { - return UNKNOWN_ERROR; - } - - for (;;) { - uint8_t marker; - if (mSource->read_at(i++, &marker, 1) != 1) { - return ERROR_IO; - } - - CHECK_EQ(marker, 0xff); - - if (mSource->read_at(i++, &marker, 1) != 1) { - return ERROR_IO; - } - - CHECK(marker != 0xff); - - uint16_t chunkSize; - if (!mSource->getUInt16(i, &chunkSize)) { - return ERROR_IO; - } - - i += 2; - - if (chunkSize < 2) { - return UNKNOWN_ERROR; - } - - switch (marker) { - case JPEG_SOS: - { - return (mWidth > 0 && mHeight > 0) ? OK : UNKNOWN_ERROR; - } - - case JPEG_EOI: - { - return UNKNOWN_ERROR; - } - - case JPEG_SOF0: - case JPEG_SOF1: - case JPEG_SOF3: - case JPEG_SOF5: - case JPEG_SOF6: - case JPEG_SOF7: - case JPEG_SOF9: - case JPEG_SOF10: - case JPEG_SOF11: - case JPEG_SOF13: - case JPEG_SOF14: - case JPEG_SOF15: - { - uint16_t width, height; - if (!mSource->getUInt16(i + 1, &height) - || !mSource->getUInt16(i + 3, &width)) { - return ERROR_IO; - } - - mWidth = width; - mHeight = height; - - i += chunkSize - 2; - break; - } - - default: - { - // Skip chunk - - i += chunkSize - 2; - - break; - } - } - } - - return OK; -} - -} // namespace android diff --git a/cmds/stagefright/JPEGSource.h b/cmds/stagefright/JPEGSource.h deleted file mode 100644 index 051c034..0000000 --- a/cmds/stagefright/JPEGSource.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2009 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef JPEG_SOURCE_H_ - -#define JPEG_SOURCE_H_ - -#include <media/stagefright/MediaSource.h> - -namespace android { - -class DataSource; -class MediaBufferGroup; - -struct JPEGSource : public MediaSource { - // Assumes ownership of "source". - JPEGSource(const sp<DataSource> &source); - - virtual status_t start(MetaData *params = NULL); - virtual status_t stop(); - virtual sp<MetaData> getFormat(); - - virtual status_t read( - MediaBuffer **buffer, const ReadOptions *options = NULL); - -protected: - virtual ~JPEGSource(); - -private: - sp<DataSource> mSource; - MediaBufferGroup *mGroup; - bool mStarted; - off_t mSize; - int32_t mWidth, mHeight; - off_t mOffset; - - status_t parseJPEG(); - - JPEGSource(const JPEGSource &); - JPEGSource &operator=(const JPEGSource &); -}; - -} // namespace android - -#endif // JPEG_SOURCE_H_ - diff --git a/cmds/stagefright/stagefright.cpp b/cmds/stagefright/stagefright.cpp index d1926b4..73215d3 100644 --- a/cmds/stagefright/stagefright.cpp +++ b/cmds/stagefright/stagefright.cpp @@ -25,6 +25,7 @@ #include <media/IMediaPlayerService.h> #include <media/stagefright/CachingDataSource.h> #include <media/stagefright/HTTPDataSource.h> +#include <media/stagefright/JPEGSource.h> #include <media/stagefright/MediaDebug.h> #include <media/stagefright/MediaDefs.h> #include <media/stagefright/MediaPlayerImpl.h> @@ -35,8 +36,6 @@ #include <media/stagefright/OMXClient.h> #include <media/stagefright/OMXCodec.h> -#include "JPEGSource.h" - using namespace android; static long gNumRepetitions; |