diff libswscale/swscale.c @ 19661:7b24faac56fd

Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead. 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
author gpoirier
date Mon, 04 Sep 2006 09:38:24 +0000
parents 4678e9f81334
children 7d3d6f1533ee
line wrap: on
line diff
--- a/libswscale/swscale.c	Sun Sep 03 23:03:00 2006 +0000
+++ b/libswscale/swscale.c	Mon Sep 04 09:38:24 2006 +0000
@@ -2754,3 +2754,37 @@
 	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;
+}
+