AMRWriter.h revision b2487f03f12dcafdb801fc0007c8df8412397f44
1e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber/*
2e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * Copyright (C) 2010 The Android Open Source Project
3e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber *
4e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * you may not use this file except in compliance with the License.
6e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * You may obtain a copy of the License at
7e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber *
8e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber *
10e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * Unless required by applicable law or agreed to in writing, software
11e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * See the License for the specific language governing permissions and
14e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * limitations under the License.
15e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber */
16e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber
17e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber#ifndef AMR_WRITER_H_
18e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber
19e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber#define AMR_WRITER_H_
20e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber
21e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber#include <stdio.h>
22e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber
23b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#include <media/IMediaSource.h>
242dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber#include <media/stagefright/MediaWriter.h>
25e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber#include <utils/threads.h>
26e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber
27e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Hubernamespace android {
28e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber
29ee4e1b1a63758941460ae79a064249d3a5189443Lajos Molnarclass MetaData;
30e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber
312dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huberstruct AMRWriter : public MediaWriter {
32e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber    AMRWriter(int fd);
33e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber
34e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber    status_t initCheck() const;
35e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber
36b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    virtual status_t addSource(const sp<IMediaSource> &source);
372dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber    virtual bool reachedEOS();
382dec2b5be2056c6d9428897dc672185872d30d17James Dong    virtual status_t start(MetaData *params = NULL);
398bcc65c753085fe3328592cceda0cf0e8f8b0a45James Dong    virtual status_t stop() { return reset(); }
4037187916a486504acaf83bea30147eb5fbf46ae5James Dong    virtual status_t pause();
41e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber
42e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huberprotected:
43e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber    virtual ~AMRWriter();
44e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber
45e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huberprivate:
46c7fc37a3dab9bd1f96713649f351b5990e6316ffJames Dong    int   mFd;
47e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber    status_t mInitCheck;
48b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    sp<IMediaSource> mSource;
49e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber    bool mStarted;
50a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong    volatile bool mPaused;
51a7d1a2dd776bf356c228785a94ba8e0ff6a2ec7fJames Dong    volatile bool mResumed;
52e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber    volatile bool mDone;
53ebe87f32e442c9a8fb2931632311d6c5a126eddbAndreas Huber    volatile bool mReachedEOS;
54e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber    pthread_t mThread;
55d599cd4573b5a2d5914c5040e0565ef866749b77James Dong    int64_t mEstimatedSizeBytes;
56d599cd4573b5a2d5914c5040e0565ef866749b77James Dong    int64_t mEstimatedDurationUs;
57e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber
58e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber    static void *ThreadWrapper(void *);
5937187916a486504acaf83bea30147eb5fbf46ae5James Dong    status_t threadFunc();
60d599cd4573b5a2d5914c5040e0565ef866749b77James Dong    bool exceedsFileSizeLimit();
61d599cd4573b5a2d5914c5040e0565ef866749b77James Dong    bool exceedsFileDurationLimit();
628bcc65c753085fe3328592cceda0cf0e8f8b0a45James Dong    status_t reset();
63e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber
64e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber    AMRWriter(const AMRWriter &);
65e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber    AMRWriter &operator=(const AMRWriter &);
66e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber};
67e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber
68e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber}  // namespace android
69e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber
70e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber#endif  // AMR_WRITER_H_
71