您的位置:首页 > 移动开发 > Android开发

Android显示相关记录

2015-09-14 16:21 441 查看
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \
  main.cpp

LOCAL_STATIC_LIBRARIES := \
  libstagefright_color_conversion

LOCAL_SHARED_LIBRARIES := \
  libcutils \
  libutils \
  libbinder \
  libui \
  libgui \
  libstagefright\
  libstagefright_foundation

LOCAL_C_INCLUDES := \
  frameworks/native/include/media/openmax \
  frameworks/av/media/libstagefright

LOCAL_MODULE:= yuvShow

LOCAL_MODULE_TAGS := tests

include $(BUILD_EXECUTABLE)
#include <include/SoftwareRenderer.h>
#include <cutils/memory.h>
#include <unistd.h>
#include <utils/Log.h>
#include <binder/IPCThreadState.h>
#include <binder/ProcessState.h>
#include <binder/IServiceManager.h>

#include <gui/Surface.h>
#include <gui/SurfaceComposerClient.h>
#include <gui/ISurfaceComposer.h>
#include <ui/DisplayInfo.h>
#include <android/native_window.h>
#include <media/stagefright/MetaData.h>

int main(void)
{
        // create a client to surfaceflinger
        sp<SurfaceComposerClient> client = new SurfaceComposerClient();
        // create a surface
        sp<SurfaceControl> surfaceControl = client->createSurface(String8("showyuv"),
                        //dinfo.w, dinfo.h, PIXEL_FORMAT_RGBA_8888, 0);
                        1280, 720, PIXEL_FORMAT_RGBA_8888, 0);

        /********************* 配置surface ******************************************************/
        SurfaceComposerClient::openGlobalTransaction();
        surfaceControl->setLayer(100000);      //设定Z坐标
        surfaceControl->setPosition(0, 0);     //以左上角为(0,0)设定显示位置
        surfaceControl->setSize(width, height);//设定视频显示大小
        SurfaceComposerClient::closeGlobalTransaction();
        sp<Surface> surface = surfaceControl->getSurface();
        printf("[%s][%d]\n",__FILE__,__LINE__);

        /********************** 配置MetaData *****************************************************/
        sp<MetaData> meta = new MetaData;
        meta->setInt32(kKeyWidth, width);
        meta->setInt32(kKeyHeight, height);
        meta->setInt32(kKeyColorFormat, OMX_COLOR_FormatYUV420Planar); //正常显示yuv420p
        printf("[%s][%d]\n",__FILE__,__LINE__);

        /********************** Display the data *************************************************/
        SoftwareRenderer* sr = new SoftwareRenderer(surface,meta);//初始化
        sr->render(data,size,NULL); //将data显示到屏幕上,数据来源通过网口
        printf("[%s][%d]\n",__FILE__,__LINE__);
        IPCThreadState::self()->joinThreadPool();//可以保证画面一直显示,否则瞬间消失
        IPCThreadState::self()->stopProcess();
        return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: