Changeset 6110 for pjproject/trunk/pjmedia/src/pjmedia/vid_codec_util.c
- Timestamp:
- Nov 22, 2019 6:18:55 AM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjmedia/src/pjmedia/vid_codec_util.c
r5678 r6110 763 763 764 764 765 /* VPX fmtp parser */ 766 PJ_DEF(pj_status_t) pjmedia_vid_codec_vpx_parse_fmtp( 767 const pjmedia_codec_fmtp *fmtp, 768 pjmedia_vid_codec_vpx_fmtp *vpx_fmtp) 769 { 770 const pj_str_t PROFILE_ID = {"profile-id", 10}; 771 const pj_str_t MAX_FR = {"max-fr", 6}; 772 const pj_str_t MAX_FS = {"max-fs", 6}; 773 774 unsigned i; 775 776 pj_bzero(vpx_fmtp, sizeof(*vpx_fmtp)); 777 778 for (i = 0; i < fmtp->cnt; ++i) { 779 unsigned tmp; 780 781 if (pj_stricmp(&fmtp->param[i].name, &MAX_FS) == 0) { 782 tmp = pj_strtoul(&fmtp->param[i].val); 783 vpx_fmtp->max_fs = PJ_MAX(tmp, vpx_fmtp->max_fs); 784 } else if (pj_stricmp(&fmtp->param[i].name, &MAX_FR) == 0) { 785 tmp = pj_strtoul(&fmtp->param[i].val); 786 vpx_fmtp->max_fr = PJ_MAX(tmp, vpx_fmtp->max_fr); 787 } else if (pj_stricmp(&fmtp->param[i].name, &PROFILE_ID) == 0) { 788 tmp = pj_strtoul(&fmtp->param[i].val); 789 vpx_fmtp->profile_id = PJ_MAX(tmp, vpx_fmtp->profile_id); 790 } 791 } 792 793 return PJ_SUCCESS; 794 } 795 796 797 PJ_DEF(pj_status_t) pjmedia_vid_codec_vpx_apply_fmtp( 798 pjmedia_vid_codec_param *param) 799 { 800 if (param->dir & PJMEDIA_DIR_ENCODING) { 801 pjmedia_vid_codec_vpx_fmtp fmtp; 802 pjmedia_video_format_detail *vfd; 803 pj_status_t status; 804 805 /* Get remote param */ 806 status = pjmedia_vid_codec_vpx_parse_fmtp(¶m->enc_fmtp, 807 &fmtp); 808 if (status != PJ_SUCCESS) 809 return status; 810 811 /* Adjust fps and size to conform to the parameter 812 * specified by remote SDP fmtp. 813 */ 814 vfd = pjmedia_format_get_video_format_detail(¶m->enc_fmt, 815 PJ_TRUE); 816 817 if (fmtp.max_fr > 0) { 818 vfd->fps.num = fmtp.max_fr; 819 vfd->fps.denum = 1; 820 } 821 822 if (fmtp.max_fs > 0) { 823 unsigned max_res = ((int)pj_isqrt(fmtp.max_fs * 8)) * 16; 824 825 /* Do we need to maintain the aspect ratio or scale down 826 * to some predetermined resolution instead (for example, 827 * if the requested resolution is 640x480 and max_res is 828 * 600, should we scale down to 480xx360)? 829 */ 830 if (vfd->size.w > max_res) 831 vfd->size.w = max_res; 832 if (vfd->size.h > max_res) 833 vfd->size.h = max_res; 834 } 835 } 836 837 return PJ_SUCCESS; 838 } 839 840 765 841 #endif /* PJMEDIA_HAS_VIDEO */
Note: See TracChangeset
for help on using the changeset viewer.