1a44153c1a57202fb538659eb50706e60454d6273Andreas Huber/*
2a44153c1a57202fb538659eb50706e60454d6273Andreas Huber * Copyright (C) 2010 The Android Open Source Project
3a44153c1a57202fb538659eb50706e60454d6273Andreas Huber *
4a44153c1a57202fb538659eb50706e60454d6273Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5a44153c1a57202fb538659eb50706e60454d6273Andreas Huber * you may not use this file except in compliance with the License.
6a44153c1a57202fb538659eb50706e60454d6273Andreas Huber * You may obtain a copy of the License at
7a44153c1a57202fb538659eb50706e60454d6273Andreas Huber *
8a44153c1a57202fb538659eb50706e60454d6273Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9a44153c1a57202fb538659eb50706e60454d6273Andreas Huber *
10a44153c1a57202fb538659eb50706e60454d6273Andreas Huber * Unless required by applicable law or agreed to in writing, software
11a44153c1a57202fb538659eb50706e60454d6273Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12a44153c1a57202fb538659eb50706e60454d6273Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a44153c1a57202fb538659eb50706e60454d6273Andreas Huber * See the License for the specific language governing permissions and
14a44153c1a57202fb538659eb50706e60454d6273Andreas Huber * limitations under the License.
15a44153c1a57202fb538659eb50706e60454d6273Andreas Huber */
16a44153c1a57202fb538659eb50706e60454d6273Andreas Huber
17a44153c1a57202fb538659eb50706e60454d6273Andreas Huber#ifndef LIVE_DATA_SOURCE_H_
18a44153c1a57202fb538659eb50706e60454d6273Andreas Huber
19a44153c1a57202fb538659eb50706e60454d6273Andreas Huber#define LIVE_DATA_SOURCE_H_
20a44153c1a57202fb538659eb50706e60454d6273Andreas Huber
21a44153c1a57202fb538659eb50706e60454d6273Andreas Huber#include <media/stagefright/foundation/ABase.h>
22a44153c1a57202fb538659eb50706e60454d6273Andreas Huber#include <media/stagefright/DataSource.h>
23a44153c1a57202fb538659eb50706e60454d6273Andreas Huber#include <utils/threads.h>
24a44153c1a57202fb538659eb50706e60454d6273Andreas Huber#include <utils/List.h>
25a44153c1a57202fb538659eb50706e60454d6273Andreas Huber
26a44153c1a57202fb538659eb50706e60454d6273Andreas Hubernamespace android {
27a44153c1a57202fb538659eb50706e60454d6273Andreas Huber
28a44153c1a57202fb538659eb50706e60454d6273Andreas Huberstruct ABuffer;
29a44153c1a57202fb538659eb50706e60454d6273Andreas Huber
30a44153c1a57202fb538659eb50706e60454d6273Andreas Huberstruct LiveDataSource : public DataSource {
31a44153c1a57202fb538659eb50706e60454d6273Andreas Huber    LiveDataSource();
32a44153c1a57202fb538659eb50706e60454d6273Andreas Huber
33a44153c1a57202fb538659eb50706e60454d6273Andreas Huber    virtual status_t initCheck() const;
34a44153c1a57202fb538659eb50706e60454d6273Andreas Huber
35a44153c1a57202fb538659eb50706e60454d6273Andreas Huber    virtual ssize_t readAt(off64_t offset, void *data, size_t size);
365bc087c573c70c84c6a39946457590b42d392a33Andreas Huber    ssize_t readAtNonBlocking(off64_t offset, void *data, size_t size);
37a44153c1a57202fb538659eb50706e60454d6273Andreas Huber
38a44153c1a57202fb538659eb50706e60454d6273Andreas Huber    void queueBuffer(const sp<ABuffer> &buffer);
39a44153c1a57202fb538659eb50706e60454d6273Andreas Huber    void queueEOS(status_t finalResult);
40a44153c1a57202fb538659eb50706e60454d6273Andreas Huber    void reset();
41a44153c1a57202fb538659eb50706e60454d6273Andreas Huber
42a44153c1a57202fb538659eb50706e60454d6273Andreas Huber    size_t countQueuedBuffers();
43a44153c1a57202fb538659eb50706e60454d6273Andreas Huber
44a44153c1a57202fb538659eb50706e60454d6273Andreas Huberprotected:
45a44153c1a57202fb538659eb50706e60454d6273Andreas Huber    virtual ~LiveDataSource();
46a44153c1a57202fb538659eb50706e60454d6273Andreas Huber
47a44153c1a57202fb538659eb50706e60454d6273Andreas Huberprivate:
48a44153c1a57202fb538659eb50706e60454d6273Andreas Huber    Mutex mLock;
49a44153c1a57202fb538659eb50706e60454d6273Andreas Huber    Condition mCondition;
50a44153c1a57202fb538659eb50706e60454d6273Andreas Huber
51a44153c1a57202fb538659eb50706e60454d6273Andreas Huber    off64_t mOffset;
52a44153c1a57202fb538659eb50706e60454d6273Andreas Huber    List<sp<ABuffer> > mBufferQueue;
53a44153c1a57202fb538659eb50706e60454d6273Andreas Huber    status_t mFinalResult;
54a44153c1a57202fb538659eb50706e60454d6273Andreas Huber
55a44153c1a57202fb538659eb50706e60454d6273Andreas Huber    FILE *mBackupFile;
56a44153c1a57202fb538659eb50706e60454d6273Andreas Huber
575bc087c573c70c84c6a39946457590b42d392a33Andreas Huber    ssize_t readAt_l(off64_t offset, void *data, size_t size);
585bc087c573c70c84c6a39946457590b42d392a33Andreas Huber
59a44153c1a57202fb538659eb50706e60454d6273Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(LiveDataSource);
60a44153c1a57202fb538659eb50706e60454d6273Andreas Huber};
61a44153c1a57202fb538659eb50706e60454d6273Andreas Huber
62a44153c1a57202fb538659eb50706e60454d6273Andreas Huber}  // namespace android
63a44153c1a57202fb538659eb50706e60454d6273Andreas Huber
64a44153c1a57202fb538659eb50706e60454d6273Andreas Huber#endif  // LIVE_DATA_SOURCE_H_
65