mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-26 14:27:14 +00:00
Merge "media: Add experimental support for RTCP feedback."
This commit is contained in:
@@ -1531,6 +1531,7 @@ int ast_is_deferrable_frame(const struct ast_frame *frame)
|
||||
case AST_FRAME_IAX:
|
||||
case AST_FRAME_CNG:
|
||||
case AST_FRAME_MODEM:
|
||||
case AST_FRAME_RTCP:
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
@@ -2866,6 +2867,7 @@ int __ast_answer(struct ast_channel *chan, unsigned int delay)
|
||||
case AST_FRAME_IMAGE:
|
||||
case AST_FRAME_HTML:
|
||||
case AST_FRAME_MODEM:
|
||||
case AST_FRAME_RTCP:
|
||||
done = 1;
|
||||
break;
|
||||
case AST_FRAME_CONTROL:
|
||||
@@ -4355,6 +4357,14 @@ static struct ast_frame *__ast_read(struct ast_channel *chan, int dropaudio)
|
||||
*/
|
||||
ast_read_generator_actions(chan, f);
|
||||
break;
|
||||
case AST_FRAME_RTCP:
|
||||
/* Incoming RTCP feedback needs to get to the translator for
|
||||
* outgoing media, which means we treat it as an ast_write */
|
||||
if (ast_channel_writetrans(chan)) {
|
||||
ast_translate(ast_channel_writetrans(chan), f, 0);
|
||||
}
|
||||
ast_frfree(f);
|
||||
f = &ast_null_frame;
|
||||
default:
|
||||
/* Just pass it on! */
|
||||
break;
|
||||
|
||||
@@ -550,6 +550,8 @@ void ast_frame_subclass2str(struct ast_frame *f, char *subclass, size_t slen, ch
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case AST_FRAME_RTCP:
|
||||
ast_copy_string(subclass, "RTCP", slen);
|
||||
default:
|
||||
ast_copy_string(subclass, "Unknown Subclass", slen);
|
||||
break;
|
||||
@@ -601,6 +603,9 @@ void ast_frame_type2str(enum ast_frame_type frame_type, char *ftype, size_t len)
|
||||
case AST_FRAME_VIDEO:
|
||||
ast_copy_string(ftype, "Video", len);
|
||||
break;
|
||||
case AST_FRAME_RTCP:
|
||||
ast_copy_string(ftype, "RTCP", len);
|
||||
break;
|
||||
default:
|
||||
snprintf(ftype, len, "Unknown Frametype '%u'", frame_type);
|
||||
break;
|
||||
@@ -638,6 +643,9 @@ void ast_frame_dump(const char *name, struct ast_frame *f, char *prefix)
|
||||
if (f->frametype == AST_FRAME_VIDEO) {
|
||||
return;
|
||||
}
|
||||
if (f->frametype == AST_FRAME_RTCP) {
|
||||
return;
|
||||
}
|
||||
|
||||
ast_frame_type2str(f->frametype, ftype, sizeof(ftype));
|
||||
ast_frame_subclass2str(f, subclass, sizeof(subclass), moreinfo, sizeof(moreinfo));
|
||||
|
||||
@@ -530,6 +530,17 @@ struct ast_frame *ast_translate(struct ast_trans_pvt *path, struct ast_frame *f,
|
||||
long len;
|
||||
int seqno;
|
||||
|
||||
if (f->frametype == AST_FRAME_RTCP) {
|
||||
/* Just pass the feedback to the right callback, if it exists.
|
||||
* This "translation" does nothing so return a null frame. */
|
||||
struct ast_trans_pvt *tp;
|
||||
for (tp = p; tp; tp = tp->next) {
|
||||
if (tp->t->feedback)
|
||||
tp->t->feedback(tp, f);
|
||||
}
|
||||
return &ast_null_frame;
|
||||
}
|
||||
|
||||
has_timing_info = ast_test_flag(f, AST_FRFLAG_HAS_TIMING_INFO);
|
||||
ts = f->ts;
|
||||
len = f->len;
|
||||
|
||||
Reference in New Issue
Block a user