summaryrefslogtreecommitdiff
path: root/libavformat/rtmppkt.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-08-02 22:25:07 +0200
committerMichael Niedermayer <michaelni@gmx.at>2012-08-02 23:34:01 +0200
commit9c6e23f5d2f9fa58d54adf35b4cde4e351fb7d64 (patch)
tree51e742dd00ad34c80a40e60e8fa4ff7a05adef8f /libavformat/rtmppkt.c
parent9f14cd91b5195e2beba7213e855c0d36b787ab85 (diff)
parentc728518b3cbb0daf0d0a65ba7adfcb48c5629b93 (diff)
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.c45
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)
{