diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-11-02 17:40:04 +0400 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-11-02 17:57:36 +0400 |
commit | 8551c6bec0fd6cf719f94b24bca39b1c3318e213 (patch) | |
tree | 9ba0df8011bead24b8a66dd0b0c2e6e544a7edf3 /libavformat/rtpdec_vp8.c | |
parent | 6788350281c418f0f395a8279eee82f7abe7c63b (diff) | |
parent | e1c804d883f3cca1b492147a2ac5d0aea7460076 (diff) |
Merge remote-tracking branch 'qatar/master'
* qatar/master:
dv1394: Swap the min and max values of the 'standard' option
rtpdec_vp8: Don't parse fields that aren't used
lavc: add some AVPacket doxy.
audiointerleave: deobfuscate a function call.
rtpdec: factorize identical code used in several handlers
a64: remove interleaved mode.
doc: Point to the new location of the c99-to-c89 tool
decode_audio3: initialize AVFrame
ws-snd1: set channel layout
wmavoice: set channel layout
wmapro: use AVCodecContext.channels instead of keeping a private copy
wma: do not keep private copies of some AVCodecContext fields
Conflicts:
libavcodec/wmadec.c
libavcodec/wmaenc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/rtpdec_vp8.c')
-rw-r--r-- | libavformat/rtpdec_vp8.c | 38 |
1 files changed, 9 insertions, 29 deletions
diff --git a/libavformat/rtpdec_vp8.c b/libavformat/rtpdec_vp8.c index aef5f78132..1edc152a48 100644 --- a/libavformat/rtpdec_vp8.c +++ b/libavformat/rtpdec_vp8.c @@ -36,15 +36,6 @@ struct PayloadContext { uint32_t timestamp; }; -static void prepare_packet(AVPacket *pkt, PayloadContext *vp8, int stream) -{ - av_init_packet(pkt); - pkt->stream_index = stream; - pkt->size = avio_close_dyn_buf(vp8->data, &pkt->data); - pkt->destruct = av_destruct_packet; - vp8->data = NULL; -} - static int vp8_handle_packet(AVFormatContext *ctx, PayloadContext *vp8, AVStream *st, @@ -54,16 +45,14 @@ static int vp8_handle_packet(AVFormatContext *ctx, int len, int flags) { int start_partition, end_packet; - int extended_bits, non_ref, part_id; + int extended_bits, part_id; int pictureid_present = 0, tl0picidx_present = 0, tid_present = 0, keyidx_present = 0; - int pictureid = -1, keyidx = -1; if (len < 1) return AVERROR_INVALIDDATA; extended_bits = buf[0] & 0x80; - non_ref = buf[0] & 0x20; start_partition = buf[0] & 0x10; part_id = buf[0] & 0x0f; end_packet = flags & RTP_FLAG_MARKER; @@ -80,19 +69,12 @@ static int vp8_handle_packet(AVFormatContext *ctx, len--; } if (pictureid_present) { + int size; if (len < 1) return AVERROR_INVALIDDATA; - if (buf[0] & 0x80) { - if (len < 2) - return AVERROR_INVALIDDATA; - pictureid = AV_RB16(buf) & 0x7fff; - buf += 2; - len -= 2; - } else { - pictureid = buf[0] & 0x7f; - buf++; - len--; - } + size = buf[0] & 0x80 ? 2 : 1; + buf += size; + len -= size; } if (tl0picidx_present) { // Ignoring temporal level zero index @@ -100,11 +82,7 @@ static int vp8_handle_packet(AVFormatContext *ctx, len--; } if (tid_present || keyidx_present) { - // Ignoring temporal layer index and layer sync bit - if (len < 1) - return AVERROR_INVALIDDATA; - if (keyidx_present) - keyidx = buf[0] & 0x1f; + // Ignoring temporal layer index, layer sync bit and keyframe index buf++; len--; } @@ -133,7 +111,9 @@ static int vp8_handle_packet(AVFormatContext *ctx, avio_write(vp8->data, buf, len); if (end_packet) { - prepare_packet(pkt, vp8, st->index); + int ret = ff_rtp_finalize_packet(pkt, &vp8->data, st->index); + if (ret < 0) + return ret; return 0; } |