您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
1. IVideoView显示模块架构讲解和代码创建~1
发布时间:2021-06-10 16:57:26编辑:雪饮阅读()
c++后台若使用ANativeWindow_fromSurface将surface转化为ANativeWindow;
#include <string>
#include <android/native_window_jni.h>
#include "FFDemux.h"
#include "XLog.h"
#include "FFDecode.h"
class TestObs:public IObserver
{
public:
void Update(XData d)
{
//XLOGI("TestObs Update data size is %d",d.size);
}
};
extern "C"
JNIEXPORT jstring
JNICALL
Java_com_example_xplay_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
std::string hello = "Hello from C++";
//XLOGI("S begin!");
//XSleep(3000);
//XLOGI("S end!");
//return env->NewStringUTF(hello.c_str());
///////////////////////////////////
///测试用代码
TestObs *tobs = new TestObs();
IDemux *de = new FFDemux();
//de->AddObs(tobs);
de->Open("/sdcard/1080.mp4");
IDecode *vdecode = new FFDecode();
vdecode->Open(de->GetVPara());
IDecode *adecode = new FFDecode();
adecode->Open(de->GetAPara());
de->AddObs(vdecode);
de->AddObs(adecode);
//vdecode->Open();
de->Start();
vdecode->Start();
adecode->Start();
//XSleep(3000);
//de->Stop();
/*for(;;)
{
XData d = de->Read();
XLOGI("Read data size is %d",d.size);
}*/
return env->NewStringUTF(hello.c_str());
}
extern "C"
JNIEXPORT void JNICALL
Java_com_example_xplay_XPlay_InitView(JNIEnv *env, jobject thiz, jobject surface) {
ANativeWindow *win = ANativeWindow_fromSurface(env,surface);
}
与cpp/IVideoView.h:
用来未来实现视频视域。 和cpp/GLVideoView.h:
为了处理材质,需要建立cpp/XTexture.cpp:
和cpp/XTexture.h:
对于片元问题的处理,需要建立cpp/XShader.h:
以及cpp/XShader.cpp:
对于渲染API的EGL,则需要创建cpp/XEGL.cpp:
以及cpp/XEGL.h:
#define XPLAY_IVIDEOVIEW_H
class IVideoView {
};
#endif //XPLAY_IVIDEOVIEW_H
#define XPLAY_GLVIDEOVIEW_H
class GLVideoView {
};
#endif //XPLAY_GLVIDEOVIEW_H
#define XPLAY_XTEXTURE_H
class XTexture {
};
#endif //XPLAY_XTEXTURE_H
#define XPLAY_XSHADER_H
class XShader {
};
#endif //XPLAY_XSHADER_H
class CXEGL:public XEGL
{
public:
virtual bool Init(void *win)
{
return true;
}
};
XEGL *XEGL::Get()
{
static CXEGL egl;
return &egl;
}
#define XPLAY_XEGL_H
class XEGL
{
public:
virtual bool Init(void *win) = 0;
static XEGL *Get();
protected:
XEGL(){}
};
#endif //XPLAY_XEGL_H
最后创建Xplay.java用于最后调用上面c语言实现的api接口以实现视频的解码播放:
package com.example.xplay;
import android.content.Context;
import android.opengl.GLSurfaceView;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
/**
* Created by Administrator on 2018-03-04.
*/
public class XPlay extends GLSurfaceView implements SurfaceHolder.Callback {
public XPlay(Context context, AttributeSet attrs) {
super( context, attrs );
}
@Override
public void surfaceCreated(SurfaceHolder holder)
{
//初始化opengl egl 显示
InitView(holder);
}
@Override
public void surfaceChanged(SurfaceHolder var1, int var2, int var3, int var4)
{
}
@Override
public void surfaceDestroyed(SurfaceHolder var1)
{
}
public native void InitView(Object surface);
}魅族16T测试表示没有压力。
关键字词:IVideoView
相关文章
-
无相关信息