summaryrefslogtreecommitdiff
Diffstat
-rw-r--r--Android.mk23
-rw-r--r--TvPlay.cpp (renamed from tvapi/android/tv/TvPlay.cpp)2
-rw-r--r--TvPlay.h (renamed from tvapi/android/tv/TvPlay.h)2
-rw-r--r--tv_callback.h2
-rw-r--r--tv_input.cpp4
-rw-r--r--tvapi/Android.mk1
-rw-r--r--tvapi/android/Android.mk1
-rw-r--r--tvapi/android/include/ITv.h49
-rw-r--r--tvapi/android/include/ITvClient.h28
-rw-r--r--tvapi/android/include/ITvService.h33
-rw-r--r--tvapi/android/include/TvClient.h78
-rw-r--r--tvapi/android/include/tvcmd.h618
-rw-r--r--tvapi/android/jni/Android.mk69
-rw-r--r--tvapi/android/jni/cfbc_jni.cpp167
-rw-r--r--tvapi/android/jni/cfbc_test.cpp43
-rw-r--r--tvapi/android/jni/com_droidlogic_app_tv_TvControlManager.cpp469
-rw-r--r--tvapi/android/libtvbinder/Android.mk24
-rw-r--r--tvapi/android/libtvbinder/ITv.cpp148
-rw-r--r--tvapi/android/libtvbinder/ITvClient.cpp58
-rw-r--r--tvapi/android/libtvbinder/ITvService.cpp50
-rw-r--r--tvapi/android/libtvbinder/TvClient.cpp186
-rw-r--r--tvapi/android/tv/Android.mk23
-rw-r--r--tvapi/android/tvserver/Android.mk83
-rw-r--r--tvapi/android/tvserver/TvService.cpp4500
-rw-r--r--tvapi/android/tvserver/TvService.h90
-rw-r--r--tvapi/android/tvserver/main.cpp23
-rw-r--r--tvapi/android/tvserver/tv_callback.h17
-rw-r--r--tvapi/build/include/.gitignore0
-rw-r--r--tvapi/docs/TVMiddleware初期.wps252
-rw-r--r--tvapi/docs/tv.uml6093
-rw-r--r--tvapi/libtv/Android.mk222
-rw-r--r--tvapi/libtv/audio/CAudioCustomerCtrl.cpp126
-rw-r--r--tvapi/libtv/audio/CAudioCustomerCtrl.h31
-rw-r--r--tvapi/libtv/audio/CTvAudio.cpp28
-rw-r--r--tvapi/libtv/audio/CTvAudio.h76
-rw-r--r--tvapi/libtv/audio/audio_alsa.cpp853
-rw-r--r--tvapi/libtv/audio/audio_alsa.h127
-rw-r--r--tvapi/libtv/audio/audio_effect.cpp131
-rw-r--r--tvapi/libtv/audio/audio_effect.h27
-rw-r--r--tvapi/libtv/include/amstream.h263
-rw-r--r--tvapi/libtv/include/amvecm.h68
-rw-r--r--tvapi/libtv/include/cm.h155
-rw-r--r--tvapi/libtv/include/hdmirx_cec.h331
-rw-r--r--tvapi/libtv/include/ve.h242
-rw-r--r--tvapi/libtv/tv/AutoBackLight.cpp207
-rw-r--r--tvapi/libtv/tv/AutoBackLight.h46
-rw-r--r--tvapi/libtv/tv/CAutoPQparam.cpp142
-rw-r--r--tvapi/libtv/tv/CAutoPQparam.h36
-rw-r--r--tvapi/libtv/tv/CAv.cpp476
-rw-r--r--tvapi/libtv/tv/CAv.h153
-rw-r--r--tvapi/libtv/tv/CFbcCommunication.cpp1931
-rw-r--r--tvapi/libtv/tv/CFbcCommunication.h401
-rw-r--r--tvapi/libtv/tv/CFrontEnd.cpp667
-rw-r--r--tvapi/libtv/tv/CFrontEnd.h166
-rw-r--r--tvapi/libtv/tv/CTv.cpp7254
-rw-r--r--tvapi/libtv/tv/CTv.h817
-rw-r--r--tvapi/libtv/tv/CTvBooking.cpp159
-rw-r--r--tvapi/libtv/tv/CTvBooking.h81
-rw-r--r--tvapi/libtv/tv/CTvDmx.cpp24
-rw-r--r--tvapi/libtv/tv/CTvDmx.h17
-rw-r--r--tvapi/libtv/tv/CTvEpg.cpp214
-rw-r--r--tvapi/libtv/tv/CTvEpg.h158
-rw-r--r--tvapi/libtv/tv/CTvEv.cpp11
-rw-r--r--tvapi/libtv/tv/CTvEv.h150
-rw-r--r--tvapi/libtv/tv/CTvLog.cpp20
-rw-r--r--tvapi/libtv/tv/CTvLog.h28
-rw-r--r--tvapi/libtv/tv/CTvRecord.cpp273
-rw-r--r--tvapi/libtv/tv/CTvRecord.h46
-rw-r--r--tvapi/libtv/tv/CTvSatellite.h21
-rw-r--r--tvapi/libtv/tv/CTvScanner.cpp1640
-rw-r--r--tvapi/libtv/tv/CTvScanner.h264
-rw-r--r--tvapi/libtv/tv/CTvScreenCapture.cpp796
-rw-r--r--tvapi/libtv/tv/CTvScreenCapture.h176
-rw-r--r--tvapi/libtv/tv/CTvSubtitle.cpp654
-rw-r--r--tvapi/libtv/tv/CTvSubtitle.h250
-rw-r--r--tvapi/libtv/tv/CTvTime.cpp64
-rw-r--r--tvapi/libtv/tv/CTvTime.h56
-rw-r--r--tvapi/libtv/tv/CTvVchipCheck.cpp163
-rw-r--r--tvapi/libtv/tv/CTvVchipCheck.h49
-rw-r--r--tvapi/libtv/tv/CUpgradeFBC.cpp553
-rw-r--r--tvapi/libtv/tv/CUpgradeFBC.h144
-rw-r--r--tvapi/libtv/tv/ScreenCatch.cpp379
-rw-r--r--tvapi/libtv/tvconfig/CIniFile.cpp353
-rw-r--r--tvapi/libtv/tvconfig/CIniFile.h72
-rw-r--r--tvapi/libtv/tvconfig/tvconfig.conf30
-rw-r--r--tvapi/libtv/tvconfig/tvconfig.cpp53
-rw-r--r--tvapi/libtv/tvconfig/tvconfig.h93
-rw-r--r--tvapi/libtv/tvdb/CTvChannel.cpp324
-rw-r--r--tvapi/libtv/tvdb/CTvChannel.h287
-rw-r--r--tvapi/libtv/tvdb/CTvDatabase.cpp256
-rw-r--r--tvapi/libtv/tvdb/CTvDatabase.h94
-rw-r--r--tvapi/libtv/tvdb/CTvDimension.cpp639
-rw-r--r--tvapi/libtv/tvdb/CTvDimension.h97
-rw-r--r--tvapi/libtv/tvdb/CTvEvent.cpp237
-rw-r--r--tvapi/libtv/tvdb/CTvEvent.h85
-rw-r--r--tvapi/libtv/tvdb/CTvGroup.cpp44
-rw-r--r--tvapi/libtv/tvdb/CTvGroup.h30
-rw-r--r--tvapi/libtv/tvdb/CTvProgram.cpp905
-rw-r--r--tvapi/libtv/tvdb/CTvProgram.h536
-rw-r--r--tvapi/libtv/tvdb/CTvRegion.cpp174
-rw-r--r--tvapi/libtv/tvdb/CTvRegion.h42
-rw-r--r--tvapi/libtv/tvin/CHDMIRxCEC.cpp651
-rw-r--r--tvapi/libtv/tvin/CHDMIRxCEC.h94
-rw-r--r--tvapi/libtv/tvin/CSourceConnectDetect.cpp263
-rw-r--r--tvapi/libtv/tvin/CSourceConnectDetect.h73
-rw-r--r--tvapi/libtv/tvin/CTvin.cpp3278
-rw-r--r--tvapi/libtv/tvin/CTvin.h1248
-rw-r--r--tvapi/libtv/tvsetting/CBlobDevice.cpp26
-rw-r--r--tvapi/libtv/tvsetting/CBlobDevice.h50
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceE2prom.cpp52
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceE2prom.h76
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceFile.cpp78
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceFile.h26
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceRam.cpp129
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceRam.h37
-rw-r--r--tvapi/libtv/tvsetting/CTvSetting.cpp2448
-rw-r--r--tvapi/libtv/tvsetting/CTvSetting.h277
-rw-r--r--tvapi/libtv/tvsetting/CTvSettingCfg.h411
-rw-r--r--tvapi/libtv/tvsetting/CTvSettingDeviceFactory.cpp187
-rw-r--r--tvapi/libtv/tvsetting/CTvSettingDeviceFactory.h22
-rw-r--r--tvapi/libtv/tvsetting/TvKeyData.cpp1328
-rw-r--r--tvapi/libtv/tvsetting/TvKeyData.h125
-rw-r--r--tvapi/libtv/tvsetting/audio_cfg.cpp723
-rw-r--r--tvapi/libtv/tvsetting/audio_cfg.h70
-rw-r--r--tvapi/libtv/tvutils/CCondition.h90
-rw-r--r--tvapi/libtv/tvutils/CFile.cpp195
-rw-r--r--tvapi/libtv/tvutils/CFile.h47
-rw-r--r--tvapi/libtv/tvutils/CHdmiCecCmd.cpp16
-rw-r--r--tvapi/libtv/tvutils/CHdmiCecCmd.h9
-rw-r--r--tvapi/libtv/tvutils/CMsgQueue.cpp122
-rw-r--r--tvapi/libtv/tvutils/CMsgQueue.h53
-rw-r--r--tvapi/libtv/tvutils/CMutex.h115
-rw-r--r--tvapi/libtv/tvutils/CSerialCommunication.cpp121
-rw-r--r--tvapi/libtv/tvutils/CSerialCommunication.h49
-rw-r--r--tvapi/libtv/tvutils/CSerialPort.cpp358
-rw-r--r--tvapi/libtv/tvutils/CSerialPort.h54
-rw-r--r--tvapi/libtv/tvutils/CSqlite.cpp151
-rw-r--r--tvapi/libtv/tvutils/CSqlite.h184
-rw-r--r--tvapi/libtv/tvutils/CThread.cpp165
-rw-r--r--tvapi/libtv/tvutils/CThread.h61
-rw-r--r--tvapi/libtv/tvutils/CTvInput.cpp170
-rw-r--r--tvapi/libtv/tvutils/CTvInput.h42
-rw-r--r--tvapi/libtv/tvutils/serial_base.cpp466
-rw-r--r--tvapi/libtv/tvutils/serial_base.h17
-rw-r--r--tvapi/libtv/tvutils/serial_operate.cpp225
-rw-r--r--tvapi/libtv/tvutils/serial_operate.h33
-rw-r--r--tvapi/libtv/tvutils/tvutils.cpp2025
-rw-r--r--tvapi/libtv/tvutils/tvutils.h103
-rw-r--r--tvapi/libtv/tvutils/zepoll.cpp88
-rw-r--r--tvapi/libtv/tvutils/zepoll.h48
-rw-r--r--tvapi/libtv/version/version.cpp94
-rw-r--r--tvapi/libtv/version/version.h11
-rw-r--r--tvapi/libtv/vpp/CPQdb.cpp1974
-rw-r--r--tvapi/libtv/vpp/CPQdb.h180
-rw-r--r--tvapi/libtv/vpp/CVpp.cpp3779
-rw-r--r--tvapi/libtv/vpp/CVpp.h453
-rw-r--r--tvapi/libtv/vpp/pqdata.cpp143
-rw-r--r--tvapi/libtv/vpp/pqdata.h30
-rw-r--r--tvapi/tvtests/Android.mk49
-rw-r--r--tvapi/tvtests/android_tvtest.cpp32
-rw-r--r--tvapi/tvtests/comm_test.cpp33
-rw-r--r--tvapi/tvtests/ssm_test.cpp210
-rw-r--r--tvapi/tvtests/tvconfig_test.cpp427
163 files changed, 13 insertions, 62934 deletions
diff --git a/tvapi/libtv/tv/ScreenCatch.cpp b/tvapi/libtv/tv/ScreenCatch.cpp
deleted file mode 100644
index 971ac91..0000000
--- a/tvapi/libtv/tv/ScreenCatch.cpp
+++ b/dev/null
@@ -1,379 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-#define LOG_NDEBUG 1
-#define LOG_TAG "ScreenCatch"
-
-#include <media/stagefright/foundation/ADebug.h>
-#include <media/stagefright/MediaDefs.h>
-#include <media/stagefright/MetaData.h>
-#include <OMX_IVCommon.h>
-#include <MetadataBufferType.h>
-
-#include <ui/GraphicBuffer.h>
-#include <gui/ISurfaceComposer.h>
-#include <gui/IGraphicBufferAlloc.h>
-#include <OMX_Component.h>
-
-#include <utils/Log.h>
-#include <utils/String8.h>
-
-#include <private/gui/ComposerService.h>
-
-#include <media/stagefright/ScreenCatch.h>
-#include <media/stagefright/ScreenSource.h>
-
-#include <binder/IPCThreadState.h>
-#include <binder/MemoryBase.h>
-#include <binder/MemoryHeapBase.h>
-
-#include <stdio.h>
-#include <assert.h>
-#include <limits.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sched.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <binder/IServiceManager.h>
-
-#define BOUNDRY 32
-
-#define ALIGN(x) (x + (BOUNDRY) - 1)& ~((BOUNDRY) - 1)
-
-namespace android {
-
- struct ScreenCatch::ScreenCatchClient : public BnScreenMediaSourceClient {
- ScreenCatchClient(void *user)
- {
- mUser = user;
- ALOGE("[%s %d] user:%x", __FUNCTION__, __LINE__, user);
- }
-
- virtual void notify(int msg, int ext1, int ext2, const Parcel *obj)
- {
- ALOGI("notify %d, %d, %d", msg, ext1, ext2);
- }
-
- virtual int dataCallback(const sp<IMemory> &data)
- {
- return 0;
- }
-
- protected:
- void *mUser;
- virtual ~ScreenCatchClient() {}
-
- private:
- DISALLOW_EVIL_CONSTRUCTORS(ScreenCatchClient);
- };
-
- ScreenCatch::ScreenCatch(uint32_t bufferWidth, uint32_t bufferHeight, uint32_t bitSize) :
- mWidth(ALIGN(bufferWidth)),
- mHeight(bufferHeight),
- mScreenMediaSourceService(NULL),
- mColorFormat(OMX_COLOR_Format32bitARGB8888),
- mBitSize(bitSize)
- {
- ALOGE("ScreenCatch: %dx%d", bufferWidth, bufferHeight);
-
- if (bufferWidth <= 0 || bufferHeight <= 0 || bufferWidth > 1920 || bufferHeight > 1080) {
- ALOGE("Invalid dimensions %dx%d", bufferWidth, bufferHeight);
- }
-
- if (bitSize != 24 || bitSize != 32)
- bitSize = 32;
-
- mCorpX = -1;
- mCorpY = -1;
- mCorpWidth = -1;
- mCorpHeight = -1;
-
- }
-
- ScreenCatch::~ScreenCatch()
- {
- ALOGE("~ScreenCatch");
- }
-
- void ScreenCatch::setVideoRotation(int degree)
- {
- int angle;
-
- ALOGI("[%s %d] setVideoRotation degree:%x", __FUNCTION__, __LINE__, degree);
-
- }
-
- void ScreenCatch::setVideoCrop(int x, int y, int width, int height)
- {
- mCorpX = x;
- mCorpY = y;
- mCorpWidth = width;
- mCorpHeight = height;
- }
-
- static inline void yuv_to_rgb32(unsigned char y, unsigned char u, unsigned char v, unsigned char *rgb)
- {
- register int r, g, b;
-
- r = (1192 * (y - 16) + 1634 * (v - 128) ) >> 10;
- g = (1192 * (y - 16) - 833 * (v - 128) - 400 * (u - 128) ) >> 10;
- b = (1192 * (y - 16) + 2066 * (u - 128) ) >> 10;
-
- r = r > 255 ? 255 : r < 0 ? 0 : r;
- g = g > 255 ? 255 : g < 0 ? 0 : g;
- b = b > 255 ? 255 : b < 0 ? 0 : b;
-
- /*ARGB*/
- *rgb = (unsigned char)r;
- rgb++;
- *rgb = (unsigned char)g;
- rgb++;
- *rgb = (unsigned char)b;
- rgb++;
- *rgb = 0xff;
-
- }
-
- void nv21_to_rgb32(unsigned char *buf, unsigned char *rgb, int width, int height)
- {
- int x, y, z = 0;
- int h, w;
- int blocks;
- unsigned char Y1, Y2, U, V;
-
- blocks = (width * height) * 2;
-
- for (h = 0, z = 0; h < height; h += 2) {
- for (y = 0; y < width * 2; y += 2) {
-
- Y1 = buf[ h * width + y + 0];
- V = buf[ blocks / 2 + h * width / 2 + y % width + 0 ];
- Y2 = buf[ h * width + y + 1];
- U = buf[ blocks / 2 + h * width / 2 + y % width + 1 ];
-
- yuv_to_rgb32(Y1, U, V, &rgb[z]);
- yuv_to_rgb32(Y2, U, V, &rgb[z + 4]);
- z += 8;
- }
- }
- }
-
- static inline void yuv_to_rgb24(unsigned char y, unsigned char u, unsigned char v, unsigned char *rgb)
- {
- register int r, g, b;
-
- r = (1192 * (y - 16) + 1634 * (v - 128) ) >> 10;
- g = (1192 * (y - 16) - 833 * (v - 128) - 400 * (u - 128) ) >> 10;
- b = (1192 * (y - 16) + 2066 * (u - 128) ) >> 10;
-
- r = r > 255 ? 255 : r < 0 ? 0 : r;
- g = g > 255 ? 255 : g < 0 ? 0 : g;
- b = b > 255 ? 255 : b < 0 ? 0 : b;
-
- /*ARGB*/
- *rgb = (unsigned char)r;
- rgb++;
- *rgb = (unsigned char)g;
- rgb++;
- *rgb = (unsigned char)b;
- }
-
- void nv21_to_rgb24(unsigned char *buf, unsigned char *rgb, int width, int height)
- {
- int x, y, z = 0;
- int h, w;
- int blocks;
- unsigned char Y1, Y2, U, V;
-
- blocks = (width * height) * 2;
-
- for (h = 0, z = 0; h < height; h += 2) {
- for (y = 0; y < width * 2; y += 2) {
-
- Y1 = buf[ h * width + y + 0];
- V = buf[ blocks / 2 + h * width / 2 + y % width + 0 ];
- Y2 = buf[ h * width + y + 1];
- U = buf[ blocks / 2 + h * width / 2 + y % width + 1 ];
-
- yuv_to_rgb24(Y1, U, V, &rgb[z]);
- yuv_to_rgb24(Y2, U, V, &rgb[z + 3]);
- z += 6;
- }
- }
- }
-
- int ScreenCatch::threadFunc()
- {
- int64_t pts;
- int status;
-
- sp<MemoryHeapBase> newMemoryHeap = new MemoryHeapBase(mWidth * mHeight * 3 / 2);
- sp<MemoryBase> buffer = new MemoryBase(newMemoryHeap, 0, mWidth * mHeight * 3 / 2);
-
- ALOGV("[%s %d] empty:%d", __FUNCTION__, __LINE__, mRawBufferQueue.empty());
-
- while (mStart == true) {
-
- status = mScreenMediaSourceService->readBuffer(mClientId, buffer, &pts);
-
- if (status != OK && mStart == true) {
- usleep(10000);
- continue;
- }
-
- if (mStart != true)
- break;
-
- MediaBuffer *accessUnit;
-
- if (OMX_COLOR_Format24bitRGB888 == mColorFormat) { //rgb 24bit
- accessUnit = new MediaBuffer(mWidth * mHeight * 3);
- nv21_to_rgb24((unsigned char *)buffer->pointer(), (unsigned char *)accessUnit->data(), mWidth, mHeight);
- accessUnit->set_range(0, mWidth * mHeight * 3);
- } else if (OMX_COLOR_Format32bitARGB8888 == mColorFormat) { //rgba 32bit
- accessUnit = new MediaBuffer(mWidth * mHeight * 4);
- nv21_to_rgb32((unsigned char *)buffer->pointer(), (unsigned char *)accessUnit->data(), mWidth, mHeight);
- accessUnit->set_range(0, mWidth * mHeight * 4);
- } else if (OMX_COLOR_FormatYUV420SemiPlanar == mColorFormat) { //nv21
- accessUnit = new MediaBuffer(mWidth * mHeight * 3 / 2);
- memcpy((unsigned char *)accessUnit->data(), (unsigned char *)buffer->pointer(), mWidth * mHeight * 3 / 2);
- accessUnit->set_range(0, mWidth * mHeight * 3 / 2);
- }
- mRawBufferQueue.push_back(accessUnit);
- }
-
- ALOGE("[%s %d] thread out", __FUNCTION__, __LINE__);
-
- mThreadOutCondition.signal();
-
- return 0;
- }
-
- void *ScreenCatch::ThreadWrapper(void *me)
- {
-
- ScreenCatch *Convertor = static_cast<ScreenCatch *>(me);
- Convertor->threadFunc();
- return NULL;
- }
-
- status_t ScreenCatch::start(MetaData *params)
- {
- ALOGE("[%s %d] mWidth:%d mHeight:%d", __FUNCTION__, __LINE__, mWidth, mHeight);
- Mutex::Autolock autoLock(mLock);
-
- status_t status;
- int64_t pts;
- int client_id;
-
- sp<IServiceManager> sm = defaultServiceManager();
- sp<IBinder> binder = sm->getService(String16("media.screenmediasource"));
- mScreenMediaSourceService = interface_cast<IScreenMediaSource>(binder);
-
- sp<ScreenCatchClient> mIScreenSourceClient = new ScreenCatchClient(this);
-
- ALOGE("[%s %d] mWidth:%d mHeight:%d", __FUNCTION__, __LINE__, mWidth, mHeight);
-
- mScreenMediaSourceService->registerClient(mIScreenSourceClient, mWidth, mHeight, 1, SCREENMEDIASOURC_RAWDATA_TYPE, &client_id, NULL);
-
- ALOGE("[%s %d] client_id:%d", __FUNCTION__, __LINE__, client_id);
-
- mClientId = client_id;
-
- if (status != OK) {
- ALOGE("setResolutionRatio fail");
- return !OK;
- }
-
- ALOGV("[%s %d] mCorpX:%d mCorpY:%d mCorpWidth:%d mCorpHeight:%d", __FUNCTION__, __LINE__, mCorpX, mCorpY, mCorpWidth, mCorpHeight);
-
- if (mCorpX != -1)
- mScreenMediaSourceService->setVideoCrop(client_id, mCorpX, mCorpY, mCorpWidth, mCorpHeight);
-
-
- status = mScreenMediaSourceService->start(client_id);
-
- if (status != OK) {
- mScreenMediaSourceService->unregisterClient(mClientId);
- ALOGE("ScreenMediaSourceService start fail");
- return !OK;
- }
-
- if (!(params->findInt32(kKeyColorFormat, &mColorFormat)
- && (mColorFormat != OMX_COLOR_FormatYUV420SemiPlanar
- || mColorFormat != OMX_COLOR_Format24bitRGB888
- || mColorFormat != OMX_COLOR_Format32bitARGB8888)))
- mColorFormat = OMX_COLOR_Format32bitARGB8888;
-
- pthread_attr_t attr;
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
- pthread_create(&mThread, &attr, ThreadWrapper, this);
- pthread_attr_destroy(&attr);
-
- mStart = true;
-
- ALOGV("[%s %d]", __FUNCTION__, __LINE__);
- return OK;
- }
-
- status_t ScreenCatch::stop()
- {
- ALOGV("[%s %d]", __FUNCTION__, __LINE__);
- Mutex::Autolock autoLock(mLock);
- mStart = false;
-
- mThreadOutCondition.waitRelative(mLock, 1000000000000);
- ALOGV("[%s %d]", __FUNCTION__, __LINE__);
-
- while (!mRawBufferQueue.empty()) {
-
- ALOGV("[%s %d] free buffer", __FUNCTION__, __LINE__);
-
- MediaBuffer *rawBuffer = *mRawBufferQueue.begin();
- mRawBufferQueue.erase(mRawBufferQueue.begin());
- rawBuffer->release();
- }
-
- mScreenMediaSourceService->stop(mClientId);
- mScreenMediaSourceService->unregisterClient(mClientId);
-
- return OK;
- }
-
- status_t ScreenCatch::read(MediaBuffer **buffer)
- {
- Mutex::Autolock autoLock(mLock);
-
- if (!mRawBufferQueue.empty()) {
- MediaBuffer *rawBuffer = *mRawBufferQueue.begin();
- mRawBufferQueue.erase(mRawBufferQueue.begin());
- *buffer = rawBuffer;
- return OK;
- }
-
- return !OK;
- }
-
- status_t ScreenCatch::free(MediaBuffer *buffer)
- {
- Mutex::Autolock autoLock(mLock);
- buffer->release();
- return OK;
- }
-
-} // end of namespace android