X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Ftxd.c;h=e6522c3a73ef7ba73d5e9a9c162a6f72bc27ca0c;hb=a28468d0daf4be14761c16a3ddd33266b2380123;hp=88432266810f628a3ff1f2111d8a5d1536843c14;hpb=769e10f0684c63aefb6fe36788f3e543312e185d;p=ffmpeg diff --git a/libavformat/txd.c b/libavformat/txd.c index 88432266810..e6522c3a73e 100644 --- a/libavformat/txd.c +++ b/libavformat/txd.c @@ -2,24 +2,26 @@ * Renderware TeXture Dictionary (.txd) demuxer * Copyright (c) 2007 Ivo van Poorten * - * This file is part of FFmpeg. + * This file is part of Libav. * - * FFmpeg is free software; you can redistribute it and/or + * Libav 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, + * Libav 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 + * License along with Libav; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "libavutil/intreadwrite.h" #include "avformat.h" +#include "internal.h" #define TXD_FILE 0x16 #define TXD_INFO 0x01 @@ -36,35 +38,35 @@ static int txd_probe(AVProbeData * pd) { return 0; } -static int txd_read_header(AVFormatContext *s, AVFormatParameters *ap) { +static int txd_read_header(AVFormatContext *s) { AVStream *st; - st = av_new_stream(s, 0); + st = avformat_new_stream(s, NULL); if (!st) return AVERROR(ENOMEM); - st->codec->codec_type = CODEC_TYPE_VIDEO; - st->codec->codec_id = CODEC_ID_TXD; - st->codec->time_base.den = 5; - st->codec->time_base.num = 1; + st->codec->codec_type = AVMEDIA_TYPE_VIDEO; + st->codec->codec_id = AV_CODEC_ID_TXD; + avpriv_set_pts_info(st, 64, 1, 5); + st->avg_frame_rate = av_inv_q(st->time_base); /* the parameters will be extracted from the compressed bitstream */ return 0; } static int txd_read_packet(AVFormatContext *s, AVPacket *pkt) { - ByteIOContext *pb = &s->pb; + AVIOContext *pb = s->pb; unsigned int id, chunk_size, marker; int ret; next_chunk: - id = get_le32(pb); - chunk_size = get_le32(pb); - marker = get_le32(pb); + id = avio_rl32(pb); + chunk_size = avio_rl32(pb); + marker = avio_rl32(pb); - if (url_feof(&s->pb)) - return AVERROR_IO; + if (s->pb->eof_reached) + return AVERROR_EOF; if (marker != TXD_MARKER && marker != TXD_MARKER2) { - av_log(NULL, AV_LOG_ERROR, "marker does not match\n"); - return AVERROR_IO; + av_log(s, AV_LOG_ERROR, "marker does not match\n"); + return AVERROR_INVALIDDATA; } switch (id) { @@ -72,32 +74,27 @@ next_chunk: if (chunk_size > 100) break; case TXD_EXTRA: - url_fskip(&s->pb, chunk_size); + avio_skip(s->pb, chunk_size); case TXD_FILE: case TXD_TEXTURE: goto next_chunk; default: - av_log(NULL, AV_LOG_ERROR, "unknown chunk id %i\n", id); - return AVERROR_IO; + av_log(s, AV_LOG_ERROR, "unknown chunk id %i\n", id); + return AVERROR_INVALIDDATA; } - ret = av_get_packet(&s->pb, pkt, chunk_size); + ret = av_get_packet(s->pb, pkt, chunk_size); + if (ret < 0) + return ret; pkt->stream_index = 0; - return ret <= 0 ? AVERROR_IO : ret; -} - -static int txd_read_close(AVFormatContext *s) { return 0; } -AVInputFormat txd_demuxer = -{ - "txd", - "txd format", - 0, - txd_probe, - txd_read_header, - txd_read_packet, - txd_read_close, +AVInputFormat ff_txd_demuxer = { + .name = "txd", + .long_name = NULL_IF_CONFIG_SMALL("Renderware TeXture Dictionary"), + .read_probe = txd_probe, + .read_header = txd_read_header, + .read_packet = txd_read_packet, };