/*
* 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.
*/
// Copied from frameworks/base/cmds/stagefright/stream.cpp
// Note to NDK developers who happen to see this: this module uses Android internal platform APIs
// that are not part of the NDK supported APIs, and are subject to change at any time.
#include <binder/ProcessState.h>
#include <gui/Surface.h>
#include <gui/SurfaceComposerClient.h>
#include <utils/String8.h>
#include "nativewindow.h"
#if 1
#include <assert.h>
#define CHECK assert
#define CHECK_EQ(a,b) CHECK((a)==(b))
#else
#include <media/stagefright/foundation/ADebug.h>
#endif
namespace android {
sp<Surface> gSurface;
sp<SurfaceComposerClient> gComposerClient;
sp<SurfaceControl> gControl;
ANativeWindow *getNativeWindow_()
{
#if 0
android::ProcessState::self()->startThreadPool();
#endif
sp<SurfaceComposerClient> composerClient = new SurfaceComposerClient;
CHECK_EQ(composerClient->initCheck(), (status_t)OK);
sp<SurfaceControl> control =
composerClient->createSurface(
String8("A Surface"),
1280,
800,
PIXEL_FORMAT_RGB_565,
0);
CHECK(control != NULL);
CHECK(control->isValid());
SurfaceComposerClient::Transaction{}
.setLayer(control, 30000)
.show(control)
.apply();
sp<Surface> surface = control->getSurface();
CHECK(surface != NULL);
gSurface = surface;
gComposerClient = composerClient;
gControl = control;
// composerClient->dispose() at exit
return surface.get();
}
void disposeNativeWindow_()
{
gComposerClient->dispose();
}
} // namespace android
ANativeWindow *getNativeWindow()
{
return android::getNativeWindow_();
}
void disposeNativeWindow()
{
android::disposeNativeWindow_();
}