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> 23b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#include <media/IMediaSource.h> 242dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber 252dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Hubernamespace android { 262dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber 27ee4e1b1a63758941460ae79a064249d3a5189443Lajos Molnarclass MetaData; 282dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber 292dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huberstruct MediaWriter : public RefBase { 3019c9a1e2bb6ead5e1e895aea8be573fe0f8cc7bbAndreas Huber MediaWriter() 3119c9a1e2bb6ead5e1e895aea8be573fe0f8cc7bbAndreas Huber : mMaxFileSizeLimitBytes(0), 3219c9a1e2bb6ead5e1e895aea8be573fe0f8cc7bbAndreas Huber mMaxFileDurationLimitUs(0) { 3319c9a1e2bb6ead5e1e895aea8be573fe0f8cc7bbAndreas Huber } 342dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber 35b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen virtual status_t addSource(const sp<IMediaSource> &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 47b5fc9e5454e606df9bed9ca81c1ab7f9317f8b54Dan Willemsen virtual status_t dump(int /*fd*/, const Vector<String16>& /*args*/) { 48dedf414d3fe2e79ee0aad0f1c82ca16ebd886ff6James Dong return OK; 49dedf414d3fe2e79ee0aad0f1c82ca16ebd886ff6James Dong } 50dedf414d3fe2e79ee0aad0f1c82ca16ebd886ff6James Dong 51b5fc9e5454e606df9bed9ca81c1ab7f9317f8b54Dan Willemsen virtual void setStartTimeOffsetMs(int /*ms*/) {} 52d8cf55d878edddfc36bb821a95b88dfb2453c2c3Robert Shih virtual int32_t getStartTimeOffsetMs() const { return 0; } 53fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang virtual status_t setNextFd(int fd) { return INVALID_OPERATION; } 54d8cf55d878edddfc36bb821a95b88dfb2453c2c3Robert Shih 552dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huberprotected: 562dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber virtual ~MediaWriter() {} 57d599cd4573b5a2d5914c5040e0565ef866749b77James Dong int64_t mMaxFileSizeLimitBytes; 58d599cd4573b5a2d5914c5040e0565ef866749b77James Dong int64_t mMaxFileDurationLimitUs; 5937047fceba836f341d0108beed0991b0f8dfc543James Dong sp<IMediaRecorderClient> mListener; 60d599cd4573b5a2d5914c5040e0565ef866749b77James Dong 61d599cd4573b5a2d5914c5040e0565ef866749b77James Dong void notify(int msg, int ext1, int ext2) { 62d599cd4573b5a2d5914c5040e0565ef866749b77James Dong if (mListener != NULL) { 63d599cd4573b5a2d5914c5040e0565ef866749b77James Dong mListener->notify(msg, ext1, ext2); 64d599cd4573b5a2d5914c5040e0565ef866749b77James Dong } 65d599cd4573b5a2d5914c5040e0565ef866749b77James Dong } 662dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huberprivate: 672dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber MediaWriter(const MediaWriter &); 682dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber MediaWriter &operator=(const MediaWriter &); 692dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber}; 702dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber 712dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber} // namespace android 722dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber 732dce41ad26cb3e9e15c9e456a84bcf5309548ca0Andreas Huber#endif // MEDIA_WRITER_H_ 74