android Stagefright渲染器构造变化

最近在弄一个多媒体硬件码的程序,参考高通的源代码的时候发现,原来用来渲染的解码数据的渲染函数getIOMX()->createRendererFromJavaSurface以及renderer()->render通通不见了,查看android 源代码IOMX.h,发现确实没有这些函数,Google了下,发现git dff给出了代码更新情况。这里把前后版本的渲染过程记录下来:

旧版本stagefright中,可以通过jni将java层创建的surface传递给下层

获取应用所创建的surface的id

在java层创建surface

public Surface mSurface; // accessed by native methods
public void setDisplay(SurfaceHolder sh) {
    mSurfaceHolder = sh;
    if (sh != null) {
        mSurface = sh.getSurface(); 
    }
}
获取应用所创建的surface的id

static void
com_vedio_player_MediaPlayerTest_native_init(JNIEnv *env)
{
    ....
    jfieldID fields.surface = env->GetFieldID(jclass clazz, "mSurface", Landroid/view/Surface;");
}
使用获取的id来得到surface的引用,并将它传递到本地 MediaPlayer

static void
com_vedio_player_MediaPlayerTest_start(JNIEnv *env, jobject thiz)
{
    LOGV("start");
    //mediaplayertest *mp = new mediaplayertest();
    ...
    jobject surface = env->GetObjectField(thiz, fields.surface);
    mp->start(env, surface);
}
可以通过JNI得到应用传递下来的surface对象来创建视频渲染器对象

    sp
     
     
      
       mOMXRenderer = mOMX->createRenderer(surface, compName, 
    OMX_COLOR_FormatYUV420Planar,
    vidWidth, vidHeight,
    displayWidth, displayHeight,
    rotationDegrees);

     
     

最后就可以使用该渲染器来渲染解码好的视频数据了

mOMXRenderer->render(mVideoBuffer);

不知道Google基于什么原因把这个简单的调用过程给去掉了,导致我需要改代码来完成视频渲染过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值