diff --git a/main/format.c b/main/format.c
index 8ac82f0ed26a3ddbd36e434e13e82cac0ffdfed3..5bf38dfb2e5ab4fb901c0711696907b06c35b10f 100644
--- a/main/format.c
+++ b/main/format.c
@@ -302,6 +302,14 @@ const void *ast_format_attribute_get(const struct ast_format *format, const char
 {
 	const struct ast_format_interface *interface = format->interface;
 
+	if (!interface) {
+		struct format_interface *format_interface = ao2_find(interfaces, format->codec->name, OBJ_SEARCH_KEY);
+		if (format_interface) {
+			interface = format_interface->interface;
+			ao2_ref(format_interface, -1);
+		}
+	}
+
 	if (!interface || !interface->format_attribute_get) {
 		return NULL;
 	}
@@ -330,11 +338,21 @@ struct ast_format *ast_format_parse_sdp_fmtp(const struct ast_format *format, co
 
 void ast_format_generate_sdp_fmtp(const struct ast_format *format, unsigned int payload, struct ast_str **str)
 {
-	if (!format->interface || !format->interface->format_generate_sdp_fmtp) {
+	const struct ast_format_interface *interface = format->interface;
+
+	if (!interface) {
+		struct format_interface *format_interface = ao2_find(interfaces, format->codec->name, OBJ_SEARCH_KEY);
+		if (format_interface) {
+			interface = format_interface->interface;
+			ao2_ref(format_interface, -1);
+		}
+	}
+
+	if (!interface || !interface->format_generate_sdp_fmtp) {
 		return;
 	}
 
-	format->interface->format_generate_sdp_fmtp(format, payload, str);
+	interface->format_generate_sdp_fmtp(format, payload, str);
 }
 
 struct ast_codec *ast_format_get_codec(const struct ast_format *format)