X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Frmenc.c;h=fba8feb802c7953608087a7ca41dd6bd729d708c;hb=634d9d8b398982647b3d7160641198744901d8d8;hp=8a608861f51e1ec4a8535a7a03130b7465121587;hpb=6b4aa5dac8f41aa452d0ce9a1bede9e59a303060;p=ffmpeg diff --git a/libavformat/rmenc.c b/libavformat/rmenc.c index 8a608861f51..fba8feb802c 100644 --- a/libavformat/rmenc.c +++ b/libavformat/rmenc.c @@ -2,25 +2,26 @@ * "Real" compatible muxer. * Copyright (c) 2000, 2001 Fabrice Bellard * - * 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 "avformat.h" #include "avio_internal.h" #include "rm.h" +#include "libavutil/dict.h" typedef struct { int nb_packets; @@ -71,7 +72,7 @@ static int rv10_write_header(AVFormatContext *ctx, const char *desc, *mimetype; int nb_packets, packet_total_size, packet_max_size, size, packet_avg_size, i; int bit_rate, v, duration, flags, data_pos; - AVMetadataTag *tag; + AVDictionaryEntry *tag; start_ptr = s->buf_ptr; @@ -118,7 +119,7 @@ static int rv10_write_header(AVFormatContext *ctx, avio_wb32(s, 0); /* data offset : will be patched after */ avio_wb16(s, ctx->nb_streams); /* num streams */ flags = 1 | 2; /* save allowed & perfect play */ - if (url_is_streamed(s)) + if (!s->seekable) flags |= 4; /* live broadcast */ avio_wb16(s, flags); @@ -127,13 +128,13 @@ static int rv10_write_header(AVFormatContext *ctx, ffio_wfourcc(s,"CONT"); size = 4 * 2 + 10; for(i=0; imetadata, ff_rm_metadata[i], NULL, 0); + tag = av_dict_get(ctx->metadata, ff_rm_metadata[i], NULL, 0); if(tag) size += strlen(tag->value); } avio_wb32(s,size); avio_wb16(s,0); for(i=0; imetadata, ff_rm_metadata[i], NULL, 0); + tag = av_dict_get(ctx->metadata, ff_rm_metadata[i], NULL, 0); put_str(s, tag ? tag->value : ""); } @@ -170,7 +171,7 @@ static int rv10_write_header(AVFormatContext *ctx, avio_wb32(s, 0); /* start time */ avio_wb32(s, BUFFER_DURATION); /* preroll */ /* duration */ - if (url_is_streamed(s) || !stream->total_frames) + if (!s->seekable || !stream->total_frames) avio_wb32(s, (int)(3600 * 1000)); else avio_wb32(s, (int)(stream->total_frames * 1000 / stream->frame_rate)); @@ -241,7 +242,7 @@ static int rv10_write_header(AVFormatContext *ctx, /* video codec info */ avio_wb32(s,34); /* size */ ffio_wfourcc(s, "VIDO"); - if(stream->enc->codec_id == CODEC_ID_RV10) + if(stream->enc->codec_id == AV_CODEC_ID_RV10) ffio_wfourcc(s,"RV10"); else ffio_wfourcc(s,"RV20"); @@ -255,7 +256,7 @@ static int rv10_write_header(AVFormatContext *ctx, /* Seems to be the codec version: only use basic H263. The next versions seems to add a diffential DC coding as in MPEG... nothing new under the sun */ - if(stream->enc->codec_id == CODEC_ID_RV10) + if(stream->enc->codec_id == AV_CODEC_ID_RV10) avio_wb32(s,0x10000000); else avio_wb32(s,0x20103001); @@ -341,7 +342,7 @@ static int rm_write_header(AVFormatContext *s) if (rv10_write_header(s, 0, 0)) return AVERROR_INVALIDDATA; - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; } @@ -354,11 +355,11 @@ static int rm_write_audio(AVFormatContext *s, const uint8_t *buf, int size, int int i; /* XXX: suppress this malloc */ - buf1= (uint8_t*) av_malloc( size * sizeof(uint8_t) ); + buf1 = av_malloc(size * sizeof(uint8_t)); write_packet_header(s, stream, size, !!(flags & AV_PKT_FLAG_KEY)); - if (stream->enc->codec_id == CODEC_ID_AC3) { + if (stream->enc->codec_id == AV_CODEC_ID_AC3) { /* for AC-3, the words seem to be reversed */ for(i=0;inb_frames++; av_free(buf1); return 0; @@ -413,7 +413,6 @@ static int rm_write_video(AVFormatContext *s, const uint8_t *buf, int size, int avio_w8(pb, stream->nb_frames & 0xff); avio_write(pb, buf, size); - put_flush_packet(pb); stream->nb_frames++; return 0; @@ -434,9 +433,9 @@ static int rm_write_trailer(AVFormatContext *s) int data_size, index_pos, i; AVIOContext *pb = s->pb; - if (!url_is_streamed(s->pb)) { + if (s->pb->seekable) { /* end of file: finish to write header */ - index_pos = avio_seek(pb, 0, SEEK_CUR); + index_pos = avio_tell(pb); data_size = index_pos - rm->data_pos; /* FIXME: write index */ @@ -454,21 +453,21 @@ static int rm_write_trailer(AVFormatContext *s) avio_wb32(pb, 0); avio_wb32(pb, 0); } - put_flush_packet(pb); + return 0; } AVOutputFormat ff_rm_muxer = { - "rm", - NULL_IF_CONFIG_SMALL("RealMedia format"), - "application/vnd.rn-realmedia", - "rm,ra", - sizeof(RMMuxContext), - CODEC_ID_AC3, - CODEC_ID_RV10, - rm_write_header, - rm_write_packet, - rm_write_trailer, - .codec_tag= (const AVCodecTag* const []){ff_rm_codec_tags, 0}, + .name = "rm", + .long_name = NULL_IF_CONFIG_SMALL("RealMedia"), + .mime_type = "application/vnd.rn-realmedia", + .extensions = "rm,ra", + .priv_data_size = sizeof(RMMuxContext), + .audio_codec = AV_CODEC_ID_AC3, + .video_codec = AV_CODEC_ID_RV10, + .write_header = rm_write_header, + .write_packet = rm_write_packet, + .write_trailer = rm_write_trailer, + .codec_tag = (const AVCodecTag* const []){ ff_rm_codec_tags, 0 }, };