[FFmpeg-cvslog] lavf: add avformat_query_codec().

Anton Khirnov git at videolan.org
Wed Aug 17 14:42:49 CEST 2011


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Thu Aug 11 20:34:45 2011 +0200| [48f9e457ea0143e14b04f7ae9cc5358904f9475a] | committer: Anton Khirnov

lavf: add avformat_query_codec().

It allows to check if a given codec can be written into a container.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=48f9e457ea0143e14b04f7ae9cc5358904f9475a
---

 doc/APIchanges         |    3 +++
 libavformat/avformat.h |   18 ++++++++++++++++++
 libavformat/utils.c    |   14 ++++++++++++++
 3 files changed, 35 insertions(+), 0 deletions(-)

diff --git a/doc/APIchanges b/doc/APIchanges
index 64d1571..cfce48b 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -13,6 +13,9 @@ libavutil:   2011-04-18
 
 API changes, most recent first:
 
+2011-08-xx - xxxxxxx - lavf 53.4.0
+  Add avformat_query_codec().
+
 2011-08-xx - xxxxxxx - lavc 53.8.0
   Add avcodec_get_type().
 
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index 957039f..2a00a9f 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -322,6 +322,14 @@ typedef struct AVOutputFormat {
 
     const AVClass *priv_class; ///< AVClass for the private context
 
+    /**
+     * Test if the given codec can be stored in this container.
+     *
+     * @return 1 if the codec is supported, 0 if it is not.
+     *         A negative number if unknown.
+     */
+    int (*query_codec)(enum CodecID id, int std_compliance);
+
     /* private fields */
     struct AVOutputFormat *next;
 } AVOutputFormat;
@@ -1595,4 +1603,14 @@ attribute_deprecated int avf_sdp_create(AVFormatContext *ac[], int n_files, char
  */
 int av_match_ext(const char *filename, const char *extensions);
 
+/**
+ * Test if the given container can store a codec.
+ *
+ * @param std_compliance standards compliance level, one of FF_COMPLIANCE_*
+ *
+ * @return 1 if codec with ID codec_id can be stored in ofmt, 0 if it cannot.
+ *         A negative number if this information is not available.
+ */
+int avformat_query_codec(AVOutputFormat *ofmt, enum CodecID codec_id, int std_compliance);
+
 #endif /* AVFORMAT_AVFORMAT_H */
diff --git a/libavformat/utils.c b/libavformat/utils.c
index b848ebb..6e3cb2f 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -3904,3 +3904,17 @@ int64_t ff_iso8601_to_unix_time(const char *datestr)
     return 0;
 #endif
 }
+
+int avformat_query_codec(AVOutputFormat *ofmt, enum CodecID codec_id, int std_compliance)
+{
+    if (ofmt) {
+        if (ofmt->query_codec)
+            return ofmt->query_codec(codec_id, std_compliance);
+        else if (ofmt->codec_tag)
+            return !!av_codec_get_tag(ofmt->codec_tag, codec_id);
+        else if (codec_id == ofmt->video_codec || codec_id == ofmt->audio_codec ||
+                 codec_id == ofmt->subtitle_codec)
+                return 1;
+    }
+    return AVERROR_PATCHWELCOME;
+}



More information about the ffmpeg-cvslog mailing list