changeset 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 7d1bf72f5276
children 042e0009a1c0
files libswscale/swscale.c libswscale/swscale.h
diffstat 2 files changed, 39 insertions(+), 0 deletions(-) [+]
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;
+}
+
--- a/libswscale/swscale.h	Sun Sep 03 23:03:00 2006 +0000
+++ b/libswscale/swscale.h	Mon Sep 04 09:38:24 2006 +0000
@@ -135,6 +135,11 @@
 				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