It seems that you guys are just guessing on this matter which is very unfortunate for me as I took your word for it and spent several more hours trying to make it work as you assert it should.
After enough of that, I dug into the code for app_originate and was not too surprised to find that it is hard-coded with the slin audio formats, which of course can be transcoded into any other audio format. But this excludes all video codecs, no matter whether they are set in dialplan variables, functions, or peer definitions.
A workaround for me is to modify app_originate.c to include h264 format at the end of the list of capabilities:
diff --git a/apps/app_originate.c b/apps/app_originate.c
index 107be84..6174ff2 100644
--- a/apps/app_originate.c
+++ b/apps/app_originate.c
@@ -181,6 +181,7 @@ static int originate_exec(struct ast_channel *chan, const char *data)
ast_format_cap_append(cap_slin, ast_format_slin48, 0);
ast_format_cap_append(cap_slin, ast_format_slin96, 0);
ast_format_cap_append(cap_slin, ast_format_slin192, 0);
+ ast_format_cap_append(cap_slin, ast_format_h264, 0);
if (ast_strlen_zero(data)) {
ast_log(LOG_ERROR, "Originate() requires arguments\n");
This (hard-coding) is a poor solution and would be more complete if the application took an argument or checked a variable as to whether it should offer video.