Compare commits

..

27 Commits

Author SHA1 Message Date
Michael Niedermayer
49fa398858 Changelog: add entry for proresenc 2014-08-12 05:18:21 +02:00
Christophe Gisquet
1ad1723c24 proresenc_kostya: report buffer overflow
If the allocated size, despite best efforts, is too small, exit
with the appropriate error.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 52b81ff463)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-08-12 02:40:23 +02:00
Christophe Gisquet
7740b111dd proresenc_kostya: remove unneeded parameters
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit bf10f09bcc)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-08-12 02:40:19 +02:00
Michael Niedermayer
c0ad5f9333 Update for 2.2.7
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-08-11 20:16:12 +02:00
Michael Niedermayer
bb7f236c7f avcodec/snow: fix null pointer dereference in cleanup after allocation failure
Fixes: snowf.avi
Found-by: Piotr Bandurski <ami_stuff@o2.pl>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 9a162146ca)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-08-11 19:07:11 +02:00
Michael Niedermayer
0397d43405 avcodec/iff: check pixfmt for rgb8 / rgbn
Fixes out of array access

Found-by: Piotr Bandurski <ami_stuff@o2.pl>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 3539d6c63a)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-08-11 19:07:11 +02:00
Michael Niedermayer
ffc66ac0d6 avutil/cpu: add aarch64 entries to 2nd table
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit efc4fe9d74)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-08-11 19:07:11 +02:00
Michael Niedermayer
588e7226ed ffmpeg_opt: Use av_guess_codec() instead of AVOutputFormat->*codec
Fixes part of ticket2236

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 956f4087c6)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-08-11 18:59:43 +02:00
Michael Niedermayer
0dc5868f14 Merge commit '67134ad31f1f3bc1515eae129e4368401f7c3342' into release/2.2
* commit '67134ad31f1f3bc1515eae129e4368401f7c3342':
  h264: fix interpretation of interleaved stereo modes

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-08-11 18:51:29 +02:00
Michael Niedermayer
723512ac71 avcodec/svq1dec: Fix multiple bugs from "svq1: do not modify the input packet"
Add padding, clear size, use the correct pointer.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 4213fc5b9e)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-08-11 18:50:29 +02:00
Michael Niedermayer
963514ea1a Merge commit 'd513c6a0ee582d22b6e793286774abbde01f6680' into release/2.2
* commit 'd513c6a0ee582d22b6e793286774abbde01f6680':
  svq1: do not modify the input packet

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-08-11 18:50:11 +02:00
Michael Niedermayer
c11b3010c2 Merge commit '18f48e05a22a73a389fb3ab4b3eaf78903bab5ef' into release/2.2
* commit '18f48e05a22a73a389fb3ab4b3eaf78903bab5ef':
  cdgraphics: do not return 0 from the decode function

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-08-11 18:49:37 +02:00
Michael Niedermayer
3301b248b0 Merge commit '5bf5a35fb5d452ea4b30cd7b853d92df6705d250' into release/2.2
* commit '5bf5a35fb5d452ea4b30cd7b853d92df6705d250':
  cdgraphics: switch to bytestream2

Conflicts:
	libavcodec/cdgraphics.c

See: ad002e1a13
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-08-11 18:41:07 +02:00
Michael Niedermayer
7b67ce9ade Merge commit '6598aaea1ad2cf82d40abb191ac26a5e4e5147ba' into release/2.2
* commit '6598aaea1ad2cf82d40abb191ac26a5e4e5147ba':
  jpeg2000: enable 4 component pixel formats

See: f0358dc1d3
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-08-11 18:40:20 +02:00
Michael Niedermayer
90a1c5e95c Merge commit 'a5992a274ff5f6c4bec3445cb410da0adce8ef70' into release/2.2
* commit 'a5992a274ff5f6c4bec3445cb410da0adce8ef70':
  stereo3d: add missing include guards

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-08-11 18:38:27 +02:00
Michael Niedermayer
45a529d805 Merge commit 'aa943bd31fada23db5cb9611215656ab9ebe5b94' into release/2.2
* commit 'aa943bd31fada23db5cb9611215656ab9ebe5b94':
  huffyuvdec: check width size for yuv422p

Conflicts:
	libavcodec/huffyuvdec.c

See: 6abb9a901f
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-08-11 18:02:36 +02:00
Michael Niedermayer
97cbad3d2c Merge commit 'bea14966e2a37019cb4e38420868c5bb0542d487' into release/2.2
* commit 'bea14966e2a37019cb4e38420868c5bb0542d487':
  mmvideo: check horizontal coordinate too

See: 8d3c99e825
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-08-11 18:01:44 +02:00
Michael Niedermayer
6419569a9d Merge commit '6be5a3c0451e8f199ef1da09961aa76c08c87afd' into release/2.2
* commit '6be5a3c0451e8f199ef1da09961aa76c08c87afd':
  wmalosslessdec: fix mclms_coeffs* array size

See: ec9578d54d
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-08-11 18:01:05 +02:00
Felix Abecassis
67134ad31f h264: fix interpretation of interleaved stereo modes
Column and row frame packing arrangements were inverted.

Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2014-08-07 11:40:08 +01:00
Anton Khirnov
d513c6a0ee svq1: do not modify the input packet
The input data must remain constant, make a copy instead. This is in
theory a performance hit, but since I failed to find any samples
using this feature, this should not matter in practice.

Also, check the size of the header, avoiding invalid reads on truncated
data.

CC:libav-stable@libav.org
(cherry picked from commit 7b588bb691)
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2014-08-06 19:05:34 +00:00
Anton Khirnov
18f48e05a2 cdgraphics: do not return 0 from the decode function
0 means no data consumed, so it can trigger an infinite loop in the
caller.

CC:libav-stable@libav.org
(cherry picked from commit c7d9b473e2)
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2014-08-06 18:41:44 +00:00
Anton Khirnov
5bf5a35fb5 cdgraphics: switch to bytestream2
Fixes possible invalid memory accesses on corrupted data.

CC:libav-stable@libav.org
Bug-ID: CVE-2013-3674
(cherry picked from commit a1599f3f7e)
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2014-08-06 18:41:42 +00:00
Vittorio Giovara
6598aaea1a jpeg2000: enable 4 component pixel formats
Bug-Id: 721
CC: libav-stable@libav.org
Sample-Id: 31230.mov
2014-08-06 12:44:35 +01:00
Vittorio Giovara
a5992a274f stereo3d: add missing include guards 2014-08-06 12:44:35 +01:00
Michael Niedermayer
aa943bd31f huffyuvdec: check width size for yuv422p
Avoid out of array accesses.

CC: libav-stable@libav.org
Bug-Id: CVE-2013-0848
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
Signed-off-by: Anton Khirnov <anton@khirnov.net>
(cherry picked from commit a7153444df)
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2014-08-05 20:06:53 +00:00
Michael Niedermayer
bea14966e2 mmvideo: check horizontal coordinate too
Fixes out of array accesses.

Bug-Id: CVE-2013-3672
Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
Signed-off-by: Anton Khirnov <anton@khirnov.net>
(cherry picked from commit 70cd3b8e65)
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2014-08-05 19:21:40 +00:00
Michael Niedermayer
6be5a3c045 wmalosslessdec: fix mclms_coeffs* array size
Fixes corruption of context

Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC:libav-stable@libav.org
Bug-Id: CVE-2014-2098
Signed-off-by: Anton Khirnov <anton@khirnov.net>
(cherry picked from commit 849b9d34c7)
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2014-08-05 14:59:29 +00:00
14 changed files with 74 additions and 28 deletions

View File

@@ -1,6 +1,13 @@
Entries are sorted chronologically from oldest to youngest within each release, Entries are sorted chronologically from oldest to youngest within each release,
releases are sorted from youngest to oldest. releases are sorted from youngest to oldest.
version 2.2.7
- snow: fix null pointer dereference
- iff: fix out of array access
- svq1dec: fix input data corruption
- proresenc_ks: check buffer size
version 2.2.6 version 2.2.6
- fix infinite loop in dvbsub parser - fix infinite loop in dvbsub parser
- fix some interlaced MPEG-2 videos - fix some interlaced MPEG-2 videos

View File

@@ -1 +1 @@
2.2.6 2.2.7

View File

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

View File

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

View File

@@ -261,7 +261,7 @@ static void cdg_scroll(CDGraphicsContext *cc, uint8_t *data,
static int cdg_decode_frame(AVCodecContext *avctx, static int cdg_decode_frame(AVCodecContext *avctx,
void *data, int *got_frame, AVPacket *avpkt) void *data, int *got_frame, AVPacket *avpkt)
{ {
const uint8_t *buf = avpkt->data; GetByteContext gb;
int buf_size = avpkt->size; int buf_size = avpkt->size;
int ret; int ret;
uint8_t command, inst; uint8_t command, inst;
@@ -278,6 +278,8 @@ static int cdg_decode_frame(AVCodecContext *avctx,
return AVERROR(EINVAL); return AVERROR(EINVAL);
} }
bytestream2_init(&gb, avpkt->data, avpkt->size);
if ((ret = ff_reget_buffer(avctx, cc->frame)) < 0) if ((ret = ff_reget_buffer(avctx, cc->frame)) < 0)
return ret; return ret;
if (!avctx->frame_number) { if (!avctx->frame_number) {
@@ -285,13 +287,11 @@ static int cdg_decode_frame(AVCodecContext *avctx,
memset(cc->frame->data[1], 0, AVPALETTE_SIZE); memset(cc->frame->data[1], 0, AVPALETTE_SIZE);
} }
command = bytestream_get_byte(&buf); command = bytestream2_get_byte(&gb);
inst = bytestream_get_byte(&buf); inst = bytestream2_get_byte(&gb);
inst &= CDG_MASK; inst &= CDG_MASK;
buf += 2; /// skipping 2 unneeded bytes bytestream2_skip(&gb, 2);
bytestream2_get_buffer(&gb, cdg_data, sizeof(cdg_data));
if (buf_size > CDG_HEADER_SIZE)
bytestream_get_buffer(&buf, cdg_data, buf_size - CDG_HEADER_SIZE);
if ((command & CDG_MASK) == CDG_COMMAND) { if ((command & CDG_MASK) == CDG_COMMAND) {
switch (inst) { switch (inst) {
@@ -353,10 +353,9 @@ static int cdg_decode_frame(AVCodecContext *avctx,
*got_frame = 1; *got_frame = 1;
} else { } else {
*got_frame = 0; *got_frame = 0;
buf_size = 0;
} }
return buf_size; return avpkt->size;
} }
static av_cold int cdg_decode_end(AVCodecContext *avctx) static av_cold int cdg_decode_end(AVCodecContext *avctx)

View File

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

View File

@@ -520,10 +520,13 @@ static av_cold int decode_init(AVCodecContext *avctx)
av_log(avctx, AV_LOG_ERROR, "width must be even for this colorspace\n"); av_log(avctx, AV_LOG_ERROR, "width must be even for this colorspace\n");
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
if (s->predictor == MEDIAN && avctx->pix_fmt == AV_PIX_FMT_YUV422P && avctx->width%4) { if (s->predictor == MEDIAN && avctx->pix_fmt == AV_PIX_FMT_YUV422P &&
av_log(avctx, AV_LOG_ERROR, "width must be a multiple of 4 this colorspace and predictor\n"); avctx->width % 4) {
av_log(avctx, AV_LOG_ERROR, "width must be a multiple of 4 "
"for this combination of colorspace and predictor type.\n");
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
if ((ret = ff_huffyuv_alloc_temp(s)) < 0) { if ((ret = ff_huffyuv_alloc_temp(s)) < 0) {
ff_huffyuv_common_end(s); ff_huffyuv_common_end(s);
return ret; return ret;

View File

@@ -847,9 +847,9 @@ static int decode_frame(AVCodecContext *avctx,
break; break;
case 4: case 4:
bytestream2_init(&gb, buf, buf_size); bytestream2_init(&gb, buf, buf_size);
if (avctx->codec_tag == MKTAG('R', 'G', 'B', '8')) if (avctx->codec_tag == MKTAG('R', 'G', 'B', '8') && avctx->pix_fmt == AV_PIX_FMT_RGB32)
decode_rgb8(&gb, s->frame->data[0], avctx->width, avctx->height, s->frame->linesize[0]); 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')) else if (avctx->codec_tag == MKTAG('R', 'G', 'B', 'N') && avctx->pix_fmt == AV_PIX_FMT_RGB444)
decode_rgbn(&gb, s->frame->data[0], avctx->width, avctx->height, s->frame->linesize[0]); decode_rgbn(&gb, s->frame->data[0], avctx->width, avctx->height, s->frame->linesize[0]);
else else
return unsupported(avctx); return unsupported(avctx);

View File

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

View File

@@ -472,7 +472,6 @@ static void put_alpha_run(PutBitContext *pb, int run)
// todo alpha quantisation for high quants // todo alpha quantisation for high quants
static int encode_alpha_plane(ProresContext *ctx, PutBitContext *pb, static int encode_alpha_plane(ProresContext *ctx, PutBitContext *pb,
const uint16_t *src, int linesize,
int mbs_per_slice, uint16_t *blocks, int mbs_per_slice, uint16_t *blocks,
int quant) int quant)
{ {
@@ -567,11 +566,16 @@ static int encode_slice(AVCodecContext *avctx, const AVFrame *pic,
get_alpha_data(ctx, src, linesize, xp, yp, get_alpha_data(ctx, src, linesize, xp, yp,
pwidth, avctx->height / ctx->pictures_per_frame, pwidth, avctx->height / ctx->pictures_per_frame,
ctx->blocks[0], mbs_per_slice, ctx->alpha_bits); ctx->blocks[0], mbs_per_slice, ctx->alpha_bits);
sizes[i] = encode_alpha_plane(ctx, pb, src, linesize, sizes[i] = encode_alpha_plane(ctx, pb,
mbs_per_slice, ctx->blocks[0], mbs_per_slice, ctx->blocks[0],
quant); quant);
} }
total_size += sizes[i]; total_size += sizes[i];
if (put_bits_left(pb) < 0) {
av_log(avctx, AV_LOG_ERROR, "Serious underevaluation of"
"required buffer size");
return AVERROR_BUFFER_TOO_SMALL;
}
} }
return total_size; return total_size;
} }
@@ -942,9 +946,9 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
avctx->coded_frame->pict_type = AV_PICTURE_TYPE_I; avctx->coded_frame->pict_type = AV_PICTURE_TYPE_I;
avctx->coded_frame->key_frame = 1; avctx->coded_frame->key_frame = 1;
pkt_size = ctx->frame_size_upper_bound + FF_MIN_BUFFER_SIZE; pkt_size = ctx->frame_size_upper_bound;
if ((ret = ff_alloc_packet2(avctx, pkt, pkt_size)) < 0) if ((ret = ff_alloc_packet2(avctx, pkt, pkt_size + FF_MIN_BUFFER_SIZE)) < 0)
return ret; return ret;
orig_buf = pkt->data; orig_buf = pkt->data;
@@ -1021,7 +1025,9 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
slice_hdr = buf; slice_hdr = buf;
buf += slice_hdr_size - 1; buf += slice_hdr_size - 1;
init_put_bits(&pb, buf, (pkt_size - (buf - orig_buf)) * 8); init_put_bits(&pb, buf, (pkt_size - (buf - orig_buf)) * 8);
encode_slice(avctx, pic, &pb, sizes, x, y, q, mbs_per_slice); ret = encode_slice(avctx, pic, &pb, sizes, x, y, q, mbs_per_slice);
if (ret < 0)
return ret;
bytestream_put_byte(&slice_hdr, q); bytestream_put_byte(&slice_hdr, q);
slice_size = slice_hdr_size + sizes[ctx->num_planes - 1]; slice_size = slice_hdr_size + sizes[ctx->num_planes - 1];

View File

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

View File

@@ -60,6 +60,10 @@ typedef struct SVQ1Context {
HpelDSPContext hdsp; HpelDSPContext hdsp;
GetBitContext gb; GetBitContext gb;
AVFrame *prev; AVFrame *prev;
uint8_t *pkt_swapped;
int pkt_swapped_allocated;
int width; int width;
int height; int height;
int frame_code; int frame_code;
@@ -624,7 +628,24 @@ static int svq1_decode_frame(AVCodecContext *avctx, void *data,
/* swap some header bytes (why?) */ /* swap some header bytes (why?) */
if (s->frame_code != 0x20) { if (s->frame_code != 0x20) {
uint32_t *src = (uint32_t *)(buf + 4); uint32_t *src;
if (buf_size < 9 * 4) {
av_log(avctx, AV_LOG_ERROR, "Input packet too small\n");
return AVERROR_INVALIDDATA;
}
av_fast_padded_malloc(&s->pkt_swapped, &s->pkt_swapped_allocated,
buf_size);
if (!s->pkt_swapped)
return AVERROR(ENOMEM);
memcpy(s->pkt_swapped, buf, buf_size);
buf = s->pkt_swapped;
init_get_bits(&s->gb, buf, buf_size * 8);
skip_bits(&s->gb, 22);
src = (uint32_t *)(s->pkt_swapped + 4);
if (buf_size < 36) if (buf_size < 36)
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
@@ -796,6 +817,8 @@ static av_cold int svq1_decode_end(AVCodecContext *avctx)
SVQ1Context *s = avctx->priv_data; SVQ1Context *s = avctx->priv_data;
av_frame_free(&s->prev); av_frame_free(&s->prev);
av_freep(&s->pkt_swapped);
s->pkt_swapped_allocated = 0;
return 0; return 0;
} }

View File

@@ -224,6 +224,9 @@ int av_parse_cpu_caps(unsigned *flags, const char *s)
{ "vfp", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_VFP }, .unit = "flags" }, { "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" }, { "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" }, { "neon", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_NEON }, .unit = "flags" },
#elif ARCH_AARCH64
{ "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 #endif
{ NULL }, { NULL },
}; };

View File

@@ -18,6 +18,9 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/ */
#ifndef AVUTIL_STEREO3D_H
#define AVUTIL_STEREO3D_H
#include <stdint.h> #include <stdint.h>
#include "frame.h" #include "frame.h"
@@ -145,3 +148,5 @@ AVStereo3D *av_stereo3d_alloc(void);
* @return The AVStereo3D structure to be filled by caller. * @return The AVStereo3D structure to be filled by caller.
*/ */
AVStereo3D *av_stereo3d_create_side_data(AVFrame *frame); AVStereo3D *av_stereo3d_create_side_data(AVFrame *frame);
#endif /* AVUTIL_STEREO3D_H */