Originally committed as revision 23357 to svn://svn.ffmpeg.org/ffmpeg/trunktags/n0.8
| @@ -9,6 +9,7 @@ version <next>: | |||||
| - MMS-TCP support | - MMS-TCP support | ||||
| - VP8 decoding via libvpx | - VP8 decoding via libvpx | ||||
| - CODEC_CAP_EXPERIMENTAL added | - CODEC_CAP_EXPERIMENTAL added | ||||
| - Demuxer for On2's IVF format | |||||
| @@ -109,6 +109,8 @@ library: | |||||
| @tab Format used in various Interplay computer games. | @tab Format used in various Interplay computer games. | ||||
| @item IV8 @tab @tab X | @item IV8 @tab @tab X | ||||
| @tab A format generated by IndigoVision 8000 video server. | @tab A format generated by IndigoVision 8000 video server. | ||||
| @item IVF (On2) @tab @tab X | |||||
| @tab A format used by libvpx | |||||
| @item LMLM4 @tab @tab X | @item LMLM4 @tab @tab X | ||||
| @tab Used by Linux Media Labs MPEG-4 PCI boards | @tab Used by Linux Media Labs MPEG-4 PCI boards | ||||
| @item Matroska @tab X @tab X | @item Matroska @tab X @tab X | ||||
| @@ -99,6 +99,7 @@ OBJS-$(CONFIG_INGENIENT_DEMUXER) += raw.o | |||||
| OBJS-$(CONFIG_IPMOVIE_DEMUXER) += ipmovie.o | OBJS-$(CONFIG_IPMOVIE_DEMUXER) += ipmovie.o | ||||
| OBJS-$(CONFIG_ISS_DEMUXER) += iss.o | OBJS-$(CONFIG_ISS_DEMUXER) += iss.o | ||||
| OBJS-$(CONFIG_IV8_DEMUXER) += iv8.o | OBJS-$(CONFIG_IV8_DEMUXER) += iv8.o | ||||
| OBJS-$(CONFIG_IVF_DEMUXER) += ivfdec.o riff.o | |||||
| OBJS-$(CONFIG_LMLM4_DEMUXER) += lmlm4.o | OBJS-$(CONFIG_LMLM4_DEMUXER) += lmlm4.o | ||||
| OBJS-$(CONFIG_M4V_DEMUXER) += raw.o | OBJS-$(CONFIG_M4V_DEMUXER) += raw.o | ||||
| OBJS-$(CONFIG_M4V_MUXER) += raw.o | OBJS-$(CONFIG_M4V_MUXER) += raw.o | ||||
| @@ -105,6 +105,7 @@ void av_register_all(void) | |||||
| REGISTER_MUXER (IPOD, ipod); | REGISTER_MUXER (IPOD, ipod); | ||||
| REGISTER_DEMUXER (ISS, iss); | REGISTER_DEMUXER (ISS, iss); | ||||
| REGISTER_DEMUXER (IV8, iv8); | REGISTER_DEMUXER (IV8, iv8); | ||||
| REGISTER_DEMUXER (IVF, ivf); | |||||
| REGISTER_DEMUXER (LMLM4, lmlm4); | REGISTER_DEMUXER (LMLM4, lmlm4); | ||||
| REGISTER_MUXDEMUX (M4V, m4v); | REGISTER_MUXDEMUX (M4V, m4v); | ||||
| REGISTER_MUXER (MD5, md5); | REGISTER_MUXER (MD5, md5); | ||||
| @@ -22,7 +22,7 @@ | |||||
| #define AVFORMAT_AVFORMAT_H | #define AVFORMAT_AVFORMAT_H | ||||
| #define LIBAVFORMAT_VERSION_MAJOR 52 | #define LIBAVFORMAT_VERSION_MAJOR 52 | ||||
| #define LIBAVFORMAT_VERSION_MINOR 66 | |||||
| #define LIBAVFORMAT_VERSION_MINOR 67 | |||||
| #define LIBAVFORMAT_VERSION_MICRO 0 | #define LIBAVFORMAT_VERSION_MICRO 0 | ||||
| #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ | #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ | ||||
| @@ -0,0 +1,91 @@ | |||||
| /* | |||||
| * Copyright (c) 2010 David Conrad | |||||
| * | |||||
| * This file is part of FFmpeg. | |||||
| * | |||||
| * FFmpeg is free software; you can redistribute it and/or | |||||
| * modify it under the terms of the GNU Lesser General Public | |||||
| * License as published by the Free Software Foundation; either | |||||
| * version 2.1 of the License, or (at your option) any later version. | |||||
| * | |||||
| * FFmpeg is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||||
| * Lesser General Public License for more details. | |||||
| * | |||||
| * You should have received a copy of the GNU Lesser General Public | |||||
| * License along with FFmpeg; if not, write to the Free Software | |||||
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |||||
| */ | |||||
| #include "avformat.h" | |||||
| #include "riff.h" | |||||
| #include "libavutil/intreadwrite.h" | |||||
| static int probe(AVProbeData *p) | |||||
| { | |||||
| if (AV_RL32(p->buf) == MKTAG('D','K','I','F') | |||||
| && !AV_RL16(p->buf+4) && AV_RL16(p->buf+6) == 32) | |||||
| return AVPROBE_SCORE_MAX-2; | |||||
| return 0; | |||||
| } | |||||
| static int read_header(AVFormatContext *s, AVFormatParameters *ap) | |||||
| { | |||||
| AVStream *st; | |||||
| AVRational time_base; | |||||
| get_le32(s->pb); // DKIF | |||||
| get_le16(s->pb); // version | |||||
| get_le16(s->pb); // header size | |||||
| st = av_new_stream(s, 0); | |||||
| if (!st) | |||||
| return AVERROR(ENOMEM); | |||||
| st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||||
| st->codec->codec_tag = get_le32(s->pb); | |||||
| st->codec->codec_id = ff_codec_get_id(ff_codec_bmp_tags, st->codec->codec_tag); | |||||
| st->codec->width = get_le16(s->pb); | |||||
| st->codec->height = get_le16(s->pb); | |||||
| time_base.den = get_le32(s->pb); | |||||
| time_base.num = get_le32(s->pb); | |||||
| st->duration = get_le64(s->pb); | |||||
| st->need_parsing = AVSTREAM_PARSE_HEADERS; | |||||
| if (!time_base.den || !time_base.num) { | |||||
| av_log(s, AV_LOG_ERROR, "Invalid frame rate\n"); | |||||
| return AVERROR_INVALIDDATA; | |||||
| } | |||||
| av_set_pts_info(st, 64, time_base.num, time_base.den); | |||||
| return 0; | |||||
| } | |||||
| static int read_packet(AVFormatContext *s, AVPacket *pkt) | |||||
| { | |||||
| int ret, size = get_le32(s->pb); | |||||
| int64_t pts = get_le64(s->pb); | |||||
| ret = av_get_packet(s->pb, pkt, size); | |||||
| pkt->stream_index = 0; | |||||
| pkt->pts = pts; | |||||
| pkt->pos -= 12; | |||||
| return ret; | |||||
| } | |||||
| AVInputFormat ivf_demuxer = { | |||||
| "ivf", | |||||
| NULL_IF_CONFIG_SMALL("On2 IVF"), | |||||
| 0, | |||||
| probe, | |||||
| read_header, | |||||
| read_packet, | |||||
| .flags= AVFMT_GENERIC_INDEX, | |||||
| .codec_tag = (const AVCodecTag*[]){ff_codec_bmp_tags, 0}, | |||||
| }; | |||||