Commit 3b18857a authored by Uwe L. Korn's avatar Uwe L. Korn Committed by Martin Storsjö

rtmppkt: Add method to read an AMF string that is not prefixed by its type

Signed-off-by: 's avatarMartin Storsjö <martin@martin.st>
parent a1859032
...@@ -102,13 +102,11 @@ int ff_amf_read_number(GetByteContext *bc, double *val) ...@@ -102,13 +102,11 @@ int ff_amf_read_number(GetByteContext *bc, double *val)
return 0; return 0;
} }
int ff_amf_read_string(GetByteContext *bc, uint8_t *str, int ff_amf_get_string(GetByteContext *bc, uint8_t *str,
int strsize, int *length) int strsize, int *length)
{ {
int stringlen = 0; int stringlen = 0;
int readsize; int readsize;
if (bytestream2_get_byte(bc) != AMF_DATA_TYPE_STRING)
return AVERROR_INVALIDDATA;
stringlen = bytestream2_get_be16(bc); stringlen = bytestream2_get_be16(bc);
if (stringlen + 1 > strsize) if (stringlen + 1 > strsize)
return AVERROR(EINVAL); return AVERROR(EINVAL);
...@@ -122,6 +120,14 @@ int ff_amf_read_string(GetByteContext *bc, uint8_t *str, ...@@ -122,6 +120,14 @@ int ff_amf_read_string(GetByteContext *bc, uint8_t *str,
return 0; 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) int ff_amf_read_null(GetByteContext *bc)
{ {
if (bytestream2_get_byte(bc) != AMF_DATA_TYPE_NULL) if (bytestream2_get_byte(bc) != AMF_DATA_TYPE_NULL)
......
...@@ -277,6 +277,23 @@ int ff_amf_read_bool(GetByteContext *gbc, int *val); ...@@ -277,6 +277,23 @@ int ff_amf_read_bool(GetByteContext *gbc, int *val);
*/ */
int ff_amf_read_number(GetByteContext *gbc, double *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. * Read AMF string value.
* *
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment