From: OvchinnikovDmitrii <ovchinnikov.dmitrii@gmail.com> To: ffmpeg-devel@ffmpeg.org Cc: OvchinnikovDmitrii <ovchinnikov.dmitrii@gmail.com> Subject: [FFmpeg-devel] [crop support for matroska demuxer, V4 1/3] libavcodec: Add crop related fields to structure AVCodecContext and AVCodecParameters. Date: Fri, 4 Nov 2022 15:13:34 +0100 Message-ID: <20221104141336.1812-1-ovchinnikov.dmitrii@gmail.com> (raw) --- libavcodec/avcodec.h | 35 +++++++++++++++++++++++++++++++++++ libavcodec/codec_par.h | 8 ++++++++ libavcodec/options_table.h | 4 ++++ 3 files changed, 47 insertions(+) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 3edd8e2636..57b340c24d 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -380,6 +380,19 @@ typedef struct RcOverride{ */ #define AV_GET_ENCODE_BUFFER_FLAG_REF (1 << 0) +/** +* Video decoding only. Certain container support cropping, meaning that +* only a sub-rectangle of the decoded frame is intended for display. +* Certain codec supports cropping as well.This option controls how +* cropping is handled by libavcodec when container cropping and +* codec cropping exist. +*/ +enum CONTAINER_CROPPING_POLICY_TYPE { + FF_CONTAINER_CROPPING_IGNORE = 0, + FF_CONTAINER_CROPPING_ADDITION, + FF_CONTAINER_CROPPING_OVERWRITE +}; + struct AVCodecInternal; /** @@ -2057,6 +2070,28 @@ typedef struct AVCodecContext { * The decoder can then override during decoding as needed. */ AVChannelLayout ch_layout; + + /* When set to 1 (the default), libavcodec will apply container cropping + * to codec cropping additionally. + * + * When set to 2, libavcodec will use container cropping to overwrite + * codec cropping (the final cropping uses container cropping parameters) + * + * When set to 0, libavcodec will ignore container cropping parameters + * (the final cropping uses codec cropping parameters) + * + * This field works with "apply_cropping". Only if apply_cropping is 1, this + * field works + */ + enum CONTAINER_CROPPING_POLICY_TYPE container_apply_cropping; + + /** + * The cropping parameters from container. + */ + int container_crop_top; + int container_crop_left; + int container_crop_bottom; + int container_crop_right; } AVCodecContext; /** diff --git a/libavcodec/codec_par.h b/libavcodec/codec_par.h index f51d27c590..cc0695689c 100644 --- a/libavcodec/codec_par.h +++ b/libavcodec/codec_par.h @@ -211,6 +211,14 @@ typedef struct AVCodecParameters { * Audio only. The channel layout and number of channels. */ AVChannelLayout ch_layout; + + /** + * The cropping parameters from container. + */ + int container_crop_top; + int container_crop_left; + int container_crop_bottom; + int container_crop_right; } AVCodecParameters; /** diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h index cd02f5096f..fd1ef21f90 100644 --- a/libavcodec/options_table.h +++ b/libavcodec/options_table.h @@ -401,6 +401,10 @@ static const AVOption avcodec_options[] = { {"allow_profile_mismatch", "attempt to decode anyway if HW accelerated decoder's supported profiles do not exactly match the stream", 0, AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH }, INT_MIN, INT_MAX, V | D, "hwaccel_flags"}, {"extra_hw_frames", "Number of extra hardware frames to allocate for the user", OFFSET(extra_hw_frames), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, V|D }, {"discard_damaged_percentage", "Percentage of damaged samples to discard a frame", OFFSET(discard_damaged_percentage), AV_OPT_TYPE_INT, {.i64 = 95 }, 0, 100, V|D }, +{ "container_apply_cropping", "ploicy using container cropping parameters", OFFSET(container_apply_cropping), AV_OPT_TYPE_INT64, {.i64 = FF_CONTAINER_CROPPING_ADDITION }, 0, 2, V | D, "container_apply_cropping" }, +{ "ignore", "ignore container cropping", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CONTAINER_CROPPING_IGNORE }, 0, 0, V | D, "container_apply_cropping" }, +{ "addition", "apply container cropping additionally to elementary stream cropping", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CONTAINER_CROPPING_ADDITION }, 0, 0, V | D, "container_apply_cropping" }, +{ "overwrite", "use container cropping to overwrite elementary stream cropping", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CONTAINER_CROPPING_OVERWRITE }, 0, 0, V | D, "container_apply_cropping" }, {NULL}, }; -- 2.30.0.windows.2 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next reply other threads:[~2022-11-04 14:13 UTC|newest] Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-11-04 14:13 OvchinnikovDmitrii [this message] 2022-11-04 14:13 ` [FFmpeg-devel] [crop support for matroska demuxer, V4 2/3] libavcodec: Public code to support container crop OvchinnikovDmitrii 2022-11-04 15:34 ` Michael Niedermayer 2022-11-23 14:44 ` Dmitrii Ovchinnikov 2022-11-24 23:07 ` Michael Niedermayer 2022-11-04 14:13 ` [FFmpeg-devel] [crop support for matroska demuxer, V4 3/3] libavformat\matroskadec.c: crop support for matroska demuxer OvchinnikovDmitrii 2022-12-20 15:37 [FFmpeg-devel] [crop support for matroska demuxer, V4 1/3] libavcodec: Add crop related fields to structure AVCodecContext and AVCodecParameters Dmitrii Ovchinnikov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20221104141336.1812-1-ovchinnikov.dmitrii@gmail.com \ --to=ovchinnikov.dmitrii@gmail.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git