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) { 303856b090cd04ba5dd4a59a12430ed724d5995909Steve Block ALOGV("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() { 383856b090cd04ba5dd4a59a12430ed724d5995909Steve Block ALOGV("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) { 5029357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block ALOGE("Error creating thread!"); 513399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi return -ENODEV; 523399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi } 533399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi return OK; 543399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi} 553399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi 563399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi 573399b7267185646c69b04352211fca4fad9d7547Pannag Sanketistatus_t DummyRecorder::stop() { 583856b090cd04ba5dd4a59a12430ed724d5995909Steve Block ALOGV("Stop"); 593399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi mStarted = false; 603399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi 613399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi mSource->stop(); 623399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi void *dummy; 633399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi pthread_join(mThread, &dummy); 64377b2ec9a2885f9b6405b07ba900a9e3f4349c38Kévin PETIT status_t err = static_cast<status_t>(reinterpret_cast<uintptr_t>(dummy)); 653399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi 663856b090cd04ba5dd4a59a12430ed724d5995909Steve Block ALOGV("Ending the reading thread"); 673399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi return err; 683399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi} 693399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi 703399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi// pretend to read the source buffers 713399b7267185646c69b04352211fca4fad9d7547Pannag Sanketivoid DummyRecorder::readFromSource() { 723856b090cd04ba5dd4a59a12430ed724d5995909Steve Block ALOGV("ReadFromSource"); 733399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi if (!mStarted) { 743399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi return; 753399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi } 763399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi 773399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi status_t err = OK; 783399b7267185646c69b04352211fca4fad9d7547Pannag Sanketi MediaBuffer *buffer; 793856b090cd04ba5dd4a59a12430ed724d5995909Steve Block ALOGV("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