/* * Enum codecs supported by this factory. */ static pj_status_t pj_vpx_enum_codecs(pjmedia_vid_codec_factory *factory, unsigned *count, pjmedia_vid_codec_info codecs[]) { unsigned i; PJ_ASSERT_RETURN(codecs && *count > 0, PJ_EINVAL); PJ_ASSERT_RETURN(factory == &vpx_factory.base, PJ_EINVAL); PJ_LOG(4, (THIS_FILE, "Enum codecs...")); *count = 0; codecs[*count].fmt_id = PJMEDIA_FORMAT_PACK('L', 'V', 'P', '8'); codecs[*count].pt = PJMEDIA_RTP_PT_VP8; codecs[*count].encoding_name = pj_str("VP8"); codecs[*count].encoding_desc = pj_str("WebM Project VP8 Encoder"); codecs[*count].dir = PJMEDIA_DIR_ENCODING_DECODING; codecs[*count].clock_rate = 90000; codecs[*count].fps_cnt = 0; codecs[*count].dec_fmt_id_cnt = 1; codecs[*count].dec_fmt_id[0] = PJMEDIA_FORMAT_I420; /* codecs[*count].fps[0].num = 15; codecs[*count].fps[0].denum = 1; */ codecs[*count].packings = PJMEDIA_VID_PACKING_PACKETS; (*count)++; return PJ_SUCCESS; }
/* * Generate default attribute. */ static pj_status_t pj_vpx_default_attr(pjmedia_vid_codec_factory *factory, const pjmedia_vid_codec_info *info, pjmedia_vid_codec_param *attr) { PJ_ASSERT_RETURN(factory==&vpx_factory.base, PJ_EINVAL); PJ_ASSERT_RETURN(info && attr, PJ_EINVAL); TRACE_((THIS_FILE, "vpx default attr")); pj_bzero(attr, sizeof(pjmedia_vid_codec_param)); /* Scan the requested packings and use the lowest number */ attr->packing = 1; /* Direction */ attr->dir = PJMEDIA_DIR_ENCODING_DECODING; /* Encoded format */ pjmedia_format_init_video(&attr->enc_fmt, PJMEDIA_FORMAT_PACK('L', 'V', 'P', '8'), 640, 480, 30, 1); /* Decoded format */ pjmedia_format_init_video(&attr->dec_fmt, PJMEDIA_FORMAT_I420, 640, 480, 30, 1); /* Decoding fmtp */ attr->dec_fmtp.cnt = 0; /* Bitrate */ attr->enc_fmt.det.vid.avg_bps = 1024 * 1000; attr->enc_fmt.det.vid.max_bps = 1024 * 1000; attr->enc_fmtp.cnt = 0; /* Encoding MTU */ attr->enc_mtu = PJMEDIA_MAX_VID_PAYLOAD_SIZE; return PJ_SUCCESS; }