JNI函数void-->int 传入整形变量

来源:互联网 发布:unity3d 角色模型 编辑:程序博客网 时间:2024/04/29 07:16

场景:DVB电视播放:

遥控器左右键切换不同频点播放首个节目,上下键当前频点不同节目.

上下键切换保持最后一帧,左右键黑屏.


之前都是黑屏操作,加入最后一帧


vendor/chuangjia/packages/apps/CyFactoryTest/src/com/chuangyi/cyfactorytest/glue/dvbplay/CyFacGlueDVB.java:180: 无法将 com.chuangyi.cyfactorytest.glue.dvbplay.CyFacGlueDVB 中的 dvbStopNative() 应用于 (int)

        dvbStopNative(need_status);



(1)Java上层  

public static final int SC_BLACK = 1; //上下切台静帧, 左右切换黑屏处理
public static final int SC_STILL = 0;

private void stopPlay() {
    
Log.i(TAG, "Stop play");
    
if (mGlueDVB != null)
        
mGlueDVB.stopLive(mProStopNeed); //mGlueDVB.stopLive();
mProStopNeed = SC_BLACK;
}


(2)JNI层 

java:  

public boolean stopLive(int need_status) { // stopLive()
    
dvbStopNative(need_status); // dvbStopNative();
    
return true;
}


link:

JNIEXPORT jboolean JNICALL Java_com_chuangyi_cyfactorytest_glue_dvbplay_CyFacGlueDVB_dvbStopNative
(JNIEnv *env, jobject thiz, jint need_status) // (JNIEnv *env, jobject thiz)
{
    
jint ret = -1;
    
LOGI("dvbStopNative");
    
ret = cy_stop_play(need_status);  // ret = cy_stop_play();
    
return ret == 0 ? JNI_TRUE : JNI_FALSE;
}

新加了 jinit need_status

底层

int cy_stop_play(int need_status) // cy_stop_play()
{
    
HI_S32 Ret;

    
HI_UNF_AVPLAY_STOP_OPT_S    Stop;   

    ************************

    
   // 
if(need_status == HI_UNF_AVPLAY_STOP_MODE_STILL )
   //     
Stop.enMode = HI_UNF_AVPLAY_STOP_MODE_STILL;
   //
else    
   //

     Stop.enMode = HI_UNF_AVPLAY_STOP_MODE_STILL&1;

    
    Stop.u32TimeoutMs = 0;
    
Ret = HI_UNF_AVPLAY_Stop(hAvplay, HI_UNF_AVPLAY_MEDIA_CHAN_VID | HI_UNF_AVPLAY_MEDIA_CHAN_AUD, &Stop);

    
return 0;
}

新加了 int need_status



解决: 在JNI层的java

synchronized private native boolean dvbStopNative();

改为

synchronized private native boolean dvbStopNative(int status);


link层

static JNINativeMethod gMethods[] = 
{
    
{"dvbPlayNative","(I)Z",(void *) Java_com_chuangyi_cyfactorytest_glue_dvbplay_CyFacGlueDVB_dvbPlayNative},
    
{"dvbStopNative","(I)Z",(void *) Java_com_chuangyi_cyfactorytest_glue_dvbplay_CyFacGlueDVB_dvbStopNative},

括号里加上I


C 头文件cy_stop_play 的接口换为int


mm -B  ok!!!








0 0