Add sws_getCachedContext(), which checks if context is valid or reallocs a new one...
authorVíctor Paesa <wzrlpy@arsystel.com>
Mon, 4 Sep 2006 09:38:24 +0000 (09:38 +0000)
committerGuillaume Poirier <gpoirier@mplayerhq.hu>
Mon, 4 Sep 2006 09:38:24 +0000 (09:38 +0000)
Patch by Victor Paesa <wzrlpy@arsystel.com>
Original thread:
Date: Aug 31, 2006 7:15 PM
Subject: [Ffmpeg-devel] [PATCH] Add sws_getCachedContext() to swscale library

Originally committed as revision 19667 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscale

libswscale/swscale.c
libswscale/swscale.h

index fc5690c..7a8c202 100644 (file)
@@ -2754,3 +2754,37 @@ void sws_freeContext(SwsContext *c){
        av_free(c);
 }
 
+/**
+ * Checks if context is valid or reallocs a new one instead.
+ * If context is NULL, just calls sws_getContext() to get a new one.
+ * Otherwise, checks if the parameters are the same already saved in context.
+ * If that is the case, returns the current context.
+ * Otherwise, frees context and gets a new one.
+ *
+ * Be warned that srcFilter, dstFilter are not checked, they are
+ * asumed to remain valid.
+ */
+struct SwsContext *sws_getCachedContext(struct SwsContext *context,
+                        int srcW, int srcH, int srcFormat,
+                        int dstW, int dstH, int dstFormat, int flags,
+                        SwsFilter *srcFilter, SwsFilter *dstFilter, double *param)
+{
+    if (context != NULL) {
+        if ((context->srcW != srcW) || (context->srcH != srcH) ||
+            (context->srcFormat != srcFormat) ||
+            (context->dstW != dstW) || (context->dstH != dstH) ||
+            (context->dstFormat != dstFormat) || (context->flags != flags) ||
+            (context->param != param))
+        {
+            sws_freeContext(context);
+            context = NULL;
+        }
+    }
+    if (context == NULL) {
+        return sws_getContext(srcW, srcH, srcFormat,
+                        dstW, dstH, dstFormat, flags,
+                        srcFilter, dstFilter, param);
+    }
+    return context;
+}
+
index 2b558a2..ace89fa 100644 (file)
@@ -135,6 +135,11 @@ SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur,
                                int verbose);
 void sws_freeFilter(SwsFilter *filter);
 
+struct SwsContext *sws_getCachedContext(struct SwsContext *context,
+                int srcW, int srcH, int srcFormat,
+                int dstW, int dstH, int dstFormat, int flags,
+                SwsFilter *srcFilter, SwsFilter *dstFilter, double *param);
+
 #ifdef __cplusplus
 }
 #endif