diff -Nur asterisk-1.8.4.4/channels/chan_sip.c asterisk-1.8.4.4-video-patch-ol/channels/chan_sip.c
--- asterisk-1.8.4.4/channels/chan_sip.c	2011-06-28 22:08:33.000000000 +0200
+++ asterisk-1.8.4.4-video-patch-ol/channels/chan_sip.c	2011-07-28 19:27:11.000000000 +0200
@@ -5110,6 +5110,12 @@
 		ast_string_field_set(dialog, fromuser, peer->fromuser);
 	if (!ast_strlen_zero(peer->language))
 		ast_string_field_set(dialog, language, peer->language);
+	if (!ast_strlen_zero(peer->video_fmtp))
+		ast_string_field_set(dialog, video_fmtp, peer->video_fmtp);
+	if (!ast_strlen_zero(peer->video_imageattr))
+		ast_string_field_set(dialog, video_imageattr, peer->video_imageattr);
+	if (!ast_strlen_zero(peer->video_btias))
+		ast_string_field_set(dialog, video_btias, peer->video_btias);
 	/* Set timer T1 to RTT for this peer (if known by qualify=) */
 	/* Minimum is settable or default to 100 ms */
 	/* If there is a maxms and lastms from a qualify use that over a manual T1
@@ -10495,6 +10501,16 @@
 		       ast_rtp_lookup_mime_subtype2(1, codec, 0),
 		       ast_rtp_lookup_sample_rate2(1, codec));
 	/* Add fmtp code here */
+	if (codec & 0x200000) {
+		if (!ast_strlen_zero(p->video_fmtp)) {
+			ast_verbose("Adding custom video_fmtp %s\n", p->video_fmtp);
+			ast_str_append(a_buf, 0, "a=fmtp:%d %s\r\n", rtp_code, p->video_fmtp);
+		}
+		if (!ast_strlen_zero(p->video_imageattr)) {
+			ast_verbose("Adding custom video_imageattr %s\n", p->video_imageattr);
+			ast_str_append(a_buf, 0, "a=imageattr:%d %s\r\n", rtp_code, p->video_imageattr);
+		}
+	}
 }
 
 /*! \brief Add text codec offer to SDP offer/answer body in INVITE or 200 OK */
@@ -11007,6 +11023,9 @@
  		ast_str_append(&m_audio, 0, "\r\n");
  	if (needvideo)
  		ast_str_append(&m_video, 0, "\r\n");
+		if (!ast_strlen_zero(p->video_btias)) {
+			ast_str_append(&m_video, 0, "b=TIAS:%s\r\n", p->video_btias);
+		}
  	if (needtext)
  		ast_str_append(&m_text, 0, "\r\n");
 
@@ -15293,6 +15312,9 @@
 		ast_string_field_set(p, peersecret, peer->secret);
 		ast_string_field_set(p, peermd5secret, peer->md5secret);
 		ast_string_field_set(p, language, peer->language);
+		ast_string_field_set(p, video_fmtp, peer->video_fmtp);
+		ast_string_field_set(p, video_imageattr, peer->video_imageattr);
+		ast_string_field_set(p, video_btias, peer->video_btias);
 		ast_string_field_set(p, accountcode, peer->accountcode);
 		p->amaflags = peer->amaflags;
 		p->callgroup = peer->callgroup;
@@ -16704,6 +16726,9 @@
 		ast_cli(fd, "  Parkinglot   : %s\n", peer->parkinglot);
 		ast_cli(fd, "  Use Reason   : %s\n", AST_CLI_YESNO(ast_test_flag(&peer->flags[1], SIP_PAGE2_Q850_REASON)));
 		ast_cli(fd, "  Encryption   : %s\n", AST_CLI_YESNO(ast_test_flag(&peer->flags[1], SIP_PAGE2_USE_SRTP)));
+		ast_cli(fd, "  video_fmtp   : %s\n", peer->video_fmtp);
+		ast_cli(fd, "  video_imageat: %s\n", peer->video_imageattr);
+		ast_cli(fd, "  video_btias  : %s\n", peer->video_btias);
 		ast_cli(fd, "\n");
 		peer = unref_peer(peer, "sip_show_peer: unref_peer: done with peer ptr");
 	} else  if (peer && type == 1) { /* manager listing */
@@ -16791,6 +16816,9 @@
  		astman_append(s, "Reg-Contact: %s\r\n", peer->fullcontact);
 		astman_append(s, "QualifyFreq: %d ms\r\n", peer->qualifyfreq);
 		astman_append(s, "Parkinglot: %s\r\n", peer->parkinglot);
+		astman_append(s, "video_fmtp: %s\r\n", peer->video_fmtp);
+		astman_append(s, "video_imageattr: %s\r\n", peer->video_imageattr);
+		astman_append(s, "video_btias: %s\r\n", peer->video_btias);
 		if (peer->chanvars) {
 			for (v = peer->chanvars ; v ; v = v->next) {
  				astman_append(s, "ChanVariable: %s=%s\r\n", v->name, v->value);
@@ -18526,6 +18554,12 @@
 		peer_status(peer, buf, len);
 	} else  if (!strcasecmp(colname, "language")) {
 		ast_copy_string(buf, peer->language, len);
+	} else  if (!strcasecmp(colname, "video_fmtp")) {
+		ast_copy_string(buf, peer->video_fmtp, len);
+	} else  if (!strcasecmp(colname, "video_imageattr")) {
+		ast_copy_string(buf, peer->video_imageattr, len);
+	} else  if (!strcasecmp(colname, "video_btias")) {
+		ast_copy_string(buf, peer->video_btias, len);
 	} else  if (!strcasecmp(colname, "regexten")) {
 		ast_copy_string(buf, peer->regexten, len);
 	} else  if (!strcasecmp(colname, "limit")) {
@@ -25923,6 +25957,9 @@
 	ast_string_field_set(peer, fromdomain, "");
 	ast_string_field_set(peer, fromuser, "");
 	ast_string_field_set(peer, regexten, "");
+	ast_string_field_set(peer, video_fmtp, "");
+	ast_string_field_set(peer, video_imageattr, "");
+	ast_string_field_set(peer, video_btias, "");
 	peer->callgroup = 0;
 	peer->pickupgroup = 0;
 	peer->maxms = default_qualify;
@@ -26298,6 +26335,12 @@
 				}
 			} else if (!strcasecmp(v->name, "language")) {
 				ast_string_field_set(peer, language, v->value);
+			} else if (!strcasecmp(v->name, "video_fmtp")) {
+				ast_string_field_set(peer, video_fmtp, ast_unescape_semicolon((char *)v->value));
+			} else if (!strcasecmp(v->name, "video_imageattr")) {
+				ast_string_field_set(peer, video_imageattr, ast_unescape_semicolon((char *)v->value));
+			} else if (!strcasecmp(v->name, "video_btias")) {
+				ast_string_field_set(peer, video_btias, v->value);
 			} else if (!strcasecmp(v->name, "regexten")) {
 				ast_string_field_set(peer, regexten, v->value);
 			} else if (!strcasecmp(v->name, "callbackextension")) {
@@ -28888,7 +28931,10 @@
 	MEMBER(sip_peer, maxms, AST_DATA_MILLISECONDS)		\
 	MEMBER(sip_peer, qualifyfreq, AST_DATA_MILLISECONDS)	\
 	MEMBER(sip_peer, timer_t1, AST_DATA_MILLISECONDS)	\
-	MEMBER(sip_peer, timer_b, AST_DATA_MILLISECONDS)
+	MEMBER(sip_peer, timer_b, AST_DATA_MILLISECONDS)	\
+	MEMBER(sip_peer, video_fmtp, AST_DATA_STRING)		\
+	MEMBER(sip_peer, video_imageattr, AST_DATA_STRING)	\
+	MEMBER(sip_peer, video_btias, AST_DATA_STRING)
 
 AST_DATA_STRUCTURE(sip_peer, DATA_EXPORT_SIP_PEER);
 
diff -Nur asterisk-1.8.4.4/channels/sip/include/sip.h asterisk-1.8.4.4-video-patch-ol/channels/sip/include/sip.h
--- asterisk-1.8.4.4/channels/sip/include/sip.h	2011-04-25 17:11:30.000000000 +0200
+++ asterisk-1.8.4.4-video-patch-ol/channels/sip/include/sip.h	2011-07-28 19:21:09.000000000 +0200
@@ -964,6 +964,9 @@
 		AST_STRING_FIELD(parkinglot);   /*!< Parkinglot */
 		AST_STRING_FIELD(engine);       /*!< RTP engine to use */
 		AST_STRING_FIELD(dialstring);   /*!< The dialstring used to call this SIP endpoint */
+		AST_STRING_FIELD(video_fmtp);
+		AST_STRING_FIELD(video_imageattr);
+		AST_STRING_FIELD(video_btias);
 	);
 	char via[128];                          /*!< Via: header */
 	int maxforwards;                        /*!< SIP Loop prevention */
@@ -1184,6 +1187,9 @@
 		AST_STRING_FIELD(mwi_from);     /*!< Name to place in From header for outgoing NOTIFY requests */
 		AST_STRING_FIELD(engine);       /*!<  RTP Engine to use */
 		AST_STRING_FIELD(unsolicited_mailbox);  /*!< Mailbox to store received unsolicited MWI NOTIFY messages information in */
+		AST_STRING_FIELD(video_fmtp);
+		AST_STRING_FIELD(video_imageattr);
+		AST_STRING_FIELD(video_btias);
 		);
 	struct sip_socket socket;       /*!< Socket used for this peer */
 	enum sip_transport default_outbound_transport;   /*!< Peer Registration may change the default outbound transport.
