diff options
author | Uwe L. Korn <uwelk@xhochy.com> | 2014-05-31 20:37:25 +0100 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2014-06-01 23:30:33 +0300 |
commit | 3b18857ab301d2a0b3e86e9d85eed76f0798a29c (patch) | |
tree | f94a6fd034908efc74b221c0f67425999a37d1c8 | |
parent | a1859032e39d96352687186fd179e1559dea2aca (diff) | |
download | ffmpeg-3b18857ab301d2a0b3e86e9d85eed76f0798a29c.tar.gz |
rtmppkt: Add method to read an AMF string that is not prefixed by its type
Signed-off-by: Martin Storsjö <martin@martin.st>
-rw-r--r-- | libavformat/rtmppkt.c | 14 | ||||
-rw-r--r-- | libavformat/rtmppkt.h | 17 |
2 files changed, 27 insertions, 4 deletions
diff --git a/libavformat/rtmppkt.c b/libavformat/rtmppkt.c index 306a243941..37fbb5fc16 100644 --- a/libavformat/rtmppkt.c +++ b/libavformat/rtmppkt.c @@ -102,13 +102,11 @@ int ff_amf_read_number(GetByteContext *bc, double *val) return 0; } -int ff_amf_read_string(GetByteContext *bc, uint8_t *str, - int strsize, int *length) +int ff_amf_get_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); @@ -122,6 +120,14 @@ int ff_amf_read_string(GetByteContext *bc, uint8_t *str, return 0; } +int ff_amf_read_string(GetByteContext *bc, uint8_t *str, + int strsize, int *length) +{ + if (bytestream2_get_byte(bc) != AMF_DATA_TYPE_STRING) + return AVERROR_INVALIDDATA; + return ff_amf_get_string(bc, str, strsize, length); +} + int ff_amf_read_null(GetByteContext *bc) { if (bytestream2_get_byte(bc) != AMF_DATA_TYPE_NULL) diff --git a/libavformat/rtmppkt.h b/libavformat/rtmppkt.h index e973684aa9..149c153cad 100644 --- a/libavformat/rtmppkt.h +++ b/libavformat/rtmppkt.h @@ -278,6 +278,23 @@ int ff_amf_read_bool(GetByteContext *gbc, int *val); int ff_amf_read_number(GetByteContext *gbc, double *val); /** + * Get AMF string value. + * + * This function behaves the same as ff_amf_read_string except that + * it does not expect the AMF type prepended to the actual data. + * Appends a trailing null byte to output string in order to + * ease later parsing. + * + *@param[in,out] gbc GetByteContext initialized with AMF-formatted data + *@param[out] str read string + *@param[in] strsize buffer size available to store the read string + *@param[out] length read string length + *@return 0 on success or an AVERROR code on failure +*/ +int ff_amf_get_string(GetByteContext *bc, uint8_t *str, + int strsize, int *length); + +/** * Read AMF string value. * * Appends a trailing null byte to output string in order to |