PREV TOC HOME INDEX NEXT


3.1.2. gc_AnswerCall( )

The rings parameter is ignored.

Coders can be set in advance of using gc_AnswerCall( ) by using one of the following functions:

The following code example shows how to use:

/* Specifying coders before answering calls */

LINEDEV ldev;
CRN crn;
GC_PARM_BLK *target_datap
int i;

/* Define Coder */
IP_CAPABILITY a_DefaultCapability[2];

gc_OpenEx(&ldev, ":N_iptB1T1:M_ipmB1C1:P_H323_R", EV_SYNC, 0);

/* Set default coders for this ldev */
a_DefaultCapability[0].capability = GCCAP_AUDIO_g7231_6_3k;
a_DefaultCapability[0].direction = IP_CAP_DIR_LCLTRANSMIT;
a_DefaultCapability[0].type = GCCAPTYPE_AUDIO;
a_DefaultCapability[0].extra.audio.frames_per_pkt = 3;
a_DefaultCapability[0].extra.audio.VAD = GCPV_ENABLE;

a_DefaultCapability[1].capability = GCCAP_AUDIO_g711Alaw64k;
a_DefaultCapability[1].direction = IP_CAP_DIR_LCLTRANSMIT;
a_DefaultCapability[1].type = GCCAPTYPE_AUDIO;
a_DefaultCapability[1].extra.audio.frames_per_pkt = 10;
a_DefaultCapability[1].extra.audio.VAD = GCPV_DISABLE; /* Not applicable
                                                          for G.711 coders */

target_datap = NULL;

for (i = 0;i<2;i++) {
     gc_util_insert_parm_ref(&target_datap, GCSET_CHAN_CAPABILITY,
                             IPPARM_LOCAL_CAPABILITY, sizeof(IP_CAPABILITY),
                             &a_DefaultCapability[i]);
}

gc_SetUserInfo(GCTGT_GCLIB_CHAN, ldev, target_datap, GC_ALLCALLS);
gc_util_delete_parm(target_datap);

gc_WaitCall(ldev, EV_ASYNC);
/*... Receive GCEV_OFFERED ... */

gc_AnswerCall(crn, EV_ASYNC));
/* ... Receive GCEV_ANSWERED ... */

/* ... Check which coders have been used ...*/
GC_PARM_BLK *t_PrmBlkp = NULL;
GC_PARM_BLK *t_RetBlkp = NULL;
gc_util_insert_parm_val(&t_PrmBlkp, GCSET_CHAN_CAPABILITY,
                        IPPARM_LOCAL_CAPABILITY, 0, 0);
gc_Extension(GCTGT_GCLIB_CRN, crn, IPEXTID_GETINFO, t_PrmBlkp, &t_RetBlkp,
             EV_ASYNC);
gc_util_delete_parm(t_PrmBlkp);

/*.. Receive GCEV_EXTENSION*/
METAEVENT meta;
gc_GetMetaEvent(&meta);
EXTENSIONEVTBLK *extevtdatap = (EXTENSIONEVTBLK *)meta.extevtdatap;
GC_PARM_DATAP t_ParmData_p = NULL;

if (extevtdatap->ext_id == IPEXTID_GETINFO){
    while ((t_ParmData_p = gc_util_next_parm(&extevtdatap->parmblk,
            t_ParmData_p)) != NULL){
        if ((t_ParmData_p->set_ID == GCSET_CHAN_CAPABILITY) && 
            (t_ParmData_p->parm_ID == IPPARM_LOCAL_CAPABILITY) &&
            (t_ParmData_p->value_size != 0)){
            IP_CAPABILITY *t_Capability = 
                                    (IP_CAPABILITY *)(t_ParmData_p->value_buf);
            /* The direction will indicate RX or TX */
            if (t_Capability != NULL)
                printf("Coder Capability=%d,type=%d,direction=%d,fpp=%d,vad=%d",
                t_Capability->capability, 
                t_Capability->type,
                t_Capability->direction,
                t_Capability->extra.audio.frames_per_pkt, 
                t_Capability->extra.audio.VAD);
        }
    }
} 

PREV TOC HOME INDEX NEXT

Click here to contact Telecom Support Resources

Copyright 2003, Intel Corporation
All rights reserved
This page generated January, 2003