avcodec/nvdec: Make vp8 initialisation more 'compatible'

Ancient versions of gcc (pre 4.6) can't directly initialise
members of anonymous inner unions/structs by name.

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=10676

Unfortunately, RHEL 6 shipped with one of these ancient
versions and so we're stuck with it until approximately the
heat death of the universe.

Putting explicit braces into the initialisation is possibly a
work-around but the behaviour there was never fully understood
before direct initialisation was made to work.

So, this may or may not work.
This commit is contained in:
Philip Langdale 2017-11-26 20:40:32 -08:00
parent 8e7ac4f049
commit b93d96a07b
1 changed files with 14 additions and 5 deletions

View File

@ -64,11 +64,20 @@ static int nvdec_vp8_start_frame(AVCodecContext *avctx, const uint8_t *buffer, u
.LastRefIdx = safe_get_ref_idx(h->framep[VP56_FRAME_PREVIOUS]),
.GoldenRefIdx = safe_get_ref_idx(h->framep[VP56_FRAME_GOLDEN]),
.AltRefIdx = safe_get_ref_idx(h->framep[VP56_FRAME_GOLDEN2]),
.frame_type = !h->keyframe,
.version = h->profile,
.show_frame = !h->invisible,
.update_mb_segmentation_data = h->segmentation.enabled ? h->segmentation.update_feature_data : 0,
/*
* Explicit braces for anonymous inners to work around limitations
* in ancient versions of gcc.
*/
{
{
.frame_type = !h->keyframe,
.version = h->profile,
.show_frame = !h->invisible,
.update_mb_segmentation_data = h->segmentation.enabled ?
h->segmentation.update_feature_data :
0,
}
}
}
};