diff mbox series

[FFmpeg-devel,1/6] avradio/sdrinradio: Check tuner before applying rtlsdr frequency correction

Message ID 20230724183535.2677937-1-michael@niedermayer.cc
State New
Headers show
Series [FFmpeg-devel,1/6] avradio/sdrinradio: Check tuner before applying rtlsdr frequency correction | expand

Checks

Context Check Description
andriy/configure_x86 warning Failed to apply patch
yinshiyou/configure_loongarch64 warning Failed to apply patch

Commit Message

Michael Niedermayer July 24, 2023, 6:35 p.m. UTC
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
---
 libavradio/sdrinradio.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

Comments

Michael Niedermayer July 27, 2023, 8:18 p.m. UTC | #1
On Mon, Jul 24, 2023 at 08:35:30PM +0200, Michael Niedermayer wrote:
> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> ---
>  libavradio/sdrinradio.c | 15 +++++++++------
>  1 file changed, 9 insertions(+), 6 deletions(-)

will apply patchset to libavradio repository

[...]
diff mbox series

Patch

diff --git a/libavradio/sdrinradio.c b/libavradio/sdrinradio.c
index c24a30d746..5c14250f8c 100644
--- a/libavradio/sdrinradio.c
+++ b/libavradio/sdrinradio.c
@@ -103,6 +103,7 @@  static int64_t sdrindev_set_frequency_callback(SDRContext *sdr, int64_t freq)
     SoapySDRDevice *soapy = sdr->soapy;
     if (soapy) {
         if (sdr->rtlsdr_fixes>0) {
+            AVDictionaryEntry *e = av_dict_get(sdr->driver_dict, "tuner", NULL, 0);
             // The official unmodified RTLSDR needs to be put in Direct sampling Q-ADC mode below 24Mhz and non direct sampling above
             const char *value = freq < 24000000 ? "2" : "0";
             if (!sdr->current_direct_samp || strcmp(value, sdr->current_direct_samp)) {
@@ -112,12 +113,14 @@  static int64_t sdrindev_set_frequency_callback(SDRContext *sdr, int64_t freq)
                 } else
                     sdr->current_direct_samp = value;
             }
-            //The R820T has a 16 bit fractional PLL which can do only multiplies of 439.45
-            //Its more complex but this approximation works
-            //It has to be noted that SOAPY does not tell us about this, instead saopy
-            //pretends whatever we ask for we get exactly, but we dont
-            //For more details see: michelebavaro.blogspot.com/2014/05/gnss-carrier-phase-rtlsdr-and.html
-            freq = lrint(freq / 439.45) * 439.45;
+            if (e && strstr(e->value, "R820T")) {
+                //The R820T has a 16 bit fractional PLL which can do only multiplies of 439.45
+                //Its more complex but this approximation works
+                //It has to be noted that SOAPY does not tell us about this, instead saopy
+                //pretends whatever we ask for we get exactly, but we dont
+                //For more details see: michelebavaro.blogspot.com/2014/05/gnss-carrier-phase-rtlsdr-and.html
+                freq = lrint(freq / 439.45) * 439.45;
+            }
         }
 
         if (SoapySDRDevice_setFrequency(soapy, SOAPY_SDR_RX, 0, freq, NULL) != 0) {