X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fcafdec.c;h=68686cab97467c58e501839498faa0c09880ba33;hb=4904995652dbbfc7cb37fef9656b9b86f53449f7;hp=8532946c5cb3d6246f00cba274dbf4153a70afc6;hpb=6b4aa5dac8f41aa452d0ce9a1bede9e59a303060;p=ffmpeg diff --git a/libavformat/cafdec.c b/libavformat/cafdec.c index 8532946c5cb..68686cab974 100644 --- a/libavformat/cafdec.c +++ b/libavformat/cafdec.c @@ -3,20 +3,20 @@ * Copyright (c) 2007 Justin Ruggles * Copyright (c) 2009 Peter Ross * - * 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 */ @@ -29,6 +29,8 @@ #include "riff.h" #include "isom.h" #include "libavutil/intreadwrite.h" +#include "libavutil/intfloat_readwrite.h" +#include "libavutil/dict.h" #include "caf.h" typedef struct { @@ -106,30 +108,30 @@ static int read_kuki_chunk(AVFormatContext *s, int64_t size) int strt, skip; MOVAtom atom; - strt = url_ftell(pb); + strt = avio_tell(pb); ff_mov_read_esds(s, pb, atom); - skip = size - (url_ftell(pb) - strt); + skip = size - (avio_tell(pb) - strt); if (skip < 0 || !st->codec->extradata || st->codec->codec_id != CODEC_ID_AAC) { av_log(s, AV_LOG_ERROR, "invalid AAC magic cookie\n"); return AVERROR_INVALIDDATA; } - url_fskip(pb, skip); + avio_skip(pb, skip); } else if (st->codec->codec_id == CODEC_ID_ALAC) { #define ALAC_PREAMBLE 12 #define ALAC_HEADER 36 if (size < ALAC_PREAMBLE + ALAC_HEADER) { av_log(s, AV_LOG_ERROR, "invalid ALAC magic cookie\n"); - url_fskip(pb, size); + avio_skip(pb, size); return AVERROR_INVALIDDATA; } - url_fskip(pb, ALAC_PREAMBLE); + avio_skip(pb, ALAC_PREAMBLE); st->codec->extradata = av_mallocz(ALAC_HEADER + FF_INPUT_BUFFER_PADDING_SIZE); if (!st->codec->extradata) return AVERROR(ENOMEM); avio_read(pb, st->codec->extradata, ALAC_HEADER); st->codec->extradata_size = ALAC_HEADER; - url_fskip(pb, size - ALAC_PREAMBLE - ALAC_HEADER); + avio_skip(pb, size - ALAC_PREAMBLE - ALAC_HEADER); } else { st->codec->extradata = av_mallocz(size + FF_INPUT_BUFFER_PADDING_SIZE); if (!st->codec->extradata) @@ -150,7 +152,7 @@ static int read_pakt_chunk(AVFormatContext *s, int64_t size) int64_t pos = 0, ccount; int num_packets, i; - ccount = url_ftell(pb); + ccount = avio_tell(pb); num_packets = avio_rb64(pb); if (num_packets < 0 || INT32_MAX / sizeof(AVIndexEntry) < num_packets) @@ -167,7 +169,7 @@ static int read_pakt_chunk(AVFormatContext *s, int64_t size) st->duration += caf->frames_per_packet ? caf->frames_per_packet : ff_mp4_read_descr_len(pb); } - if (url_ftell(pb) - ccount != size) { + if (avio_tell(pb) - ccount != size) { av_log(s, AV_LOG_ERROR, "error reading packet table\n"); return -1; } @@ -185,9 +187,9 @@ static void read_info_chunk(AVFormatContext *s, int64_t size) for (i = 0; i < nb_entries; i++) { char key[32]; char value[1024]; - get_strz(pb, key, sizeof(key)); - get_strz(pb, value, sizeof(value)); - av_metadata_set2(&s->metadata, key, value, 0); + avio_get_str(pb, INT_MAX, key, sizeof(key)); + avio_get_str(pb, INT_MAX, value, sizeof(value)); + av_dict_set(&s->metadata, key, value, 0); } } @@ -201,7 +203,7 @@ static int read_header(AVFormatContext *s, int found_data, ret; int64_t size; - url_fskip(pb, 8); /* magic, version, file flags */ + avio_skip(pb, 8); /* magic, version, file flags */ /* audio description chunk */ if (avio_rb32(pb) != MKBETAG('d','e','s','c')) { @@ -219,25 +221,25 @@ static int read_header(AVFormatContext *s, /* parse each chunk */ found_data = 0; - while (!url_feof(pb)) { + while (!pb->eof_reached) { /* stop at data chunk if seeking is not supported or data chunk size is unknown */ - if (found_data && (caf->data_size < 0 || url_is_streamed(pb))) + if (found_data && (caf->data_size < 0 || !pb->seekable)) break; tag = avio_rb32(pb); size = avio_rb64(pb); - if (url_feof(pb)) + if (pb->eof_reached) break; switch (tag) { case MKBETAG('d','a','t','a'): - url_fskip(pb, 4); /* edit count */ - caf->data_start = url_ftell(pb); + avio_skip(pb, 4); /* edit count */ + caf->data_start = avio_tell(pb); caf->data_size = size < 0 ? -1 : size - 4; - if (caf->data_size > 0 && !url_is_streamed(pb)) - url_fskip(pb, caf->data_size); + if (caf->data_size > 0 && pb->seekable) + avio_skip(pb, caf->data_size); found_data = 1; break; @@ -265,7 +267,7 @@ static int read_header(AVFormatContext *s, case MKBETAG('f','r','e','e'): if (size < 0) return AVERROR_INVALIDDATA; - url_fskip(pb, size); + avio_skip(pb, size); break; } } @@ -284,7 +286,7 @@ static int read_header(AVFormatContext *s, "block size or frame size are variable.\n"); return AVERROR_INVALIDDATA; } - s->file_size = url_fsize(pb); + s->file_size = avio_size(pb); s->file_size = FFMAX(0, s->file_size); av_set_pts_info(st, 64, 1, st->codec->sample_rate); @@ -307,12 +309,12 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt) int res, pkt_size = 0, pkt_frames = 0; int64_t left = CAF_MAX_PKT_SIZE; - if (url_feof(pb)) + if (pb->eof_reached) return AVERROR(EIO); /* don't read past end of data chunk */ if (caf->data_size > 0) { - left = (caf->data_start + caf->data_size) - url_ftell(pb); + left = (caf->data_start + caf->data_size) - avio_tell(pb); if (left <= 0) return AVERROR(EIO); }