ffvpx: update to 3.4.6

This commit is contained in:
Roy Tam 2019-03-29 21:29:57 +08:00
commit 402c27b560
8 changed files with 33 additions and 28 deletions

View file

@ -1574,7 +1574,7 @@ enum AVPacketSideDataType {
AV_PKT_DATA_METADATA_UPDATE, AV_PKT_DATA_METADATA_UPDATE,
/** /**
* MPEGTS stream ID, this is required to pass the stream ID * MPEGTS stream ID as uint8_t, this is required to pass the stream ID
* information from the demuxer to the corresponding muxer. * information from the demuxer to the corresponding muxer.
*/ */
AV_PKT_DATA_MPEGTS_STREAM_ID, AV_PKT_DATA_MPEGTS_STREAM_ID,

View file

@ -438,7 +438,7 @@ static void guess_mv(ERContext *s)
} }
if ((!(s->avctx->error_concealment&FF_EC_GUESS_MVS)) || if ((!(s->avctx->error_concealment&FF_EC_GUESS_MVS)) ||
num_avail <= mb_width / 2) { num_avail <= FFMAX(mb_width, mb_height) / 2) {
for (mb_y = 0; mb_y < mb_height; mb_y++) { for (mb_y = 0; mb_y < mb_height; mb_y++) {
for (mb_x = 0; mb_x < s->mb_width; mb_x++) { for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
const int mb_xy = mb_x + mb_y * s->mb_stride; const int mb_xy = mb_x + mb_y * s->mb_stride;

View file

@ -156,8 +156,8 @@ void ff_h264_direct_ref_list_init(const H264Context *const h, H264SliceContext *
av_log(h->avctx, AV_LOG_ERROR, "co located POCs unavailable\n"); av_log(h->avctx, AV_LOG_ERROR, "co located POCs unavailable\n");
sl->col_parity = 1; sl->col_parity = 1;
} else } else
sl->col_parity = (FFABS(col_poc[0] - cur_poc) >= sl->col_parity = (FFABS(col_poc[0] - (int64_t)cur_poc) >=
FFABS(col_poc[1] - cur_poc)); FFABS(col_poc[1] - (int64_t)cur_poc));
ref1sidx = ref1sidx =
sidx = sl->col_parity; sidx = sl->col_parity;
// FL -> FL & differ parity // FL -> FL & differ parity

View file

@ -672,7 +672,7 @@ static void implicit_weight_table(const H264Context *h, H264SliceContext *sl, in
cur_poc = h->cur_pic_ptr->field_poc[h->picture_structure - 1]; cur_poc = h->cur_pic_ptr->field_poc[h->picture_structure - 1];
} }
if (sl->ref_count[0] == 1 && sl->ref_count[1] == 1 && !FRAME_MBAFF(h) && if (sl->ref_count[0] == 1 && sl->ref_count[1] == 1 && !FRAME_MBAFF(h) &&
sl->ref_list[0][0].poc + (int64_t)sl->ref_list[1][0].poc == 2 * cur_poc) { sl->ref_list[0][0].poc + (int64_t)sl->ref_list[1][0].poc == 2LL * cur_poc) {
sl->pwt.use_weight = 0; sl->pwt.use_weight = 0;
sl->pwt.use_weight_chroma = 0; sl->pwt.use_weight_chroma = 0;
return; return;

View file

@ -472,6 +472,11 @@ static int hls_slice_header(HEVCContext *s)
// Coded parameters // Coded parameters
sh->first_slice_in_pic_flag = get_bits1(gb); sh->first_slice_in_pic_flag = get_bits1(gb);
if (s->ref && sh->first_slice_in_pic_flag) {
av_log(s->avctx, AV_LOG_ERROR, "Two slices reporting being the first in the same frame.\n");
return 1; // This slice will be skiped later, do not corrupt state
}
if ((IS_IDR(s) || IS_BLA(s)) && sh->first_slice_in_pic_flag) { if ((IS_IDR(s) || IS_BLA(s)) && sh->first_slice_in_pic_flag) {
s->seq_decode = (s->seq_decode + 1) & 0xff; s->seq_decode = (s->seq_decode + 1) & 0xff;
s->max_ra = INT_MAX; s->max_ra = INT_MAX;
@ -2862,6 +2867,11 @@ static int decode_nal_unit(HEVCContext *s, const H2645NAL *nal)
ret = hls_slice_header(s); ret = hls_slice_header(s);
if (ret < 0) if (ret < 0)
return ret; return ret;
if (ret == 1) {
ret = AVERROR_INVALIDDATA;
goto fail;
}
if (s->sh.first_slice_in_pic_flag) { if (s->sh.first_slice_in_pic_flag) {
if (s->max_ra == INT_MAX) { if (s->max_ra == INT_MAX) {

View file

@ -100,7 +100,7 @@ static int mpegaudio_parse(AVCodecParserContext *s1,
"MP3ADU full parser"); "MP3ADU full parser");
*poutbuf = NULL; *poutbuf = NULL;
*poutbuf_size = 0; *poutbuf_size = 0;
return 0; /* parsers must not return error codes */ return buf_size; /* parsers must not return error codes */
} }
break; break;

View file

@ -499,7 +499,6 @@ int av_image_copy_to_buffer(uint8_t *dst, int dst_size,
static void memset_bytes(uint8_t *dst, size_t dst_size, uint8_t *clear, static void memset_bytes(uint8_t *dst, size_t dst_size, uint8_t *clear,
size_t clear_size) size_t clear_size)
{ {
size_t pos = 0;
int same = 1; int same = 1;
int i; int i;
@ -519,28 +518,12 @@ static void memset_bytes(uint8_t *dst, size_t dst_size, uint8_t *clear,
if (clear_size == 1) { if (clear_size == 1) {
memset(dst, clear[0], dst_size); memset(dst, clear[0], dst_size);
dst_size = 0; dst_size = 0;
} else if (clear_size == 2) { } else {
uint16_t val = AV_RN16(clear); if (clear_size > dst_size)
for (; dst_size >= 2; dst_size -= 2) { clear_size = dst_size;
AV_WN16(dst, val); memcpy(dst, clear, clear_size);
dst += 2; av_memcpy_backptr(dst + clear_size, clear_size, dst_size - clear_size);
}
} else if (clear_size == 4) {
uint32_t val = AV_RN32(clear);
for (; dst_size >= 4; dst_size -= 4) {
AV_WN32(dst, val);
dst += 4;
}
} else if (clear_size == 8) {
uint32_t val = AV_RN64(clear);
for (; dst_size >= 8; dst_size -= 8) {
AV_WN64(dst, val);
dst += 8;
}
} }
for (; dst_size; dst_size--)
*dst++ = clear[pos++ % clear_size];
} }
// Maximum size in bytes of a plane element (usually a pixel, or multiple pixels // Maximum size in bytes of a plane element (usually a pixel, or multiple pixels

View file

@ -385,6 +385,18 @@ static void fill32(uint8_t *dst, int len)
{ {
uint32_t v = AV_RN32(dst - 4); uint32_t v = AV_RN32(dst - 4);
#if HAVE_FAST_64BIT
uint64_t v2= v + ((uint64_t)v<<32);
while (len >= 32) {
AV_WN64(dst , v2);
AV_WN64(dst+ 8, v2);
AV_WN64(dst+16, v2);
AV_WN64(dst+24, v2);
dst += 32;
len -= 32;
}
#endif
while (len >= 4) { while (len >= 4) {
AV_WN32(dst, v); AV_WN32(dst, v);
dst += 4; dst += 4;