summaryrefslogtreecommitdiff
path: root/libavformat/rtpdec_vp8.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-11-02 14:40:04 +0100
committerMichael Niedermayer <michaelni@gmx.at>2012-11-02 14:57:36 +0100
commit8551c6bec0fd6cf719f94b24bca39b1c3318e213 (patch)
tree9ba0df8011bead24b8a66dd0b0c2e6e544a7edf3 /libavformat/rtpdec_vp8.c
parent6788350281c418f0f395a8279eee82f7abe7c63b (diff)
parente1c804d883f3cca1b492147a2ac5d0aea7460076 (diff)
downloadffmpeg-8551c6bec0fd6cf719f94b24bca39b1c3318e213.tar.gz
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.c38
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;
}