h264: Allow discarding the cropping information from SPS
Some 3D systems overload the meaning of the field for other purposes. Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
This commit is contained in:
		
							parent
							
								
									33552a5f7b
								
							
						
					
					
						commit
						a84fb6e06f
					
				| @ -657,6 +657,8 @@ typedef struct RcOverride{ | |||||||
| #define CODEC_FLAG2_FAST          0x00000001 ///< Allow non spec compliant speedup tricks.
 | #define CODEC_FLAG2_FAST          0x00000001 ///< Allow non spec compliant speedup tricks.
 | ||||||
| #define CODEC_FLAG2_NO_OUTPUT     0x00000004 ///< Skip bitstream encoding.
 | #define CODEC_FLAG2_NO_OUTPUT     0x00000004 ///< Skip bitstream encoding.
 | ||||||
| #define CODEC_FLAG2_LOCAL_HEADER  0x00000008 ///< Place global headers at every keyframe instead of in extradata.
 | #define CODEC_FLAG2_LOCAL_HEADER  0x00000008 ///< Place global headers at every keyframe instead of in extradata.
 | ||||||
|  | #define CODEC_FLAG2_IGNORE_CROP   0x00010000 ///< Discard cropping information from SPS.
 | ||||||
|  | 
 | ||||||
| #if FF_API_MPV_GLOBAL_OPTS | #if FF_API_MPV_GLOBAL_OPTS | ||||||
| #define CODEC_FLAG_CBP_RD         0x04000000 ///< Use rate distortion optimization for cbp.
 | #define CODEC_FLAG_CBP_RD         0x04000000 ///< Use rate distortion optimization for cbp.
 | ||||||
| #define CODEC_FLAG_QP_RD          0x08000000 ///< Use rate distortion optimization for qp selectioon.
 | #define CODEC_FLAG_QP_RD          0x08000000 ///< Use rate distortion optimization for qp selectioon.
 | ||||||
|  | |||||||
| @ -425,6 +425,20 @@ int ff_h264_decode_seq_parameter_set(H264Context *h){ | |||||||
|         sps->crop_right = get_ue_golomb(&s->gb); |         sps->crop_right = get_ue_golomb(&s->gb); | ||||||
|         sps->crop_top   = get_ue_golomb(&s->gb); |         sps->crop_top   = get_ue_golomb(&s->gb); | ||||||
|         sps->crop_bottom= get_ue_golomb(&s->gb); |         sps->crop_bottom= get_ue_golomb(&s->gb); | ||||||
|  |         if (h->s.avctx->flags2 & CODEC_FLAG2_IGNORE_CROP) { | ||||||
|  |             av_log(h->s.avctx, AV_LOG_DEBUG, | ||||||
|  |                    "discarding sps cropping, " | ||||||
|  |                    "original values are l:%u r:%u t:%u b:%u\n", | ||||||
|  |                    sps->crop_left, | ||||||
|  |                    sps->crop_right, | ||||||
|  |                    sps->crop_top, | ||||||
|  |                    sps->crop_bottom); | ||||||
|  | 
 | ||||||
|  |             sps->crop_left   = | ||||||
|  |             sps->crop_right  = | ||||||
|  |             sps->crop_top    = | ||||||
|  |             sps->crop_bottom = 0; | ||||||
|  |         } | ||||||
|         if(sps->crop_left || sps->crop_top){ |         if(sps->crop_left || sps->crop_top){ | ||||||
|             av_log(h->s.avctx, AV_LOG_ERROR, "insane cropping not completely supported, this could look slightly wrong ...\n"); |             av_log(h->s.avctx, AV_LOG_ERROR, "insane cropping not completely supported, this could look slightly wrong ...\n"); | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -76,6 +76,7 @@ static const AVOption options[]={ | |||||||
| {"sgop", "Deprecated, use mpegvideo private options instead", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG2_STRICT_GOP }, INT_MIN, INT_MAX, V|E, "flags2"}, | {"sgop", "Deprecated, use mpegvideo private options instead", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG2_STRICT_GOP }, INT_MIN, INT_MAX, V|E, "flags2"}, | ||||||
| #endif | #endif | ||||||
| {"noout", "skip bitstream encoding", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG2_NO_OUTPUT }, INT_MIN, INT_MAX, V|E, "flags2"}, | {"noout", "skip bitstream encoding", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG2_NO_OUTPUT }, INT_MIN, INT_MAX, V|E, "flags2"}, | ||||||
|  | {"ignorecrop", "ignore cropping information from sps", 1, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG2_IGNORE_CROP }, INT_MIN, INT_MAX, V|D, "flags2"}, | ||||||
| {"local_header", "place global headers at every keyframe instead of in extradata", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG2_LOCAL_HEADER }, INT_MIN, INT_MAX, V|E, "flags2"}, | {"local_header", "place global headers at every keyframe instead of in extradata", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG2_LOCAL_HEADER }, INT_MIN, INT_MAX, V|E, "flags2"}, | ||||||
| #if FF_API_SUB_ID | #if FF_API_SUB_ID | ||||||
| {"sub_id", NULL, OFFSET(sub_id), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, | {"sub_id", NULL, OFFSET(sub_id), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, | ||||||
|  | |||||||
| @ -27,7 +27,7 @@ | |||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| #define LIBAVCODEC_VERSION_MAJOR 54 | #define LIBAVCODEC_VERSION_MAJOR 54 | ||||||
| #define LIBAVCODEC_VERSION_MINOR 40 | #define LIBAVCODEC_VERSION_MINOR 41 | ||||||
| #define LIBAVCODEC_VERSION_MICRO  0 | #define LIBAVCODEC_VERSION_MICRO  0 | ||||||
| 
 | 
 | ||||||
| #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user