---
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