mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-03 11:25:35 +00:00
core: Add VP9 passthrough support.
This change adds VP9 as a known codec and creates a cached "vp9" media format for use. Change-Id: I025a93ed05cf96153d66f36db1839109cc24c5cc
This commit is contained in:
@@ -1596,6 +1596,7 @@ static int chan_pjsip_indicate(struct ast_channel *ast, int condition, const voi
|
||||
* fully support other video codecs */
|
||||
|
||||
if (ast_format_cap_iscompatible_format(ast_channel_nativeformats(ast), ast_format_vp8) != AST_FORMAT_CMP_NOT_EQUAL ||
|
||||
ast_format_cap_iscompatible_format(ast_channel_nativeformats(ast), ast_format_vp9) != AST_FORMAT_CMP_NOT_EQUAL ||
|
||||
(channel->session->endpoint->media.webrtc &&
|
||||
ast_format_cap_iscompatible_format(ast_channel_nativeformats(ast), ast_format_h264) != AST_FORMAT_CMP_NOT_EQUAL)) {
|
||||
/* FIXME Fake RTP write, this will be sent as an RTCP packet. Ideally the
|
||||
|
@@ -183,6 +183,11 @@ extern struct ast_format *ast_format_mp4;
|
||||
*/
|
||||
extern struct ast_format *ast_format_vp8;
|
||||
|
||||
/*!
|
||||
* \brief Built-in cached vp9 format.
|
||||
*/
|
||||
extern struct ast_format *ast_format_vp9;
|
||||
|
||||
/*!
|
||||
* \brief Built-in cached jpeg format.
|
||||
*/
|
||||
|
@@ -820,6 +820,13 @@ static struct ast_codec vp8 = {
|
||||
.sample_rate = 1000,
|
||||
};
|
||||
|
||||
static struct ast_codec vp9 = {
|
||||
.name = "vp9",
|
||||
.description = "VP9 video",
|
||||
.type = AST_MEDIA_TYPE_VIDEO,
|
||||
.sample_rate = 1000,
|
||||
};
|
||||
|
||||
static struct ast_codec t140red = {
|
||||
.name = "red",
|
||||
.description = "T.140 Realtime Text with redundancy",
|
||||
@@ -966,6 +973,7 @@ int ast_codec_builtin_init(void)
|
||||
res |= CODEC_REGISTER_AND_CACHE(h264);
|
||||
res |= CODEC_REGISTER_AND_CACHE(mpeg4);
|
||||
res |= CODEC_REGISTER_AND_CACHE(vp8);
|
||||
res |= CODEC_REGISTER_AND_CACHE(vp9);
|
||||
res |= CODEC_REGISTER_AND_CACHE(t140red);
|
||||
res |= CODEC_REGISTER_AND_CACHE(t140);
|
||||
res |= CODEC_REGISTER_AND_CACHE(t38);
|
||||
|
@@ -190,6 +190,11 @@ struct ast_format *ast_format_mp4;
|
||||
*/
|
||||
struct ast_format *ast_format_vp8;
|
||||
|
||||
/*!
|
||||
* \brief Built-in cached vp9 format.
|
||||
*/
|
||||
struct ast_format *ast_format_vp9;
|
||||
|
||||
/*!
|
||||
* \brief Built-in cached jpeg format.
|
||||
*/
|
||||
@@ -345,6 +350,7 @@ static void format_cache_shutdown(void)
|
||||
ao2_replace(ast_format_h264, NULL);
|
||||
ao2_replace(ast_format_mp4, NULL);
|
||||
ao2_replace(ast_format_vp8, NULL);
|
||||
ao2_replace(ast_format_vp9, NULL);
|
||||
ao2_replace(ast_format_t140_red, NULL);
|
||||
ao2_replace(ast_format_t140, NULL);
|
||||
ao2_replace(ast_format_t38, NULL);
|
||||
@@ -444,6 +450,8 @@ static void set_cached_format(const char *name, struct ast_format *format)
|
||||
ao2_replace(ast_format_mp4, format);
|
||||
} else if (!strcmp(name, "vp8")) {
|
||||
ao2_replace(ast_format_vp8, format);
|
||||
} else if (!strcmp(name, "vp9")) {
|
||||
ao2_replace(ast_format_vp9, format);
|
||||
} else if (!strcmp(name, "red")) {
|
||||
ao2_replace(ast_format_t140_red, format);
|
||||
} else if (!strcmp(name, "t140")) {
|
||||
|
@@ -3268,9 +3268,10 @@ int ast_rtp_engine_init(void)
|
||||
set_next_mime_type(ast_format_siren7, 0, "audio", "G7221", 16000);
|
||||
set_next_mime_type(ast_format_siren14, 0, "audio", "G7221", 32000);
|
||||
set_next_mime_type(ast_format_g719, 0, "audio", "G719", 48000);
|
||||
/* Opus and VP8 */
|
||||
/* Opus, VP8, and VP9 */
|
||||
set_next_mime_type(ast_format_opus, 0, "audio", "opus", 48000);
|
||||
set_next_mime_type(ast_format_vp8, 0, "video", "VP8", 90000);
|
||||
set_next_mime_type(ast_format_vp9, 0, "video", "VP9", 90000);
|
||||
|
||||
/* Define the static rtp payload mappings */
|
||||
add_static_payload(0, ast_format_ulaw, 0);
|
||||
@@ -3311,6 +3312,7 @@ int ast_rtp_engine_init(void)
|
||||
add_static_payload(105, ast_format_t140_red, 0); /* Real time text chat (with redundancy encoding) */
|
||||
add_static_payload(106, ast_format_t140, 0); /* Real time text chat */
|
||||
add_static_payload(107, ast_format_opus, 0);
|
||||
add_static_payload(108, ast_format_vp9, 0);
|
||||
|
||||
add_static_payload(110, ast_format_speex, 0);
|
||||
add_static_payload(111, ast_format_g726, 0);
|
||||
|
Reference in New Issue
Block a user