[FFmpeg-devel] [PATCH 1/2] avformat/vpcc: add ff_isom_get_vpcc_features()
James Almer
jamrial at gmail.com
Wed Apr 18 16:49:03 EEST 2018
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 <jamrial at gmail.com>
---
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 */
--
2.16.2
More information about the ffmpeg-devel
mailing list