Re: [FFmpeg-devel] [PATCH] avutil: add API for mb types.
On Sun, Nov 12, 2017 at 05:18:09PM +, Rostislav Pehlivanov wrote: > On 12 November 2017 at 16:42, Michael Niedermayer> wrote: > > > On Sun, Nov 12, 2017 at 04:21:15PM +, Rostislav Pehlivanov wrote: > > > On 12 November 2017 at 15:59, Michael Niedermayer > > > > > wrote: > > > > > > > This is based on motion_type.h > > > > > > > > TODO: docs & split into a commit per lib > > > > Signed-off-by: Michael Niedermayer > > > > --- > > > > libavcodec/avcodec.h | 4 ++ > > > > libavcodec/options_table.h | 1 + > > > > libavutil/block_type.h | 107 ++ > > > > +++ > > > > libavutil/frame.h | 14 ++ > > > > 4 files changed, 126 insertions(+) > > > > create mode 100644 libavutil/block_type.h > > > > > > > > diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h > > > > index 15ca871b59..1a49fa0a9a 100644 > > > > --- a/libavcodec/avcodec.h > > > > +++ b/libavcodec/avcodec.h > > > > @@ -923,6 +923,10 @@ typedef struct RcOverride{ > > > > * Show all frames before the first keyframe > > > > */ > > > > #define AV_CODEC_FLAG2_SHOW_ALL (1 << 22) > > > > +/** > > > > + * Export block types through frame side data > > > > + */ > > > > +#define AV_CODEC_FLAG2_EXPORT_BLOCKS (1 << 27) > > > > /** > > > > * Export motion vectors through frame side data > > > > */ > > > > diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h > > > > index d89f58d540..0b86b4d0fb 100644 > > > > --- a/libavcodec/options_table.h > > > > +++ b/libavcodec/options_table.h > > > > @@ -74,6 +74,7 @@ static const AVOption avcodec_options[] = { > > > > {"chunks", "Frame data might be split into multiple chunks", 0, > > > > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_CHUNKS }, INT_MIN, INT_MAX, > > V|D, > > > > "flags2"}, > > > > {"showall", "Show all frames before the first keyframe", 0, > > > > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SHOW_ALL }, INT_MIN, INT_MAX, > > > > V|D, "flags2"}, > > > > {"export_mvs", "export motion vectors through frame side data", 0, > > > > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_EXPORT_MVS}, INT_MIN, > > INT_MAX, > > > > V|D, "flags2"}, > > > > +{"export_blocks", "export block types through frame side data", 0, > > > > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_EXPORT_BLOCKS}, INT_MIN, > > INT_MAX, > > > > V|D, "flags2"}, > > > > {"skip_manual", "do not skip samples and export skip information as > > frame > > > > side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SKIP_MANUAL}, > > > > INT_MIN, INT_MAX, V|D, "flags2"}, > > > > {"ass_ro_flush_noop", "do not reset ASS ReadOrder field on flush", 0, > > > > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_RO_FLUSH_NOOP}, INT_MIN, > > INT_MAX, > > > > S|D, "flags2"}, > > > > {"time_base", NULL, OFFSET(time_base), AV_OPT_TYPE_RATIONAL, {.dbl = > > 0}, > > > > 0, INT_MAX}, > > > > diff --git a/libavutil/block_type.h b/libavutil/block_type.h > > > > new file mode 100644 > > > > index 00..3f53f1d082 > > > > --- /dev/null > > > > +++ b/libavutil/block_type.h > > > > @@ -0,0 +1,107 @@ > > > > +/* > > > > + * This file is part of FFmpeg. > > > > + * > > > > + * FFmpeg is free software; you can redistribute it and/or > > > > + * modify it under the terms of the GNU Lesser General Public > > > > + * License as published by the Free Software Foundation; either > > > > + * version 2.1 of the License, or (at your option) any later version. > > > > + * > > > > + * FFmpeg is distributed in the hope that it will be useful, > > > > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > > > > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > > > > + * Lesser General Public License for more details. > > > > + * > > > > + * You should have received a copy of the GNU Lesser General Public > > > > + * License along with FFmpeg; if not, write to the Free Software > > > > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA > > > > 02110-1301 USA > > > > + */ > > > > + > > > > +#ifndef AVUTIL_BLOCK_TYPE_H > > > > +#define AVUTIL_BLOCK_TYPE_H > > > > + > > > > +#include > > > > + > > > > + > > > > +typedef struct AVBlockType { > > > > +/** > > > > + * Block type. > > > > + * 1: Prediction (this can be spatial prediction or motion > > > > compensation for example) > > > > + * 2: Transform > > > > + * 3: Residual > > > > + * 4: Filter > > > > + * 5: Metadata > > > > + * > > > > + * Multiple Filter, Transform and prediction blocks are allowed, > > for > > > > example > > > > + * for bidirectional motion compensation. Multiple residuals are > > > > allowed, for > > > > + * example DC and AC residual. > > > > + */ > > > > +uint8_t type; > > > > +/** > > > > + * Bitmask that lists which planes (for example: > > > > Y:1,Cb:2,Cr:4,Alpha:8) > > > > + * this block applies to. > > > > + */ > > > > +
Re: [FFmpeg-devel] [PATCH] avutil: add API for mb types.
Hi, On Sun, Nov 12, 2017 at 11:42 AM, Michael Niedermayer < mich...@niedermayer.cc> wrote: > On Sun, Nov 12, 2017 at 04:21:15PM +, Rostislav Pehlivanov wrote: > > On 12 November 2017 at 15:59, Michael Niedermayer> > > wrote: > > > > > This is based on motion_type.h > > > > > > TODO: docs & split into a commit per lib > > > Signed-off-by: Michael Niedermayer > > > --- > > > libavcodec/avcodec.h | 4 ++ > > > libavcodec/options_table.h | 1 + > > > libavutil/block_type.h | 107 ++ > > > +++ > > > libavutil/frame.h | 14 ++ > > > 4 files changed, 126 insertions(+) > > > create mode 100644 libavutil/block_type.h > > > > > > diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h > > > index 15ca871b59..1a49fa0a9a 100644 > > > --- a/libavcodec/avcodec.h > > > +++ b/libavcodec/avcodec.h > > > @@ -923,6 +923,10 @@ typedef struct RcOverride{ > > > * Show all frames before the first keyframe > > > */ > > > #define AV_CODEC_FLAG2_SHOW_ALL (1 << 22) > > > +/** > > > + * Export block types through frame side data > > > + */ > > > +#define AV_CODEC_FLAG2_EXPORT_BLOCKS (1 << 27) > > > /** > > > * Export motion vectors through frame side data > > > */ > > > diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h > > > index d89f58d540..0b86b4d0fb 100644 > > > --- a/libavcodec/options_table.h > > > +++ b/libavcodec/options_table.h > > > @@ -74,6 +74,7 @@ static const AVOption avcodec_options[] = { > > > {"chunks", "Frame data might be split into multiple chunks", 0, > > > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_CHUNKS }, INT_MIN, INT_MAX, > V|D, > > > "flags2"}, > > > {"showall", "Show all frames before the first keyframe", 0, > > > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SHOW_ALL }, INT_MIN, INT_MAX, > > > V|D, "flags2"}, > > > {"export_mvs", "export motion vectors through frame side data", 0, > > > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_EXPORT_MVS}, INT_MIN, > INT_MAX, > > > V|D, "flags2"}, > > > +{"export_blocks", "export block types through frame side data", 0, > > > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_EXPORT_BLOCKS}, INT_MIN, > INT_MAX, > > > V|D, "flags2"}, > > > {"skip_manual", "do not skip samples and export skip information as > frame > > > side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SKIP_MANUAL}, > > > INT_MIN, INT_MAX, V|D, "flags2"}, > > > {"ass_ro_flush_noop", "do not reset ASS ReadOrder field on flush", 0, > > > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_RO_FLUSH_NOOP}, INT_MIN, > INT_MAX, > > > S|D, "flags2"}, > > > {"time_base", NULL, OFFSET(time_base), AV_OPT_TYPE_RATIONAL, {.dbl = > 0}, > > > 0, INT_MAX}, > > > diff --git a/libavutil/block_type.h b/libavutil/block_type.h > > > new file mode 100644 > > > index 00..3f53f1d082 > > > --- /dev/null > > > +++ b/libavutil/block_type.h > > > @@ -0,0 +1,107 @@ > > > +/* > > > + * This file is part of FFmpeg. > > > + * > > > + * FFmpeg is free software; you can redistribute it and/or > > > + * modify it under the terms of the GNU Lesser General Public > > > + * License as published by the Free Software Foundation; either > > > + * version 2.1 of the License, or (at your option) any later version. > > > + * > > > + * FFmpeg is distributed in the hope that it will be useful, > > > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > > > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > > > + * Lesser General Public License for more details. > > > + * > > > + * You should have received a copy of the GNU Lesser General Public > > > + * License along with FFmpeg; if not, write to the Free Software > > > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA > > > 02110-1301 USA > > > + */ > > > + > > > +#ifndef AVUTIL_BLOCK_TYPE_H > > > +#define AVUTIL_BLOCK_TYPE_H > > > + > > > +#include > > > + > > > + > > > +typedef struct AVBlockType { > > > +/** > > > + * Block type. > > > + * 1: Prediction (this can be spatial prediction or motion > > > compensation for example) > > > + * 2: Transform > > > + * 3: Residual > > > + * 4: Filter > > > + * 5: Metadata > > > + * > > > + * Multiple Filter, Transform and prediction blocks are allowed, > for > > > example > > > + * for bidirectional motion compensation. Multiple residuals are > > > allowed, for > > > + * example DC and AC residual. > > > + */ > > > +uint8_t type; > > > +/** > > > + * Bitmask that lists which planes (for example: > > > Y:1,Cb:2,Cr:4,Alpha:8) > > > + * this block applies to. > > > + */ > > > +uint8_t plane_mask; > > > +/** > > > + * The field (top:1, bottom:2) this block applies to. > > > + */ > > > +uint8_t field_mask; > > > +uint8_t name[16]; > > > +/** > > > + * Left Top corner position. This can be outside of the vissible > > > frame. > > > + */ > > > +
Re: [FFmpeg-devel] [PATCH] avutil: add API for mb types.
On 12 November 2017 at 16:42, Michael Niedermayerwrote: > On Sun, Nov 12, 2017 at 04:21:15PM +, Rostislav Pehlivanov wrote: > > On 12 November 2017 at 15:59, Michael Niedermayer > > > wrote: > > > > > This is based on motion_type.h > > > > > > TODO: docs & split into a commit per lib > > > Signed-off-by: Michael Niedermayer > > > --- > > > libavcodec/avcodec.h | 4 ++ > > > libavcodec/options_table.h | 1 + > > > libavutil/block_type.h | 107 ++ > > > +++ > > > libavutil/frame.h | 14 ++ > > > 4 files changed, 126 insertions(+) > > > create mode 100644 libavutil/block_type.h > > > > > > diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h > > > index 15ca871b59..1a49fa0a9a 100644 > > > --- a/libavcodec/avcodec.h > > > +++ b/libavcodec/avcodec.h > > > @@ -923,6 +923,10 @@ typedef struct RcOverride{ > > > * Show all frames before the first keyframe > > > */ > > > #define AV_CODEC_FLAG2_SHOW_ALL (1 << 22) > > > +/** > > > + * Export block types through frame side data > > > + */ > > > +#define AV_CODEC_FLAG2_EXPORT_BLOCKS (1 << 27) > > > /** > > > * Export motion vectors through frame side data > > > */ > > > diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h > > > index d89f58d540..0b86b4d0fb 100644 > > > --- a/libavcodec/options_table.h > > > +++ b/libavcodec/options_table.h > > > @@ -74,6 +74,7 @@ static const AVOption avcodec_options[] = { > > > {"chunks", "Frame data might be split into multiple chunks", 0, > > > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_CHUNKS }, INT_MIN, INT_MAX, > V|D, > > > "flags2"}, > > > {"showall", "Show all frames before the first keyframe", 0, > > > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SHOW_ALL }, INT_MIN, INT_MAX, > > > V|D, "flags2"}, > > > {"export_mvs", "export motion vectors through frame side data", 0, > > > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_EXPORT_MVS}, INT_MIN, > INT_MAX, > > > V|D, "flags2"}, > > > +{"export_blocks", "export block types through frame side data", 0, > > > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_EXPORT_BLOCKS}, INT_MIN, > INT_MAX, > > > V|D, "flags2"}, > > > {"skip_manual", "do not skip samples and export skip information as > frame > > > side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SKIP_MANUAL}, > > > INT_MIN, INT_MAX, V|D, "flags2"}, > > > {"ass_ro_flush_noop", "do not reset ASS ReadOrder field on flush", 0, > > > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_RO_FLUSH_NOOP}, INT_MIN, > INT_MAX, > > > S|D, "flags2"}, > > > {"time_base", NULL, OFFSET(time_base), AV_OPT_TYPE_RATIONAL, {.dbl = > 0}, > > > 0, INT_MAX}, > > > diff --git a/libavutil/block_type.h b/libavutil/block_type.h > > > new file mode 100644 > > > index 00..3f53f1d082 > > > --- /dev/null > > > +++ b/libavutil/block_type.h > > > @@ -0,0 +1,107 @@ > > > +/* > > > + * This file is part of FFmpeg. > > > + * > > > + * FFmpeg is free software; you can redistribute it and/or > > > + * modify it under the terms of the GNU Lesser General Public > > > + * License as published by the Free Software Foundation; either > > > + * version 2.1 of the License, or (at your option) any later version. > > > + * > > > + * FFmpeg is distributed in the hope that it will be useful, > > > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > > > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > > > + * Lesser General Public License for more details. > > > + * > > > + * You should have received a copy of the GNU Lesser General Public > > > + * License along with FFmpeg; if not, write to the Free Software > > > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA > > > 02110-1301 USA > > > + */ > > > + > > > +#ifndef AVUTIL_BLOCK_TYPE_H > > > +#define AVUTIL_BLOCK_TYPE_H > > > + > > > +#include > > > + > > > + > > > +typedef struct AVBlockType { > > > +/** > > > + * Block type. > > > + * 1: Prediction (this can be spatial prediction or motion > > > compensation for example) > > > + * 2: Transform > > > + * 3: Residual > > > + * 4: Filter > > > + * 5: Metadata > > > + * > > > + * Multiple Filter, Transform and prediction blocks are allowed, > for > > > example > > > + * for bidirectional motion compensation. Multiple residuals are > > > allowed, for > > > + * example DC and AC residual. > > > + */ > > > +uint8_t type; > > > +/** > > > + * Bitmask that lists which planes (for example: > > > Y:1,Cb:2,Cr:4,Alpha:8) > > > + * this block applies to. > > > + */ > > > +uint8_t plane_mask; > > > +/** > > > + * The field (top:1, bottom:2) this block applies to. > > > + */ > > > +uint8_t field_mask; > > > +uint8_t name[16]; > > > +/** > > > + * Left Top corner position. This can be outside of the vissible > > > frame. > > > + */ > > > +int32_t
Re: [FFmpeg-devel] [PATCH] avutil: add API for mb types.
Le duodi 22 brumaire, an CCXXVI, Michael Niedermayer a écrit : > the codec id integer would make this depend on libavcodec ABI, > thats a problem Merge the libs and be done with it. Regards, -- Nicolas George signature.asc Description: Digital signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] avutil: add API for mb types.
On Sun, Nov 12, 2017 at 04:21:15PM +, Rostislav Pehlivanov wrote: > On 12 November 2017 at 15:59, Michael Niedermayer> wrote: > > > This is based on motion_type.h > > > > TODO: docs & split into a commit per lib > > Signed-off-by: Michael Niedermayer > > --- > > libavcodec/avcodec.h | 4 ++ > > libavcodec/options_table.h | 1 + > > libavutil/block_type.h | 107 ++ > > +++ > > libavutil/frame.h | 14 ++ > > 4 files changed, 126 insertions(+) > > create mode 100644 libavutil/block_type.h > > > > diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h > > index 15ca871b59..1a49fa0a9a 100644 > > --- a/libavcodec/avcodec.h > > +++ b/libavcodec/avcodec.h > > @@ -923,6 +923,10 @@ typedef struct RcOverride{ > > * Show all frames before the first keyframe > > */ > > #define AV_CODEC_FLAG2_SHOW_ALL (1 << 22) > > +/** > > + * Export block types through frame side data > > + */ > > +#define AV_CODEC_FLAG2_EXPORT_BLOCKS (1 << 27) > > /** > > * Export motion vectors through frame side data > > */ > > diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h > > index d89f58d540..0b86b4d0fb 100644 > > --- a/libavcodec/options_table.h > > +++ b/libavcodec/options_table.h > > @@ -74,6 +74,7 @@ static const AVOption avcodec_options[] = { > > {"chunks", "Frame data might be split into multiple chunks", 0, > > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_CHUNKS }, INT_MIN, INT_MAX, V|D, > > "flags2"}, > > {"showall", "Show all frames before the first keyframe", 0, > > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SHOW_ALL }, INT_MIN, INT_MAX, > > V|D, "flags2"}, > > {"export_mvs", "export motion vectors through frame side data", 0, > > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_EXPORT_MVS}, INT_MIN, INT_MAX, > > V|D, "flags2"}, > > +{"export_blocks", "export block types through frame side data", 0, > > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_EXPORT_BLOCKS}, INT_MIN, INT_MAX, > > V|D, "flags2"}, > > {"skip_manual", "do not skip samples and export skip information as frame > > side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SKIP_MANUAL}, > > INT_MIN, INT_MAX, V|D, "flags2"}, > > {"ass_ro_flush_noop", "do not reset ASS ReadOrder field on flush", 0, > > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_RO_FLUSH_NOOP}, INT_MIN, INT_MAX, > > S|D, "flags2"}, > > {"time_base", NULL, OFFSET(time_base), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, > > 0, INT_MAX}, > > diff --git a/libavutil/block_type.h b/libavutil/block_type.h > > new file mode 100644 > > index 00..3f53f1d082 > > --- /dev/null > > +++ b/libavutil/block_type.h > > @@ -0,0 +1,107 @@ > > +/* > > + * This file is part of FFmpeg. > > + * > > + * FFmpeg is free software; you can redistribute it and/or > > + * modify it under the terms of the GNU Lesser General Public > > + * License as published by the Free Software Foundation; either > > + * version 2.1 of the License, or (at your option) any later version. > > + * > > + * FFmpeg is distributed in the hope that it will be useful, > > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > > + * Lesser General Public License for more details. > > + * > > + * You should have received a copy of the GNU Lesser General Public > > + * License along with FFmpeg; if not, write to the Free Software > > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA > > 02110-1301 USA > > + */ > > + > > +#ifndef AVUTIL_BLOCK_TYPE_H > > +#define AVUTIL_BLOCK_TYPE_H > > + > > +#include > > + > > + > > +typedef struct AVBlockType { > > +/** > > + * Block type. > > + * 1: Prediction (this can be spatial prediction or motion > > compensation for example) > > + * 2: Transform > > + * 3: Residual > > + * 4: Filter > > + * 5: Metadata > > + * > > + * Multiple Filter, Transform and prediction blocks are allowed, for > > example > > + * for bidirectional motion compensation. Multiple residuals are > > allowed, for > > + * example DC and AC residual. > > + */ > > +uint8_t type; > > +/** > > + * Bitmask that lists which planes (for example: > > Y:1,Cb:2,Cr:4,Alpha:8) > > + * this block applies to. > > + */ > > +uint8_t plane_mask; > > +/** > > + * The field (top:1, bottom:2) this block applies to. > > + */ > > +uint8_t field_mask; > > +uint8_t name[16]; > > +/** > > + * Left Top corner position. This can be outside of the vissible > > frame. > > + */ > > +int32_t x, y; > > +/** > > + * Width and height of the block. > > + */ > > +uint16_t w, h; > > +/** > > + * Number identifying the slice the Block is in. > > + */ > > +uint16_t slice_num; > > +/** > > + * Location in bits where the block related information is stored. > > can be -1 > > + */ > > +
Re: [FFmpeg-devel] [PATCH] avutil: add API for mb types.
On 12 November 2017 at 16:21, Rostislav Pehlivanovwrote: > > > On 12 November 2017 at 15:59, Michael Niedermayer > wrote: > >> This is based on motion_type.h >> >> TODO: docs & split into a commit per lib >> Signed-off-by: Michael Niedermayer >> --- >> libavcodec/avcodec.h | 4 ++ >> libavcodec/options_table.h | 1 + >> libavutil/block_type.h | 107 ++ >> +++ >> libavutil/frame.h | 14 ++ >> 4 files changed, 126 insertions(+) >> create mode 100644 libavutil/block_type.h >> >> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h >> index 15ca871b59..1a49fa0a9a 100644 >> --- a/libavcodec/avcodec.h >> +++ b/libavcodec/avcodec.h >> @@ -923,6 +923,10 @@ typedef struct RcOverride{ >> * Show all frames before the first keyframe >> */ >> #define AV_CODEC_FLAG2_SHOW_ALL (1 << 22) >> +/** >> + * Export block types through frame side data >> + */ >> +#define AV_CODEC_FLAG2_EXPORT_BLOCKS (1 << 27) >> /** >> * Export motion vectors through frame side data >> */ >> diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h >> index d89f58d540..0b86b4d0fb 100644 >> --- a/libavcodec/options_table.h >> +++ b/libavcodec/options_table.h >> @@ -74,6 +74,7 @@ static const AVOption avcodec_options[] = { >> {"chunks", "Frame data might be split into multiple chunks", 0, >> AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_CHUNKS }, INT_MIN, INT_MAX, V|D, >> "flags2"}, >> {"showall", "Show all frames before the first keyframe", 0, >> AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SHOW_ALL }, INT_MIN, INT_MAX, >> V|D, "flags2"}, >> {"export_mvs", "export motion vectors through frame side data", 0, >> AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_EXPORT_MVS}, INT_MIN, INT_MAX, >> V|D, "flags2"}, >> +{"export_blocks", "export block types through frame side data", 0, >> AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_EXPORT_BLOCKS}, INT_MIN, INT_MAX, >> V|D, "flags2"}, >> {"skip_manual", "do not skip samples and export skip information as >> frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = >> AV_CODEC_FLAG2_SKIP_MANUAL}, INT_MIN, INT_MAX, V|D, "flags2"}, >> {"ass_ro_flush_noop", "do not reset ASS ReadOrder field on flush", 0, >> AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_RO_FLUSH_NOOP}, INT_MIN, INT_MAX, >> S|D, "flags2"}, >> {"time_base", NULL, OFFSET(time_base), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, >> 0, INT_MAX}, >> diff --git a/libavutil/block_type.h b/libavutil/block_type.h >> new file mode 100644 >> index 00..3f53f1d082 >> --- /dev/null >> +++ b/libavutil/block_type.h >> @@ -0,0 +1,107 @@ >> +/* >> + * This file is part of FFmpeg. >> + * >> + * FFmpeg is free software; you can redistribute it and/or >> + * modify it under the terms of the GNU Lesser General Public >> + * License as published by the Free Software Foundation; either >> + * version 2.1 of the License, or (at your option) any later version. >> + * >> + * FFmpeg is distributed in the hope that it will be useful, >> + * but WITHOUT ANY WARRANTY; without even the implied warranty of >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >> + * Lesser General Public License for more details. >> + * >> + * You should have received a copy of the GNU Lesser General Public >> + * License along with FFmpeg; if not, write to the Free Software >> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA >> 02110-1301 USA >> + */ >> + >> +#ifndef AVUTIL_BLOCK_TYPE_H >> +#define AVUTIL_BLOCK_TYPE_H >> + >> +#include >> + >> + >> +typedef struct AVBlockType { >> +/** >> + * Block type. >> + * 1: Prediction (this can be spatial prediction or motion >> compensation for example) >> + * 2: Transform >> + * 3: Residual >> + * 4: Filter >> + * 5: Metadata >> + * >> + * Multiple Filter, Transform and prediction blocks are allowed, for >> example >> + * for bidirectional motion compensation. Multiple residuals are >> allowed, for >> + * example DC and AC residual. >> + */ >> +uint8_t type; >> +/** >> + * Bitmask that lists which planes (for example: >> Y:1,Cb:2,Cr:4,Alpha:8) >> + * this block applies to. >> + */ >> +uint8_t plane_mask; >> +/** >> + * The field (top:1, bottom:2) this block applies to. >> + */ >> +uint8_t field_mask; >> +uint8_t name[16]; >> +/** >> + * Left Top corner position. This can be outside of the vissible >> frame. >> + */ >> +int32_t x, y; >> +/** >> + * Width and height of the block. >> + */ >> +uint16_t w, h; >> +/** >> + * Number identifying the slice the Block is in. >> + */ >> +uint16_t slice_num; >> +/** >> + * Location in bits where the block related information is stored. >> can be -1 >> + */ >> +uint32_t block_index, block_bits; >> + >> +/** >> + * Main Direction, 0 is horizontal, 48 is vertical, >> + *
Re: [FFmpeg-devel] [PATCH] avutil: add API for mb types.
On 12 November 2017 at 15:59, Michael Niedermayerwrote: > This is based on motion_type.h > > TODO: docs & split into a commit per lib > Signed-off-by: Michael Niedermayer > --- > libavcodec/avcodec.h | 4 ++ > libavcodec/options_table.h | 1 + > libavutil/block_type.h | 107 ++ > +++ > libavutil/frame.h | 14 ++ > 4 files changed, 126 insertions(+) > create mode 100644 libavutil/block_type.h > > diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h > index 15ca871b59..1a49fa0a9a 100644 > --- a/libavcodec/avcodec.h > +++ b/libavcodec/avcodec.h > @@ -923,6 +923,10 @@ typedef struct RcOverride{ > * Show all frames before the first keyframe > */ > #define AV_CODEC_FLAG2_SHOW_ALL (1 << 22) > +/** > + * Export block types through frame side data > + */ > +#define AV_CODEC_FLAG2_EXPORT_BLOCKS (1 << 27) > /** > * Export motion vectors through frame side data > */ > diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h > index d89f58d540..0b86b4d0fb 100644 > --- a/libavcodec/options_table.h > +++ b/libavcodec/options_table.h > @@ -74,6 +74,7 @@ static const AVOption avcodec_options[] = { > {"chunks", "Frame data might be split into multiple chunks", 0, > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_CHUNKS }, INT_MIN, INT_MAX, V|D, > "flags2"}, > {"showall", "Show all frames before the first keyframe", 0, > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SHOW_ALL }, INT_MIN, INT_MAX, > V|D, "flags2"}, > {"export_mvs", "export motion vectors through frame side data", 0, > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_EXPORT_MVS}, INT_MIN, INT_MAX, > V|D, "flags2"}, > +{"export_blocks", "export block types through frame side data", 0, > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_EXPORT_BLOCKS}, INT_MIN, INT_MAX, > V|D, "flags2"}, > {"skip_manual", "do not skip samples and export skip information as frame > side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SKIP_MANUAL}, > INT_MIN, INT_MAX, V|D, "flags2"}, > {"ass_ro_flush_noop", "do not reset ASS ReadOrder field on flush", 0, > AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_RO_FLUSH_NOOP}, INT_MIN, INT_MAX, > S|D, "flags2"}, > {"time_base", NULL, OFFSET(time_base), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, > 0, INT_MAX}, > diff --git a/libavutil/block_type.h b/libavutil/block_type.h > new file mode 100644 > index 00..3f53f1d082 > --- /dev/null > +++ b/libavutil/block_type.h > @@ -0,0 +1,107 @@ > +/* > + * This file is part of FFmpeg. > + * > + * FFmpeg is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; either > + * version 2.1 of the License, or (at your option) any later version. > + * > + * FFmpeg is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with FFmpeg; if not, write to the Free Software > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA > 02110-1301 USA > + */ > + > +#ifndef AVUTIL_BLOCK_TYPE_H > +#define AVUTIL_BLOCK_TYPE_H > + > +#include > + > + > +typedef struct AVBlockType { > +/** > + * Block type. > + * 1: Prediction (this can be spatial prediction or motion > compensation for example) > + * 2: Transform > + * 3: Residual > + * 4: Filter > + * 5: Metadata > + * > + * Multiple Filter, Transform and prediction blocks are allowed, for > example > + * for bidirectional motion compensation. Multiple residuals are > allowed, for > + * example DC and AC residual. > + */ > +uint8_t type; > +/** > + * Bitmask that lists which planes (for example: > Y:1,Cb:2,Cr:4,Alpha:8) > + * this block applies to. > + */ > +uint8_t plane_mask; > +/** > + * The field (top:1, bottom:2) this block applies to. > + */ > +uint8_t field_mask; > +uint8_t name[16]; > +/** > + * Left Top corner position. This can be outside of the vissible > frame. > + */ > +int32_t x, y; > +/** > + * Width and height of the block. > + */ > +uint16_t w, h; > +/** > + * Number identifying the slice the Block is in. > + */ > +uint16_t slice_num; > +/** > + * Location in bits where the block related information is stored. > can be -1 > + */ > +uint32_t block_index, block_bits; > + > +/** > + * Main Direction, 0 is horizontal, 48 is vertical, > + * values 0 to 95 follow clockwise direction. > + * 255 means that the block has no direction. > + * This represents the main direction of a transform, prediction or > filter > + */ > +uint8_t direction; > + >
[FFmpeg-devel] [PATCH] avutil: add API for mb types.
This is based on motion_type.h TODO: docs & split into a commit per lib Signed-off-by: Michael Niedermayer--- libavcodec/avcodec.h | 4 ++ libavcodec/options_table.h | 1 + libavutil/block_type.h | 107 + libavutil/frame.h | 14 ++ 4 files changed, 126 insertions(+) create mode 100644 libavutil/block_type.h diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 15ca871b59..1a49fa0a9a 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -923,6 +923,10 @@ typedef struct RcOverride{ * Show all frames before the first keyframe */ #define AV_CODEC_FLAG2_SHOW_ALL (1 << 22) +/** + * Export block types through frame side data + */ +#define AV_CODEC_FLAG2_EXPORT_BLOCKS (1 << 27) /** * Export motion vectors through frame side data */ diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h index d89f58d540..0b86b4d0fb 100644 --- a/libavcodec/options_table.h +++ b/libavcodec/options_table.h @@ -74,6 +74,7 @@ static const AVOption avcodec_options[] = { {"chunks", "Frame data might be split into multiple chunks", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_CHUNKS }, INT_MIN, INT_MAX, V|D, "flags2"}, {"showall", "Show all frames before the first keyframe", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SHOW_ALL }, INT_MIN, INT_MAX, V|D, "flags2"}, {"export_mvs", "export motion vectors through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_EXPORT_MVS}, INT_MIN, INT_MAX, V|D, "flags2"}, +{"export_blocks", "export block types through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_EXPORT_BLOCKS}, INT_MIN, INT_MAX, V|D, "flags2"}, {"skip_manual", "do not skip samples and export skip information as frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SKIP_MANUAL}, INT_MIN, INT_MAX, V|D, "flags2"}, {"ass_ro_flush_noop", "do not reset ASS ReadOrder field on flush", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_RO_FLUSH_NOOP}, INT_MIN, INT_MAX, S|D, "flags2"}, {"time_base", NULL, OFFSET(time_base), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, 0, INT_MAX}, diff --git a/libavutil/block_type.h b/libavutil/block_type.h new file mode 100644 index 00..3f53f1d082 --- /dev/null +++ b/libavutil/block_type.h @@ -0,0 +1,107 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVUTIL_BLOCK_TYPE_H +#define AVUTIL_BLOCK_TYPE_H + +#include + + +typedef struct AVBlockType { +/** + * Block type. + * 1: Prediction (this can be spatial prediction or motion compensation for example) + * 2: Transform + * 3: Residual + * 4: Filter + * 5: Metadata + * + * Multiple Filter, Transform and prediction blocks are allowed, for example + * for bidirectional motion compensation. Multiple residuals are allowed, for + * example DC and AC residual. + */ +uint8_t type; +/** + * Bitmask that lists which planes (for example: Y:1,Cb:2,Cr:4,Alpha:8) + * this block applies to. + */ +uint8_t plane_mask; +/** + * The field (top:1, bottom:2) this block applies to. + */ +uint8_t field_mask; +uint8_t name[16]; +/** + * Left Top corner position. This can be outside of the vissible frame. + */ +int32_t x, y; +/** + * Width and height of the block. + */ +uint16_t w, h; +/** + * Number identifying the slice the Block is in. + */ +uint16_t slice_num; +/** + * Location in bits where the block related information is stored. can be -1 + */ +uint32_t block_index, block_bits; + +/** + * Main Direction, 0 is horizontal, 48 is vertical, + * values 0 to 95 follow clockwise direction. + * 255 means that the block has no direction. + * This represents the main direction of a transform, prediction or filter + */ +uint8_t direction; + +/** + * Quantization parameter, a value of 0x8000 means lossless, 0x7FFF means not applicable + * for MC prediction this is the precission of the motion vector. + */ +int16_t qp; + +/** + * Where the prediction comes from; negative value when it comes + * from the past, positive value when it comes from the
[FFmpeg-devel] [PATCH] avutil: add API for mb types.
This is based on motion_type.h Signed-off-by: Michael Niedermayer--- libavutil/block_type.h | 107 + 1 file changed, 107 insertions(+) create mode 100644 libavutil/block_type.h diff --git a/libavutil/block_type.h b/libavutil/block_type.h new file mode 100644 index 00..3f53f1d082 --- /dev/null +++ b/libavutil/block_type.h @@ -0,0 +1,107 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVUTIL_BLOCK_TYPE_H +#define AVUTIL_BLOCK_TYPE_H + +#include + + +typedef struct AVBlockType { +/** + * Block type. + * 1: Prediction (this can be spatial prediction or motion compensation for example) + * 2: Transform + * 3: Residual + * 4: Filter + * 5: Metadata + * + * Multiple Filter, Transform and prediction blocks are allowed, for example + * for bidirectional motion compensation. Multiple residuals are allowed, for + * example DC and AC residual. + */ +uint8_t type; +/** + * Bitmask that lists which planes (for example: Y:1,Cb:2,Cr:4,Alpha:8) + * this block applies to. + */ +uint8_t plane_mask; +/** + * The field (top:1, bottom:2) this block applies to. + */ +uint8_t field_mask; +uint8_t name[16]; +/** + * Left Top corner position. This can be outside of the vissible frame. + */ +int32_t x, y; +/** + * Width and height of the block. + */ +uint16_t w, h; +/** + * Number identifying the slice the Block is in. + */ +uint16_t slice_num; +/** + * Location in bits where the block related information is stored. can be -1 + */ +uint32_t block_index, block_bits; + +/** + * Main Direction, 0 is horizontal, 48 is vertical, + * values 0 to 95 follow clockwise direction. + * 255 means that the block has no direction. + * This represents the main direction of a transform, prediction or filter + */ +uint8_t direction; + +/** + * Quantization parameter, a value of 0x8000 means lossless, 0x7FFF means not applicable + * for MC prediction this is the precission of the motion vector. + */ +int16_t qp; + +/** + * Where the prediction comes from; negative value when it comes + * from the past, positive value when it comes from the future. + * 0 For Intra. + */ +int32_t source; +/** + * Motion vector + * src_x = dst_x + motion_x / qp + * src_y = dst_y + motion_y / qp + */ +int32_t motion_x, motion_y; + +/** + * Extra flag information. + */ +uint64_t flags; +#define AV_BLOCK_TYPE_FLAG_INTERLACED 0x001///< Block is interlaced + +#define AV_BLOCK_TYPE_FLAG_LEAF 0x0001000///< Block is a leaf block, it is not further split +#define AV_BLOCK_TYPE_FLAG_ROOT 0x0002000///< Block is a root block, it is not contained in a larger block + +#define AV_BLOCK_TYPE_FLAG_CONCEALED 0x001///< Block has been replaced by error conclealment +#define AV_BLOCK_TYPE_FLAG_DAMAGED0x002///< Block has been damaged + +} AVBlockType; + +#endif /* AVUTIL_BLOCK_TYPE_H */ -- 2.15.0 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel