Compare commits

..

1 Commits

Author SHA1 Message Date
Michael Niedermayer
13a72d9b08 doc/APIchanges: update
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-07-16 02:06:44 +02:00
40 changed files with 86 additions and 393 deletions

View File

@@ -1,25 +1,7 @@
Entries are sorted chronologically from oldest to youngest within each release,
releases are sorted from youngest to oldest.
version 2.3.2:
- snow: fix null pointer dereference
- huffyucdec: fix overread
- vc1dec: fix crash
- iff: fix out of array access
- matroskaenc: fix assertion failure
- cdgraphics: fix infinite loop
- dvdsub_parser: fix infinite loop
- mpeg12dec: support decoding some broken files
- v4l2enc: fix crash
- h264_parser: fix handling huge resolutions
- h264_mp4toannexb_bsf: multiple bugfixes
version 2.3.1:
- public AVDCT API/ABI for DCT functions
- g2meet: allow size changes within original sizes
- dv: improved error resilience, fixing Ticket2340 and Ticket2341
version 2.3:
version <next>:
- AC3 fixed-point decoding
- shuffleplanes filter
- subfile protocol

View File

@@ -528,8 +528,8 @@ x86 Michael Niedermayer
Releases
========
2.3 Michael Niedermayer
2.2 Michael Niedermayer
2.1 Michael Niedermayer
1.2 Michael Niedermayer
If you want to maintain an older release, please contact us

View File

@@ -1 +1 @@
2.3.2
2.2.git

View File

@@ -7,10 +7,9 @@
since the release of FFmpeg 2.2.
In this release, there are lots of internal overhauls that make FFmpeg a
more accessible project for new developers. Many important new
optimizations and features like QTKit and AVFoundation input devices are
committed. Contributions done by Libav such as a new native Opus decoder
are also merged.
more accessible project for new developers. Many important new features
like QTKit and AVFoundation input devices are committed. Contributions done
by Libav such as a new native Opus decoder are also merged.
Because of the increasing difficulty to maintain and lack of maintainers,
we are very sorry to say that we have removed all Blackfin and SPARC
@@ -18,9 +17,8 @@
interested in maintaining optimization for these two architecture, feel
free to contact us and we will restore the code!
Oh, and since this release, this modern-looking release note is provided in
addition to the old-style Changelog file, to make it easier for you to
focus on the most important features in this release.
Since this release, the traditional Changelog file is upgraded to this
modern-looking release note. Old changelogs are moved to doc/Changelog.old.
Enjoy!
@@ -35,9 +33,9 @@
• libavutil 52.92.100
• libavcodec 55.69.100
• libavformat 55.48.100
• libavformat 55.47.100
• libavdevice 55.13.102
• libavfilter 4.11.100
• libavfilter 4.10.100
• libswscale 2. 6.100
• libswresample 0.19.100
• libpostproc 52. 3.100
@@ -105,7 +103,7 @@
Other interesting new features including hqx video filter, a pixel art
scaling filter; a fixed-point AC-3 decoder contributed by Imagination
Technologies; an On2 TrueMotion VP7 video decoder; an HTML5 WebVTT
subtitle encoder that allows creation of WebVTT from any text-based
subtitle decoder that allows creation of WebVTT from any text-based
subtitles; and an 1-bit Direct Stream Digital audio decoder.
┌────────────────────────────┐

View File

@@ -35,10 +35,6 @@ API changes, most recent first:
is now setting AVStream.time_base, instead of AVStream.codec.time_base as was
done previously. The old method is now deprecated.
2014-06-11 - 67d29da - lavc 55.66.101 - avcodec.h
Increase FF_INPUT_BUFFER_PADDING_SIZE to 32 due to some corner cases needing
it
2014-06-10 - xxxxxxx - lavf 55.43.100 - avformat.h
New field int64_t max_analyze_duration2 instead of deprecated
int max_analyze_duration.

View File

@@ -31,7 +31,7 @@ PROJECT_NAME = FFmpeg
# This could be handy for archiving the generated documentation or
# if some version control system is used.
PROJECT_NUMBER = 2.3.2
PROJECT_NUMBER =
# With the PROJECT_LOGO tag one can specify a logo or icon that is included
# in the documentation. The maximum height of the logo should not exceed 55

View File

@@ -483,21 +483,6 @@ ffplay -f lavfi "movie=test.avi[out0];amovie=test.wav[out1]"
@end itemize
@section libcdio
Audio-CD input device based on cdio.
To enable this input device during configuration you need libcdio
installed on your system.
This device allows playing and grabbing from an Audio-CD.
For example to copy with @command{ffmpeg} the entire Audio-CD in /dev/sr0,
you may run the command:
@example
ffmpeg -f libcdio -i /dev/sr0 cd.wav
@end example
@section libdc1394
IIDC1394 input device, based on libdc1394 and libraw1394.

View File

@@ -1828,7 +1828,7 @@ static int open_output_file(OptionsContext *o, const char *filename)
/* pick the "best" stream of each type */
/* video: highest resolution */
if (!o->video_disable && av_guess_codec(oc->oformat, NULL, filename, NULL, AVMEDIA_TYPE_VIDEO) != AV_CODEC_ID_NONE) {
if (!o->video_disable && oc->oformat->video_codec != AV_CODEC_ID_NONE) {
int area = 0, idx = -1;
int qcr = avformat_query_codec(oc->oformat, oc->oformat->video_codec, 0);
for (i = 0; i < nb_input_streams; i++) {
@@ -1850,7 +1850,7 @@ static int open_output_file(OptionsContext *o, const char *filename)
}
/* audio: most channels */
if (!o->audio_disable && av_guess_codec(oc->oformat, NULL, filename, NULL, AVMEDIA_TYPE_AUDIO) != AV_CODEC_ID_NONE) {
if (!o->audio_disable && oc->oformat->audio_codec != AV_CODEC_ID_NONE) {
int channels = 0, idx = -1;
for (i = 0; i < nb_input_streams; i++) {
ist = input_streams[i];

View File

@@ -2977,8 +2977,6 @@ static int prepare_sdp_description(FFStream *stream, uint8_t **pbuffer,
AVDictionaryEntry *entry = av_dict_get(stream->metadata, "title", NULL, 0);
int i;
*pbuffer = NULL;
avc = avformat_alloc_context();
if (avc == NULL || !rtp_format) {
return -1;
@@ -3015,7 +3013,7 @@ static int prepare_sdp_description(FFStream *stream, uint8_t **pbuffer,
av_free(avc);
av_free(avs);
return *pbuffer ? strlen(*pbuffer) : AVERROR(ENOMEM);
return strlen(*pbuffer);
}
static void rtsp_cmd_options(HTTPContext *c, const char *url)

View File

@@ -15,7 +15,6 @@ HEADERS = avcodec.h \
OBJS = allcodecs.o \
audioconvert.o \
avdct.o \
avpacket.o \
avpicture.o \
bitstream.o \

View File

@@ -1,124 +0,0 @@
/*
* Copyright (c) 2014 Michael Niedermayer <michaelni@gmx.at>
*
* This file is part of FFmpeg.
*
* FFmpeg 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,
* 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
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "avcodec.h"
#include "idctdsp.h"
#include "fdctdsp.h"
#include "avdct.h"
#define OFFSET(x) offsetof(AVDCT,x)
#define DEFAULT 0 //should be NAN but it does not work as it is not a constant in glibc as required by ANSI/ISO C
//these names are too long to be readable
#define V AV_OPT_FLAG_VIDEO_PARAM
#define A AV_OPT_FLAG_AUDIO_PARAM
#define E AV_OPT_FLAG_ENCODING_PARAM
#define D AV_OPT_FLAG_DECODING_PARAM
static const AVOption avdct_options[] = {
{"dct", "DCT algorithm", OFFSET(dct_algo), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, V|E, "dct"},
{"auto", "autoselect a good one (default)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_AUTO }, INT_MIN, INT_MAX, V|E, "dct"},
{"fastint", "fast integer (experimental / for debugging)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_FASTINT }, INT_MIN, INT_MAX, V|E, "dct"},
{"int", "accurate integer", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_INT }, INT_MIN, INT_MAX, V|E, "dct"},
{"mmx", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_MMX }, INT_MIN, INT_MAX, V|E, "dct"},
{"altivec", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_ALTIVEC }, INT_MIN, INT_MAX, V|E, "dct"},
{"faan", "floating point AAN DCT (experimental / for debugging)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_FAAN }, INT_MIN, INT_MAX, V|E, "dct"},
{"idct", "select IDCT implementation", OFFSET(idct_algo), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, V|E|D, "idct"},
{"auto", "autoselect a good one (default)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_AUTO }, INT_MIN, INT_MAX, V|E|D, "idct"},
{"int", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_INT }, INT_MIN, INT_MAX, V|E|D, "idct"},
{"simple", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLE }, INT_MIN, INT_MAX, V|E|D, "idct"},
{"simplemmx", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEMMX }, INT_MIN, INT_MAX, V|E|D, "idct"},
{"arm", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_ARM }, INT_MIN, INT_MAX, V|E|D, "idct"},
{"altivec", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_ALTIVEC }, INT_MIN, INT_MAX, V|E|D, "idct"},
#if FF_API_ARCH_SH4
{"sh4", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SH4 }, INT_MIN, INT_MAX, V|E|D, "idct"},
#endif
{"simplearm", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARM }, INT_MIN, INT_MAX, V|E|D, "idct"},
{"simplearmv5te", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARMV5TE }, INT_MIN, INT_MAX, V|E|D, "idct"},
{"simplearmv6", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARMV6 }, INT_MIN, INT_MAX, V|E|D, "idct"},
{"simpleneon", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLENEON }, INT_MIN, INT_MAX, V|E|D, "idct"},
#if FF_API_ARCH_ALPHA
{"simplealpha", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEALPHA }, INT_MIN, INT_MAX, V|E|D, "idct"},
#endif
{"ipp", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_IPP }, INT_MIN, INT_MAX, V|E|D, "idct"},
{"xvidmmx", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVIDMMX }, INT_MIN, INT_MAX, V|E|D, "idct"},
{"faani", "floating point AAN IDCT (experimental / for debugging)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_FAAN }, INT_MIN, INT_MAX, V|D|E, "idct"},
{"simpleauto", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEAUTO }, INT_MIN, INT_MAX, V|E|D, "idct"},
{NULL},
};
static const AVClass avdct_class = {
.class_name = "AVDCT",
.option = avdct_options,
.version = LIBAVUTIL_VERSION_INT,
};
const AVClass *avcodec_dct_get_class(void)
{
return &avdct_class;
}
AVDCT *avcodec_dct_alloc(void)
{
AVDCT *dsp = av_mallocz(sizeof(AVDCT));
if (!dsp)
return NULL;
dsp->av_class = &avdct_class;
av_opt_set_defaults(dsp);
return dsp;
}
int avcodec_dct_init(AVDCT *dsp)
{
AVCodecContext *avctx = avcodec_alloc_context3(NULL);
if (!avctx)
return AVERROR(ENOMEM);
avctx->idct_algo = dsp->idct_algo;
avctx->dct_algo = dsp->dct_algo;
#define COPY(src, name) memcpy(&dsp->name, &src.name, sizeof(dsp->name))
#if CONFIG_IDCTDSP
{
IDCTDSPContext idsp;
ff_idctdsp_init(&idsp, avctx);
COPY(idsp, idct);
COPY(idsp, idct_permutation);
}
#endif
#if CONFIG_FDCTDSP
{
FDCTDSPContext fdsp;
ff_fdctdsp_init(&fdsp, avctx);
COPY(fdsp, fdct);
}
#endif
avcodec_close(avctx);
av_free(avctx);
return 0;
}

View File

@@ -1,78 +0,0 @@
/*
* This file is part of FFmpeg.
*
* FFmpeg 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,
* 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
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVCODEC_AVDCT_H
#define AVCODEC_AVDCT_H
#include "libavutil/opt.h"
/**
* AVDCT context.
* @note function pointers can be NULL if the specific features have been
* disabled at build time.
*/
typedef struct AVDCT {
const AVClass *av_class;
void (*idct)(int16_t *block /* align 16 */);
/**
* IDCT input permutation.
* Several optimized IDCTs need a permutated input (relative to the
* normal order of the reference IDCT).
* This permutation must be performed before the idct_put/add.
* Note, normally this can be merged with the zigzag/alternate scan<br>
* An example to avoid confusion:
* - (->decode coeffs -> zigzag reorder -> dequant -> reference IDCT -> ...)
* - (x -> reference DCT -> reference IDCT -> x)
* - (x -> reference DCT -> simple_mmx_perm = idct_permutation
* -> simple_idct_mmx -> x)
* - (-> decode coeffs -> zigzag reorder -> simple_mmx_perm -> dequant
* -> simple_idct_mmx -> ...)
*/
uint8_t idct_permutation[64];
void (*fdct)(int16_t *block /* align 16 */);
/**
* DCT algorithm.
* must use AVOptions to set this field.
*/
int dct_algo;
/**
* IDCT algorithm.
* must use AVOptions to set this field.
*/
int idct_algo;
} AVDCT;
/**
* Allocates a AVDCT context.
* This needs to be initialized with avcodec_dct_init() after optionally
* configuring it with AVOptions.
*
* To free it use av_free()
*/
AVDCT *avcodec_dct_alloc(void);
int avcodec_dct_init(AVDCT *);
const AVClass *avcodec_dct_get_class(void);
#endif /* AVCODEC_AVDCT_H */

View File

@@ -353,9 +353,10 @@ static int cdg_decode_frame(AVCodecContext *avctx,
*got_frame = 1;
} else {
*got_frame = 0;
buf_size = 0;
}
return avpkt->size;
return buf_size;
}
static av_cold int cdg_decode_end(AVCodecContext *avctx)

View File

@@ -45,11 +45,8 @@ static int dvdsub_parse(AVCodecParserContext *s,
DVDSubParseContext *pc = s->priv_data;
if (pc->packet_index == 0) {
if (buf_size < 2 || AV_RB16(buf) && buf_size < 6) {
if (buf_size)
av_log(avctx, AV_LOG_DEBUG, "Parser input %d too small\n", buf_size);
return buf_size;
}
if (buf_size < 2)
return 0;
pc->packet_len = AV_RB16(buf);
if (pc->packet_len == 0) /* HD-DVD subpicture packet */
pc->packet_len = AV_RB32(buf+2);

View File

@@ -90,7 +90,6 @@ typedef struct G2MContext {
int compression;
int width, height, bpp;
int orig_width, orig_height;
int tile_width, tile_height;
int tiles_x, tiles_y, tile_x, tile_y;
@@ -713,8 +712,8 @@ static int g2m_decode_frame(AVCodecContext *avctx, void *data,
}
c->width = bytestream2_get_be32(&bc);
c->height = bytestream2_get_be32(&bc);
if (c->width < 16 || c->width > c->orig_width ||
c->height < 16 || c->height > c->orig_height) {
if (c->width < 16 || c->width > avctx->width ||
c->height < 16 || c->height > avctx->height) {
av_log(avctx, AV_LOG_ERROR,
"Invalid frame dimensions %dx%d\n",
c->width, c->height);
@@ -883,10 +882,6 @@ static av_cold int g2m_decode_init(AVCodecContext *avctx)
avctx->pix_fmt = AV_PIX_FMT_RGB24;
// store original sizes and check against those if resize happens
c->orig_width = avctx->width;
c->orig_height = avctx->height;
return 0;
}

View File

@@ -113,9 +113,6 @@ typedef struct RL_VLC_ELEM {
* LAST_SKIP_BITS(name, gb, num)
* Like SKIP_BITS, to be used if next call is UPDATE_CACHE or CLOSE_READER.
*
* BITS_LEFT(name, gb)
* Return the number of bits left
*
* For examples see get_bits, show_bits, skip_bits, get_vlc.
*/
@@ -182,8 +179,6 @@ typedef struct RL_VLC_ELEM {
name ## _index = FFMIN(name ## _size_plus8, name ## _index + (num))
#endif
#define BITS_LEFT(name, gb) ((int)((gb)->size_in_bits - name ## _index))
#define SKIP_BITS(name, gb, num) \
do { \
SKIP_CACHE(name, gb, num); \

View File

@@ -841,10 +841,10 @@ static void decode_postinit(H264Context *h, int setup_finished)
stereo->type = AV_STEREO3D_CHECKERBOARD;
break;
case 1:
stereo->type = AV_STEREO3D_COLUMNS;
stereo->type = AV_STEREO3D_LINES;
break;
case 2:
stereo->type = AV_STEREO3D_LINES;
stereo->type = AV_STEREO3D_COLUMNS;
break;
case 3:
if (h->quincunx_subsampling)

View File

@@ -749,7 +749,7 @@ typedef struct H264Context {
int16_t slice_row[MAX_SLICES]; ///< to detect when MAX_SLICES is too low
uint8_t parse_history[6];
uint8_t parse_history[4];
int parse_history_count;
int parse_last_mb;
uint8_t *edge_emu_buffer;

View File

@@ -28,7 +28,6 @@
typedef struct H264BSFContext {
uint8_t length_size;
uint8_t first_idr;
uint8_t idr_sps_pps_seen;
int extradata_parsed;
} H264BSFContext;
@@ -156,7 +155,6 @@ static int h264_mp4toannexb_filter(AVBitStreamFilterContext *bsfc,
return ret;
ctx->length_size = ret;
ctx->first_idr = 1;
ctx->idr_sps_pps_seen = 0;
ctx->extradata_parsed = 1;
}
@@ -176,17 +174,8 @@ static int h264_mp4toannexb_filter(AVBitStreamFilterContext *bsfc,
if (buf + nal_size > buf_end || nal_size < 0)
goto fail;
if (ctx->first_idr && (unit_type == 7 || unit_type == 8))
ctx->idr_sps_pps_seen = 1;
/* if this is a new IDR picture following an IDR picture, reset the idr flag.
* Just check first_mb_in_slice to be 0 as this is the simplest solution.
* This could be checking idr_pic_id instead, but would complexify the parsing. */
if (!ctx->first_idr && unit_type == 5 && (buf[1] & 0x80))
ctx->first_idr = 1;
/* prepend only to the first type 5 NAL unit of an IDR picture, if no sps/pps are already present */
if (ctx->first_idr && unit_type == 5 && !ctx->idr_sps_pps_seen) {
/* prepend only to the first type 5 NAL unit of an IDR picture */
if (ctx->first_idr && (unit_type == 5 || unit_type == 7 || unit_type == 8)) {
if ((ret=alloc_and_copy(poutbuf, poutbuf_size,
avctx->extradata, avctx->extradata_size,
buf, nal_size)) < 0)
@@ -196,10 +185,8 @@ static int h264_mp4toannexb_filter(AVBitStreamFilterContext *bsfc,
if ((ret=alloc_and_copy(poutbuf, poutbuf_size,
NULL, 0, buf, nal_size)) < 0)
goto fail;
if (!ctx->first_idr && unit_type == 1) {
if (!ctx->first_idr && unit_type == 1)
ctx->first_idr = 1;
ctx->idr_sps_pps_seen = 0;
}
}
buf += nal_size;

View File

@@ -92,7 +92,7 @@ static int h264_find_frame_end(H264Context *h, const uint8_t *buf,
state = 7;
} else {
h->parse_history[h->parse_history_count++]= buf[i];
if (h->parse_history_count>5) {
if (h->parse_history_count>3) {
unsigned int mb, last_mb= h->parse_last_mb;
GetBitContext gb;
@@ -120,7 +120,7 @@ found:
pc->frame_start_found = 0;
if (h->is_avc)
return next_avc;
return i - (state & 5) - 5 * (state > 7);
return i - (state & 5) - 3 * (state > 7);
}
static int scan_mmco_reset(AVCodecParserContext *s)

View File

@@ -625,9 +625,9 @@ static void decode_422_bitstream(HYuvContext *s, int count)
READ_2PIX(s->temp[0][2 * i ], s->temp[1][i], 1);
READ_2PIX(s->temp[0][2 * i + 1], s->temp[2][i], 2);
}
for (; i < count && BITS_LEFT(re, &s->gb) > 0; i++) {
for (; i < count && get_bits_left(&s->gb) > 0; i++) {
READ_2PIX(s->temp[0][2 * i ], s->temp[1][i], 1);
if (BITS_LEFT(re, &s->gb) <= 0) break;
if (get_bits_left(&s->gb) <= 0) break;
READ_2PIX(s->temp[0][2 * i + 1], s->temp[2][i], 2);
}
for (; i < count; i++)
@@ -666,7 +666,7 @@ static void decode_plane_bitstream(HYuvContext *s, int count, int plane)
if (s->bps <= 8) {
OPEN_READER(re, &s->gb);
if (count >= (get_bits_left(&s->gb)) / (32 * 2)) {
for (i = 0; i < count && BITS_LEFT(re, &s->gb) > 0; i++) {
for (i = 0; i < count && get_bits_left(&s->gb) > 0; i++) {
READ_2PIX_PLANE(s->temp[0][2 * i], s->temp[0][2 * i + 1], plane, OP8bits);
}
} else {
@@ -678,7 +678,7 @@ static void decode_plane_bitstream(HYuvContext *s, int count, int plane)
} else if (s->bps <= 14) {
OPEN_READER(re, &s->gb);
if (count >= (get_bits_left(&s->gb)) / (32 * 2)) {
for (i = 0; i < count && BITS_LEFT(re, &s->gb) > 0; i++) {
for (i = 0; i < count && get_bits_left(&s->gb) > 0; i++) {
READ_2PIX_PLANE(s->temp16[0][2 * i], s->temp16[0][2 * i + 1], plane, OP14bits);
}
} else {
@@ -707,7 +707,7 @@ static void decode_gray_bitstream(HYuvContext *s, int count)
count/=2;
if (count >= (get_bits_left(&s->gb)) / (32 * 2)) {
for (i = 0; i < count && BITS_LEFT(re, &s->gb) > 0; i++) {
for (i = 0; i < count && get_bits_left(&s->gb) > 0; i++) {
READ_2PIX(s->temp[0][2 * i], s->temp[0][2 * i + 1], 0);
}
} else {
@@ -724,7 +724,7 @@ static av_always_inline void decode_bgr_1(HYuvContext *s, int count,
int i;
OPEN_READER(re, &s->gb);
for (i = 0; i < count && BITS_LEFT(re, &s->gb) > 0; i++) {
for (i = 0; i < count && get_bits_left(&s->gb) > 0; i++) {
unsigned int index;
int code, n;

View File

@@ -677,15 +677,11 @@ static int decode_frame(AVCodecContext *avctx,
const uint8_t *buf_end = buf + buf_size;
int y, plane, res;
GetByteContext gb;
const AVPixFmtDescriptor *desc;
if ((res = extract_header(avctx, avpkt)) < 0)
return res;
if ((res = ff_reget_buffer(avctx, s->frame)) < 0)
return res;
desc = av_pix_fmt_desc_get(avctx->pix_fmt);
if (!s->init && avctx->bits_per_coded_sample <= 8 &&
avctx->pix_fmt == AV_PIX_FMT_PAL8) {
if ((res = cmap_read_palette(avctx, (uint32_t *)s->frame->data[1])) < 0)
@@ -725,6 +721,7 @@ static int decode_frame(AVCodecContext *avctx,
} else
return unsupported(avctx);
} else if (avctx->codec_tag == MKTAG('D', 'E', 'E', 'P')) {
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(avctx->pix_fmt);
int raw_width = avctx->width * (av_get_bits_per_pixel(desc) >> 3);
int x;
for (y = 0; y < avctx->height && buf < buf_end; y++) {
@@ -841,6 +838,7 @@ static int decode_frame(AVCodecContext *avctx,
} else
return unsupported(avctx);
} else if (avctx->codec_tag == MKTAG('D', 'E', 'E', 'P')) { // IFF-DEEP
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(avctx->pix_fmt);
if (av_get_bits_per_pixel(desc) == 32)
decode_deep_rle32(s->frame->data[0], buf, buf_size, avctx->width, avctx->height, s->frame->linesize[0]);
else
@@ -849,15 +847,16 @@ static int decode_frame(AVCodecContext *avctx,
break;
case 4:
bytestream2_init(&gb, buf, buf_size);
if (avctx->codec_tag == MKTAG('R', 'G', 'B', '8') && avctx->pix_fmt == AV_PIX_FMT_RGB32)
if (avctx->codec_tag == MKTAG('R', 'G', 'B', '8'))
decode_rgb8(&gb, s->frame->data[0], avctx->width, avctx->height, s->frame->linesize[0]);
else if (avctx->codec_tag == MKTAG('R', 'G', 'B', 'N') && avctx->pix_fmt == AV_PIX_FMT_RGB444)
else if (avctx->codec_tag == MKTAG('R', 'G', 'B', 'N'))
decode_rgbn(&gb, s->frame->data[0], avctx->width, avctx->height, s->frame->linesize[0]);
else
return unsupported(avctx);
break;
case 5:
if (avctx->codec_tag == MKTAG('D', 'E', 'E', 'P')) {
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(avctx->pix_fmt);
if (av_get_bits_per_pixel(desc) == 32)
decode_deep_tvdc32(s->frame->data[0], buf, buf_size, avctx->width, avctx->height, s->frame->linesize[0], s->tvdc);
else

View File

@@ -236,10 +236,10 @@ static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame,
case AV_STEREO3D_CHECKERBOARD:
fpa_type = 0;
break;
case AV_STEREO3D_COLUMNS:
case AV_STEREO3D_LINES:
fpa_type = 1;
break;
case AV_STEREO3D_LINES:
case AV_STEREO3D_COLUMNS:
fpa_type = 2;
break;
case AV_STEREO3D_SIDEBYSIDE:

View File

@@ -1884,14 +1884,6 @@ static int mpeg_decode_slice(MpegEncContext *s, int mb_y,
} else
goto eos;
}
if (s->mb_y >= ((s->height + 15) >> 4) &&
s->progressive_frame &&
!s->progressive_sequence &&
get_bits_left(&s->gb) <= 8 &&
get_bits_left(&s->gb) >= 0 &&
s->mb_skip_run == -1 &&
show_bits(&s->gb, 8) == 0)
goto eos;
ff_init_block_index(s);
}

View File

@@ -713,7 +713,7 @@ av_cold void ff_snow_common_end(SnowContext *s)
for(i=0; i<MAX_REF_FRAMES; i++){
av_freep(&s->ref_mvs[i]);
av_freep(&s->ref_scores[i]);
if(s->last_picture[i] && s->last_picture[i]->data[0]) {
if(s->last_picture[i]->data[0]) {
av_assert0(s->last_picture[i]->data[0] != s->current_picture->data[0]);
}
av_frame_free(&s->last_picture[i]);

View File

@@ -5514,7 +5514,7 @@ static void vc1_sprite_flush(AVCodecContext *avctx)
Since we can't enforce it, clear to black the missing sprite. This is
wrong but it looks better than doing nothing. */
if (f && f->data[0])
if (f->data[0])
for (plane = 0; plane < (s->flags&CODEC_FLAG_GRAY ? 1 : 3); plane++)
for (i = 0; i < v->sprite_height>>!!plane; i++)
memset(f->data[plane] + i * f->linesize[plane],

View File

@@ -638,7 +638,7 @@ static uint32_t log2sample(uint32_t v, int limit, uint32_t *result)
if ((v += v >> 9) < (1 << 8)) {
dbits = nbits_table[v];
*result += (dbits << 8) + wp_log2_table[(v << (9 - dbits)) & 0xff];
result += (dbits << 8) + wp_log2_table[(v << (9 - dbits)) & 0xff];
} else {
if (v < (1L << 16))
dbits = nbits_table[v >> 8] + 8;
@@ -647,7 +647,7 @@ static uint32_t log2sample(uint32_t v, int limit, uint32_t *result)
else
dbits = nbits_table[v >> 24] + 24;
*result += dbits = (dbits << 8) + wp_log2_table[(v >> (dbits - 9)) & 0xff];
result += dbits = (dbits << 8) + wp_log2_table[(v >> (dbits - 9)) & 0xff];
if (limit && dbits >= limit)
return 1;

View File

@@ -342,7 +342,7 @@ QPEL_TABLE 10, 4, w, sse4
%macro LOOP_END 4
lea %1q, [%1q+2*%2q] ; dst += dststride
add %3q, %4q ; src += srcstride
lea %3q, [%3q+ %4q] ; src += srcstride
dec heightd ; cmp height
jnz .loop ; height loop
%endmacro

View File

@@ -681,7 +681,7 @@ static int pulse_write_frame(AVFormatContext *h, int stream_index,
AVERROR(EINVAL) : 0;
pkt.data = (*frame)->data[0];
pkt.size = (*frame)->nb_samples * av_get_bytes_per_sample((*frame)->format) * av_frame_get_channels(*frame);
pkt.size = (*frame)->nb_samples * av_get_bytes_per_sample((*frame)->format) * (*frame)->channels;
pkt.dts = (*frame)->pkt_dts;
pkt.duration = av_frame_get_pkt_duration(*frame);
return pulse_write_packet(h, &pkt);

View File

@@ -22,7 +22,6 @@
#include "avdevice.h"
typedef struct {
AVClass *class;
int fd;
} V4L2Context;

View File

@@ -233,9 +233,9 @@ static void filter(SPPContext *p, uint8_t *dst, uint8_t *src,
const int y1 = y + offset[i + count - 1][1];
const int index = x1 + y1*linesize;
p->pdsp.get_pixels(block, p->src + index, linesize);
p->dct->fdct(block);
p->requantize(block2, block, qp, p->dct->idct_permutation);
p->dct->idct(block2);
p->fdsp.fdct(block);
p->requantize(block2, block, qp, p->idsp.idct_permutation);
p->idsp.idct(block2);
add_block(p->temp + index, linesize, block2);
}
}
@@ -378,11 +378,11 @@ static av_cold int init(AVFilterContext *ctx)
SPPContext *spp = ctx->priv;
spp->avctx = avcodec_alloc_context3(NULL);
spp->dct = avcodec_dct_alloc();
if (!spp->avctx || !spp->dct)
if (!spp->avctx)
return AVERROR(ENOMEM);
ff_idctdsp_init(&spp->idsp, spp->avctx);
ff_fdctdsp_init(&spp->fdsp, spp->avctx);
ff_pixblockdsp_init(&spp->pdsp, spp->avctx);
avcodec_dct_init(spp->dct);
spp->store_slice = store_slice_c;
switch (spp->mode) {
case MODE_HARD: spp->requantize = hardthresh_c; break;
@@ -403,7 +403,6 @@ static av_cold void uninit(AVFilterContext *ctx)
avcodec_close(spp->avctx);
av_freep(&spp->avctx);
}
av_freep(&spp->dct);
av_freep(&spp->non_b_qp_table);
}

View File

@@ -24,7 +24,8 @@
#include "libavcodec/avcodec.h"
#include "libavcodec/pixblockdsp.h"
#include "libavcodec/avdct.h"
#include "libavcodec/idctdsp.h"
#include "libavcodec/fdctdsp.h"
#include "avfilter.h"
#define MAX_LEVEL 6 /* quality levels */
@@ -40,8 +41,9 @@ typedef struct {
uint8_t *src;
int16_t *temp;
AVCodecContext *avctx;
IDCTDSPContext idsp;
FDCTDSPContext fdsp;
PixblockDSPContext pdsp;
AVDCT *dct;
int8_t *non_b_qp_table;
int non_b_qp_alloc_size;
int use_bframe_qp;

View File

@@ -72,33 +72,30 @@ static inline uint16_t dv_audio_12to16(uint16_t sample)
return result;
}
/*
* This is the dumbest implementation of all -- it simply looks at
* a fixed offset and if pack isn't there -- fails. We might want
* to have a fallback mechanism for complete search of missing packs.
*/
static const uint8_t *dv_extract_pack(uint8_t *frame, enum dv_pack_type t)
{
int offs;
int c;
for (c = 0; c < 10; c++) {
switch (t) {
case dv_audio_source:
if (c&1) offs = (80 * 6 + 80 * 16 * 0 + 3 + c*12000);
else offs = (80 * 6 + 80 * 16 * 3 + 3 + c*12000);
break;
case dv_audio_control:
if (c&1) offs = (80 * 6 + 80 * 16 * 1 + 3 + c*12000);
else offs = (80 * 6 + 80 * 16 * 4 + 3 + c*12000);
break;
case dv_video_control:
if (c&1) offs = (80 * 3 + 8 + c*12000);
else offs = (80 * 5 + 48 + 5 + c*12000);
break;
case dv_timecode:
offs = (80*1 + 3 + 3);
break;
default:
return NULL;
}
if (frame[offs] == t)
break;
switch (t) {
case dv_audio_source:
offs = (80 * 6 + 80 * 16 * 3 + 3);
break;
case dv_audio_control:
offs = (80 * 6 + 80 * 16 * 4 + 3);
break;
case dv_video_control:
offs = (80 * 5 + 48 + 5);
break;
case dv_timecode:
offs = (80*1 + 3 + 3);
break;
default:
return NULL;
}
return frame[offs] == t ? &frame[offs] : NULL;

View File

@@ -666,7 +666,6 @@ static const AVClass imgname ## _class = {\
};\
AVInputFormat ff_image_ ## imgname ## _pipe_demuxer = {\
.name = AV_STRINGIFY(imgname) "_pipe",\
.long_name = NULL_IF_CONFIG_SMALL("piped " AV_STRINGIFY(imgname) " sequence"),\
.priv_data_size = sizeof(VideoDemuxData),\
.read_probe = imgname ## _probe,\
.read_header = ff_img_read_header,\

View File

@@ -445,21 +445,8 @@ static int64_t mkv_write_cues(AVFormatContext *s, mkv_cues *cues, mkv_track *tra
ebml_master cuepoint, track_positions;
mkv_cuepoint *entry = &cues->entries[i];
uint64_t pts = entry->pts;
int ctp_nb = 0;
// Calculate the number of entries, so we know the element size
for (j = 0; j < num_tracks; j++)
tracks[j].has_cue = 0;
for (j = 0; j < cues->num_entries - i && entry[j].pts == pts; j++) {
int tracknum = entry[j].stream_idx;
av_assert0(tracknum>=0 && tracknum<num_tracks);
if (tracks[tracknum].has_cue && s->streams[tracknum]->codec->codec_type != AVMEDIA_TYPE_SUBTITLE)
continue;
tracks[tracknum].has_cue = 1;
ctp_nb ++;
}
cuepoint = start_ebml_master(pb, MATROSKA_ID_POINTENTRY, MAX_CUEPOINT_SIZE(ctp_nb));
cuepoint = start_ebml_master(pb, MATROSKA_ID_POINTENTRY, MAX_CUEPOINT_SIZE(num_tracks));
put_ebml_uint(pb, MATROSKA_ID_CUETIME, pts);
// put all the entries from different tracks that have the exact same

View File

@@ -467,7 +467,7 @@ static int tee_write_packet(AVFormatContext *avf, AVPacket *pkt)
if ((ret = av_copy_packet(&pkt2, pkt)) < 0 ||
(ret = av_dup_packet(&pkt2))< 0)
if (!ret_all) {
ret_all = ret;
ret = ret_all;
continue;
}
tb = avf ->streams[s ]->time_base;

View File

@@ -225,10 +225,6 @@ int av_parse_cpu_caps(unsigned *flags, const char *s)
{ "vfp", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_VFP }, .unit = "flags" },
{ "vfpv3", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_VFPV3 }, .unit = "flags" },
{ "neon", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_NEON }, .unit = "flags" },
#elif ARCH_AARCH64
{ "armv8", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ARMV8 }, .unit = "flags" },
{ "neon", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_NEON }, .unit = "flags" },
{ "vfp", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_VFP }, .unit = "flags" },
#endif
{ NULL },
};

View File

@@ -19,8 +19,6 @@ test -n "$slot" || die "slot not specified"
test -n "$repo" || die "repo not specified"
test -d "$samples" || die "samples location not specified"
: ${branch:=master}
lock(){
lock=$1/fate.lock
(set -C; exec >$lock) 2>/dev/null || return
@@ -30,14 +28,14 @@ lock(){
checkout(){
case "$repo" in
file:*|/*) src="${repo#file:}" ;;
git:*) git clone --quiet --branch "$branch" "$repo" "$src" ;;
git:*) git clone --quiet "$repo" "$src" ;;
esac
}
update()(
cd ${src} || return
case "$repo" in
git:*) git fetch --force && git reset --hard "origin/$branch" ;;
git:*) git fetch --force && git reset --hard FETCH_HEAD ;;
esac
)
@@ -84,9 +82,7 @@ clean(){
report(){
date=$(date -u +%Y%m%d%H%M%S)
echo "fate:0:${date}:${slot}:${version}:$1:$2:${comment}" >report
# echo "fate:1:${date}:${slot}:${version}:$1:$2:${branch}:${comment}" >report
cat ${build}/config.fate >>report
cat ${build}/tests/data/fate/*.rep >>report || for i in ${build}/tests/data/fate/*.rep ; do cat "$i" >>report ; done
cat ${build}/config.fate ${build}/tests/data/fate/*.rep >>report
test -n "$fate_recv" && $tar report *.log | gzip | $fate_recv
}

View File

@@ -1,5 +1,5 @@
bab98f5a04a9f7991fb960041c996478 *./tests/data/lavf/lavf.mkv
472668 ./tests/data/lavf/lavf.mkv
bda342503392d517955e1112def7b03a *./tests/data/lavf/lavf.mkv
472671 ./tests/data/lavf/lavf.mkv
./tests/data/lavf/lavf.mkv CRC=0xec6c3c68
c93950920d4ee57eb3ff5ba0cf0c8b19 *./tests/data/lavf/lavf.mkv
320412 ./tests/data/lavf/lavf.mkv

View File

@@ -4,11 +4,7 @@
# check for git short hash
if ! test "$revision"; then
if (cd "$1" && grep git RELEASE 2> /dev/null >/dev/null) ; then
revision=$(cd "$1" && git describe --tags --match N 2> /dev/null)
else
revision=$(cd "$1" && git describe --tags --always 2> /dev/null)
fi
revision=$(cd "$1" && git describe --tags --match N 2> /dev/null)
fi
# Shallow Git clones (--depth) do not have the N tag: