/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef VIDEO_SOURCE_H_ #define VIDEO_SOURCE_H_ #include #include #include #include namespace android { class VideoSource : public MediaSource { static const int32_t kFramerate = 24; // fps public: VideoSource(int width, int height) : mWidth(width), mHeight(height), mSize((width * height * 3) / 2) { mGroup.add_buffer(new MediaBuffer(mSize)); } virtual sp getFormat() { sp meta = new MetaData; meta->setInt32(kKeyWidth, mWidth); meta->setInt32(kKeyHeight, mHeight); meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_RAW); return meta; } virtual status_t start(MetaData *params) { mNumFramesOutput = 0; return OK; } virtual status_t stop() { return OK; } virtual status_t read( MediaBuffer **buffer, const MediaSource::ReadOptions *options) { if (mNumFramesOutput == kFramerate * 100) { // Stop returning data after 10 secs. return ERROR_END_OF_STREAM; } // printf("VideoSource::read\n"); status_t err = mGroup.acquire_buffer(buffer); if (err != OK) { return err; } char x = (char)((double)rand() / RAND_MAX * 255); memset((*buffer)->data(), x, mSize); (*buffer)->set_range(0, mSize); (*buffer)->meta_data()->clear(); (*buffer)->meta_data()->setInt64( kKeyTime, (mNumFramesOutput * 1000000) / kFramerate); ++mNumFramesOutput; // printf("VideoSource::read - returning buffer\n"); // LOG(INFO)("VideoSource::read - returning buffer"); return OK; } protected: virtual ~VideoSource() {} private: MediaBufferGroup mGroup; int mWidth, mHeight; size_t mSize; int64_t mNumFramesOutput;; VideoSource(const VideoSource &); VideoSource &operator=(const VideoSource &); }; } // namespace android #endif // VIDEO_SOURCE_H_