[FFmpeg-devel] [PATCH 4/6] avradio/sdrdemux: Skiping detection of AM stations at DC point
Michael Niedermayer
michael at niedermayer.cc
Mon Jul 24 21:35:33 EEST 2023
Also use this to detect a DC offset instead of the driver
Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
---
libavradio/sdr.h | 1 +
libavradio/sdrdemux.c | 11 ++++++++++-
tests/ref/fate/sdr-am | 38 +++++++++++++++-----------------------
3 files changed, 26 insertions(+), 24 deletions(-)
diff --git a/libavradio/sdr.h b/libavradio/sdr.h
index 7d7bfd6806..a5a291ee37 100644
--- a/libavradio/sdr.h
+++ b/libavradio/sdr.h
@@ -260,6 +260,7 @@ typedef struct SDRContext {
int rtlsdr_fixes;
int sdrplay_fixes;
+ int dc_fix;
} SDRContext;
typedef struct ModulationDescriptor {
diff --git a/libavradio/sdrdemux.c b/libavradio/sdrdemux.c
index 123a1a9d0f..25f0012777 100644
--- a/libavradio/sdrdemux.c
+++ b/libavradio/sdrdemux.c
@@ -596,6 +596,14 @@ static int probe_am(SDRContext *sdr)
continue;
}
+ if (i == sdr->block_size) {
+ if (sdr->dc_fix < 0) {
+ sdr->dc_fix = 1;
+ av_log(sdr->avfmt, AV_LOG_INFO, "Skiping AM station detection at DC point and enabling DC correction\n");
+ continue;
+ }
+ }
+
create_candidate_station(sdr, AM, INDEX2F(peak_i), bandwidth_f, score);
}
}
@@ -1931,7 +1939,7 @@ process_next_block:
if (sdr->sample_size == 2) {
const int8_t *halfblock0 = fifo_element[0].halfblock;
const int8_t *halfblock1 = fifo_element[1].halfblock;
- if (sdr->rtlsdr_fixes>0) {
+ if (sdr->dc_fix>0) {
int sum = 0;
float offset;
for (i = 0; i<2*sdr->block_size; i++)
@@ -2274,6 +2282,7 @@ const AVOption ff_sdr_options[] = {
{ "driver" , "sdr driver name" , OFFSET(driver_name), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC},
{ "rtlsdr_fixes" , "workaround rtlsdr issues", OFFSET(rtlsdr_fixes), AV_OPT_TYPE_INT , {.i64 = -1}, -1, 1, DEC},
{ "sdrplay_fixes" , "workaround sdrplay issues", OFFSET(sdrplay_fixes), AV_OPT_TYPE_INT , {.i64 = -1}, -1, 1, DEC},
+ { "dc_fix" , "Apply DC correction", OFFSET(dc_fix), AV_OPT_TYPE_INT , {.i64 = -1}, -1, 1, DEC},
{ "sdr_sr" , "sdr sample rate" , OFFSET(sdr_sample_rate ), AV_OPT_TYPE_INT , {.i64 = 0}, 0, INT_MAX, DEC},
{ "sdr_freq", "sdr frequency" , OFFSET(user_wanted_freq), AV_OPT_TYPE_INT64 , {.i64 = 9000000}, 0, INT64_MAX, DEC},
{ "gain" , "sdr overall gain", OFFSET(sdr_gain), AV_OPT_TYPE_INT , {.i64 = GAIN_SDR_AGC}, -3, INT_MAX, DEC, "gain"},
diff --git a/tests/ref/fate/sdr-am b/tests/ref/fate/sdr-am
index b8a34ee488..e2ae353902 100644
--- a/tests/ref/fate/sdr-am
+++ b/tests/ref/fate/sdr-am
@@ -28,28 +28,20 @@
#codec_id 5: pcm_u8
#sample_rate 5: 16000
#channel_layout_name 5: stereo
-#tb 6: 1/16000
-#media_type 6: audio
-#codec_id 6: pcm_u8
-#sample_rate 6: 16000
-#channel_layout_name 6: stereo
0, 0, 0, 1, 320000, 0x816a0964
0, 1, 1, 1, 320000, 0x140ce2da
-1, 2048, 2048, 1024, 2048, 0x2276fdd1
-2, 2048, 2048, 1024, 2048, 0x4d31ff0f
-3, 2048, 2048, 1024, 2048, 0x3cd002ad
-4, 2048, 2048, 1024, 2048, 0x8bdd034d
-5, 2048, 2048, 1024, 2048, 0xc6430169
-1, 3072, 3072, 1024, 2048, 0xa0810031
-2, 3072, 3072, 1024, 2048, 0xb307000d
-3, 3072, 3072, 1024, 2048, 0x3f6d01d4
-4, 3072, 3072, 1024, 2048, 0x2de9fde9
-5, 3072, 3072, 1024, 2048, 0xad7efe6f
-6, 3072, 3072, 1024, 2048, 0x9c840168
-1, 4096, 4096, 1024, 2048, 0x61a50250
-2, 4096, 4096, 1024, 2048, 0x7e7cfe03
-3, 4096, 4096, 1024, 2048, 0x6561fc7b
-4, 4096, 4096, 1024, 2048, 0xdcd6ff8d
-5, 4096, 4096, 1024, 2048, 0xedac0493
-6, 4096, 4096, 1024, 2048, 0x970a0066
-0, 3, 3, 1, 320000, 0x9fb0c309
+1, 2048, 2048, 1024, 2048, 0x4d31ff0f
+2, 2048, 2048, 1024, 2048, 0x3cd002ad
+3, 2048, 2048, 1024, 2048, 0x8bdd034d
+4, 2048, 2048, 1024, 2048, 0xc6430169
+1, 3072, 3072, 1024, 2048, 0xb307000d
+2, 3072, 3072, 1024, 2048, 0x3f6d01d4
+3, 3072, 3072, 1024, 2048, 0x2de9fde9
+4, 3072, 3072, 1024, 2048, 0xad7efe6f
+5, 3072, 3072, 1024, 2048, 0x9c840168
+1, 4096, 4096, 1024, 2048, 0x7e7cfe03
+2, 4096, 4096, 1024, 2048, 0x6561fc7b
+3, 4096, 4096, 1024, 2048, 0xdcd6ff8d
+4, 4096, 4096, 1024, 2048, 0xedac0493
+5, 4096, 4096, 1024, 2048, 0x970a0066
+0, 3, 3, 1, 320000, 0x6ea8fa49
--
2.31.1
More information about the ffmpeg-devel
mailing list