mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 10:47:18 +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); | ||||
| @@ -3413,4 +3415,4 @@ void ast_rtp_instance_set_stream_num(struct ast_rtp_instance *rtp, int stream_nu | ||||
| 		rtp->engine->set_stream_num(rtp, stream_num); | ||||
| 	} | ||||
| 	ao2_unlock(rtp); | ||||
| } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user