12d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber/*
22d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber * Copyright (C) 2009 The Android Open Source Project
32d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber *
42d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
52d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber * you may not use this file except in compliance with the License.
62d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber * You may obtain a copy of the License at
72d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber *
82d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
92d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber *
102d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber * Unless required by applicable law or agreed to in writing, software
112d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
122d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber * See the License for the specific language governing permissions and
142d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber * limitations under the License.
152d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber */
162d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber
172d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber#ifndef JPEG_SOURCE_H_
182d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber
192d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber#define JPEG_SOURCE_H_
202d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber
212d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber#include <media/stagefright/MediaSource.h>
222d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber
232d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Hubernamespace android {
242d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber
252d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huberclass DataSource;
262d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huberclass MediaBufferGroup;
272d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber
282d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huberstruct JPEGSource : public MediaSource {
292d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber    JPEGSource(const sp<DataSource> &source);
302d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber
312d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber    virtual status_t start(MetaData *params = NULL);
322d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber    virtual status_t stop();
332d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber    virtual sp<MetaData> getFormat();
342d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber
352d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber    virtual status_t read(
362d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber            MediaBuffer **buffer, const ReadOptions *options = NULL);
372d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber
382d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huberprotected:
392d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber    virtual ~JPEGSource();
402d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber
412d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huberprivate:
422d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber    sp<DataSource> mSource;
432d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber    MediaBufferGroup *mGroup;
442d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber    bool mStarted;
45c7fc37a3dab9bd1f96713649f351b5990e6316ffJames Dong    off64_t mSize;
462d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber    int32_t mWidth, mHeight;
47c7fc37a3dab9bd1f96713649f351b5990e6316ffJames Dong    off64_t mOffset;
482d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber
492d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber    status_t parseJPEG();
502d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber
512d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber    JPEGSource(const JPEGSource &);
522d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber    JPEGSource &operator=(const JPEGSource &);
532d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber};
542d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber
552d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber}  // namespace android
562d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber
572d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber#endif  // JPEG_SOURCE_H_
582d7d46fb2d7f5f80afbf060f25ed049079fb0fc9Andreas Huber
59