mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-24 13:56:33 +02:00
rtmp: add functions for reading AMF values
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
This commit is contained in:
parent
cfb1091898
commit
50468f93e3
@ -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)
|
||||
{
|
||||
|
@ -231,6 +231,48 @@ void ff_amf_write_field_name(uint8_t **dst, const char *str);
|
||||
*/
|
||||
void ff_amf_write_object_end(uint8_t **dst);
|
||||
|
||||
/**
|
||||
* Read AMF boolean value.
|
||||
*
|
||||
*@param[in,out] gbc GetByteContext initialized with AMF-formatted data
|
||||
*@param[out] val 0 or 1
|
||||
*@return 0 on success or an AVERROR code on failure
|
||||
*/
|
||||
int ff_amf_read_bool(GetByteContext *gbc, int *val);
|
||||
|
||||
/**
|
||||
* Read AMF number value.
|
||||
*
|
||||
*@param[in,out] gbc GetByteContext initialized with AMF-formatted data
|
||||
*@param[out] val read value
|
||||
*@return 0 on success or an AVERROR code on failure
|
||||
*/
|
||||
int ff_amf_read_number(GetByteContext *gbc, double *val);
|
||||
|
||||
/**
|
||||
* Read AMF string value.
|
||||
*
|
||||
* Appends a trailing \0 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_read_string(GetByteContext *gbc, uint8_t *str,
|
||||
int strsize, int *length);
|
||||
|
||||
/**
|
||||
* Read AMF NULL value.
|
||||
*
|
||||
*@param[in,out] gbc GetByteContext initialized with AMF-formatted data
|
||||
*@return 0 on success or an AVERROR code on failure
|
||||
*/
|
||||
int ff_amf_read_null(GetByteContext *gbc);
|
||||
|
||||
|
||||
/** @} */ // AMF funcs
|
||||
|
||||
#endif /* AVFORMAT_RTMPPKT_H */
|
||||
|
Loading…
x
Reference in New Issue
Block a user