DummyRecorder.cpp revision 3399b7267185646c69b04352211fca4fad9d7547
13399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi/*
23399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi * Copyright (C) 2011 The Android Open Source Project
33399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi *
43399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi * Licensed under the Apache License, Version 2.0 (the "License");
53399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi * you may not use this file except in compliance with the License.
63399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi * You may obtain a copy of the License at
73399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi *
83399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi *      http://www.apache.org/licenses/LICENSE-2.0
93399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi *
103399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi * Unless required by applicable law or agreed to in writing, software
113399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi * distributed under the License is distributed on an "AS IS" BASIS,
123399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi * See the License for the specific language governing permissions and
143399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi * limitations under the License.
153399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi */
163399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi
173399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi#define LOG_TAG "DummyRecorder"
183399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi// #define LOG_NDEBUG 0
193399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi
203399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi#include <media/stagefright/MediaBuffer.h>
213399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi#include <media/stagefright/MediaSource.h>
223399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi#include "DummyRecorder.h"
233399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi
243399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi#include <utils/Log.h>
253399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi
263399b7267185646c69b04352211fca4fad9d7547Pannag Sanketinamespace android {
273399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi
283399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi// static
293399b7267185646c69b04352211fca4fad9d7547Pannag Sanketivoid *DummyRecorder::threadWrapper(void *pthis) {
303399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    LOGV("ThreadWrapper: %p", pthis);
313399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    DummyRecorder *writer = static_cast<DummyRecorder *>(pthis);
323399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    writer->readFromSource();
333399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    return NULL;
343399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi}
353399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi
363399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi
373399b7267185646c69b04352211fca4fad9d7547Pannag Sanketistatus_t DummyRecorder::start() {
383399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    LOGV("Start");
393399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    mStarted = true;
403399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi
413399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    mSource->start();
423399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi
433399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    pthread_attr_t attr;
443399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    pthread_attr_init(&attr);
453399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
463399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    int err = pthread_create(&mThread, &attr, threadWrapper, this);
473399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    pthread_attr_destroy(&attr);
483399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi
493399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    if (err) {
503399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi        LOGE("Error creating thread!");
513399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi        return -ENODEV;
523399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    }
533399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    return OK;
543399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi}
553399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi
563399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi
573399b7267185646c69b04352211fca4fad9d7547Pannag Sanketistatus_t DummyRecorder::stop() {
583399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    LOGV("Stop");
593399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    mStarted = false;
603399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi
613399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    mSource->stop();
623399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    void *dummy;
633399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    pthread_join(mThread, &dummy);
643399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    status_t err = (status_t) dummy;
653399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi
663399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    LOGV("Ending the reading thread");
673399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    return err;
683399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi}
693399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi
703399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi// pretend to read the source buffers
713399b7267185646c69b04352211fca4fad9d7547Pannag Sanketivoid DummyRecorder::readFromSource() {
723399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    LOGV("ReadFromSource");
733399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    if (!mStarted) {
743399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi        return;
753399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    }
763399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi
773399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    status_t err = OK;
783399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    MediaBuffer *buffer;
793399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    LOGV("A fake writer accessing the frames");
803399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    while (mStarted && (err = mSource->read(&buffer)) == OK){
813399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi        // if not getting a valid buffer from source, then exit
823399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi        if (buffer == NULL) {
833399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi            return;
843399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi        }
853399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi        buffer->release();
863399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi        buffer = NULL;
873399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi    }
883399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi}
893399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi
903399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi
913399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi} // end of namespace android
92