diff --git a/main/format_cap.c b/main/format_cap.c
index 2221c5339929f5fac0e99275e632c49c9102901e..9e16aa3e131bf70fa5bb4f7f78b8d15728815c4c 100644
--- a/main/format_cap.c
+++ b/main/format_cap.c
@@ -231,7 +231,15 @@ int ast_format_cap_append_by_type(struct ast_format_cap *cap, enum ast_media_typ
 		}
 
 		format = ast_format_cache_get(codec->name);
+
+		if (format == ast_format_none) {
+			ao2_ref(format, -1);
+			ao2_ref(codec, -1);
+			continue;
+		}
+
 		if (!format || (codec != ast_format_get_codec(format))) {
+			ao2_cleanup(format);
 			format = ast_format_create(codec);
 		}
 		ao2_ref(codec, -1);
diff --git a/tests/test_format_cap.c b/tests/test_format_cap.c
index b62f6e5d8be771728ac3b84c9ef54c875e8b711b..1f02c29cd369328a0bf53c64aadf47d390e9338e 100644
--- a/tests/test_format_cap.c
+++ b/tests/test_format_cap.c
@@ -245,7 +245,7 @@ AST_TEST_DEFINE(format_cap_append_all_unknown)
 	} else if (!ast_format_cap_has_type(caps, AST_MEDIA_TYPE_VIDEO)) {
 		ast_test_status_update(test, "Added all media formats but no video formats exist when they should\n");
 		return AST_TEST_FAIL;
-	} else if ((ast_format_cap_count(caps) + 1) != ast_codec_get_max()) {
+	} else if ((ast_format_cap_count(caps) + 1) != (ast_codec_get_max() - 1)) {
 		ast_test_status_update(test, "The number of formats in the capabilities structure does not match known number\n");
 		return AST_TEST_FAIL;
 	}