Skip to content

Commit e1a0f2d

Browse files
committed
avcodec: add API for automatic handling of icc profiles
This functionally already exists, but as pointed out in #9672 and #9673, requiring users to manually include filters is clumsy, error-prone and hard to use together with tools like ffplay. To streamline ICC profile support, add a new AVCodecContext flag to globally enable reading and writing ICC profiles, automatically, for all appropriate media types. Note that this commit only includes the new API. The implementation is split off to separate commits for readability. Signed-off-by: Niklas Haas <[email protected]>
1 parent 61ffa23 commit e1a0f2d

File tree

5 files changed

+15
-1
lines changed

5 files changed

+15
-1
lines changed

doc/APIchanges

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ libavutil: 2021-04-27
1414

1515
API changes, most recent first:
1616

17+
2022-07-xx - xxxxxxxxx - lavc 59.40.100 - avcodec.h
18+
Add the AV_CODEC_FLAG2_ICC_PROFILES flag to AVCodecContext, to enable
19+
automatic reading and writing of embedded ICC profiles in image files.
20+
The "flags2" option now supports the corresponding flag "icc_profiles".
21+
1722
2022-07-xx - xxxxxxxxxx - lavu 57.30.100 - frame.h
1823
Add AVFrame.duration, deprecate AVFrame.pkt_duration.
1924

doc/codecs.texi

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -644,6 +644,8 @@ for codecs that support it. See also @file{doc/examples/export_mvs.c}.
644644
Do not skip samples and export skip information as frame side data.
645645
@item ass_ro_flush_noop
646646
Do not reset ASS ReadOrder field on flush.
647+
@item icc_profiles
648+
Generate/parse embedded ICC profiles from/to colorimetry tags.
647649
@end table
648650

649651
@item export_side_data @var{flags} (@emph{decoding/encoding,audio,video,subtitles})

libavcodec/avcodec.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,12 @@ typedef struct RcOverride{
331331
* Do not reset ASS ReadOrder field on flush (subtitles decoding)
332332
*/
333333
#define AV_CODEC_FLAG2_RO_FLUSH_NOOP (1 << 30)
334+
/**
335+
* Generate/parse ICC profiles on encode/decode, as appropriate for the type of
336+
* file. No effect on codecs which cannot contain embedded ICC profiles, or
337+
* when compiled without support for lcms2.
338+
*/
339+
#define AV_CODEC_FLAG2_ICC_PROFILES (1U << 31)
334340

335341
/* Unsupported options :
336342
* Syntax Arithmetic coding (SAC)

libavcodec/options_table.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ static const AVOption avcodec_options[] = {
8383
{"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"},
8484
{"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, A|D, "flags2"},
8585
{"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"},
86+
{"icc_profiles", "generate/parse embedded ICC profiles from/to colorimetry tags", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_ICC_PROFILES}, INT_MIN, INT_MAX, S|D, "flags2"},
8687
{"export_side_data", "Export metadata as side data", OFFSET(export_side_data), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT}, 0, UINT_MAX, A|V|S|D|E, "export_side_data"},
8788
{"mvs", "export motion vectors through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_MVS}, INT_MIN, INT_MAX, V|D, "export_side_data"},
8889
{"prft", "export Producer Reference Time through packet side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_PRFT}, INT_MIN, INT_MAX, A|V|S|E, "export_side_data"},

libavcodec/version.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929

3030
#include "version_major.h"
3131

32-
#define LIBAVCODEC_VERSION_MINOR 39
32+
#define LIBAVCODEC_VERSION_MINOR 40
3333
#define LIBAVCODEC_VERSION_MICRO 100
3434

3535
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \

0 commit comments

Comments
 (0)