X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Frl2.c;h=ac0532f1c9915368421c827f9e3586038e820a8d;hb=6c7d339afcd114f77d765d79863514c263e9c2f0;hp=30f065bb8139df273735270a97c87ebeb886b3ba;hpb=cb96da490265a0a798324ccce1c87dca9acbf6e9;p=ffmpeg diff --git a/libavformat/rl2.c b/libavformat/rl2.c index 30f065bb813..ac0532f1c99 100644 --- a/libavformat/rl2.c +++ b/libavformat/rl2.c @@ -2,29 +2,28 @@ * RL2 Format Demuxer * Copyright (c) 2008 Sascha Sommer (saschasommer@freenet.de) * - * 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 */ /** * RL2 file demuxer - * @file rl2.c + * @file * @author Sascha Sommer (saschasommer@freenet.de) - * For more information regarding the RL2 file format, visit: - * http://wiki.multimedia.cx/index.php?title=RL2 + * @see http://wiki.multimedia.cx/index.php?title=RL2 * * extradata: * 2 byte le initial drawing offset within 320x200 viewport @@ -33,7 +32,10 @@ * optional background_frame */ +#include "libavutil/intreadwrite.h" +#include "libavutil/mathematics.h" #include "avformat.h" +#include "internal.h" #define EXTRADATA1_SIZE (6 + 256 * 3) ///< video base, clr, palette @@ -42,7 +44,7 @@ #define RLV3_TAG MKBETAG('R', 'L', 'V', '3') typedef struct Rl2DemuxContext { - unsigned int index_pos[2]; ///< indices in the sample tables + unsigned int index_pos[2]; ///< indexes in the sample tables } Rl2DemuxContext; @@ -67,20 +69,16 @@ static int rl2_probe(AVProbeData *p) /** * read rl2 header data and setup the avstreams * @param s demuxer context - * @param ap format parameters * @return 0 on success, AVERROR otherwise */ -static av_cold int rl2_read_header(AVFormatContext *s, - AVFormatParameters *ap) +static av_cold int rl2_read_header(AVFormatContext *s) { - ByteIOContext *pb = s->pb; + AVIOContext *pb = s->pb; AVStream *st; unsigned int frame_count; unsigned int audio_frame_counter = 0; unsigned int video_frame_counter = 0; unsigned int back_size; - int data_size; - unsigned short encoding_method; unsigned short sound_rate; unsigned short rate; unsigned short channels; @@ -94,29 +92,29 @@ static av_cold int rl2_read_header(AVFormatContext *s, int i; int ret = 0; - url_fskip(pb,4); /* skip FORM tag */ - back_size = get_le32(pb); /** get size of the background frame */ - signature = get_be32(pb); - data_size = get_be32(pb); - frame_count = get_le32(pb); + avio_skip(pb,4); /* skip FORM tag */ + back_size = avio_rl32(pb); /**< get size of the background frame */ + signature = avio_rb32(pb); + avio_skip(pb, 4); /* data size */ + frame_count = avio_rl32(pb); /* disallow back_sizes and frame_counts that may lead to overflows later */ if(back_size > INT_MAX/2 || frame_count > INT_MAX / sizeof(uint32_t)) return AVERROR_INVALIDDATA; - encoding_method = get_le16(pb); - sound_rate = get_le16(pb); - rate = get_le16(pb); - channels = get_le16(pb); - def_sound_size = get_le16(pb); + avio_skip(pb, 2); /* encoding mentod */ + sound_rate = avio_rl16(pb); + rate = avio_rl16(pb); + channels = avio_rl16(pb); + def_sound_size = avio_rl16(pb); /** setup video stream */ - 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_RL2; + st->codec->codec_type = AVMEDIA_TYPE_VIDEO; + st->codec->codec_id = AV_CODEC_ID_RL2; st->codec->codec_tag = 0; /* no fourcc */ st->codec->width = 320; st->codec->height = 200; @@ -132,7 +130,7 @@ static av_cold int rl2_read_header(AVFormatContext *s, if(!st->codec->extradata) return AVERROR(ENOMEM); - if(get_buffer(pb,st->codec->extradata,st->codec->extradata_size) != + if(avio_read(pb,st->codec->extradata,st->codec->extradata_size) != st->codec->extradata_size) return AVERROR(EIO); @@ -141,23 +139,23 @@ static av_cold int rl2_read_header(AVFormatContext *s, pts_num = def_sound_size; pts_den = rate; - st = av_new_stream(s, 0); + st = avformat_new_stream(s, NULL); if (!st) return AVERROR(ENOMEM); - st->codec->codec_type = CODEC_TYPE_AUDIO; - st->codec->codec_id = CODEC_ID_PCM_U8; + st->codec->codec_type = AVMEDIA_TYPE_AUDIO; + st->codec->codec_id = AV_CODEC_ID_PCM_U8; st->codec->codec_tag = 1; st->codec->channels = channels; - st->codec->bits_per_sample = 8; + st->codec->bits_per_coded_sample = 8; st->codec->sample_rate = rate; st->codec->bit_rate = st->codec->channels * st->codec->sample_rate * - st->codec->bits_per_sample; + st->codec->bits_per_coded_sample; st->codec->block_align = st->codec->channels * - st->codec->bits_per_sample / 8; - av_set_pts_info(st,32,1,rate); + st->codec->bits_per_coded_sample / 8; + avpriv_set_pts_info(st,32,1,rate); } - av_set_pts_info(s->streams[0], 32, pts_num, pts_den); + avpriv_set_pts_info(s->streams[0], 32, pts_num, pts_den); chunk_size = av_malloc(frame_count * sizeof(uint32_t)); audio_size = av_malloc(frame_count * sizeof(uint32_t)); @@ -172,11 +170,11 @@ static av_cold int rl2_read_header(AVFormatContext *s, /** read offset and size tables */ for(i=0; i < frame_count;i++) - chunk_size[i] = get_le32(pb); + chunk_size[i] = avio_rl32(pb); for(i=0; i < frame_count;i++) - chunk_offset[i] = get_le32(pb); + chunk_offset[i] = avio_rl32(pb); for(i=0; i < frame_count;i++) - audio_size[i] = get_le32(pb) & 0xFFFF; + audio_size[i] = avio_rl32(pb) & 0xFFFF; /** build the sample index */ for(i=0;ipriv_data; - ByteIOContext *pb = s->pb; + AVIOContext *pb = s->pb; AVIndexEntry *sample = NULL; int i; int ret = 0; @@ -236,7 +234,7 @@ static int rl2_read_packet(AVFormatContext *s, ++rl2->index_pos[stream_id]; /** position the stream (will probably be there anyway) */ - url_fseek(pb, sample->pos, SEEK_SET); + avio_seek(pb, sample->pos, SEEK_SET); /** fill the packet */ ret = av_get_packet(pb, pkt, sample->size); @@ -286,14 +284,12 @@ static int rl2_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp return 0; } -AVInputFormat rl2_demuxer = { - "rl2", - "rl2 format", - sizeof(Rl2DemuxContext), - rl2_probe, - rl2_read_header, - rl2_read_packet, - NULL, - rl2_read_seek, +AVInputFormat ff_rl2_demuxer = { + .name = "rl2", + .long_name = NULL_IF_CONFIG_SMALL("RL2"), + .priv_data_size = sizeof(Rl2DemuxContext), + .read_probe = rl2_probe, + .read_header = rl2_read_header, + .read_packet = rl2_read_packet, + .read_seek = rl2_read_seek, }; -