summaryrefslogtreecommitdiff
path: root/libavformat/vpcc.c
diff options
context:
space:
mode:
authorHendrik Leppkes <h.leppkes@gmail.com>2017-04-22 01:25:40 +0200
committerHendrik Leppkes <h.leppkes@gmail.com>2017-05-16 01:53:05 +0200
commit64ad44a3817a288168ba97f6c022160b940cd22e (patch)
tree5dad24334f5fd9e0e61cfbb122d5691b15c4963c /libavformat/vpcc.c
parent4c55144ee969a63bb5e469e3ebd7179b7b3616e8 (diff)
movenc/isom: update vpcC box to version 1.0 of the specification
This brings our generation of the vpcC box up to date to version 1.0 of the VP Codec ISO Media File Format Binding. Specifically, color/transfer properties are now written with values based on ISO/IEC 23001-8, which is the same reference specification the AVColor* enumerations are based on.
Diffstat (limited to 'libavformat/vpcc.c')
-rw-r--r--libavformat/vpcc.c55
1 files changed, 5 insertions, 50 deletions
diff --git a/libavformat/vpcc.c b/libavformat/vpcc.c
index 2390e1711c..df08de59a6 100644
--- a/libavformat/vpcc.c
+++ b/libavformat/vpcc.c
@@ -23,44 +23,6 @@
#include "libavutil/pixfmt.h"
#include "vpcc.h"
-enum VpxColorSpace
-{
- VPX_COLOR_SPACE_UNSPECIFIED = 0,
- VPX_COLOR_SPACE_BT601 = 1,
- VPX_COLOR_SPACE_BT709 = 2,
- VPX_COLOR_SPACE_SMPTE_170 = 3,
- VPX_COLOR_SPACE_SMPTE_240 = 4,
- VPX_COLOR_SPACE_BT2020_NCL = 5,
- VPX_COLOR_SPACE_BT2020_CL = 6,
- VPX_COLOR_SPACE_RGB = 7,
-};
-
-static int get_vpx_color_space(AVFormatContext *s,
- enum AVColorSpace color_space)
-{
- switch (color_space) {
- case AVCOL_SPC_RGB:
- return VPX_COLOR_SPACE_RGB;
- case AVCOL_SPC_BT709:
- return VPX_COLOR_SPACE_BT709;
- case AVCOL_SPC_UNSPECIFIED:
- return VPX_COLOR_SPACE_UNSPECIFIED;
- case AVCOL_SPC_BT470BG:
- return VPX_COLOR_SPACE_BT601;
- case AVCOL_SPC_SMPTE170M:
- return VPX_COLOR_SPACE_SMPTE_170;
- case AVCOL_SPC_SMPTE240M:
- return VPX_COLOR_SPACE_SMPTE_240;
- case AVCOL_SPC_BT2020_NCL:
- return VPX_COLOR_SPACE_BT2020_NCL;
- case AVCOL_SPC_BT2020_CL:
- return VPX_COLOR_SPACE_BT2020_CL;
- default:
- av_log(s, AV_LOG_ERROR, "Unsupported color space (%d)\n", color_space);
- return -1;
- }
-}
-
enum VPX_CHROMA_SUBSAMPLING
{
VPX_SUBSAMPLING_420_VERTICAL = 0,
@@ -100,12 +62,6 @@ static int get_bit_depth(AVFormatContext *s, enum AVPixelFormat pixel_format)
return desc->comp[0].depth;
}
-static int get_vpx_transfer_function(
- enum AVColorTransferCharacteristic transfer)
-{
- return transfer == AVCOL_TRC_SMPTEST2084;
-}
-
static int get_vpx_video_full_range_flag(enum AVColorRange color_range)
{
return color_range == AVCOL_RANGE_JPEG;
@@ -117,14 +73,12 @@ int ff_isom_write_vpcc(AVFormatContext *s, AVIOContext *pb,
int profile = par->profile;
int level = par->level == FF_LEVEL_UNKNOWN ? 0 : par->level;
int bit_depth = get_bit_depth(s, par->format);
- int vpx_color_space = get_vpx_color_space(s, par->color_space);
int vpx_chroma_subsampling =
get_vpx_chroma_subsampling(s, par->format, par->chroma_location);
- int vpx_transfer_function = get_vpx_transfer_function(par->color_trc);
int vpx_video_full_range_flag =
get_vpx_video_full_range_flag(par->color_range);
- if (bit_depth < 0 || vpx_color_space < 0 || vpx_chroma_subsampling < 0)
+ if (bit_depth < 0 || vpx_chroma_subsampling < 0)
return AVERROR_INVALIDDATA;
if (profile == FF_PROFILE_UNKNOWN) {
@@ -138,9 +92,10 @@ int ff_isom_write_vpcc(AVFormatContext *s, AVIOContext *pb,
avio_w8(pb, profile);
avio_w8(pb, level);
- avio_w8(pb, (bit_depth << 4) | vpx_color_space);
- avio_w8(pb, (vpx_chroma_subsampling << 4) | (vpx_transfer_function << 1) |
- vpx_video_full_range_flag);
+ avio_w8(pb, (bit_depth << 4) | (vpx_chroma_subsampling << 1) | vpx_video_full_range_flag);
+ avio_w8(pb, par->color_primaries);
+ avio_w8(pb, par->color_trc);
+ avio_w8(pb, par->color_space);
// vp9 does not have codec initialization data.
avio_wb16(pb, 0);