diff mbox series

[FFmpeg-devel,v2,1/4] avformat/rtpdec_rfc4175: add support for exactframerate

Message ID 1633969392-17937-1-git-send-email-lance.lmwang@gmail.com
State Accepted
Commit b07437f956f911dd76abb2ab0d5f3204a85e34da
Headers show
Series [FFmpeg-devel,v2,1/4] avformat/rtpdec_rfc4175: add support for exactframerate
Related show

Checks

Context Check Description
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished
andriy/make_ppc success Make finished
andriy/make_fate_ppc success Make fate finished

Commit Message

Limin Wang Oct. 11, 2021, 4:23 p.m. UTC
From: Limin Wang <lance.lmwang@gmail.com>

Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
---
 libavformat/rtpdec_rfc4175.c | 11 +++++++++++
 1 file changed, 11 insertions(+)
diff mbox series

Patch

diff --git a/libavformat/rtpdec_rfc4175.c b/libavformat/rtpdec_rfc4175.c
index 712c683..060f725 100644
--- a/libavformat/rtpdec_rfc4175.c
+++ b/libavformat/rtpdec_rfc4175.c
@@ -25,9 +25,11 @@ 
 #include "rtpdec_formats.h"
 #include "libavutil/avstring.h"
 #include "libavutil/pixdesc.h"
+#include "libavutil/parseutils.h"
 
 struct PayloadContext {
     char *sampling;
+    AVRational framerate;
     int depth;
     int width;
     int height;
@@ -69,6 +71,11 @@  static int rfc4175_parse_format(AVStream *stream, PayloadContext *data)
     stream->codecpar->bits_per_coded_sample = av_get_bits_per_pixel(desc);
     data->frame_size = data->width * data->height * data->pgroup / data->xinc;
 
+    if (data->framerate.den > 0) {
+        stream->avg_frame_rate = data->framerate;
+        stream->codecpar->bit_rate = data->frame_size * av_q2d(data->framerate) * 8;
+    }
+
     return 0;
 }
 
@@ -84,6 +91,10 @@  static int rfc4175_parse_fmtp(AVFormatContext *s, AVStream *stream,
         data->sampling = av_strdup(value);
     else if (!strncmp(attr, "depth", 5))
         data->depth = atoi(value);
+    else if (!strncmp(attr, "exactframerate", 14)) {
+        if (av_parse_video_rate(&data->framerate, value) < 0)
+            return AVERROR(EINVAL);
+    }
 
     return 0;
 }