mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-04 03:50:31 +00:00
- revert change to ast_queue_hangup and create ast_queue_hangup_with_cause
- make data member of the ast_frame struct a named union instead of a void Recently the ast_queue_hangup function got a new parameter, the hangupcause Feedback came in that this is no good and that instead a new function should be created. This I did. The hangupcause was stored in the seqno member of the ast_frame struct. This is not very elegant, and since there's already a data member that one should be used. Problem is, this member was a void *. Now it's a named union so it can hold a pointer, an uint32 and there's a padding in case someone wants to store another type in there in the future. This commit is so massive, because all ast_frame.data uses have to be altered to ast_frame.data.data Thanks russellb and kpfleming for the feedback. (closes issue #12674) Reported by: mvanbaak git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@117802 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
40
main/frame.c
40
main/frame.c
@@ -180,7 +180,7 @@ int __ast_smoother_feed(struct ast_smoother *s, struct ast_frame *f, int swap)
|
||||
on the next read, thus eliminating the douple
|
||||
copy */
|
||||
if (swap)
|
||||
ast_swapcopy_samples(f->data, f->data, f->samples);
|
||||
ast_swapcopy_samples(f->data.ptr, f->data.ptr, f->samples);
|
||||
s->opt = f;
|
||||
return 0;
|
||||
}
|
||||
@@ -192,9 +192,9 @@ int __ast_smoother_feed(struct ast_smoother *s, struct ast_frame *f, int swap)
|
||||
}
|
||||
}
|
||||
if (swap)
|
||||
ast_swapcopy_samples(s->data+s->len, f->data, f->samples);
|
||||
ast_swapcopy_samples(s->data+s->len, f->data.ptr, f->samples);
|
||||
else
|
||||
memcpy(s->data + s->len, f->data, f->datalen);
|
||||
memcpy(s->data + s->len, f->data.ptr, f->datalen);
|
||||
/* If either side is empty, reset the delivery time */
|
||||
if (!s->len || ast_tvzero(f->delivery) || ast_tvzero(s->delivery)) /* XXX really ? */
|
||||
s->delivery = f->delivery;
|
||||
@@ -229,14 +229,14 @@ struct ast_frame *ast_smoother_read(struct ast_smoother *s)
|
||||
/* Make frame */
|
||||
s->f.frametype = AST_FRAME_VOICE;
|
||||
s->f.subclass = s->format;
|
||||
s->f.data = s->framedata + AST_FRIENDLY_OFFSET;
|
||||
s->f.data.ptr = s->framedata + AST_FRIENDLY_OFFSET;
|
||||
s->f.offset = AST_FRIENDLY_OFFSET;
|
||||
s->f.datalen = len;
|
||||
/* Samples will be improper given VAD, but with VAD the concept really doesn't even exist */
|
||||
s->f.samples = len * s->samplesperbyte; /* XXX rounding */
|
||||
s->f.delivery = s->delivery;
|
||||
/* Fill Data */
|
||||
memcpy(s->f.data, s->data, len);
|
||||
memcpy(s->f.data.ptr, s->data, len);
|
||||
s->len -= len;
|
||||
/* Move remaining data to the front if applicable */
|
||||
if (s->len) {
|
||||
@@ -331,8 +331,8 @@ void ast_frame_free(struct ast_frame *fr, int cache)
|
||||
#endif
|
||||
|
||||
if (fr->mallocd & AST_MALLOCD_DATA) {
|
||||
if (fr->data)
|
||||
ast_free(fr->data - fr->offset);
|
||||
if (fr->data.ptr)
|
||||
ast_free(fr->data.ptr - fr->offset);
|
||||
}
|
||||
if (fr->mallocd & AST_MALLOCD_SRC) {
|
||||
if (fr->src)
|
||||
@@ -404,8 +404,8 @@ struct ast_frame *ast_frisolate(struct ast_frame *fr)
|
||||
newdata += AST_FRIENDLY_OFFSET;
|
||||
out->offset = AST_FRIENDLY_OFFSET;
|
||||
out->datalen = fr->datalen;
|
||||
memcpy(newdata, fr->data, fr->datalen);
|
||||
out->data = newdata;
|
||||
memcpy(newdata, fr->data.ptr, fr->datalen);
|
||||
out->data.ptr = newdata;
|
||||
}
|
||||
|
||||
out->mallocd = AST_MALLOCD_HDR | AST_MALLOCD_SRC | AST_MALLOCD_DATA;
|
||||
@@ -470,8 +470,8 @@ struct ast_frame *ast_frdup(const struct ast_frame *f)
|
||||
out->mallocd = AST_MALLOCD_HDR;
|
||||
out->offset = AST_FRIENDLY_OFFSET;
|
||||
if (out->datalen) {
|
||||
out->data = buf + sizeof(*out) + AST_FRIENDLY_OFFSET;
|
||||
memcpy(out->data, f->data, out->datalen);
|
||||
out->data.ptr = buf + sizeof(*out) + AST_FRIENDLY_OFFSET;
|
||||
memcpy(out->data.ptr, f->data.ptr, out->datalen);
|
||||
}
|
||||
if (srclen > 0) {
|
||||
out->src = buf + sizeof(*out) + AST_FRIENDLY_OFFSET + f->datalen;
|
||||
@@ -780,7 +780,7 @@ void ast_frame_dump(const char *name, struct ast_frame *f, char *prefix)
|
||||
if (f->datalen != sizeof(enum ast_control_t38)) {
|
||||
message = "Invalid";
|
||||
} else {
|
||||
enum ast_control_t38 state = *((enum ast_control_t38 *) f->data);
|
||||
enum ast_control_t38 state = *((enum ast_control_t38 *) f->data.ptr);
|
||||
if (state == AST_T38_REQUEST_NEGOTIATE)
|
||||
message = "Negotiation Requested";
|
||||
else if (state == AST_T38_REQUEST_TERMINATE)
|
||||
@@ -813,7 +813,7 @@ void ast_frame_dump(const char *name, struct ast_frame *f, char *prefix)
|
||||
case AST_FRAME_TEXT:
|
||||
strcpy(ftype, "Text");
|
||||
strcpy(subclass, "N/A");
|
||||
ast_copy_string(moreinfo, f->data, sizeof(moreinfo));
|
||||
ast_copy_string(moreinfo, f->data.ptr, sizeof(moreinfo));
|
||||
break;
|
||||
case AST_FRAME_IMAGE:
|
||||
strcpy(ftype, "Image");
|
||||
@@ -824,7 +824,7 @@ void ast_frame_dump(const char *name, struct ast_frame *f, char *prefix)
|
||||
switch(f->subclass) {
|
||||
case AST_HTML_URL:
|
||||
strcpy(subclass, "URL");
|
||||
ast_copy_string(moreinfo, f->data, sizeof(moreinfo));
|
||||
ast_copy_string(moreinfo, f->data.ptr, sizeof(moreinfo));
|
||||
break;
|
||||
case AST_HTML_DATA:
|
||||
strcpy(subclass, "Data");
|
||||
@@ -843,7 +843,7 @@ void ast_frame_dump(const char *name, struct ast_frame *f, char *prefix)
|
||||
break;
|
||||
case AST_HTML_LINKURL:
|
||||
strcpy(subclass, "Link URL");
|
||||
ast_copy_string(moreinfo, f->data, sizeof(moreinfo));
|
||||
ast_copy_string(moreinfo, f->data.ptr, sizeof(moreinfo));
|
||||
break;
|
||||
case AST_HTML_UNLINK:
|
||||
strcpy(subclass, "Unlink");
|
||||
@@ -1403,10 +1403,10 @@ int ast_codec_get_samples(struct ast_frame *f)
|
||||
int samples=0;
|
||||
switch(f->subclass) {
|
||||
case AST_FORMAT_SPEEX:
|
||||
samples = speex_samples(f->data, f->datalen);
|
||||
samples = speex_samples(f->data.ptr, f->datalen);
|
||||
break;
|
||||
case AST_FORMAT_G723_1:
|
||||
samples = g723_samples(f->data, f->datalen);
|
||||
samples = g723_samples(f->data.ptr, f->datalen);
|
||||
break;
|
||||
case AST_FORMAT_ILBC:
|
||||
samples = 240 * (f->datalen / 50);
|
||||
@@ -1424,7 +1424,7 @@ int ast_codec_get_samples(struct ast_frame *f)
|
||||
case AST_FORMAT_LPC10:
|
||||
/* assumes that the RTP packet contains one LPC10 frame */
|
||||
samples = 22 * 8;
|
||||
samples += (((char *)(f->data))[7] & 0x1) * 8;
|
||||
samples += (((char *)(f->data.ptr))[7] & 0x1) * 8;
|
||||
break;
|
||||
case AST_FORMAT_ULAW:
|
||||
case AST_FORMAT_ALAW:
|
||||
@@ -1484,7 +1484,7 @@ int ast_codec_get_len(int format, int samples)
|
||||
int ast_frame_adjust_volume(struct ast_frame *f, int adjustment)
|
||||
{
|
||||
int count;
|
||||
short *fdata = f->data;
|
||||
short *fdata = f->data.ptr;
|
||||
short adjust_value = abs(adjustment);
|
||||
|
||||
if ((f->frametype != AST_FRAME_VOICE) || (f->subclass != AST_FORMAT_SLINEAR))
|
||||
@@ -1518,7 +1518,7 @@ int ast_frame_slinear_sum(struct ast_frame *f1, struct ast_frame *f2)
|
||||
if (f1->samples != f2->samples)
|
||||
return -1;
|
||||
|
||||
for (count = 0, data1 = f1->data, data2 = f2->data;
|
||||
for (count = 0, data1 = f1->data.ptr, data2 = f2->data.ptr;
|
||||
count < f1->samples;
|
||||
count++, data1++, data2++)
|
||||
ast_slinear_saturated_add(data1, data2);
|
||||
|
Reference in New Issue
Block a user