libopenh264enc: export CPB props side data
This commit is contained in:
		
							parent
							
								
									f0b769c16d
								
							
						
					
					
						commit
						11c9bd633f
					
				| @ -240,4 +240,9 @@ int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt); | ||||
|  */ | ||||
| int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame); | ||||
| 
 | ||||
| /**
 | ||||
|  * Add a CPB properties side data to an encoding context. | ||||
|  */ | ||||
| AVCPBProperties *ff_add_cpb_side_data(AVCodecContext *avctx); | ||||
| 
 | ||||
| #endif /* AVCODEC_INTERNAL_H */ | ||||
|  | ||||
| @ -108,6 +108,7 @@ static av_cold int svc_encode_init(AVCodecContext *avctx) | ||||
|     int err = AVERROR_UNKNOWN; | ||||
|     int log_level; | ||||
|     WelsTraceCallback callback_function; | ||||
|     AVCPBProperties *props; | ||||
| 
 | ||||
|     // Mingw GCC < 4.7 on x86_32 uses an incorrect/buggy ABI for the WelsGetCodecVersion
 | ||||
|     // function (for functions returning larger structs), thus skip the check in those
 | ||||
| @ -223,6 +224,14 @@ static av_cold int svc_encode_init(AVCodecContext *avctx) | ||||
|         memcpy(avctx->extradata, fbi.sLayerInfo[0].pBsBuf, size); | ||||
|     } | ||||
| 
 | ||||
|     props = ff_add_cpb_side_data(avctx); | ||||
|     if (!props) { | ||||
|         err = AVERROR(ENOMEM); | ||||
|         goto fail; | ||||
|     } | ||||
|     props->max_bitrate = param.iMaxBitrate; | ||||
|     props->avg_bitrate = param.iTargetBitrate; | ||||
| 
 | ||||
|     return 0; | ||||
| 
 | ||||
| fail: | ||||
|  | ||||
| @ -2383,3 +2383,29 @@ AVCPBProperties *av_cpb_properties_alloc(size_t *size) | ||||
| 
 | ||||
|     return props; | ||||
| } | ||||
| 
 | ||||
| AVCPBProperties *ff_add_cpb_side_data(AVCodecContext *avctx) | ||||
| { | ||||
|     AVPacketSideData *tmp; | ||||
|     AVCPBProperties  *props; | ||||
|     size_t size; | ||||
| 
 | ||||
|     props = av_cpb_properties_alloc(&size); | ||||
|     if (!props) | ||||
|         return NULL; | ||||
| 
 | ||||
|     tmp = av_realloc_array(avctx->coded_side_data, avctx->nb_coded_side_data + 1, sizeof(*tmp)); | ||||
|     if (!tmp) { | ||||
|         av_freep(&props); | ||||
|         return NULL; | ||||
|     } | ||||
| 
 | ||||
|     avctx->coded_side_data = tmp; | ||||
|     avctx->nb_coded_side_data++; | ||||
| 
 | ||||
|     avctx->coded_side_data[avctx->nb_coded_side_data - 1].type = AV_PKT_DATA_CPB_PROPERTIES; | ||||
|     avctx->coded_side_data[avctx->nb_coded_side_data - 1].data = (uint8_t*)props; | ||||
|     avctx->coded_side_data[avctx->nb_coded_side_data - 1].size = size; | ||||
| 
 | ||||
|     return props; | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user