From a84fb6e06f7f13e61b5dad0224fa392ebe65e294 Mon Sep 17 00:00:00 2001 From: Vittorio Giovara Date: Wed, 23 Jan 2013 12:26:59 +0100 Subject: [PATCH] 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 --- libavcodec/avcodec.h | 2 ++ libavcodec/h264_ps.c | 14 ++++++++++++++ libavcodec/options_table.h | 1 + libavcodec/version.h | 2 +- 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index e60119e8db..7a2477516d 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -657,6 +657,8 @@ typedef struct RcOverride{ #define CODEC_FLAG2_FAST 0x00000001 ///< Allow non spec compliant speedup tricks. #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_IGNORE_CROP 0x00010000 ///< Discard cropping information from SPS. + #if FF_API_MPV_GLOBAL_OPTS #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. diff --git a/libavcodec/h264_ps.c b/libavcodec/h264_ps.c index ff6c077ed3..63f371c80c 100644 --- a/libavcodec/h264_ps.c +++ b/libavcodec/h264_ps.c @@ -425,6 +425,20 @@ int ff_h264_decode_seq_parameter_set(H264Context *h){ sps->crop_right = get_ue_golomb(&s->gb); sps->crop_top = 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){ av_log(h->s.avctx, AV_LOG_ERROR, "insane cropping not completely supported, this could look slightly wrong ...\n"); } diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h index f2e83121a1..7d0795a580 100644 --- a/libavcodec/options_table.h +++ b/libavcodec/options_table.h @@ -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"}, #endif {"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"}, #if FF_API_SUB_ID {"sub_id", NULL, OFFSET(sub_id), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, diff --git a/libavcodec/version.h b/libavcodec/version.h index 62f2bcd842..80da6e2133 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -27,7 +27,7 @@ */ #define LIBAVCODEC_VERSION_MAJOR 54 -#define LIBAVCODEC_VERSION_MINOR 40 +#define LIBAVCODEC_VERSION_MINOR 41 #define LIBAVCODEC_VERSION_MICRO 0 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ -- GitLab