[FFmpeg-cvslog] r18130 - in trunk/libavcodec: avcodec.h imgconvert.c

stefano subversion
Sat Mar 21 23:43:46 CET 2009


Author: stefano
Date: Sat Mar 21 23:43:46 2009
New Revision: 18130

Log:
Extend the behavior of avcodec_get_pix_fmt(), if it cannot find a
pixel format for the provided name, make it look for the native endian
variant of the name.

Modified:
   trunk/libavcodec/avcodec.h
   trunk/libavcodec/imgconvert.c

Modified: trunk/libavcodec/avcodec.h
==============================================================================
--- trunk/libavcodec/avcodec.h	Sat Mar 21 23:24:44 2009	(r18129)
+++ trunk/libavcodec/avcodec.h	Sat Mar 21 23:43:46 2009	(r18130)
@@ -31,7 +31,7 @@
 
 #define LIBAVCODEC_VERSION_MAJOR 52
 #define LIBAVCODEC_VERSION_MINOR 22
-#define LIBAVCODEC_VERSION_MICRO  1
+#define LIBAVCODEC_VERSION_MICRO  2
 
 #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
                                                LIBAVCODEC_VERSION_MINOR, \
@@ -2708,6 +2708,18 @@ int avpicture_get_size(enum PixelFormat 
 void avcodec_get_chroma_sub_sample(enum PixelFormat pix_fmt, int *h_shift, int *v_shift);
 const char *avcodec_get_pix_fmt_name(enum PixelFormat pix_fmt);
 void avcodec_set_dimensions(AVCodecContext *s, int width, int height);
+
+/**
+ * Returns the pixel format corresponding to the name \p name.
+ *
+ * If there is no pixel format with name \p name, then looks for a
+ * pixel format with the name corresponding to the native endian
+ * format of \p name.
+ * For example in a little-endian system, first looks for "gray16",
+ * then for "gray16le".
+ *
+ * Finally if no pixel format has been found, returns \c PIX_FMT_NONE.
+ */
 enum PixelFormat avcodec_get_pix_fmt(const char* name);
 unsigned int avcodec_pix_fmt_to_codec_tag(enum PixelFormat p);
 

Modified: trunk/libavcodec/imgconvert.c
==============================================================================
--- trunk/libavcodec/imgconvert.c	Sat Mar 21 23:24:44 2009	(r18129)
+++ trunk/libavcodec/imgconvert.c	Sat Mar 21 23:43:46 2009	(r18130)
@@ -457,7 +457,7 @@ const char *avcodec_get_pix_fmt_name(enu
         return pix_fmt_info[pix_fmt].name;
 }
 
-enum PixelFormat avcodec_get_pix_fmt(const char* name)
+static enum PixelFormat avcodec_get_pix_fmt_internal(const char *name)
 {
     int i;
 
@@ -467,6 +467,24 @@ enum PixelFormat avcodec_get_pix_fmt(con
     return PIX_FMT_NONE;
 }
 
+enum PixelFormat avcodec_get_pix_fmt(const char *name)
+{
+#ifdef WORDS_BIGENDIAN
+#   define NE "be"
+#else
+#   define NE "le"
+#endif
+    enum PixelFormat pix_fmt = avcodec_get_pix_fmt_internal(name);
+
+    if (pix_fmt == PIX_FMT_NONE) {
+        char name2[32];
+        snprintf(name2, sizeof(name2), "%s%s", name, NE);
+        pix_fmt = avcodec_get_pix_fmt_internal(name2);
+    }
+    return pix_fmt;
+#undef NE
+}
+
 void avcodec_pix_fmt_string (char *buf, int buf_size, enum PixelFormat pix_fmt)
 {
     /* print header */



More information about the ffmpeg-cvslog mailing list