linphone-PayloadTypeImpl文件对应的JNI层文件分析

来源:互联网 发布:ubuntu selinux 状态 编辑:程序博客网 时间:2024/06/05 09:53

说明

这里就是对Payloadtype的操作。虽然我不清楚它是用来干嘛的, 但可以知道, 它就是一个类型。不影响下面的分析。

native函数

private native String toString(long ptr);private native String getMime(long ptr);private native int getRate(long ptr);private native void setRecvFmtp(long ptr, String fmtp);private native String getRecvFmtp(long ptr);private native void setSendFmtp(long ptr,  String fmtp);private native String getSendFmtp(long ptr);

具体函数分析

toString

/*payloadType*/extern "C" jstring Java_org_linphone_core_PayloadTypeImpl_toString(JNIEnv*  env,jobject  thiz,jlong ptr) {    PayloadType* pt = (PayloadType*)ptr;    char* value = ms_strdup_printf("[%s] clock [%i], bitrate [%i]"                                    ,payload_type_get_mime(pt)                                    ,payload_type_get_rate(pt)                                    ,payload_type_get_bitrate(pt));    jstring jvalue =env->NewStringUTF(value);    ms_free(value);    return jvalue;}

getMime

extern "C" jstring Java_org_linphone_core_PayloadTypeImpl_getMime(JNIEnv*  env,jobject  thiz,jlong ptr) {    PayloadType* pt = (PayloadType*)ptr;    jstring jvalue =env->NewStringUTF(payload_type_get_mime(pt));    return jvalue;}

payload_type_get_mime

submodules/linphone/oRTP/include/ortp/payloadtype.h:#define payload_type_get_mime(pt)       ((pt)->mime_type)submodules/linphone/mediastreamer2/src/ortp-deps/ortp/payloadtype.h:#define payload_type_get_mime(pt)       ((pt)->mime_type)

这里还是主要看它的参数。
PayloadType

struct _PayloadType{    int type; /**< one of PAYLOAD_* macros*/    int clock_rate; /**< rtp clock rate*/    char bits_per_sample;   /* in case of continuous audio data */    char *zero_pattern;    int pattern_length;    /* other useful information for the application*/    int normal_bitrate; /*in bit/s */    char *mime_type; /**<actually the submime, ex: pcm, pcma, gsm*/    int channels; /**< number of channels of audio */    char *recv_fmtp; /* various format parameters for the incoming stream */    char *send_fmtp; /* various format parameters for the outgoing stream */    struct _PayloadTypeAvpfParams avpf; /* AVPF parameters */    int flags;    void *user_data;};

这里肯定是一个结构体, 存储PayloadType的结构信息。

_PayloadTypeAvpfParams

bmodules/linphone/oRTP/include/ortp/payloadtype.h:struct _PayloadTypeAvpfParams {
struct _PayloadTypeAvpfParams {    unsigned char features; /**< A bitmask of PAYLOAD_TYPE_AVPF_* macros. */    bool_t rpsi_compatibility; /*< Linphone uses positive feeback for RPSI. However first versions handling        AVPF wrongly declared RPSI as negative feedback, so this is kept for compatibility        with these versions but will probably be removed at some point in time. */    uint16_t trr_interval; /**< The interval in milliseconds between regular RTCP packets. */};

getRate

extern "C" jint Java_org_linphone_core_PayloadTypeImpl_getRate(JNIEnv*  env,jobject  thiz, jlong ptr) {    PayloadType* pt = (PayloadType*)ptr;    return (jint)payload_type_get_rate(pt);}

这个函数payload_type_get_rate 让我明白了一个道理, 什么道理呢, #define的都是跟函数的, 而且不需要函数体。哈哈。

setRecvFmtp

/* * Class:     org_linphone_core_PayloadTypeImpl * Method:    setRecvFmtp * Signature: (JLjava/lang/String;)V */JNIEXPORT void JNICALL Java_org_linphone_core_PayloadTypeImpl_setRecvFmtp(JNIEnv *env, jobject jobj, jlong ptr, jstring jfmtp){    PayloadType *pt=(PayloadType *)ptr;    const char *fmtp=jfmtp ? env->GetStringUTFChars(jfmtp,NULL) : NULL;    payload_type_set_recv_fmtp(pt,fmtp);    if (fmtp) env->ReleaseStringUTFChars(jfmtp,fmtp);}

payload_type_set_recv_fmtp

/** * Sets a recv parameters (fmtp) for the PayloadType. * This method is provided for applications using RTP with SDP, but * actually the ftmp information is not used for RTP processing.**/void payload_type_set_recv_fmtp(PayloadType *pt, const char *fmtp){    if (canWrite(pt)){        if (pt->recv_fmtp!=NULL) ortp_free(pt->recv_fmtp);        if (fmtp!=NULL) pt->recv_fmtp=ortp_strdup(fmtp);        else pt->recv_fmtp=NULL;    }}

canWrite

submodules/linphone/mediastreamer2/src/ortp-deps/payloadtype.c:static bool_t canWrite(PayloadType *pt)
static bool_t canWrite(PayloadType *pt){    if (!(pt->flags & PAYLOAD_TYPE_ALLOCATED)) {        ortp_error("Cannot change parameters of statically defined payload types: make your"            " own copy using payload_type_clone() first.");        return FALSE;    }    return TRUE;}

getRecvFmtp

/* * Class:     org_linphone_core_PayloadTypeImpl * Method:    getRecvFmtp * Signature: (J)Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_org_linphone_core_PayloadTypeImpl_getRecvFmtp(JNIEnv *env, jobject jobj, jlong ptr){    PayloadType *pt=(PayloadType *)ptr;    const char *fmtp=pt->recv_fmtp;    return fmtp ? env->NewStringUTF(fmtp) : NULL;}

setSendFmtp

/* * Class:     org_linphone_core_PayloadTypeImpl * Method:    setSendFmtp * Signature: (JLjava/lang/String;)V */JNIEXPORT void JNICALL Java_org_linphone_core_PayloadTypeImpl_setSendFmtp(JNIEnv *env, jobject jobj, jlong ptr , jstring jfmtp){    PayloadType *pt=(PayloadType *)ptr;    const char *fmtp=jfmtp ? env->GetStringUTFChars(jfmtp,NULL) : NULL;    payload_type_set_send_fmtp(pt,fmtp);    if (fmtp) env->ReleaseStringUTFChars(jfmtp,fmtp);}
/** * Sets a send parameters (fmtp) for the PayloadType. * This method is provided for applications using RTP with SDP, but * actually the ftmp information is not used for RTP processing.**/void payload_type_set_send_fmtp(PayloadType *pt, const char *fmtp){    if (canWrite(pt)){        if (pt->send_fmtp!=NULL) ortp_free(pt->send_fmtp);        if (fmtp!=NULL) pt->send_fmtp=ortp_strdup(fmtp);        else pt->send_fmtp=NULL;    }}

getSendFmtp

/* * Class:     org_linphone_core_PayloadTypeImpl * Method:    getSendFmtp * Signature: (J)Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_org_linphone_core_PayloadTypeImpl_getSendFmtp(JNIEnv *env, jobject jobj, jlong ptr){    PayloadType *pt=(PayloadType *)ptr;    const char *fmtp=pt->send_fmtp;    return fmtp ? env->NewStringUTF(fmtp) : NULL;}
0 0
原创粉丝点击