[Asterisk-code-review] core: Add VP9 passthrough support. (asterisk[15])
Joshua Colp
asteriskteam at digium.com
Mon Jul 24 13:51:13 CDT 2017
Joshua Colp has uploaded this change for review. ( https://gerrit.asterisk.org/6082
Change subject: core: Add VP9 passthrough support.
......................................................................
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
---
M channels/chan_pjsip.c
M include/asterisk/format_cache.h
M main/codec_builtin.c
M main/format_cache.c
M main/rtp_engine.c
5 files changed, 26 insertions(+), 2 deletions(-)
git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/82/6082/1
diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c
index f009943..51b5dab 100644
--- a/channels/chan_pjsip.c
+++ b/channels/chan_pjsip.c
@@ -1596,6 +1596,7 @@
* 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
diff --git a/include/asterisk/format_cache.h b/include/asterisk/format_cache.h
index 92272e8..0675463 100644
--- a/include/asterisk/format_cache.h
+++ b/include/asterisk/format_cache.h
@@ -184,6 +184,11 @@
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.
*/
extern struct ast_format *ast_format_jpeg;
diff --git a/main/codec_builtin.c b/main/codec_builtin.c
index 32ec12d..25aa513 100644
--- a/main/codec_builtin.c
+++ b/main/codec_builtin.c
@@ -820,6 +820,13 @@
.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 @@
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);
diff --git a/main/format_cache.c b/main/format_cache.c
index 302bbf8..1a67ebe 100644
--- a/main/format_cache.c
+++ b/main/format_cache.c
@@ -191,6 +191,11 @@
struct ast_format *ast_format_vp8;
/*!
+ * \brief Built-in cached vp9 format.
+ */
+struct ast_format *ast_format_vp9;
+
+/*!
* \brief Built-in cached jpeg format.
*/
struct ast_format *ast_format_jpeg;
@@ -345,6 +350,7 @@
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 @@
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")) {
diff --git a/main/rtp_engine.c b/main/rtp_engine.c
index abd4b1f..fe60c4e 100644
--- a/main/rtp_engine.c
+++ b/main/rtp_engine.c
@@ -3268,9 +3268,10 @@
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 @@
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);
@@ -3413,4 +3415,4 @@
rtp->engine->set_stream_num(rtp, stream_num);
}
ao2_unlock(rtp);
-}
\ No newline at end of file
+}
--
To view, visit https://gerrit.asterisk.org/6082
To unsubscribe, visit https://gerrit.asterisk.org/settings
Gerrit-Project: asterisk
Gerrit-Branch: 15
Gerrit-MessageType: newchange
Gerrit-Change-Id: I025a93ed05cf96153d66f36db1839109cc24c5cc
Gerrit-Change-Number: 6082
Gerrit-PatchSet: 1
Gerrit-Owner: Joshua Colp <jcolp at digium.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20170724/24f8dbe2/attachment.html>
More information about the asterisk-code-review
mailing list