|
|
|
@ -58,6 +58,7 @@ typedef struct FLVContext { |
|
|
|
|
int validate_next; |
|
|
|
|
int validate_count; |
|
|
|
|
int searched_for_end; |
|
|
|
|
AVRational framerate; |
|
|
|
|
} FLVContext; |
|
|
|
|
|
|
|
|
|
static int flv_probe(AVProbeData *p) |
|
|
|
@ -77,10 +78,14 @@ static int flv_probe(AVProbeData *p) |
|
|
|
|
|
|
|
|
|
static AVStream *create_stream(AVFormatContext *s, int codec_type) |
|
|
|
|
{ |
|
|
|
|
FLVContext *flv = s->priv_data; |
|
|
|
|
AVStream *st = avformat_new_stream(s, NULL); |
|
|
|
|
if (!st) |
|
|
|
|
return NULL; |
|
|
|
|
st->codecpar->codec_type = codec_type; |
|
|
|
|
if (codec_type == AVMEDIA_TYPE_VIDEO) |
|
|
|
|
st->avg_frame_rate = flv->framerate; |
|
|
|
|
|
|
|
|
|
avpriv_set_pts_info(st, 32, 1, 1000); /* 32 bit pts in ms */ |
|
|
|
|
return st; |
|
|
|
|
} |
|
|
|
@ -460,6 +465,10 @@ static int amf_parse_object(AVFormatContext *s, AVStream *astream, |
|
|
|
|
if (!st) |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
st->codecpar->codec_id = AV_CODEC_ID_TEXT; |
|
|
|
|
} else if (!strcmp(key, "framerate")) { |
|
|
|
|
flv->framerate = av_d2q(num_val, 1000); |
|
|
|
|
if (vstream) |
|
|
|
|
vstream->avg_frame_rate = flv->framerate; |
|
|
|
|
} else if (flv->trust_metadata) { |
|
|
|
|
if (!strcmp(key, "videocodecid") && vpar) { |
|
|
|
|
flv_set_video_codec(s, vstream, num_val, 0); |
|
|
|
|