| @@ -164,6 +164,47 @@ FF_ENABLE_DEPRECATION_WARNINGS | |||||
| param.sSpatialLayers[0].iSpatialBitrate = param.iTargetBitrate; | param.sSpatialLayers[0].iSpatialBitrate = param.iTargetBitrate; | ||||
| param.sSpatialLayers[0].iMaxSpatialBitrate = param.iMaxBitrate; | param.sSpatialLayers[0].iMaxSpatialBitrate = param.iMaxBitrate; | ||||
| #if OPENH264_VER_AT_LEAST(1, 7) | |||||
| if (avctx->sample_aspect_ratio.num && avctx->sample_aspect_ratio.den) { | |||||
| // Table E-1. | |||||
| static const AVRational sar_idc[] = { | |||||
| { 0, 0 }, // Unspecified (never written here). | |||||
| { 1, 1 }, { 12, 11 }, { 10, 11 }, { 16, 11 }, | |||||
| { 40, 33 }, { 24, 11 }, { 20, 11 }, { 32, 11 }, | |||||
| { 80, 33 }, { 18, 11 }, { 15, 11 }, { 64, 33 }, | |||||
| { 160, 99 }, // Last 3 are unknown to openh264: { 4, 3 }, { 3, 2 }, { 2, 1 }, | |||||
| }; | |||||
| static const ESampleAspectRatio asp_idc[] = { | |||||
| ASP_UNSPECIFIED, | |||||
| ASP_1x1, ASP_12x11, ASP_10x11, ASP_16x11, | |||||
| ASP_40x33, ASP_24x11, ASP_20x11, ASP_32x11, | |||||
| ASP_80x33, ASP_18x11, ASP_15x11, ASP_64x33, | |||||
| ASP_160x99, | |||||
| }; | |||||
| int num, den, i; | |||||
| av_reduce(&num, &den, avctx->sample_aspect_ratio.num, | |||||
| avctx->sample_aspect_ratio.den, 65535); | |||||
| for (i = 1; i < FF_ARRAY_ELEMS(sar_idc); i++) { | |||||
| if (num == sar_idc[i].num && | |||||
| den == sar_idc[i].den) | |||||
| break; | |||||
| } | |||||
| if (i == FF_ARRAY_ELEMS(sar_idc)) { | |||||
| param.sSpatialLayers[0].eAspectRatio = ASP_EXT_SAR; | |||||
| param.sSpatialLayers[0].sAspectRatioExtWidth = num; | |||||
| param.sSpatialLayers[0].sAspectRatioExtHeight = den; | |||||
| } else { | |||||
| param.sSpatialLayers[0].eAspectRatio = asp_idc[i]; | |||||
| } | |||||
| param.sSpatialLayers[0].bAspectRatioPresent = true; | |||||
| } | |||||
| else { | |||||
| param.sSpatialLayers[0].bAspectRatioPresent = false; | |||||
| } | |||||
| #endif | |||||
| if ((avctx->slices > 1) && (s->max_nal_size)) { | if ((avctx->slices > 1) && (s->max_nal_size)) { | ||||
| av_log(avctx, AV_LOG_ERROR, | av_log(avctx, AV_LOG_ERROR, | ||||
| "Invalid combination -slices %d and -max_nal_size %d.\n", | "Invalid combination -slices %d and -max_nal_size %d.\n", | ||||