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 ||
+ ast_format_cap_iscompatible_format(ast_channel_nativeformats(ast), ast_format_h265) != 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
--- /dev/null
+Subject: Core
+
+H.265/HEVC is now a supported video codec and it can be used by
+specifying "h265" in the allow line.
+Please note however, that handling of the additional SDP parameters
+described in RFC 7798 section 7.2 is not yet supported.
*/
extern struct ast_format *ast_format_h264;
+/*!
+ * \brief Built-in cached h265 format.
+ */
+extern struct ast_format *ast_format_h265;
+
/*!
* \brief Built-in cached mp4 format.
*/
.sample_rate = 1000,
};
+static struct ast_codec h265 = {
+ .name = "h265",
+ .description = "H.265 video",
+ .type = AST_MEDIA_TYPE_VIDEO,
+ .sample_rate = 1000,
+};
+
static struct ast_codec mpeg4 = {
.name = "mpeg4",
.description = "MPEG4 video",
res |= CODEC_REGISTER_AND_CACHE(h263);
res |= CODEC_REGISTER_AND_CACHE(h263p);
res |= CODEC_REGISTER_AND_CACHE(h264);
+ res |= CODEC_REGISTER_AND_CACHE(h265);
res |= CODEC_REGISTER_AND_CACHE(mpeg4);
res |= CODEC_REGISTER_AND_CACHE(vp8);
res |= CODEC_REGISTER_AND_CACHE(vp9);
*/
struct ast_format *ast_format_h264;
+/*!
+ * \brief Built-in cached h265 format.
+ */
+struct ast_format *ast_format_h265;
+
/*!
* \brief Built-in cached mp4 format.
*/
ao2_replace(ast_format_h263, NULL);
ao2_replace(ast_format_h263p, NULL);
ao2_replace(ast_format_h264, NULL);
+ ao2_replace(ast_format_h265, NULL);
ao2_replace(ast_format_mp4, NULL);
ao2_replace(ast_format_vp8, NULL);
ao2_replace(ast_format_vp9, NULL);
ao2_replace(ast_format_h263p, format);
} else if (!strcmp(name, "h264")) {
ao2_replace(ast_format_h264, format);
+ } else if (!strcmp(name, "h265")) {
+ ao2_replace(ast_format_h265, format);
} else if (!strcmp(name, "mpeg4")) {
ao2_replace(ast_format_mp4, format);
} else if (!strcmp(name, "vp8")) {
set_next_mime_type(ast_format_h263, 0, "video", "H263", 90000);
set_next_mime_type(ast_format_h263p, 0, "video", "h263-1998", 90000);
set_next_mime_type(ast_format_h264, 0, "video", "H264", 90000);
+ set_next_mime_type(ast_format_h265, 0, "video", "H265", 90000);
set_next_mime_type(ast_format_mp4, 0, "video", "MP4V-ES", 90000);
set_next_mime_type(ast_format_t140_red, 0, "text", "RED", 1000);
set_next_mime_type(ast_format_t140, 0, "text", "T140", 1000);
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(109, ast_format_h265, 0);
add_static_payload(110, ast_format_speex, 0);
add_static_payload(111, ast_format_g726, 0);