Message ID | 20180418134903.3576-1-jamrial@gmail.com |
---|---|
State | Accepted |
Commit | 153e92089207b1a634f6b5b7b1daf24386c2be23 |
Headers | show |
On 4/18/2018 10:49 AM, James Almer wrote: > 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@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 */ Applied.
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 */
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@gmail.com> --- libavformat/vpcc.c | 29 ++++++++++++++++++++++++----- libavformat/vpcc.h | 11 +++++++++++ 2 files changed, 35 insertions(+), 5 deletions(-)