Changeset 3460


Ignore:
Timestamp:
Mar 17, 2011 11:27:37 AM (10 years ago)
Author:
bennylp
Message:

Re #1214: work on simpleua:

  • protect with #ifdef PJMEDIA_HAS_VIDEO etc.
  • fix the format setting to get the format from the correct port
File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/branches/projects/2.0-dev/pjsip-apps/src/samples/simpleua.c

    r3435 r3460  
    102102static pjsip_inv_session    *g_inv;         /* Current invite session.  */ 
    103103static pjmedia_stream       *g_med_stream;  /* Call's audio stream.     */ 
     104static pjmedia_snd_port     *g_snd_port;    /* Sound device.            */ 
     105 
     106#if PJMEDIA_HAS_VIDEO 
    104107static pjmedia_vid_stream   *g_med_vstream; /* Call's video stream.     */ 
    105 static pjmedia_snd_port     *g_snd_player;  /* Call's sound player      */ 
    106 static pjmedia_snd_port     *g_snd_rec;     /* Call's sound recorder.   */ 
    107108static pjmedia_vid_port     *g_vid_capturer;/* Call's video capturer.   */ 
    108109static pjmedia_vid_port     *g_vid_renderer;/* Call's video renderer.   */ 
    109  
     110#endif  /* PJMEDIA_HAS_VIDEO */ 
    110111 
    111112/* 
     
    374375 
    375376    /* Init video subsystem */ 
     377#if PJMEDIA_HAS_VIDEO 
    376378    pool = pjmedia_endpt_create_pool(g_med_endpt, "Video subsystem", 512, 512); 
    377379    status = pjmedia_video_format_mgr_create(pool, 64, 0, NULL); 
     
    384386    PJ_ASSERT_RETURN(status == PJ_SUCCESS, 1); 
    385387 
     388#  if PJMEDIA_HAS_FFMPEG_CODEC 
    386389    /* Init ffmpeg video codecs */ 
    387390    status = pjmedia_codec_ffmpeg_init(NULL, &cp.factory); 
    388391    PJ_ASSERT_RETURN(status == PJ_SUCCESS, 1); 
    389  
     392#  endif  /* PJMEDIA_HAS_FFMPEG_CODEC */ 
     393 
     394#endif  /* PJMEDIA_HAS_VIDEO */ 
    390395     
    391396    /*  
     
    469474 
    470475        /* Get the SDP body to be put in the outgoing INVITE, by asking 
    471          * media endpoint to create one for us. The SDP will contain all 
    472          * codecs that have been registered to it (in this case, only 
    473          * PCMA and PCMU), plus telephony event. 
     476         * media endpoint to create one for us. 
    474477         */ 
    475478        status = pjmedia_endpt_create_sdp( g_med_endpt,     /* the media endpt  */ 
    476479                                           dlg->pool,       /* pool.            */ 
    477                                            MAX_MEDIA_CNT,           /* # of streams     */ 
     480                                           MAX_MEDIA_CNT,   /* # of streams     */ 
    478481                                           g_sock_info,     /* RTP sock info    */ 
    479482                                           &local_sdp);     /* the SDP result   */ 
     
    548551    dump_pool_usage(THIS_FILE, &cp); 
    549552 
    550     /* Destroy stream */ 
    551     if (g_med_stream) 
    552         pjmedia_stream_destroy(g_med_stream); 
    553     if (g_med_vstream) 
    554         pjmedia_vid_stream_destroy(g_med_vstream); 
    555  
    556     /* Destroy audio ports */ 
    557     if (g_snd_player) 
    558         pjmedia_snd_port_destroy(g_snd_player); 
    559     if (g_snd_rec) 
    560         pjmedia_snd_port_destroy(g_snd_rec); 
     553    /* Destroy audio ports. Destroy the audio port first 
     554     * before the stream since the audio port has threads 
     555     * that get/put frames to the stream. 
     556     */ 
     557    if (g_snd_port) 
     558        pjmedia_snd_port_destroy(g_snd_port); 
    561559 
    562560    /* Destroy video ports */ 
     561#if PJMEDIA_HAS_VIDEO 
    563562    if (g_vid_capturer) 
    564563        pjmedia_vid_port_destroy(g_vid_capturer); 
    565564    if (g_vid_renderer) 
    566565        pjmedia_vid_port_destroy(g_vid_renderer); 
     566#endif 
     567 
     568    /* Destroy streams */ 
     569    if (g_med_stream) 
     570        pjmedia_stream_destroy(g_med_stream); 
     571#if PJMEDIA_HAS_VIDEO 
     572    if (g_med_vstream) 
     573        pjmedia_vid_stream_destroy(g_med_vstream); 
     574#endif 
    567575 
    568576    /* Destroy media transports */ 
     
    573581 
    574582    /* Deinit ffmpeg codec */ 
     583#if PJMEDIA_HAS_FFMPEG_CODEC 
    575584    pjmedia_codec_ffmpeg_deinit(); 
     585#endif 
    576586 
    577587    /* Deinit pjmedia endpoint */ 
     
    846856    pjmedia_stream_get_port(g_med_stream, &media_port); 
    847857 
    848  
    849  
    850     /* Create a sound Player device and connect the media port to the 
    851      * sound device. 
    852      */ 
    853     status = pjmedia_snd_port_create_player(  
    854                     inv->pool,                          /* pool             */ 
    855                     -1,                                 /* sound dev id     */ 
    856                     PJMEDIA_PIA_SRATE(&media_port->info),/* clock rate      */ 
    857                     PJMEDIA_PIA_CCNT(&media_port->info),/* channel count    */ 
    858                     PJMEDIA_PIA_SPF(&media_port->info), /* samples per frame*/ 
    859                     PJMEDIA_PIA_BITS(&media_port->info),/* bits per sample  */ 
    860                     0,                                  /* options          */ 
    861                     &g_snd_player); 
     858    /* Create sound port */ 
     859    pjmedia_snd_port_create(inv->pool, 
     860                            PJMEDIA_AUD_DEFAULT_CAPTURE_DEV, 
     861                            PJMEDIA_AUD_DEFAULT_PLAYBACK_DEV, 
     862                            PJMEDIA_PIA_SRATE(&media_port->info),/* clock rate      */ 
     863                            PJMEDIA_PIA_CCNT(&media_port->info),/* channel count    */ 
     864                            PJMEDIA_PIA_SPF(&media_port->info), /* samples per frame*/ 
     865                            PJMEDIA_PIA_BITS(&media_port->info),/* bits per sample  */ 
     866                            0, 
     867                            &g_snd_port); 
     868 
    862869    if (status != PJ_SUCCESS) { 
    863         app_perror( THIS_FILE, "Unable to create sound player", status); 
     870        app_perror( THIS_FILE, "Unable to create sound port", status); 
    864871        PJ_LOG(3,(THIS_FILE, "%d %d %d %d", 
    865872                    PJMEDIA_PIA_SRATE(&media_port->info),/* clock rate      */ 
     
    871878    } 
    872879 
    873     status = pjmedia_snd_port_connect(g_snd_player, media_port); 
    874  
    875  
    876     /* Create a sound recorder device and connect the media port to the 
    877      * sound device. 
    878      */ 
    879     status = pjmedia_snd_port_create_rec(  
    880                     inv->pool,                          /* pool             */ 
    881                     -1,                                 /* sound dev id     */ 
    882                     PJMEDIA_PIA_SRATE(&media_port->info),/* clock rate      */ 
    883                     PJMEDIA_PIA_CCNT(&media_port->info),/* channel count    */ 
    884                     PJMEDIA_PIA_SPF(&media_port->info), /* samples per frame*/ 
    885                     PJMEDIA_PIA_BITS(&media_port->info),/* bits per sample  */ 
    886                     0,                                  /* options          */ 
    887                     &g_snd_rec); 
    888     if (status != PJ_SUCCESS) { 
    889         app_perror( THIS_FILE, "Unable to create sound recorder", status); 
    890         return; 
    891     } 
    892  
    893     status = pjmedia_snd_port_connect(g_snd_rec, media_port); 
     880    status = pjmedia_snd_port_connect(g_snd_port, media_port); 
    894881 
    895882 
     
    898885     * the port directly to a renderer/capture video device. 
    899886     */ 
     887#if PJMEDIA_HAS_VIDEO 
    900888    if (local_sdp->media_count > 1) { 
    901889        pjmedia_vid_stream_info vstream_info; 
    902890        pjmedia_vid_port_param vport_param; 
     891 
     892        pjmedia_vid_port_param_default(&vport_param); 
    903893 
    904894        /* Create stream info based on the media video SDP. */ 
     
    919909         * media socket that we created earlier. 
    920910         */ 
    921         status = pjmedia_vid_stream_create(g_med_endpt, inv->dlg->pool, 
    922                                            &vstream_info, g_med_transport[1], 
    923                                            NULL, &g_med_vstream); 
     911        status = pjmedia_vid_stream_create(g_med_endpt, NULL, &vstream_info, 
     912                                           g_med_transport[1], NULL, 
     913                                          &g_med_vstream); 
    924914        if (status != PJ_SUCCESS) { 
    925915            app_perror( THIS_FILE, "Unable to create video stream", status); 
     
    933923            return; 
    934924        } 
    935  
    936925 
    937926        if (vstream_info.dir & PJMEDIA_DIR_DECODING) { 
     
    945934            } 
    946935 
    947             /* Get renderer format from decoding format in stream info */ 
    948             pjmedia_format_copy(&vport_param.vidparam.fmt,  
    949                                 &vstream_info.codec_param->dec_fmt); 
     936            /* Get video stream port for decoding direction */ 
     937            pjmedia_vid_stream_get_port(g_med_vstream, PJMEDIA_DIR_DECODING, 
     938                                        &media_port); 
     939 
     940            /* Set format */ 
     941            pjmedia_format_copy(&vport_param.vidparam.fmt, 
     942                                &media_port->info.fmt); 
    950943            vport_param.vidparam.dir = PJMEDIA_DIR_RENDER; 
    951944            vport_param.active = PJ_TRUE; 
     
    959952                return; 
    960953            } 
    961  
    962             /* Get video stream port for decoding direction */ 
    963             pjmedia_vid_stream_get_port(g_med_vstream, PJMEDIA_DIR_DECODING, 
    964                                         &media_port); 
    965954 
    966955            /* Connect renderer to media_port */ 
     
    985974            } 
    986975 
    987             /* Get renderer capturer from encoding format in stream info */ 
     976            /* Get video stream port for decoding direction */ 
     977            pjmedia_vid_stream_get_port(g_med_vstream, PJMEDIA_DIR_ENCODING, 
     978                                        &media_port); 
     979 
     980            /* Get capturer format from stream info */ 
    988981            pjmedia_format_copy(&vport_param.vidparam.fmt,  
    989                                 &vstream_info.codec_param->enc_fmt); 
    990  
    991             /* Capturer format ID should be copied from decoder format ID? */ 
    992             vport_param.vidparam.fmt.id = vstream_info.codec_param->dec_fmt.id; 
     982                                &media_port->info.fmt); 
    993983            vport_param.vidparam.dir = PJMEDIA_DIR_CAPTURE; 
    994984            vport_param.active = PJ_TRUE; 
     
    1003993            } 
    1004994 
    1005             /* Get video stream port for decoding direction */ 
    1006             pjmedia_vid_stream_get_port(g_med_vstream, PJMEDIA_DIR_ENCODING, 
    1007                                         &media_port); 
    1008  
    1009995            /* Connect capturer to media_port */ 
    1010996            status = pjmedia_vid_port_connect(g_vid_capturer, media_port,  
     
    10351021        } 
    10361022    } 
     1023#endif  /* PJMEDIA_HAS_VIDEO */ 
    10371024 
    10381025    /* Done with media. */ 
Note: See TracChangeset for help on using the changeset viewer.