|
@@ -286,10 +286,11 @@ parse_packed_headers(const uint8_t * packed_headers,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int xiph_parse_fmtp_pair(AVCodecContext * codec,
|
|
|
+static int xiph_parse_fmtp_pair(AVStream* stream,
|
|
|
PayloadContext *xiph_data,
|
|
|
char *attr, char *value)
|
|
|
{
|
|
|
+ AVCodecContext *codec = stream->codec;
|
|
|
int result = 0;
|
|
|
|
|
|
if (!strcmp(attr, "sampling")) {
|
|
@@ -346,34 +347,12 @@ static int xiph_parse_sdp_line(AVFormatContext *s, int st_index,
|
|
|
PayloadContext *data, const char *line)
|
|
|
{
|
|
|
const char *p;
|
|
|
- char *value;
|
|
|
- char attr[25];
|
|
|
- int value_size = strlen(line), attr_size = sizeof(attr), res = 0;
|
|
|
- AVCodecContext* codec = s->streams[st_index]->codec;
|
|
|
-
|
|
|
- assert(data);
|
|
|
-
|
|
|
- if (!(value = av_malloc(value_size))) {
|
|
|
- av_log(codec, AV_LOG_ERROR, "Out of memory\n");
|
|
|
- return AVERROR(ENOMEM);
|
|
|
- }
|
|
|
|
|
|
if (av_strstart(line, "fmtp:", &p)) {
|
|
|
- // remove protocol identifier
|
|
|
- while (*p && *p == ' ') p++; // strip spaces
|
|
|
- while (*p && *p != ' ') p++; // eat protocol identifier
|
|
|
- while (*p && *p == ' ') p++; // strip trailing spaces
|
|
|
-
|
|
|
- while (ff_rtsp_next_attr_and_value(&p,
|
|
|
- attr, attr_size,
|
|
|
- value, value_size)) {
|
|
|
- res = xiph_parse_fmtp_pair(codec, data, attr, value);
|
|
|
- if (res < 0 && res != AVERROR_PATCHWELCOME)
|
|
|
- return res;
|
|
|
- }
|
|
|
+ return ff_parse_fmtp(s->streams[st_index], data, p,
|
|
|
+ xiph_parse_fmtp_pair);
|
|
|
}
|
|
|
|
|
|
- av_free(value);
|
|
|
return 0;
|
|
|
}
|
|
|
|