12dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber/*
22dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber * Copyright (C) 2010 The Android Open Source Project
32dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber *
42dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
52dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber * you may not use this file except in compliance with the License.
62dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber * You may obtain a copy of the License at
72dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber *
82dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
92dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber *
102dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber * Unless required by applicable law or agreed to in writing, software
112dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
122dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber * See the License for the specific language governing permissions and
142dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber * limitations under the License.
152dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber */
162dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber
172dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber#ifndef MEDIA_WRITER_H_
182dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber
192dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber#define MEDIA_WRITER_H_
202dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber
212dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber#include <utils/RefBase.h>
2237047fceba836f341d0108beed0991b0f8dfc543James Dong#include <media/IMediaRecorderClient.h>
232dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber
242dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Hubernamespace android {
252dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber
262dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huberstruct MediaSource;
272dec2b5be2056c6d9428897dc672185872d30d17James Dongstruct MetaData;
282dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber
292dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huberstruct MediaWriter : public RefBase {
3019c9a1e2bb6ead5e1e895aea8be573fe0f8cc7bbAndreas Huber    MediaWriter()
3119c9a1e2bb6ead5e1e895aea8be573fe0f8cc7bbAndreas Huber        : mMaxFileSizeLimitBytes(0),
3219c9a1e2bb6ead5e1e895aea8be573fe0f8cc7bbAndreas Huber          mMaxFileDurationLimitUs(0) {
3319c9a1e2bb6ead5e1e895aea8be573fe0f8cc7bbAndreas Huber    }
342dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber
352dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber    virtual status_t addSource(const sp<MediaSource> &source) = 0;
362dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber    virtual bool reachedEOS() = 0;
372dec2b5be2056c6d9428897dc672185872d30d17James Dong    virtual status_t start(MetaData *params = NULL) = 0;
3837187916a486504acaf83bea30147eb5fbf46ae5James Dong    virtual status_t stop() = 0;
3937187916a486504acaf83bea30147eb5fbf46ae5James Dong    virtual status_t pause() = 0;
4037187916a486504acaf83bea30147eb5fbf46ae5James Dong
41d599cd4573b5a2d5914c5040e0565ef866749b77James Dong    virtual void setMaxFileSize(int64_t bytes) { mMaxFileSizeLimitBytes = bytes; }
42d599cd4573b5a2d5914c5040e0565ef866749b77James Dong    virtual void setMaxFileDuration(int64_t durationUs) { mMaxFileDurationLimitUs = durationUs; }
4337047fceba836f341d0108beed0991b0f8dfc543James Dong    virtual void setListener(const sp<IMediaRecorderClient>& listener) {
44d599cd4573b5a2d5914c5040e0565ef866749b77James Dong        mListener = listener;
45d599cd4573b5a2d5914c5040e0565ef866749b77James Dong    }
462dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber
47dedf414d3fe2e79ee0aad0f1c82ca16ebd886ff6James Dong    virtual status_t dump(int fd, const Vector<String16>& args) {
48dedf414d3fe2e79ee0aad0f1c82ca16ebd886ff6James Dong        return OK;
49dedf414d3fe2e79ee0aad0f1c82ca16ebd886ff6James Dong    }
50dedf414d3fe2e79ee0aad0f1c82ca16ebd886ff6James Dong
512dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huberprotected:
522dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber    virtual ~MediaWriter() {}
53d599cd4573b5a2d5914c5040e0565ef866749b77James Dong    int64_t mMaxFileSizeLimitBytes;
54d599cd4573b5a2d5914c5040e0565ef866749b77James Dong    int64_t mMaxFileDurationLimitUs;
5537047fceba836f341d0108beed0991b0f8dfc543James Dong    sp<IMediaRecorderClient> mListener;
56d599cd4573b5a2d5914c5040e0565ef866749b77James Dong
57d599cd4573b5a2d5914c5040e0565ef866749b77James Dong    void notify(int msg, int ext1, int ext2) {
58d599cd4573b5a2d5914c5040e0565ef866749b77James Dong        if (mListener != NULL) {
59d599cd4573b5a2d5914c5040e0565ef866749b77James Dong            mListener->notify(msg, ext1, ext2);
60d599cd4573b5a2d5914c5040e0565ef866749b77James Dong        }
61d599cd4573b5a2d5914c5040e0565ef866749b77James Dong    }
622dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huberprivate:
632dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber    MediaWriter(const MediaWriter &);
642dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber    MediaWriter &operator=(const MediaWriter &);
652dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber};
662dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber
672dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber}  // namespace android
682dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber
692dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber#endif  // MEDIA_WRITER_H_
70