diff mbox

[FFmpeg-devel,1/8] avutil/pixdesc: add av_pix_fmt_total_count and av_sample_fmt_total_count

Message ID 20191230135419.56529-1-quinkblack@foxmail.com
State New
Headers show

Commit Message

zhilizhao Dec. 30, 2019, 1:54 p.m. UTC
From: Zhao Zhili <zhilizhao@tencent.com>

---
 doc/APIchanges        | 3 +++
 libavutil/pixdesc.c   | 5 +++++
 libavutil/pixdesc.h   | 5 +++++
 libavutil/pixfmt.h    | 2 +-
 libavutil/samplefmt.c | 5 +++++
 libavutil/samplefmt.h | 7 ++++++-
 libavutil/version.h   | 2 +-
 7 files changed, 26 insertions(+), 3 deletions(-)

Comments

zhilizhao Jan. 2, 2020, 4:17 p.m. UTC | #1
Ping for review, thanks! I'm planning to use these API in ff_all_formats() if the patch is acceptable.

> On Dec 30, 2019, at 9:54 PM, quinkblack@foxmail.com wrote:
> 
> From: Zhao Zhili <zhilizhao@tencent.com>
> 
> ---
> doc/APIchanges        | 3 +++
> libavutil/pixdesc.c   | 5 +++++
> libavutil/pixdesc.h   | 5 +++++
> libavutil/pixfmt.h    | 2 +-
> libavutil/samplefmt.c | 5 +++++
> libavutil/samplefmt.h | 7 ++++++-
> libavutil/version.h   | 2 +-
> 7 files changed, 26 insertions(+), 3 deletions(-)
> 
> diff --git a/doc/APIchanges b/doc/APIchanges
> index 3c24dc6fbc..af2fc78fb9 100644
> --- a/doc/APIchanges
> +++ b/doc/APIchanges
> @@ -15,6 +15,9 @@ libavutil:     2017-10-21
> 
> API changes, most recent first:
> 
> +2019-12-28 - xxxxxxxxxx - lavu 56.39.100 - pixdesc.h
> +  Add av_pix_fmt_total_count() and av_sample_fmt_total_count().
> +
> 2019-12-27 - xxxxxxxxxx - lavu 56.38.100 - eval.h
>   Add av_expr_count_func().
> 
> diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c
> index 05dd4a1e20..a6f145714e 100644
> --- a/libavutil/pixdesc.c
> +++ b/libavutil/pixdesc.c
> @@ -2519,6 +2519,11 @@ char *av_get_pix_fmt_string(char *buf, int buf_size,
>     return buf;
> }
> 
> +int av_pix_fmt_total_count()
> +{
> +    return AV_PIX_FMT_NB;
> +}
> +
> const AVPixFmtDescriptor *av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
> {
>     if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB)
> diff --git a/libavutil/pixdesc.h b/libavutil/pixdesc.h
> index c055810ae8..8ed12a67f7 100644
> --- a/libavutil/pixdesc.h
> +++ b/libavutil/pixdesc.h
> @@ -204,6 +204,11 @@ int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc);
>  */
> int av_get_padded_bits_per_pixel(const AVPixFmtDescriptor *pixdesc);
> 
> +/**
> + * @return the number of all pixel formats
> + */
> +int av_pix_fmt_total_count(void);
> +
> /**
>  * @return a pixel format descriptor for provided pixel format or NULL if
>  * this pixel format is unknown.
> diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h
> index 37ecebd501..aaf9602c3e 100644
> --- a/libavutil/pixfmt.h
> +++ b/libavutil/pixfmt.h
> @@ -348,7 +348,7 @@ enum AVPixelFormat {
>     AV_PIX_FMT_NV24,      ///< planar YUV 4:4:4, 24bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (first byte U and the following byte V)
>     AV_PIX_FMT_NV42,      ///< as above, but U and V bytes are swapped
> 
> -    AV_PIX_FMT_NB         ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions
> +    AV_PIX_FMT_NB         ///< number of pixel formats, it's for libavutil internal use. For public access use av_pix_fmt_total_count() instead.
> };
> 
> #if AV_HAVE_BIGENDIAN
> diff --git a/libavutil/samplefmt.c b/libavutil/samplefmt.c
> index fc077f6444..6241523e5d 100644
> --- a/libavutil/samplefmt.c
> +++ b/libavutil/samplefmt.c
> @@ -46,6 +46,11 @@ static const SampleFmtInfo sample_fmt_info[AV_SAMPLE_FMT_NB] = {
>     [AV_SAMPLE_FMT_DBLP] = { .name = "dblp", .bits = 64, .planar = 1, .altform = AV_SAMPLE_FMT_DBL  },
> };
> 
> +int av_sample_fmt_total_count()
> +{
> +    return AV_SAMPLE_FMT_NB;
> +}
> +
> const char *av_get_sample_fmt_name(enum AVSampleFormat sample_fmt)
> {
>     if (sample_fmt < 0 || sample_fmt >= AV_SAMPLE_FMT_NB)
> diff --git a/libavutil/samplefmt.h b/libavutil/samplefmt.h
> index 8cd43ae856..3173d02e5e 100644
> --- a/libavutil/samplefmt.h
> +++ b/libavutil/samplefmt.h
> @@ -71,9 +71,14 @@ enum AVSampleFormat {
>     AV_SAMPLE_FMT_S64,         ///< signed 64 bits
>     AV_SAMPLE_FMT_S64P,        ///< signed 64 bits, planar
> 
> -    AV_SAMPLE_FMT_NB           ///< Number of sample formats. DO NOT USE if linking dynamically
> +    AV_SAMPLE_FMT_NB           ///< Number of sample formats, it's for libavutil internal use. For public access use av_sample_fmt_total_count() instead.
> };
> 
> +/**
> + * @return the number of all sample formats
> + */
> +int av_sample_fmt_total_count(void);
> +
> /**
>  * Return the name of sample_fmt, or NULL if sample_fmt is not
>  * recognized.
> diff --git a/libavutil/version.h b/libavutil/version.h
> index af8f614aff..2bc1b98615 100644
> --- a/libavutil/version.h
> +++ b/libavutil/version.h
> @@ -79,7 +79,7 @@
>  */
> 
> #define LIBAVUTIL_VERSION_MAJOR  56
> -#define LIBAVUTIL_VERSION_MINOR  38
> +#define LIBAVUTIL_VERSION_MINOR  39
> #define LIBAVUTIL_VERSION_MICRO 100
> 
> #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
> -- 
> 2.22.0
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
Nicolas George Jan. 2, 2020, 4:20 p.m. UTC | #2
Zhao Zhili (12020-01-03):
> Ping for review, thanks! I'm planning to use these API in ff_all_formats() if the patch is acceptable.

For ff_all_formats(), as I told you, you cannot assume there is no gap:
if you want to optimize it, just make a first loop to count the slots
needed.

Regards,
zhilizhao Jan. 2, 2020, 4:48 p.m. UTC | #3
> On Jan 3, 2020, at 12:20 AM, Nicolas George <george@nsup.org> wrote:
> 
> Zhao Zhili (12020-01-03):
>> Ping for review, thanks! I'm planning to use these API in ff_all_formats() if the patch is acceptable.
> 
> For ff_all_formats(), as I told you, you cannot assume there is no gap:
> if you want to optimize it, just make a first loop to count the slots
> needed.

The comment for AV_PIX_FMT_NB makes me wonder maybe there is requirement of such API.
After search and fixed the use of AV_PIX_FMT_NB in other library other than libavutil, most of
them don't need AV_PIX_FMT_NB actually. Please ignore the patch if such API are useless.

> 
> Regards,
> 
> -- 
>  Nicolas George
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
diff mbox

Patch

diff --git a/doc/APIchanges b/doc/APIchanges
index 3c24dc6fbc..af2fc78fb9 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -15,6 +15,9 @@  libavutil:     2017-10-21
 
 API changes, most recent first:
 
+2019-12-28 - xxxxxxxxxx - lavu 56.39.100 - pixdesc.h
+  Add av_pix_fmt_total_count() and av_sample_fmt_total_count().
+
 2019-12-27 - xxxxxxxxxx - lavu 56.38.100 - eval.h
   Add av_expr_count_func().
 
diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c
index 05dd4a1e20..a6f145714e 100644
--- a/libavutil/pixdesc.c
+++ b/libavutil/pixdesc.c
@@ -2519,6 +2519,11 @@  char *av_get_pix_fmt_string(char *buf, int buf_size,
     return buf;
 }
 
+int av_pix_fmt_total_count()
+{
+    return AV_PIX_FMT_NB;
+}
+
 const AVPixFmtDescriptor *av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
 {
     if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB)
diff --git a/libavutil/pixdesc.h b/libavutil/pixdesc.h
index c055810ae8..8ed12a67f7 100644
--- a/libavutil/pixdesc.h
+++ b/libavutil/pixdesc.h
@@ -204,6 +204,11 @@  int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc);
  */
 int av_get_padded_bits_per_pixel(const AVPixFmtDescriptor *pixdesc);
 
+/**
+ * @return the number of all pixel formats
+ */
+int av_pix_fmt_total_count(void);
+
 /**
  * @return a pixel format descriptor for provided pixel format or NULL if
  * this pixel format is unknown.
diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h
index 37ecebd501..aaf9602c3e 100644
--- a/libavutil/pixfmt.h
+++ b/libavutil/pixfmt.h
@@ -348,7 +348,7 @@  enum AVPixelFormat {
     AV_PIX_FMT_NV24,      ///< planar YUV 4:4:4, 24bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (first byte U and the following byte V)
     AV_PIX_FMT_NV42,      ///< as above, but U and V bytes are swapped
 
-    AV_PIX_FMT_NB         ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions
+    AV_PIX_FMT_NB         ///< number of pixel formats, it's for libavutil internal use. For public access use av_pix_fmt_total_count() instead.
 };
 
 #if AV_HAVE_BIGENDIAN
diff --git a/libavutil/samplefmt.c b/libavutil/samplefmt.c
index fc077f6444..6241523e5d 100644
--- a/libavutil/samplefmt.c
+++ b/libavutil/samplefmt.c
@@ -46,6 +46,11 @@  static const SampleFmtInfo sample_fmt_info[AV_SAMPLE_FMT_NB] = {
     [AV_SAMPLE_FMT_DBLP] = { .name = "dblp", .bits = 64, .planar = 1, .altform = AV_SAMPLE_FMT_DBL  },
 };
 
+int av_sample_fmt_total_count()
+{
+    return AV_SAMPLE_FMT_NB;
+}
+
 const char *av_get_sample_fmt_name(enum AVSampleFormat sample_fmt)
 {
     if (sample_fmt < 0 || sample_fmt >= AV_SAMPLE_FMT_NB)
diff --git a/libavutil/samplefmt.h b/libavutil/samplefmt.h
index 8cd43ae856..3173d02e5e 100644
--- a/libavutil/samplefmt.h
+++ b/libavutil/samplefmt.h
@@ -71,9 +71,14 @@  enum AVSampleFormat {
     AV_SAMPLE_FMT_S64,         ///< signed 64 bits
     AV_SAMPLE_FMT_S64P,        ///< signed 64 bits, planar
 
-    AV_SAMPLE_FMT_NB           ///< Number of sample formats. DO NOT USE if linking dynamically
+    AV_SAMPLE_FMT_NB           ///< Number of sample formats, it's for libavutil internal use. For public access use av_sample_fmt_total_count() instead.
 };
 
+/**
+ * @return the number of all sample formats
+ */
+int av_sample_fmt_total_count(void);
+
 /**
  * Return the name of sample_fmt, or NULL if sample_fmt is not
  * recognized.
diff --git a/libavutil/version.h b/libavutil/version.h
index af8f614aff..2bc1b98615 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -79,7 +79,7 @@ 
  */
 
 #define LIBAVUTIL_VERSION_MAJOR  56
-#define LIBAVUTIL_VERSION_MINOR  38
+#define LIBAVUTIL_VERSION_MINOR  39
 #define LIBAVUTIL_VERSION_MICRO 100
 
 #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \