From 153e92089207b1a634f6b5b7b1daf24386c2be23 Mon Sep 17 00:00:00 2001 From: James Almer Date: Sat, 13 Jan 2018 16:04:55 -0300 Subject: [PATCH] avformat/vpcc: add ff_isom_get_vpcc_features() Should be useful for muxers that require values as defined in the vpcc atom but don't need to write the atom itself. Signed-off-by: James Almer --- libavformat/vpcc.c | 29 ++++++++++++++++++++++++----- libavformat/vpcc.h | 11 +++++++++++ 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/libavformat/vpcc.c b/libavformat/vpcc.c index df08de59a6..66d0df69e5 100644 --- a/libavformat/vpcc.c +++ b/libavformat/vpcc.c @@ -67,8 +67,8 @@ static int get_vpx_video_full_range_flag(enum AVColorRange color_range) return color_range == AVCOL_RANGE_JPEG; } -int ff_isom_write_vpcc(AVFormatContext *s, AVIOContext *pb, - AVCodecParameters *par) +int ff_isom_get_vpcc_features(AVFormatContext *s, AVCodecParameters *par, + VPCC *vpcc) { int profile = par->profile; int level = par->level == FF_LEVEL_UNKNOWN ? 0 : par->level; @@ -90,9 +90,28 @@ int ff_isom_write_vpcc(AVFormatContext *s, AVIOContext *pb, } } - avio_w8(pb, profile); - avio_w8(pb, level); - avio_w8(pb, (bit_depth << 4) | (vpx_chroma_subsampling << 1) | vpx_video_full_range_flag); + vpcc->profile = profile; + vpcc->level = level; + vpcc->bitdepth = bit_depth; + vpcc->chroma_subsampling = vpx_chroma_subsampling; + vpcc->full_range_flag = vpx_video_full_range_flag; + + return 0; +} + +int ff_isom_write_vpcc(AVFormatContext *s, AVIOContext *pb, + AVCodecParameters *par) +{ + VPCC vpcc; + int ret; + + ret = ff_isom_get_vpcc_features(s, par, &vpcc); + if (ret < 0) + return ret; + + avio_w8(pb, vpcc.profile); + avio_w8(pb, vpcc.level); + avio_w8(pb, (vpcc.bitdepth << 4) | (vpcc.chroma_subsampling << 1) | vpcc.full_range_flag); avio_w8(pb, par->color_primaries); avio_w8(pb, par->color_trc); avio_w8(pb, par->color_space); diff --git a/libavformat/vpcc.h b/libavformat/vpcc.h index 184e8579f1..d71ba05105 100644 --- a/libavformat/vpcc.h +++ b/libavformat/vpcc.h @@ -32,6 +32,14 @@ #include "avformat.h" #include "libavcodec/avcodec.h" +typedef struct VPCC { + int profile; + int level; + int bitdepth; + int chroma_subsampling; + int full_range_flag; +} VPCC; + /** * Writes VP codec configuration to the provided AVIOContext. * @@ -44,4 +52,7 @@ int ff_isom_write_vpcc(AVFormatContext *s, AVIOContext *pb, AVCodecParameters *par); +int ff_isom_get_vpcc_features(AVFormatContext *s, AVCodecParameters *par, + VPCC *vpcc); + #endif /* AVFORMAT_VPCC_H */