---
 libavformat/ingenientdec.c |    3 ++-
 libavformat/rawdec.c       |   26 ++++++++++++--------------
 libavformat/rawdec.h       |    3 +++
 3 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/libavformat/ingenientdec.c b/libavformat/ingenientdec.c
index 7407a04..1d9445a 100644
--- a/libavformat/ingenientdec.c
+++ b/libavformat/ingenientdec.c
@@ -61,11 +61,12 @@ static int ingenient_read_packet(AVFormatContext *s, 
AVPacket *pkt)
 AVInputFormat ff_ingenient_demuxer = {
     "ingenient",
     NULL_IF_CONFIG_SMALL("raw Ingenient MJPEG"),
-    0,
+    sizeof(RawVideoDemuxerContext),
     NULL,
     ff_raw_video_read_header,
     ingenient_read_packet,
     .flags= AVFMT_GENERIC_INDEX,
     .extensions = "cgi", // FIXME
     .value = CODEC_ID_MJPEG,
+    .priv_class = &ff_rawvideo_demuxer_class,
 };
diff --git a/libavformat/rawdec.c b/libavformat/rawdec.c
index 30e7e3a..7c6bc99 100644
--- a/libavformat/rawdec.c
+++ b/libavformat/rawdec.c
@@ -72,10 +72,11 @@ int ff_raw_read_header(AVFormatContext *s, 
AVFormatParameters *ap)
             enum PixelFormat pix_fmt   = av_get_pix_fmt(s1->pix_fmt);
             av_freep(&s1->pix_fmt);
 
-            if(ap->time_base.num)
-                av_set_pts_info(st, 64, ap->time_base.num, ap->time_base.den);
-            else
-                av_set_pts_info(st, 64, 1, 25);
+#if FF_API_FORMAT_PARAMETERS
+            if (ap->time_base.num)
+                s1->fps = (AVRational){ap->time_base.den, ap->time_base.num};
+#endif
+            av_set_pts_info(st, 64, s1->fps.den, s1->fps.num);
 #if FF_API_FORMAT_PARAMETERS
             if (ap->width > 0)
                 s1->width = ap->width;
@@ -137,6 +138,7 @@ int ff_raw_audio_read_header(AVFormatContext *s,
 int ff_raw_video_read_header(AVFormatContext *s,
                              AVFormatParameters *ap)
 {
+    RawVideoDemuxerContext *s1 = s->priv_data;
     AVStream *st;
 
     st = av_new_stream(s, 0);
@@ -149,16 +151,11 @@ int ff_raw_video_read_header(AVFormatContext *s,
 
     /* for MJPEG, specify frame rate */
     /* for MPEG-4 specify it, too (most MPEG-4 streams do not have the 
fixed_vop_rate set ...)*/
-    if (ap->time_base.num) {
-        st->codec->time_base= ap->time_base;
-    } else if ( st->codec->codec_id == CODEC_ID_MJPEG ||
-                st->codec->codec_id == CODEC_ID_MPEG4 ||
-                st->codec->codec_id == CODEC_ID_DIRAC ||
-                st->codec->codec_id == CODEC_ID_DNXHD ||
-                st->codec->codec_id == CODEC_ID_VC1   ||
-                st->codec->codec_id == CODEC_ID_H264) {
-        st->codec->time_base= (AVRational){1,25};
-    }
+#if FF_API_FORMAT_PARAMETERS
+    if (ap->time_base.num)
+        s1->fps = (AVRational){ap->time_base.den, ap->time_base.num};
+#endif
+    st->codec->time_base = (AVRational){s1->fps.den, s1->fps.num};
     av_set_pts_info(st, 64, 1, 1200000);
 
     return 0;
@@ -183,6 +180,7 @@ static const AVOption video_options[] = {
     { "width",  "", offsetof(RawVideoDemuxerContext, width),  FF_OPT_TYPE_INT, 
{.dbl = 0}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM },
     { "height", "", offsetof(RawVideoDemuxerContext, height), FF_OPT_TYPE_INT, 
{.dbl = 0}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM },
     { "pixel_format", "", offsetof(RawVideoDemuxerContext, pix_fmt), 
FF_OPT_TYPE_STRING, {.str = NULL }, 0, 0, AV_OPT_FLAG_DECODING_PARAM },
+    { "framerate",    "", offsetof(RawVideoDemuxerContext, fps),     
FF_OPT_TYPE_RATIONAL, {.dbl = 25}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM },
     { NULL },
 };
 
diff --git a/libavformat/rawdec.h b/libavformat/rawdec.h
index b909209..2fc6215 100644
--- a/libavformat/rawdec.h
+++ b/libavformat/rawdec.h
@@ -35,6 +35,7 @@ typedef struct RawVideoDemuxerContext {
     AVClass *class;
     int width, height;
     char *pix_fmt;
+    AVRational fps;
 } RawVideoDemuxerContext;
 
 extern const AVClass ff_rawaudio_demuxer_class;
@@ -55,9 +56,11 @@ AVInputFormat ff_ ## shortname ## _demuxer = {\
     .read_probe     = probe,\
     .read_header    = ff_raw_video_read_header,\
     .read_packet    = ff_raw_read_partial_packet,\
+    .priv_data_size = sizeof(RawVideoDemuxerContext),\
     .extensions     = ext,\
     .flags          = AVFMT_GENERIC_INDEX,\
     .value          = id,\
+    .priv_class     = &ff_rawvideo_demuxer_class,\
 };
 
 #endif /* AVFORMAT_RAWDEC_H */
-- 
1.7.5.1

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to