Changeset 6093


Ignore:
Timestamp:
Oct 15, 2019 8:58:41 AM (5 years ago)
Author:
nanang
Message:

Fix #2245: Reconnect video stream listeners in video conference bridge after format changed.

Location:
pjproject/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/src/pjmedia/vid_stream.c

    r6005 r6093  
    13421342                    } else { 
    13431343                        pjmedia_event_init(event, PJMEDIA_EVENT_FMT_CHANGED, 
    1344                                            &frame->timestamp, stream); 
     1344                                           &frame->timestamp, &channel->port); 
    13451345                        event->data.fmt_changed.dir = PJMEDIA_DIR_DECODING; 
    13461346                        pj_memcpy(&event->data.fmt_changed.new_fmt, 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_media.c

    r6085 r6093  
    15431543            if (call_med->strm.v.rdr_win_id != PJSUA_INVALID_ID) { 
    15441544                pjsua_vid_win *w = &pjsua_var.win[call_med->strm.v.rdr_win_id]; 
    1545                 if (event->src == w->vp_rend) { 
     1545                if (event->epub == w->vp_rend) { 
    15461546                    /* Renderer just changed format, reconnect stream */ 
    15471547                    pjsua_vid_conf_disconnect(call_med->strm.v.strm_dec_slot, 
     
    15491549                    pjsua_vid_conf_connect(call_med->strm.v.strm_dec_slot, 
    15501550                                           w->rend_slot, NULL); 
     1551                } 
     1552            } 
     1553 
     1554            if (call_med->strm.v.strm_dec_slot != PJSUA_INVALID_ID) { 
     1555                /* Stream decoder changed format, update all conf listeners 
     1556                 * by reconnecting. 
     1557                 */ 
     1558                pjsua_conf_port_id dec_pid = call_med->strm.v.strm_dec_slot; 
     1559                pjmedia_port *strm_dec; 
     1560                pjsua_vid_conf_port_info pi; 
     1561                unsigned i; 
     1562 
     1563                status = pjmedia_vid_stream_get_port(call_med->strm.v.stream, 
     1564                                                     PJMEDIA_DIR_DECODING, 
     1565                                                     &strm_dec); 
     1566                if (status != PJ_SUCCESS) 
     1567                    break; 
     1568 
     1569                /* Verify that the publisher is the stream decoder */ 
     1570                if (event->epub != strm_dec) 
     1571                    break; 
     1572 
     1573                status = pjsua_vid_conf_get_port_info(dec_pid, &pi); 
     1574                if (status != PJ_SUCCESS) 
     1575                    break; 
     1576 
     1577                for (i = 0; i < pi.listener_cnt; i++) { 
     1578                    pjsua_vid_conf_disconnect(dec_pid, pi.listeners[i]); 
     1579                    pjsua_vid_conf_connect(dec_pid, pi.listeners[i], NULL); 
    15511580                } 
    15521581            } 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_vid.c

    r5979 r6093  
    11321132            pjmedia_event_subscribe(NULL, &call_media_on_event, 
    11331133                                    call_med, w->vp_rend); 
     1134            pjmedia_event_subscribe(NULL, &call_media_on_event, 
     1135                                    call_med, media_port); 
    11341136#endif 
    11351137             
Note: See TracChangeset for help on using the changeset viewer.