diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-08-02 22:25:07 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-08-02 23:34:01 +0200 |
commit | 9c6e23f5d2f9fa58d54adf35b4cde4e351fb7d64 (patch) | |
tree | 51e742dd00ad34c80a40e60e8fa4ff7a05adef8f /libavformat/rtmppkt.c | |
parent | 9f14cd91b5195e2beba7213e855c0d36b787ab85 (diff) | |
parent | c728518b3cbb0daf0d0a65ba7adfcb48c5629b93 (diff) | |
download | ffmpeg-9c6e23f5d2f9fa58d54adf35b4cde4e351fb7d64.tar.gz |
Merge remote-tracking branch 'qatar/master'
* qatar/master:
x86: fft: fix imdct_half() for AVX
rtmppkt: Add missing libavcodec/bytestream.h include.
rtmp: add functions for reading AMF values
vc1dec: remove useless #include simple_idct.h
dct-test: always link with aandcttab.o
vp8: pack struct VP8ThreadData more efficiently
x86: remove libmpeg2 mmx(ext) idct functions
eamad: Use dsputils instead of a custom bswap16_buf
Canopus Lossless decoder
Conflicts:
Changelog
LICENSE
libavcodec/avcodec.h
libavcodec/cllc.c
libavcodec/eamad.c
libavcodec/version.h
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/rtmppkt.c')
-rw-r--r-- | libavformat/rtmppkt.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/libavformat/rtmppkt.c b/libavformat/rtmppkt.c index 4b5f188074..b607d5b5e2 100644 --- a/libavformat/rtmppkt.c +++ b/libavformat/rtmppkt.c @@ -71,6 +71,51 @@ void ff_amf_write_object_end(uint8_t **dst) bytestream_put_be24(dst, AMF_DATA_TYPE_OBJECT_END); } +int ff_amf_read_bool(GetByteContext *bc, int *val) +{ + if (bytestream2_get_byte(bc) != AMF_DATA_TYPE_BOOL) + return AVERROR_INVALIDDATA; + *val = bytestream2_get_byte(bc); + return 0; +} + +int ff_amf_read_number(GetByteContext *bc, double *val) +{ + uint64_t read; + if (bytestream2_get_byte(bc) != AMF_DATA_TYPE_NUMBER) + return AVERROR_INVALIDDATA; + read = bytestream2_get_be64(bc); + *val = av_int2double(read); + return 0; +} + +int ff_amf_read_string(GetByteContext *bc, uint8_t *str, + int strsize, int *length) +{ + int stringlen = 0; + int readsize; + if (bytestream2_get_byte(bc) != AMF_DATA_TYPE_STRING) + return AVERROR_INVALIDDATA; + stringlen = bytestream2_get_be16(bc); + if (stringlen + 1 > strsize) + return AVERROR(EINVAL); + readsize = bytestream2_get_buffer(bc, str, stringlen); + if (readsize != stringlen) { + av_log(NULL, AV_LOG_WARNING, + "Unable to read as many bytes as AMF string signaled\n"); + } + str[readsize] = '\0'; + *length = FFMIN(stringlen, readsize); + return 0; +} + +int ff_amf_read_null(GetByteContext *bc) +{ + if (bytestream2_get_byte(bc) != AMF_DATA_TYPE_NULL) + return AVERROR_INVALIDDATA; + return 0; +} + int ff_rtmp_packet_read(URLContext *h, RTMPPacket *p, int chunk_size, RTMPPacket *prev_pkt) { |