* qatar/master:
Revert "v210enc: use FFALIGN()"
doxygen: Do not include license boilerplates in Doxygen comment blocks.
avplay: reset decoder flush state when seeking
ape: skip packets with invalid size
ape: calculate final packet size instead of guessing
ape: stop reading after the last frame has been read
ape: return AVERROR_EOF instead of AVERROR(EIO) when demuxing is finished
ape: return error if seeking to the current packet fails in ape_read_packet()
avcodec: Clarify AVFrame member documentation.
v210dec: check for coded_frame allocation failure
v210enc: use stride as it is already calculated
v210enc: use FFALIGN()
v210enc: return proper AVERROR codes instead of -1
v210enc: do not set coded_frame->key_frame
v210enc: check for coded_frame allocation failure
drawtext: add 'fix_bounds' option on coords fixing
drawtext: fix text_{w, h} expression vars
drawtext: add missing braces around an if() block.
Conflicts:
libavcodec/arm/vp8.h
libavcodec/arm/vp8dsp_init_arm.c
libavcodec/v210dec.c
libavfilter/vf_drawtext.c
libavformat/ape.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
tags/n0.11
| @@ -1256,6 +1256,9 @@ libfreetype flags. | |||||
| @item tabsize | @item tabsize | ||||
| The size in number of spaces to use for rendering the tab. | The size in number of spaces to use for rendering the tab. | ||||
| Default value is 4. | Default value is 4. | ||||
| @item fix_bounds | |||||
| If true, check and fix text coords to avoid clipping. | |||||
| @end table | @end table | ||||
| The parameters for @var{x} and @var{y} are expressions containing the | The parameters for @var{x} and @var{y} are expressions containing the | ||||
| @@ -2145,8 +2145,10 @@ static int audio_decode_frame(VideoState *is, double *pts_ptr) | |||||
| if ((new_packet = packet_queue_get(&is->audioq, pkt, 1)) < 0) | if ((new_packet = packet_queue_get(&is->audioq, pkt, 1)) < 0) | ||||
| return -1; | return -1; | ||||
| if (pkt->data == flush_pkt.data) | |||||
| if (pkt->data == flush_pkt.data) { | |||||
| avcodec_flush_buffers(dec); | avcodec_flush_buffers(dec); | ||||
| flush_complete = 0; | |||||
| } | |||||
| *pkt_temp = *pkt; | *pkt_temp = *pkt; | ||||
| @@ -1,4 +1,4 @@ | |||||
| /** | |||||
| /* | |||||
| * ALAC audio encoder | * ALAC audio encoder | ||||
| * Copyright (c) 2008 Jaikrishnan Menon <realityman@gmx.net> | * Copyright (c) 2008 Jaikrishnan Menon <realityman@gmx.net> | ||||
| * | * | ||||
| @@ -1,4 +1,4 @@ | |||||
| /** | |||||
| /* | |||||
| * This file is part of FFmpeg. | * This file is part of FFmpeg. | ||||
| * | * | ||||
| * FFmpeg is free software; you can redistribute it and/or | * FFmpeg is free software; you can redistribute it and/or | ||||
| @@ -1,4 +1,4 @@ | |||||
| /** | |||||
| /* | |||||
| * Copyright (C) 2010 Mans Rullgard | * Copyright (C) 2010 Mans Rullgard | ||||
| * | * | ||||
| * This file is part of FFmpeg. | * This file is part of FFmpeg. | ||||
| @@ -1,4 +1,4 @@ | |||||
| /** | |||||
| /* | |||||
| * This file is part of FFmpeg. | * This file is part of FFmpeg. | ||||
| * | * | ||||
| * FFmpeg is free software; you can redistribute it and/or | * FFmpeg is free software; you can redistribute it and/or | ||||
| @@ -1,4 +1,4 @@ | |||||
| /** | |||||
| /* | |||||
| * VP8 NEON optimisations | * VP8 NEON optimisations | ||||
| * | * | ||||
| * Copyright (c) 2010 Rob Clark <rob@ti.com> | * Copyright (c) 2010 Rob Clark <rob@ti.com> | ||||
| @@ -884,7 +884,7 @@ typedef struct AVFrame { | |||||
| * For audio, only linesize[0] may be set. For planar audio, each channel | * For audio, only linesize[0] may be set. For planar audio, each channel | ||||
| * plane must be the same size. | * plane must be the same size. | ||||
| * | * | ||||
| * - encoding: Set by user (video only) | |||||
| * - encoding: Set by user | |||||
| * - decoding: set by AVCodecContext.get_buffer() | * - decoding: set by AVCodecContext.get_buffer() | ||||
| */ | */ | ||||
| int linesize[AV_NUM_DATA_POINTERS]; | int linesize[AV_NUM_DATA_POINTERS]; | ||||
| @@ -1134,7 +1134,7 @@ typedef struct AVFrame { | |||||
| /** | /** | ||||
| * number of audio samples (per channel) described by this frame | * number of audio samples (per channel) described by this frame | ||||
| * - encoding: unused | |||||
| * - encoding: Set by user | |||||
| * - decoding: Set by libavcodec | * - decoding: Set by libavcodec | ||||
| */ | */ | ||||
| int nb_samples; | int nb_samples; | ||||
| @@ -1,4 +1,4 @@ | |||||
| /** | |||||
| /* | |||||
| * FLAC audio encoder | * FLAC audio encoder | ||||
| * Copyright (c) 2006 Justin Ruggles <justin.ruggles@gmail.com> | * Copyright (c) 2006 Justin Ruggles <justin.ruggles@gmail.com> | ||||
| * | * | ||||
| @@ -1,4 +1,4 @@ | |||||
| /** | |||||
| /* | |||||
| * This file is part of Libav. | * This file is part of Libav. | ||||
| * | * | ||||
| * Libav is free software; you can redistribute it and/or | * Libav is free software; you can redistribute it and/or | ||||
| @@ -1,4 +1,4 @@ | |||||
| /** | |||||
| /* | |||||
| * LPC utility code | * LPC utility code | ||||
| * Copyright (c) 2006 Justin Ruggles <justin.ruggles@gmail.com> | * Copyright (c) 2006 Justin Ruggles <justin.ruggles@gmail.com> | ||||
| * | * | ||||
| @@ -1,4 +1,4 @@ | |||||
| /** | |||||
| /* | |||||
| * LPC utility code | * LPC utility code | ||||
| * Copyright (c) 2006 Justin Ruggles <justin.ruggles@gmail.com> | * Copyright (c) 2006 Justin Ruggles <justin.ruggles@gmail.com> | ||||
| * | * | ||||
| @@ -1,4 +1,4 @@ | |||||
| /** | |||||
| /* | |||||
| * VP8 compatible video decoder | * VP8 compatible video decoder | ||||
| * | * | ||||
| * Copyright (C) 2010 David Conrad | * Copyright (C) 2010 David Conrad | ||||
| @@ -28,7 +28,7 @@ static av_cold int encode_init(AVCodecContext *avctx) | |||||
| { | { | ||||
| if (avctx->width & 1) { | if (avctx->width & 1) { | ||||
| av_log(avctx, AV_LOG_ERROR, "v210 needs even width\n"); | av_log(avctx, AV_LOG_ERROR, "v210 needs even width\n"); | ||||
| return -1; | |||||
| return AVERROR(EINVAL); | |||||
| } | } | ||||
| if (avctx->pix_fmt != PIX_FMT_YUV422P10) { | if (avctx->pix_fmt != PIX_FMT_YUV422P10) { | ||||
| @@ -62,9 +62,9 @@ static int encode_frame(AVCodecContext *avctx, unsigned char *buf, | |||||
| uint8_t *p = buf; | uint8_t *p = buf; | ||||
| uint8_t *pdst = buf; | uint8_t *pdst = buf; | ||||
| if (buf_size < aligned_width * avctx->height * 8 / 3) { | |||||
| if (buf_size < avctx->height * stride) { | |||||
| av_log(avctx, AV_LOG_ERROR, "output buffer too small\n"); | av_log(avctx, AV_LOG_ERROR, "output buffer too small\n"); | ||||
| return -1; | |||||
| return AVERROR(ENOMEM); | |||||
| } | } | ||||
| #define CLIP(v) av_clip(v, 4, 1019) | #define CLIP(v) av_clip(v, 4, 1019) | ||||
| @@ -1,4 +1,4 @@ | |||||
| /** | |||||
| /* | |||||
| * VP8 compatible video decoder | * VP8 compatible video decoder | ||||
| * | * | ||||
| * Copyright (C) 2010 David Conrad | * Copyright (C) 2010 David Conrad | ||||
| @@ -1,4 +1,4 @@ | |||||
| /** | |||||
| /* | |||||
| * VP8 compatible video decoder | * VP8 compatible video decoder | ||||
| * | * | ||||
| * Copyright (C) 2010 David Conrad | * Copyright (C) 2010 David Conrad | ||||
| @@ -139,6 +139,7 @@ typedef struct { | |||||
| short int draw_box; ///< draw box around text - true or false | short int draw_box; ///< draw box around text - true or false | ||||
| int use_kerning; ///< font kerning is used - true/false | int use_kerning; ///< font kerning is used - true/false | ||||
| int tabsize; ///< tab size | int tabsize; ///< tab size | ||||
| int fix_bounds; ///< do we let it go out of frame bounds - t/f | |||||
| FT_Library library; ///< freetype font library handle | FT_Library library; ///< freetype font library handle | ||||
| FT_Face face; ///< freetype font face handle | FT_Face face; ///< freetype font face handle | ||||
| @@ -184,6 +185,8 @@ static const AVOption drawtext_options[]= { | |||||
| {"timecode", "set initial timecode", OFFSET(tc_opt_string), AV_OPT_TYPE_STRING, {.str=NULL}, CHAR_MIN, CHAR_MAX }, | {"timecode", "set initial timecode", OFFSET(tc_opt_string), AV_OPT_TYPE_STRING, {.str=NULL}, CHAR_MIN, CHAR_MAX }, | ||||
| {"r", "set rate (timecode only)", OFFSET(tc_rate), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, INT_MAX }, | {"r", "set rate (timecode only)", OFFSET(tc_rate), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, INT_MAX }, | ||||
| {"rate", "set rate (timecode only)", OFFSET(tc_rate), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, INT_MAX }, | {"rate", "set rate (timecode only)", OFFSET(tc_rate), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, INT_MAX }, | ||||
| {"fix_bounds", "if true, check and fix text coords to avoid clipping", | |||||
| OFFSET(fix_bounds), AV_OPT_TYPE_INT, {.dbl=1}, 0, 1 }, | |||||
| /* FT_LOAD_* flags */ | /* FT_LOAD_* flags */ | ||||
| {"ft_load_flags", "set font loading flags for libfreetype", OFFSET(ft_load_flags), AV_OPT_TYPE_FLAGS, {.dbl=FT_LOAD_DEFAULT|FT_LOAD_RENDER}, 0, INT_MAX, 0, "ft_load_flags" }, | {"ft_load_flags", "set font loading flags for libfreetype", OFFSET(ft_load_flags), AV_OPT_TYPE_FLAGS, {.dbl=FT_LOAD_DEFAULT|FT_LOAD_RENDER}, 0, INT_MAX, 0, "ft_load_flags" }, | ||||
| @@ -754,8 +757,9 @@ static int draw_text(AVFilterContext *ctx, AVFilterBufferRef *picref, | |||||
| /* get glyph */ | /* get glyph */ | ||||
| dummy.code = code; | dummy.code = code; | ||||
| glyph = av_tree_find(dtext->glyphs, &dummy, glyph_cmp, NULL); | glyph = av_tree_find(dtext->glyphs, &dummy, glyph_cmp, NULL); | ||||
| if (!glyph) | |||||
| if (!glyph) { | |||||
| load_glyph(ctx, &glyph, code); | load_glyph(ctx, &glyph, code); | ||||
| } | |||||
| y_min = FFMIN(glyph->bbox.yMin, y_min); | y_min = FFMIN(glyph->bbox.yMin, y_min); | ||||
| y_max = FFMAX(glyph->bbox.yMax, y_max); | y_max = FFMAX(glyph->bbox.yMax, y_max); | ||||
| @@ -159,8 +159,8 @@ static int ape_read_header(AVFormatContext * s) | |||||
| AVStream *st; | AVStream *st; | ||||
| uint32_t tag; | uint32_t tag; | ||||
| int i; | int i; | ||||
| int total_blocks; | |||||
| int64_t pts; | |||||
| int total_blocks, final_size = 0; | |||||
| int64_t pts, file_size; | |||||
| /* Skip any leading junk such as id3v2 tags */ | /* Skip any leading junk such as id3v2 tags */ | ||||
| ape->junklength = avio_tell(pb); | ape->junklength = avio_tell(pb); | ||||
| @@ -289,8 +289,17 @@ static int ape_read_header(AVFormatContext * s) | |||||
| ape->frames[i - 1].size = ape->frames[i].pos - ape->frames[i - 1].pos; | ape->frames[i - 1].size = ape->frames[i].pos - ape->frames[i - 1].pos; | ||||
| ape->frames[i].skip = (ape->frames[i].pos - ape->frames[0].pos) & 3; | ape->frames[i].skip = (ape->frames[i].pos - ape->frames[0].pos) & 3; | ||||
| } | } | ||||
| ape->frames[ape->totalframes - 1].size = ape->finalframeblocks * 4; | |||||
| ape->frames[ape->totalframes - 1].nblocks = ape->finalframeblocks; | ape->frames[ape->totalframes - 1].nblocks = ape->finalframeblocks; | ||||
| /* calculate final packet size from total file size, if available */ | |||||
| file_size = avio_size(pb); | |||||
| if (file_size > 0) { | |||||
| final_size = file_size - ape->frames[ape->totalframes - 1].pos - | |||||
| ape->wavtaillength; | |||||
| final_size -= final_size & 3; | |||||
| } | |||||
| if (file_size <= 0 || final_size <= 0) | |||||
| final_size = ape->finalframeblocks * 8; | |||||
| ape->frames[ape->totalframes - 1].size = final_size; | |||||
| for (i = 0; i < ape->totalframes; i++) { | for (i = 0; i < ape->totalframes; i++) { | ||||
| if(ape->frames[i].skip){ | if(ape->frames[i].skip){ | ||||
| @@ -357,11 +366,12 @@ static int ape_read_packet(AVFormatContext * s, AVPacket * pkt) | |||||
| uint32_t extra_size = 8; | uint32_t extra_size = 8; | ||||
| if (url_feof(s->pb)) | if (url_feof(s->pb)) | ||||
| return AVERROR(EIO); | |||||
| if (ape->currentframe > ape->totalframes) | |||||
| return AVERROR(EIO); | |||||
| return AVERROR_EOF; | |||||
| if (ape->currentframe >= ape->totalframes) | |||||
| return AVERROR_EOF; | |||||
| avio_seek (s->pb, ape->frames[ape->currentframe].pos, SEEK_SET); | |||||
| if (avio_seek(s->pb, ape->frames[ape->currentframe].pos, SEEK_SET) < 0) | |||||
| return AVERROR(EIO); | |||||
| /* Calculate how many blocks there are in this frame */ | /* Calculate how many blocks there are in this frame */ | ||||
| if (ape->currentframe == (ape->totalframes - 1)) | if (ape->currentframe == (ape->totalframes - 1)) | ||||
| @@ -369,6 +379,14 @@ static int ape_read_packet(AVFormatContext * s, AVPacket * pkt) | |||||
| else | else | ||||
| nblocks = ape->blocksperframe; | nblocks = ape->blocksperframe; | ||||
| if (ape->frames[ape->currentframe].size <= 0 || | |||||
| ape->frames[ape->currentframe].size > INT_MAX - extra_size) { | |||||
| av_log(s, AV_LOG_ERROR, "invalid packet size: %d\n", | |||||
| ape->frames[ape->currentframe].size); | |||||
| ape->currentframe++; | |||||
| return AVERROR(EIO); | |||||
| } | |||||
| if (av_new_packet(pkt, ape->frames[ape->currentframe].size + extra_size) < 0) | if (av_new_packet(pkt, ape->frames[ape->currentframe].size + extra_size) < 0) | ||||
| return AVERROR(ENOMEM); | return AVERROR(ENOMEM); | ||||
| @@ -1,4 +1,4 @@ | |||||
| /** | |||||
| /* | |||||
| * RTP Depacketization of MP4A-LATM, RFC 3016 | * RTP Depacketization of MP4A-LATM, RFC 3016 | ||||
| * Copyright (c) 2010 Martin Storsjo | * Copyright (c) 2010 Martin Storsjo | ||||
| * | * | ||||
| @@ -1,4 +1,4 @@ | |||||
| /** | |||||
| /* | |||||
| * Common code for the RTP depacketization of MPEG-4 formats. | * Common code for the RTP depacketization of MPEG-4 formats. | ||||
| * Copyright (c) 2010 Fabrice Bellard | * Copyright (c) 2010 Fabrice Bellard | ||||
| * Romain Degez | * Romain Degez | ||||
| @@ -1,4 +1,4 @@ | |||||
| /** | |||||
| /* | |||||
| * RTP Depacketization of QCELP/PureVoice, RFC 2658 | * RTP Depacketization of QCELP/PureVoice, RFC 2658 | ||||
| * Copyright (c) 2010 Martin Storsjo | * Copyright (c) 2010 Martin Storsjo | ||||
| * | * | ||||