From e02de9df4b218bd6e1e927b67fd4075741545688 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sat, 5 Jul 2014 09:09:15 +0000 Subject: lavc: export Dirac parsing API used by the ogg demuxer as public Also, stop using AVCodecContext for storing the stream parameters. --- libavformat/oggparsedirac.c | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) (limited to 'libavformat/oggparsedirac.c') diff --git a/libavformat/oggparsedirac.c b/libavformat/oggparsedirac.c index 55a0b59127..5685e0085c 100644 --- a/libavformat/oggparsedirac.c +++ b/libavformat/oggparsedirac.c @@ -18,7 +18,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "libavcodec/get_bits.h" +#include "libavutil/intreadwrite.h" #include "libavcodec/dirac.h" #include "avformat.h" #include "internal.h" @@ -29,21 +29,34 @@ static int dirac_header(AVFormatContext *s, int idx) struct ogg *ogg = s->priv_data; struct ogg_stream *os = ogg->streams + idx; AVStream *st = s->streams[idx]; - dirac_source_params source; - GetBitContext gb; + AVDiracSeqHeader *dsh; + int ret; // already parsed the header if (st->codec->codec_id == AV_CODEC_ID_DIRAC) return 0; - init_get_bits(&gb, os->buf + os->pstart + 13, (os->psize - 13) * 8); - if (avpriv_dirac_parse_sequence_header(st->codec, &gb, &source) < 0) - return -1; + ret = av_dirac_parse_sequence_header(&dsh, os->buf + os->pstart + 13, (os->psize - 13) * 8, s); + if (ret < 0) + return ret; + + st->codec->codec_type = AVMEDIA_TYPE_VIDEO; + st->codec->codec_id = AV_CODEC_ID_DIRAC; + st->codec->width = dsh->width; + st->codec->height = dsh->height; + st->codec->pix_fmt = dsh->pix_fmt; + st->codec->color_range = dsh->color_range; + st->codec->color_trc = dsh->color_trc; + st->codec->color_primaries = dsh->color_primaries; + st->codec->colorspace = dsh->colorspace; + st->codec->profile = dsh->profile; + st->codec->level = dsh->level; - st->codec->codec_type = AVMEDIA_TYPE_VIDEO; - st->codec->codec_id = AV_CODEC_ID_DIRAC; // dirac in ogg always stores timestamps as though the video were interlaced - avpriv_set_pts_info(st, 64, st->codec->time_base.num, 2*st->codec->time_base.den); + avpriv_set_pts_info(st, 64, dsh->framerate.den, 2 * dsh->framerate.num); + + av_freep(&dsh); + return 1; } -- cgit v1.2.3