libopenh264enc: Handle sample_aspect_ratio
This commit is contained in:
		
							parent
							
								
									e9d2e3fdaa
								
							
						
					
					
						commit
						be827e1d38
					
				@ -164,6 +164,47 @@ FF_ENABLE_DEPRECATION_WARNINGS
 | 
			
		||||
    param.sSpatialLayers[0].iSpatialBitrate     = param.iTargetBitrate;
 | 
			
		||||
    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)) {
 | 
			
		||||
        av_log(avctx, AV_LOG_ERROR,
 | 
			
		||||
               "Invalid combination -slices %d and -max_nal_size %d.\n",
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user