X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Favs.c;h=32e7546d60c4c84f74b40dba0dae281e40810ac7;hb=effe3b9575bf5770b228df37675a976a68e8a5e3;hp=16be4dc617edab395bb49e859c2fc9b1ccb93433;hpb=bde15e74de442cebf61acc6cd598a13aca249030;p=ffmpeg diff --git a/libavformat/avs.c b/libavformat/avs.c index 16be4dc617e..32e7546d60c 100644 --- a/libavformat/avs.c +++ b/libavformat/avs.c @@ -2,20 +2,20 @@ * AVS demuxer. * Copyright (c) 2006 Aurelien Jacobs * - * 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 */ @@ -24,7 +24,7 @@ typedef struct avs_format { - voc_dec_context_t voc; + VocDecContext voc; AVStream *st_video; AVStream *st_audio; int width; @@ -34,7 +34,7 @@ typedef struct avs_format { int nb_frames; int remaining_frame_size; int remaining_audio_size; -} avs_format_t; +} AvsFormat; typedef enum avs_block_type { AVS_NONE = 0x00, @@ -42,7 +42,7 @@ typedef enum avs_block_type { AVS_AUDIO = 0x02, AVS_PALETTE = 0x03, AVS_GAME_DATA = 0x04, -} avs_block_type_t; +} AvsBlockType; static int avs_probe(AVProbeData * p) { @@ -55,18 +55,18 @@ static int avs_probe(AVProbeData * p) return 0; } -static int avs_read_header(AVFormatContext * s, AVFormatParameters * ap) +static int avs_read_header(AVFormatContext * s) { - avs_format_t *avs = s->priv_data; + AvsFormat *avs = s->priv_data; s->ctx_flags |= AVFMTCTX_NOHEADER; - url_fskip(s->pb, 4); - avs->width = get_le16(s->pb); - avs->height = get_le16(s->pb); - avs->bits_per_sample = get_le16(s->pb); - avs->fps = get_le16(s->pb); - avs->nb_frames = get_le32(s->pb); + avio_skip(s->pb, 4); + avs->width = avio_rl16(s->pb); + avs->height = avio_rl16(s->pb); + avs->bits_per_sample = avio_rl16(s->pb); + avs->fps = avio_rl16(s->pb); + avs->nb_frames = avio_rl32(s->pb); avs->remaining_frame_size = 0; avs->remaining_audio_size = 0; @@ -82,10 +82,10 @@ static int avs_read_header(AVFormatContext * s, AVFormatParameters * ap) static int avs_read_video_packet(AVFormatContext * s, AVPacket * pkt, - avs_block_type_t type, int sub_type, int size, + AvsBlockType type, int sub_type, int size, uint8_t * palette, int palette_size) { - avs_format_t *avs = s->priv_data; + AvsFormat *avs = s->priv_data; int ret; ret = av_new_packet(pkt, size + palette_size); @@ -104,7 +104,7 @@ avs_read_video_packet(AVFormatContext * s, AVPacket * pkt, pkt->data[palette_size + 1] = type; pkt->data[palette_size + 2] = size & 0xFF; pkt->data[palette_size + 3] = (size >> 8) & 0xFF; - ret = get_buffer(s->pb, pkt->data + palette_size + 4, size - 4) + 4; + ret = avio_read(s->pb, pkt->data + palette_size + 4, size - 4) + 4; if (ret < size) { av_free_packet(pkt); return AVERROR(EIO); @@ -113,19 +113,19 @@ avs_read_video_packet(AVFormatContext * s, AVPacket * pkt, pkt->size = ret + palette_size; pkt->stream_index = avs->st_video->index; if (sub_type == 0) - pkt->flags |= PKT_FLAG_KEY; + pkt->flags |= AV_PKT_FLAG_KEY; return 0; } static int avs_read_audio_packet(AVFormatContext * s, AVPacket * pkt) { - avs_format_t *avs = s->priv_data; + AvsFormat *avs = s->priv_data; int ret, size; - size = url_ftell(s->pb); + size = avio_tell(s->pb); ret = voc_get_packet(s, pkt, avs->st_audio, avs->remaining_audio_size); - size = url_ftell(s->pb) - size; + size = avio_tell(s->pb) - size; avs->remaining_audio_size -= size; if (ret == AVERROR(EIO)) @@ -134,16 +134,16 @@ static int avs_read_audio_packet(AVFormatContext * s, AVPacket * pkt) return ret; pkt->stream_index = avs->st_audio->index; - pkt->flags |= PKT_FLAG_KEY; + pkt->flags |= AV_PKT_FLAG_KEY; return size; } static int avs_read_packet(AVFormatContext * s, AVPacket * pkt) { - avs_format_t *avs = s->priv_data; + AvsFormat *avs = s->priv_data; int sub_type = 0, size = 0; - avs_block_type_t type = AVS_NONE; + AvsBlockType type = AVS_NONE; int palette_size = 0; uint8_t palette[4 + 3 * 256]; int ret; @@ -154,20 +154,24 @@ static int avs_read_packet(AVFormatContext * s, AVPacket * pkt) while (1) { if (avs->remaining_frame_size <= 0) { - if (!get_le16(s->pb)) /* found EOF */ + if (!avio_rl16(s->pb)) /* found EOF */ return AVERROR(EIO); - avs->remaining_frame_size = get_le16(s->pb) - 4; + avs->remaining_frame_size = avio_rl16(s->pb) - 4; } while (avs->remaining_frame_size > 0) { - sub_type = get_byte(s->pb); - type = get_byte(s->pb); - size = get_le16(s->pb); + sub_type = avio_r8(s->pb); + type = avio_r8(s->pb); + size = avio_rl16(s->pb); + if (size < 4) + return AVERROR_INVALIDDATA; avs->remaining_frame_size -= size; switch (type) { case AVS_PALETTE: - ret = get_buffer(s->pb, palette, size - 4); + if (size - 4 > sizeof(palette)) + return AVERROR_INVALIDDATA; + ret = avio_read(s->pb, palette, size - 4); if (ret < size - 4) return AVERROR(EIO); palette_size = size; @@ -175,14 +179,14 @@ static int avs_read_packet(AVFormatContext * s, AVPacket * pkt) case AVS_VIDEO: if (!avs->st_video) { - avs->st_video = av_new_stream(s, AVS_VIDEO); + avs->st_video = avformat_new_stream(s, NULL); if (avs->st_video == NULL) return AVERROR(ENOMEM); - avs->st_video->codec->codec_type = CODEC_TYPE_VIDEO; + avs->st_video->codec->codec_type = AVMEDIA_TYPE_VIDEO; avs->st_video->codec->codec_id = CODEC_ID_AVS; avs->st_video->codec->width = avs->width; avs->st_video->codec->height = avs->height; - avs->st_video->codec->bits_per_sample=avs->bits_per_sample; + avs->st_video->codec->bits_per_coded_sample=avs->bits_per_sample; avs->st_video->nb_frames = avs->nb_frames; avs->st_video->codec->time_base = (AVRational) { 1, avs->fps}; @@ -192,10 +196,10 @@ static int avs_read_packet(AVFormatContext * s, AVPacket * pkt) case AVS_AUDIO: if (!avs->st_audio) { - avs->st_audio = av_new_stream(s, AVS_AUDIO); + avs->st_audio = avformat_new_stream(s, NULL); if (avs->st_audio == NULL) return AVERROR(ENOMEM); - avs->st_audio->codec->codec_type = CODEC_TYPE_AUDIO; + avs->st_audio->codec->codec_type = AVMEDIA_TYPE_AUDIO; } avs->remaining_audio_size = size - 4; size = avs_read_audio_packet(s, pkt); @@ -204,7 +208,7 @@ static int avs_read_packet(AVFormatContext * s, AVPacket * pkt) break; default: - url_fskip(s->pb, size - 4); + avio_skip(s->pb, size - 4); } } } @@ -215,12 +219,12 @@ static int avs_read_close(AVFormatContext * s) return 0; } -AVInputFormat avs_demuxer = { - "avs", - NULL_IF_CONFIG_SMALL("AVS format"), - sizeof(avs_format_t), - avs_probe, - avs_read_header, - avs_read_packet, - avs_read_close, +AVInputFormat ff_avs_demuxer = { + .name = "avs", + .long_name = NULL_IF_CONFIG_SMALL("AVS format"), + .priv_data_size = sizeof(AvsFormat), + .read_probe = avs_probe, + .read_header = avs_read_header, + .read_packet = avs_read_packet, + .read_close = avs_read_close, };