diff mbox

[FFmpeg-devel,1/2] avformat/vpcc: add ff_isom_get_vpcc_features()

Message ID 20180418134903.3576-1-jamrial@gmail.com
State Accepted
Commit 153e92089207b1a634f6b5b7b1daf24386c2be23
Headers show

Commit Message

James Almer April 18, 2018, 1:49 p.m. UTC
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(-)

Comments

James Almer April 22, 2018, 7:34 p.m. UTC | #1
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 mbox

Patch

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 */