nativewindow.cpp revision 01e4a8ff63523bba5c8f919a72e0adb66daf4b98
175290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten/* 275290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten * Copyright (C) 2011 The Android Open Source Project 375290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten * 475290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 575290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten * you may not use this file except in compliance with the License. 675290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten * You may obtain a copy of the License at 775290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten * 875290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 975290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten * 1075290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten * Unless required by applicable law or agreed to in writing, software 1175290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 1275290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1375290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten * See the License for the specific language governing permissions and 1475290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten * limitations under the License. 1575290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten */ 1675290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten 1775290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten// Copied from frameworks/base/cmds/stagefright/stream.cpp 1875290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten 1975290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten// Note to NDK developers who happen to see this: this module uses Android internal platform APIs 2075290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten// that are not part of the NDK supported APIs, and are subject to change at any time. 2175290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten 2275290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten#include <binder/ProcessState.h> 2301e4a8ff63523bba5c8f919a72e0adb66daf4b98Mathias Agopian#include <gui/Surface.h> 2401e4a8ff63523bba5c8f919a72e0adb66daf4b98Mathias Agopian#include <gui/SurfaceComposerClient.h> 2575290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten#include <utils/String8.h> 2675290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten 2775290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten#include "nativewindow.h" 2875290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten 2975290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten#if 1 3075290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten#include <assert.h> 3175290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten#define CHECK assert 3275290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten#define CHECK_EQ(a,b) CHECK((a)==(b)) 3375290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten#else 3475290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten#include <media/stagefright/foundation/ADebug.h> 3575290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten#endif 3675290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten 3775290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kastennamespace android { 3875290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten 3975290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kastensp<Surface> gSurface; 4075290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kastensp<SurfaceComposerClient> gComposerClient; 4175290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kastensp<SurfaceControl> gControl; 4275290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten 4375290ff394698c53f35a21612c03b8ddd21fecf9Glenn KastenANativeWindow *getNativeWindow_() 4475290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten{ 4575290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten#if 0 4675290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten android::ProcessState::self()->startThreadPool(); 4775290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten#endif 4875290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten 4975290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten sp<SurfaceComposerClient> composerClient = new SurfaceComposerClient; 5075290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten CHECK_EQ(composerClient->initCheck(), (status_t)OK); 5175290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten 5275290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten sp<SurfaceControl> control = 5375290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten composerClient->createSurface( 5475290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten String8("A Surface"), 5575290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten 0, 5675290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten 1280, 5775290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten 800, 5875290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten PIXEL_FORMAT_RGB_565, 5975290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten 0); 6075290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten 6175290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten CHECK(control != NULL); 6275290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten CHECK(control->isValid()); 6375290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten 6475290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten SurfaceComposerClient::openGlobalTransaction(); 6575290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten CHECK_EQ(control->setLayer(30000), (status_t)OK); 6675290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten CHECK_EQ(control->show(), (status_t)OK); 6775290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten SurfaceComposerClient::closeGlobalTransaction(); 6875290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten 6975290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten sp<Surface> surface = control->getSurface(); 7075290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten CHECK(surface != NULL); 7175290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten 7275290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten gSurface = surface; 7375290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten gComposerClient = composerClient; 7475290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten gControl = control; 7575290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten // composerClient->dispose() at exit 7675290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten return surface.get(); 7775290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten} 7875290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten 79b17edb96ba759cd1197bf13cd13e279ee144da60Glenn Kastenvoid disposeNativeWindow_() 80b17edb96ba759cd1197bf13cd13e279ee144da60Glenn Kasten{ 81b17edb96ba759cd1197bf13cd13e279ee144da60Glenn Kasten gComposerClient->dispose(); 82b17edb96ba759cd1197bf13cd13e279ee144da60Glenn Kasten} 83b17edb96ba759cd1197bf13cd13e279ee144da60Glenn Kasten 8475290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten} // namespace android 8575290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten 8675290ff394698c53f35a21612c03b8ddd21fecf9Glenn KastenANativeWindow *getNativeWindow() 8775290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten{ 8875290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten return android::getNativeWindow_(); 8975290ff394698c53f35a21612c03b8ddd21fecf9Glenn Kasten} 90b17edb96ba759cd1197bf13cd13e279ee144da60Glenn Kasten 91b17edb96ba759cd1197bf13cd13e279ee144da60Glenn Kastenvoid disposeNativeWindow() 92b17edb96ba759cd1197bf13cd13e279ee144da60Glenn Kasten{ 93b17edb96ba759cd1197bf13cd13e279ee144da60Glenn Kasten android::disposeNativeWindow_(); 94b17edb96ba759cd1197bf13cd13e279ee144da60Glenn Kasten} 95