From 33f7033452ad59c86d1b34fd57c30f2c693bf04a Mon Sep 17 00:00:00 2001
From: Michael Niedermayer <michaelni@gmx.at>
Date: Wed, 2 May 2012 00:51:06 +0200
Subject: [PATCH] swr: automatically choose s16/flt/dbl to preserve input
 precision unless user overrides.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
---
 libswresample/swresample.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/libswresample/swresample.c b/libswresample/swresample.c
index 87a885be1aa..6566199624b 100644
--- a/libswresample/swresample.c
+++ b/libswresample/swresample.c
@@ -208,11 +208,16 @@ int swr_init(struct SwrContext *s){
         return AVERROR(EINVAL);
     }
 
-    //FIXME should we allow/support using FLT on material that doesnt need it ?
-    if(av_get_planar_sample_fmt(s->in_sample_fmt) <= AV_SAMPLE_FMT_S16P || s->int_sample_fmt==AV_SAMPLE_FMT_S16P){
-        s->int_sample_fmt= AV_SAMPLE_FMT_S16P;
-    }else
-        s->int_sample_fmt= AV_SAMPLE_FMT_FLTP;
+    if(s->int_sample_fmt == AV_SAMPLE_FMT_NONE){
+        if(av_get_planar_sample_fmt(s->in_sample_fmt) <= AV_SAMPLE_FMT_S16P){
+            s->int_sample_fmt= AV_SAMPLE_FMT_S16P;
+        }else if(av_get_planar_sample_fmt(s->in_sample_fmt) <= AV_SAMPLE_FMT_FLTP){
+            s->int_sample_fmt= AV_SAMPLE_FMT_FLTP;
+        }else{
+            av_log(s, AV_LOG_DEBUG, "Using double precission mode\n");
+            s->int_sample_fmt= AV_SAMPLE_FMT_DBLP;
+        }
+    }
 
     if(   s->int_sample_fmt != AV_SAMPLE_FMT_S16P
         &&s->int_sample_fmt != AV_SAMPLE_FMT_S32P
-- 
GitLab