Merge commit 'f53490cc0c809975f8238d5a9edbd26f83bd2f84'
* commit 'f53490cc0c809975f8238d5a9edbd26f83bd2f84': rtpdec/srtp: Handle CSRC fields being present rtpdec: Check the return value from av_new_packet ac3dec: fix non-optimal dithering of zero bit mantissas Conflicts: libavcodec/ac3dec.c libavformat/rtpdec.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
acc0c0190b
@ -442,6 +442,7 @@ static void ac3_decode_transform_coeffs_ch(AC3DecodeContext *s, int ch_index, ma
|
|||||||
int mantissa;
|
int mantissa;
|
||||||
switch (bap) {
|
switch (bap) {
|
||||||
case 0:
|
case 0:
|
||||||
|
/* random noise with approximate range of -0.707 to 0.707 */
|
||||||
if (dither)
|
if (dither)
|
||||||
mantissa = (((av_lfg_get(&s->dith_state)>>8)*181)>>8) - 5931008;
|
mantissa = (((av_lfg_get(&s->dith_state)>>8)*181)>>8) - 5931008;
|
||||||
else
|
else
|
||||||
|
@ -575,12 +575,12 @@ static int rtp_parse_packet_internal(RTPDemuxContext *s, AVPacket *pkt,
|
|||||||
{
|
{
|
||||||
unsigned int ssrc;
|
unsigned int ssrc;
|
||||||
int payload_type, seq, flags = 0;
|
int payload_type, seq, flags = 0;
|
||||||
int ext;
|
int ext, csrc;
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
uint32_t timestamp;
|
uint32_t timestamp;
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
int h;
|
|
||||||
|
|
||||||
|
csrc = buf[0] & 0x0f;
|
||||||
ext = buf[0] & 0x10;
|
ext = buf[0] & 0x10;
|
||||||
payload_type = buf[1] & 0x7f;
|
payload_type = buf[1] & 0x7f;
|
||||||
if (buf[1] & 0x80)
|
if (buf[1] & 0x80)
|
||||||
@ -610,14 +610,15 @@ static int rtp_parse_packet_internal(RTPDemuxContext *s, AVPacket *pkt,
|
|||||||
len -= padding;
|
len -= padding;
|
||||||
}
|
}
|
||||||
|
|
||||||
h = buf[0] & 0x0F;
|
|
||||||
buf += 4*h;
|
|
||||||
len -= 4*h;
|
|
||||||
|
|
||||||
s->seq = seq;
|
s->seq = seq;
|
||||||
len -= 12;
|
len -= 12;
|
||||||
buf += 12;
|
buf += 12;
|
||||||
|
|
||||||
|
len -= 4 * csrc;
|
||||||
|
buf += 4 * csrc;
|
||||||
|
if (len < 0)
|
||||||
|
return AVERROR_INVALIDDATA;
|
||||||
|
|
||||||
/* RFC 3550 Section 5.3.1 RTP Header Extension handling */
|
/* RFC 3550 Section 5.3.1 RTP Header Extension handling */
|
||||||
if (ext) {
|
if (ext) {
|
||||||
if (len < 4)
|
if (len < 4)
|
||||||
@ -638,10 +639,8 @@ static int rtp_parse_packet_internal(RTPDemuxContext *s, AVPacket *pkt,
|
|||||||
s->st, pkt, ×tamp, buf, len, seq,
|
s->st, pkt, ×tamp, buf, len, seq,
|
||||||
flags);
|
flags);
|
||||||
} else if (st) {
|
} else if (st) {
|
||||||
/* At this point, the RTP header has been stripped;
|
if ((rv = av_new_packet(pkt, len)) < 0)
|
||||||
* This is ASSUMING that there is only 1 CSRC, which isn't wise. */
|
return rv;
|
||||||
if (av_new_packet(pkt, len) < 0)
|
|
||||||
return AVERROR(ENOMEM);
|
|
||||||
memcpy(pkt->data, buf, len);
|
memcpy(pkt->data, buf, len);
|
||||||
pkt->stream_index = st->index;
|
pkt->stream_index = st->index;
|
||||||
} else {
|
} else {
|
||||||
|
@ -190,16 +190,23 @@ int ff_srtp_decrypt(struct SRTPContext *s, uint8_t *buf, int *lenptr)
|
|||||||
if (!(srtcp_index & 0x80000000))
|
if (!(srtcp_index & 0x80000000))
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
|
int csrc;
|
||||||
s->seq_initialized = 1;
|
s->seq_initialized = 1;
|
||||||
s->seq_largest = seq_largest;
|
s->seq_largest = seq_largest;
|
||||||
s->roc = roc;
|
s->roc = roc;
|
||||||
|
|
||||||
|
csrc = buf[0] & 0x0f;
|
||||||
ext = buf[0] & 0x10;
|
ext = buf[0] & 0x10;
|
||||||
ssrc = AV_RB32(buf + 8);
|
ssrc = AV_RB32(buf + 8);
|
||||||
|
|
||||||
buf += 12;
|
buf += 12;
|
||||||
len -= 12;
|
len -= 12;
|
||||||
|
|
||||||
|
buf += 4 * csrc;
|
||||||
|
len -= 4 * csrc;
|
||||||
|
if (len < 0)
|
||||||
|
return AVERROR_INVALIDDATA;
|
||||||
|
|
||||||
if (ext) {
|
if (ext) {
|
||||||
if (len < 4)
|
if (len < 4)
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
@ -244,7 +251,7 @@ int ff_srtp_encrypt(struct SRTPContext *s, const uint8_t *in, int len,
|
|||||||
buf += 8;
|
buf += 8;
|
||||||
len -= 8;
|
len -= 8;
|
||||||
} else {
|
} else {
|
||||||
int ext;
|
int ext, csrc;
|
||||||
int seq = AV_RB16(buf + 2);
|
int seq = AV_RB16(buf + 2);
|
||||||
ssrc = AV_RB32(buf + 8);
|
ssrc = AV_RB32(buf + 8);
|
||||||
|
|
||||||
@ -253,11 +260,17 @@ int ff_srtp_encrypt(struct SRTPContext *s, const uint8_t *in, int len,
|
|||||||
s->seq_largest = seq;
|
s->seq_largest = seq;
|
||||||
index = seq + (((uint64_t)s->roc) << 16);
|
index = seq + (((uint64_t)s->roc) << 16);
|
||||||
|
|
||||||
|
csrc = buf[0] & 0x0f;
|
||||||
ext = buf[0] & 0x10;
|
ext = buf[0] & 0x10;
|
||||||
|
|
||||||
buf += 12;
|
buf += 12;
|
||||||
len -= 12;
|
len -= 12;
|
||||||
|
|
||||||
|
buf += 4 * csrc;
|
||||||
|
len -= 4 * csrc;
|
||||||
|
if (len < 0)
|
||||||
|
return AVERROR_INVALIDDATA;
|
||||||
|
|
||||||
if (ext) {
|
if (ext) {
|
||||||
if (len < 4)
|
if (len < 4)
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user