From patchwork Sat Jul 8 21:25:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 42534 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6d25:b0:130:f365:34ad with SMTP id fv37csp663037pzb; Sat, 8 Jul 2023 14:25:44 -0700 (PDT) X-Google-Smtp-Source: APBJJlFpHX8psIWuXPBtmjvWjoMkrlzQDqXGaulCcjIdeBaSEEuz54S3tErm+vVdKtY98/zYJQdG X-Received: by 2002:a5d:54c2:0:b0:313:eb34:b23e with SMTP id x2-20020a5d54c2000000b00313eb34b23emr9648924wrv.49.1688851544263; Sat, 08 Jul 2023 14:25:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688851544; cv=none; d=google.com; s=arc-20160816; b=tIaaWYrocwaFEqwIf+PznXiX1R2Rg6ci8XiERQ9tkBfyBJ45lvo0Hw6tJoyyRswZJv hWCTk6z+n5J9DsD3I81tWSJ4iN9jKqU/KLkwJNucjT4pFXTgyDCp71qdRe/uCAX69jwp cIZ2PZt+7lMcZEDfUetwM7y1BEsL3RynwnxN1Zef3BJtl6Mtmj/hz96ECcr/otvwW/6x W6VuIUAHHY3a4xMSUVi4mLTaztGfKJAcSt+uhdFbiVsA3zMZ6FEVEjs0cRwW3IY3k4tj Wtya3DpJiDjcuDFOX+MMWyUuCHnW+AUCfLwQpu3aNB5/kIsOIYIfou+3tMKsk7rjQ5vm lmcA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :delivered-to; bh=MdfYwTkFkIZGGAvTxsGkw2mr+SyZQ57H8ABIHDQK9qE=; fh=YYwLYmpaV0Fpw/rxmSKNRLS2XzDkAlGbHATiKOPtZrY=; b=Bqtf1wMcVNlnyrykgZXxPx+l7eh8cLbM1pd7g5vRMGrGM17JkxoEMEoJ9+D/5QhbPW mh/EIUyiziTgcQ10r/vdC1MKE1ZxBqSAYv1YmodS13H2Cz+NWiIG4lSvBbZO/JCqqSuX lZ+9M3+QY9CP1AqZl/N9SHJN3m5HpCGgVhmRbSRGuNCx3/ZqrhuBx+c+ptJhZKvpmQCh l9hv0a/KVpIJLinIzEAPfS93ytfZvhU6uqzn8A1H6juFwwVMfKV8R/J5CHPsOJ8/HsLC ELzlT1oqALvO+eR49iYux9fNRU2PO3+/ueJIkMNHHaXnSXjVV+XPIvw4DL9UVei6hMbP zpIA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id i22-20020a50fc16000000b0051de4c29577si3328654edr.184.2023.07.08.14.25.43; Sat, 08 Jul 2023 14:25:44 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7F9AF68C540; Sun, 9 Jul 2023 00:25:39 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay1-d.mail.gandi.net (relay1-d.mail.gandi.net [217.70.183.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D5DF768C3CB for ; Sun, 9 Jul 2023 00:25:32 +0300 (EEST) X-GND-Sasl: michael@niedermayer.cc Received: by mail.gandi.net (Postfix) with ESMTPSA id BDFE6240004 for ; Sat, 8 Jul 2023 21:25:31 +0000 (UTC) From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sat, 8 Jul 2023 23:25:13 +0200 Message-Id: <20230708212530.109692-1-michael@niedermayer.cc> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 01/18] avradio/sdrdemux: Fix uninitialized access X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: cHK6XAkA+zO5 Signed-off-by: Michael Niedermayer --- libavradio/sdrdemux.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libavradio/sdrdemux.c b/libavradio/sdrdemux.c index bed74ebd26..3bb5a69cf1 100644 --- a/libavradio/sdrdemux.c +++ b/libavradio/sdrdemux.c @@ -1500,9 +1500,11 @@ int avpriv_sdr_common_init(AVFormatContext *s) SDRStream *sst = st->priv_data; av_assert0(st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO); sst->frame_size = sdr->width * sdr->height * 4; - sst->frame_buffer = av_malloc(sst->frame_size * 2); + sst->frame_buffer = av_mallocz(sst->frame_size * 2); if (!sst->frame_buffer) return AVERROR(ENOMEM); + for(int i = 3; iframe_size * 2; i+=4) + sst->frame_buffer[i] = 255; } sdr->pts = 0; From patchwork Sat Jul 8 21:25:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 42535 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6d25:b0:130:f365:34ad with SMTP id fv37csp663090pzb; Sat, 8 Jul 2023 14:25:56 -0700 (PDT) X-Google-Smtp-Source: APBJJlHYLt1rOsRVpO4F5dW+PWon+H5XdgpazkG8/4BqzBFnygegrE5mr2fCeIAFBm+3caFU7UX3 X-Received: by 2002:aa7:c655:0:b0:51e:2305:931 with SMTP id z21-20020aa7c655000000b0051e23050931mr6623900edr.22.1688851556181; Sat, 08 Jul 2023 14:25:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688851556; cv=none; d=google.com; s=arc-20160816; b=oNeaL0BQE7ez4srCFfRjvrlUTRzBh6e/MjgtyCFCXqL/+csa26lUkB1CvzRQdogOb6 7kZMruQAkUJg6XejI/SQUAAXXHC9YqphU5OTcI+42hAdUHFF3EL76+KxiN+Tv4/bx719 W0RQsftZTpuV+reugDsP2hNsbCVBUzE4WrKP4ftLgQowiv1yPSMW1ztZmKRARos/gPTE Cg2AvunXxxitBm2hHN6IaZxi9f3PAOjbpEFZueMAB7V1p52HLcUhmcjJGs4r1/+o36SF 0wPfmN+sAF7YiYjN/2UeUEz7xxa312nEkiWwA5VehgAr07Qx36KrrQqvr6j6q9QRjlqd GHXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=mPieOFmlIZQuT/tL84+5Qd0bCoTrIG5Tw/bdtB3d3jA=; fh=YYwLYmpaV0Fpw/rxmSKNRLS2XzDkAlGbHATiKOPtZrY=; b=f83dz0WygPyMLjYOGyQfgyijoCMtFSM/a/ZYie2hNWIeq9HYT23PpDJ+h5zFM4FbCw WKQUxheEhp1ljNdZmLYyyX8M5668OtYFVtdXKvqbHnHbn6P4WQAzO044GcBcQNB2mKF5 OGEF2Zz5Aj0I+ebI2ymrx/uUa28gfz5ROqYvPHRJWBD8xzCbh9paQPGJ3YG4iUJjr95N vwq1muFbPzCYYwEs86Uss8WFuwCAuGIyn6DrbB+aRBQo/rNHN8+y5+ZaPIiQuL2LrlN4 1aHU0nZpjkAaNqxArxvC6+nrAdkXG3J/mejs2kuIgdYDQRHBcW26WB2QsmeBJ/TeOvkK aDBg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id w1-20020aa7d281000000b0051dd43ad4b1si4977068edq.1.2023.07.08.14.25.55; Sat, 08 Jul 2023 14:25:56 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A11EE68C3FC; Sun, 9 Jul 2023 00:25:41 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay6-d.mail.gandi.net (relay6-d.mail.gandi.net [217.70.183.198]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A5E7968C33C for ; Sun, 9 Jul 2023 00:25:33 +0300 (EEST) X-GND-Sasl: michael@niedermayer.cc Received: by mail.gandi.net (Postfix) with ESMTPSA id E02EAC0002 for ; Sat, 8 Jul 2023 21:25:32 +0000 (UTC) From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sat, 8 Jul 2023 23:25:14 +0200 Message-Id: <20230708212530.109692-2-michael@niedermayer.cc> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230708212530.109692-1-michael@niedermayer.cc> References: <20230708212530.109692-1-michael@niedermayer.cc> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 02/18] avradio/sdrdemux: factor frequency tolerance constants out X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: GovbH/1ot5T5 Signed-off-by: Michael Niedermayer --- libavradio/sdrdemux.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libavradio/sdrdemux.c b/libavradio/sdrdemux.c index 3bb5a69cf1..1f2d778978 100644 --- a/libavradio/sdrdemux.c +++ b/libavradio/sdrdemux.c @@ -61,6 +61,9 @@ #define FREQ_BITS 22 #define TIMEBASE ((48000ll / 128) << FREQ_BITS) +#define AM_FREQ_TOLERANCE 5 +#define FM_FREQ_TOLERANCE 500 + #define STATION_TIMEOUT 100 ///< The number of frames after which a station is removed if it was not detected #define CANDIDATE_STATION_TIMEOUT 4 @@ -248,7 +251,7 @@ static int create_station(SDRContext *sdr, Station *candidate_station) { nb_candidate_match += candidate_station->nb_frequency - 1; for (i=0; ifrequency - freq); @@ -383,7 +386,7 @@ static int create_candidate_station(SDRContext *sdr, enum Modulation modulation, void *tmp; struct AVTreeNode *next = NULL; Station *station_list[1000]; - double snapdistance = modulation == AM ? 5 : 500; + double snapdistance = modulation == AM ? AM_FREQ_TOLERANCE : FM_FREQ_TOLERANCE; int nb_stations = find_stations(sdr, freq, snapdistance, station_list, FF_ARRAY_ELEMS(station_list)); if (nb_stations) { From patchwork Sat Jul 8 21:25:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 42536 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6d25:b0:130:f365:34ad with SMTP id fv37csp663119pzb; Sat, 8 Jul 2023 14:26:06 -0700 (PDT) X-Google-Smtp-Source: APBJJlHkZ9VBAjVlCUxm4Xhj3DVNZNeKN/KCDQVZcLxeBGi6oP+KBhRuswBpLRumOcNxen1nTjKO X-Received: by 2002:a17:907:2ce1:b0:98d:4b97:acc8 with SMTP id hz1-20020a1709072ce100b0098d4b97acc8mr13201668ejc.25.1688851565814; Sat, 08 Jul 2023 14:26:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688851565; cv=none; d=google.com; s=arc-20160816; b=JbJ5TnhsfOF/iEJ0RsRtBfQ694DSEGIADFVMX2K1O5K3H23yhZqmunP1xk+pWmZdp8 DvgYz5N0sws3Uh9jRyrl9dEuGc/v6me8Tka3ssT59bJ20WEM8q15vGQzl81wb60Oo4By NCEhvoZxtb4BDUt4+FP1yXspDFQFtHGwz9u9Us5WtD7O4YY/ZB9ppiYdD2nH+wW1FPT0 I2agBWeBl6yn3NTTxXrKDXq3ZzbaFS/M0Zro0Z+Qz840BgGx/gzJoiUx/cUJ35iXMfC1 GVqpFJKO5ajXZxUltoN8yxqNMpRXo70Kp9Vw++3KFBrSc2EI+TfBBfILzOiMxRhfnKNj QnxA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=xhLd5dnlpAcW7rF0njmT8Ifnl7ads/cuh8uk6giHHQE=; fh=YYwLYmpaV0Fpw/rxmSKNRLS2XzDkAlGbHATiKOPtZrY=; b=Q6rjosnKhlMTsyAudl0u42KLviDde/yQRw404BQeiWKGuymAgERi3PaYkSCHu5SO9X JzOaKtS48ZNLjkYUIYluOwjnhHXrf3oFDrONcOylWtlzWRuOXI9QW+Z1B8ChawzqL/RU qlwsvrmXxRtbgBvhnuNCkCKgAzaWyW+9Rq/eZUQ42ekgwXbcijakYvmjS3rni/RAbFP5 mebeyc5FNInt0uituINHyVHrCAFn+c4084hCBRiF330qEq6jG9eRk0thIIQIplPWYIxZ EaMhrwGNN9qeBSJNjmafAxovdADPA2YPM52XNIDQ5U9zGxqMcRpXDRSgASckriuZwB9I QRzw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id u21-20020a170906c41500b00992bf74c314si3910657ejz.983.2023.07.08.14.26.05; Sat, 08 Jul 2023 14:26:05 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BEC9168C54F; Sun, 9 Jul 2023 00:25:42 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net [217.70.183.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A3C5F68C541 for ; Sun, 9 Jul 2023 00:25:34 +0300 (EEST) X-GND-Sasl: michael@niedermayer.cc Received: by mail.gandi.net (Postfix) with ESMTPSA id DC41D40002 for ; Sat, 8 Jul 2023 21:25:33 +0000 (UTC) From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sat, 8 Jul 2023 23:25:15 +0200 Message-Id: <20230708212530.109692-3-michael@niedermayer.cc> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230708212530.109692-1-michael@niedermayer.cc> References: <20230708212530.109692-1-michael@niedermayer.cc> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 03/18] avradio/sdr: Add fm multiple parameter X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: F/nwXdEUdd9h Signed-off-by: Michael Niedermayer --- doc/demuxers.texi | 7 +++++++ libavradio/sdr.h | 1 + libavradio/sdrdemux.c | 9 +++++++++ 3 files changed, 17 insertions(+) diff --git a/doc/demuxers.texi b/doc/demuxers.texi index 81c46ce08f..86f031b9ed 100644 --- a/doc/demuxers.texi +++ b/doc/demuxers.texi @@ -965,6 +965,13 @@ it can also result in the detection of SDR artifacts such as reflections of stro as weak stations. Future versions may be better able to separate weak stations from artifacts looking like weak stations. +@item fm_multiple +Multiple of frequency in hz at which to search for stations. +you can set this to 100000 to probe stations at 0.1MHz increments +Most SDR artifacts are not at exact multiplies, this is thus an effective +way to eliminate these artifacts. +disabled by default. + @item am_mode AM Demodulation method. Several different methods are supported. @table @samp diff --git a/libavradio/sdr.h b/libavradio/sdr.h index 1053e45efe..ff4bfcaa1f 100644 --- a/libavradio/sdr.h +++ b/libavradio/sdr.h @@ -159,6 +159,7 @@ typedef struct SDRContext { float am_threshold; float fm_threshold; + float fm_multiple; pthread_t hw_thread; int thread_started; diff --git a/libavradio/sdrdemux.c b/libavradio/sdrdemux.c index 1f2d778978..13cec10505 100644 --- a/libavradio/sdrdemux.c +++ b/libavradio/sdrdemux.c @@ -915,6 +915,14 @@ static int probe_fm(SDRContext *sdr) if (fabs(f2 - f) > 1000) continue; + + if (sdr->fm_multiple) { + double f3 = lrint(f2 / sdr->fm_multiple) * sdr->fm_multiple; + if (fabs(f2 - f3) > FM_FREQ_TOLERANCE) + continue; + f2 = f3; + } + create_candidate_station(sdr, FM, f2, bandwidth_f, bandwidth_p2, score); } } @@ -2169,6 +2177,7 @@ const AVOption avpriv_sdr_options[] = { { "am_threshold" , "AM detection threshold", OFFSET(am_threshold), AV_OPT_TYPE_FLOAT, {.dbl = 20}, 0, FLT_MAX, DEC}, { "fm_threshold" , "FM detection threshold", OFFSET(fm_threshold), AV_OPT_TYPE_FLOAT, {.dbl = 50}, 0, FLT_MAX, DEC}, + { "fm_multiple" , "FM frequency mutiple", OFFSET(fm_multiple ), AV_OPT_TYPE_FLOAT, {.dbl = 0}, 0, FLT_MAX, DEC}, { NULL }, }; From patchwork Sat Jul 8 21:25:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 42537 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6d25:b0:130:f365:34ad with SMTP id fv37csp663158pzb; Sat, 8 Jul 2023 14:26:14 -0700 (PDT) X-Google-Smtp-Source: APBJJlE5ESRriYUXM5kXbxSZaZVkvGoytLPkNRFod5uyCSYCoIin12Ns17f2jO3p4LvSgDxDU5GD X-Received: by 2002:a5d:408b:0:b0:314:1ddc:ecbd with SMTP id o11-20020a5d408b000000b003141ddcecbdmr6746250wrp.18.1688851574209; Sat, 08 Jul 2023 14:26:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688851574; cv=none; d=google.com; s=arc-20160816; b=I16KrcCDr8h95bioCN+EOolOhLJk6qUIu8PNRK1NSM9nUFMWd5r1tzYlEkraRXsS9Y XHvdycUauc4a9CR6UhEfMN2u9ozwsTpVrxxfKNT3ZEarlykXxQG4aZtB1Z46avNTqQji b/isJSO8JvAivedpk9o2GJY8EIDz0EAEbAXROhxjXq7R+rVeH+9V0bMQIcbMZA2SI5cb yEoLBFCLlaKNner/SpRnxzOFjpm9XSmOquWsAp81W5oHZBgbVaq81ItsjDFb1KdcTOGK pX+/j3G1F1fJMojOhfM5bJ0C2Uo8ZGTmY7HPqDLNoZAfefu1LaC61B95BnbkLX4ZFAkm E6EQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=onaeoDTCteXy1/fuFXV0B8dbEf0eyYqh4qzSQMyqygg=; fh=YYwLYmpaV0Fpw/rxmSKNRLS2XzDkAlGbHATiKOPtZrY=; b=Y5iNXOidIFJYQ3Kjq1/IcTe2lymI0Po1+kiFZi40aktiNSkZEr3UizUbn+WYpRobEL O/JvmUtFSRocLSWc0EKJcyyw/y8JJyFU/Ii720OMLz/UO1KOLQHo3y0D1CEP91KLdcvG Cv5CGlq58n/HZ2GZn9qya7t4KQEf20fW/ZFY2OW6ynRPyisu8LmF1tfpg6LwBryRhdMo xwUzjTVqlUfQGbH8oBddQcbvwMMhXhRq3ALcAaNbfEaIbwcS4toHu+XAyH5O6/MBaapv oC8xp5Gvhsj5Wm81gX4v6NckcbLQcLq/cEV19eCU6RrMRQax0G/jByVsNBU2RHxkx/my Qs7A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id s3-20020a056402164300b0051e252568besi4476178edx.662.2023.07.08.14.26.13; Sat, 08 Jul 2023 14:26:14 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CD98068C554; Sun, 9 Jul 2023 00:25:43 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay7-d.mail.gandi.net (relay7-d.mail.gandi.net [217.70.183.200]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AE28068A31B for ; Sun, 9 Jul 2023 00:25:35 +0300 (EEST) X-GND-Sasl: michael@niedermayer.cc Received: by mail.gandi.net (Postfix) with ESMTPSA id 1289220002 for ; Sat, 8 Jul 2023 21:25:34 +0000 (UTC) From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sat, 8 Jul 2023 23:25:16 +0200 Message-Id: <20230708212530.109692-4-michael@niedermayer.cc> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230708212530.109692-1-michael@niedermayer.cc> References: <20230708212530.109692-1-michael@niedermayer.cc> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 04/18] avradio/sdrinradio: Dont automatically select 2.56Mhz on the rtlsdr X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: +sEimoje/gcY 2.56Mhz produces more artifacts than lower sample rates at least in the FM broadcast band Signed-off-by: Michael Niedermayer --- libavradio/sdrinradio.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavradio/sdrinradio.c b/libavradio/sdrinradio.c index c6f5742436..052e2298da 100644 --- a/libavradio/sdrinradio.c +++ b/libavradio/sdrinradio.c @@ -235,8 +235,8 @@ static int sdrindev_initial_hw_setup(AVFormatContext *s) (sdr->sdr_sample_rate < ranges[i].minimum || sdr->sdr_sample_rate > ranges[i].maximum)) continue; if (sdr->rtlsdr_fixes) - // 2.88 and 3.2 Mhz do not work reliable here so lets not automatically choose them, the user can override this - if (ranges[i].maximum > (2560000 + 2880000)/2) + // 2.56, 2.88 and 3.2 Mhz do not work reliable here so lets not automatically choose them, the user can override this + if (ranges[i].maximum > (2560000 + 2160000)/2) continue; max_sample_rate = FFMAX(max_sample_rate, ranges[i].maximum); } From patchwork Sat Jul 8 21:25:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 42538 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6d25:b0:130:f365:34ad with SMTP id fv37csp663195pzb; Sat, 8 Jul 2023 14:26:23 -0700 (PDT) X-Google-Smtp-Source: APBJJlFuRU/lpMxzgXQay9r9HdLnR9+tylVikqNGn9E5pY+OgFGKpHKAup/9Ia2C2xulSI0qosPI X-Received: by 2002:a5d:5087:0:b0:313:f505:8211 with SMTP id a7-20020a5d5087000000b00313f5058211mr7060127wrt.46.1688851583080; Sat, 08 Jul 2023 14:26:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688851583; cv=none; d=google.com; s=arc-20160816; b=XxESgq0zDb74wga87LnWy2weSyuggbdMiZSVolbF5rHb38fy15NyiFMATh1viGtf1E T3gM4h+T24PHkfP4WfGkI7ubpnxaJLIR7csMFRG5e7hgHe2/hrFvfJAtKDDrc9/37djm pizGTB40zNjANolxKAkYgXfkiY+rF/KPU8OWR4rMdQZUYBVJ9R8OLjugJ8JISwsICCZY Ix0fmEoCk+QAllqfnDM4P+mdsn8Qb430e1XOKeNHKcZvMr7g1ULVAZ2LgsvG8hlxlarZ 7Kn4TcSY492DR4KjeNOnevniPkuVwHKG6YzxwTBlkj1JzPyhmK06oWWvhMfHwA2F13z2 ZBPA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=2GN3GzWWti9VhdSvSJ2cZfK/HQ5W/cRsX1EguvUiJ3k=; fh=YYwLYmpaV0Fpw/rxmSKNRLS2XzDkAlGbHATiKOPtZrY=; b=vS7UQNjX/BHaeotVrvsM6vI3aepa43sEPIJuzvaNE2BR4KRuVKCpRZMzlNS4ohyoT5 lwmJDLyK7/l75D5PfOEmkmztFcjQf9ErcaT23KZQWqPuO/5Fnx6/kIb2vu2kI542lDo2 /htgrMKN7H1jsWJrmN6dRCUrSm80QqHD2RokU6gBgKyCqstkK/eP2EDQ0lwyunuHFP1u 5GZbyNxyyoocF2xw9pQBjwsx+fi7fAARsdALdKILnXsLfRWX3zbEjibzyHW3cVdulWTm 28hHbFGe51CH/k/9jnyzqNHi5/JNSIUH7gky117RWOjODMlTjQC/jO/OpJ79AvQYNvv5 Nu6A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id m11-20020a056402050b00b0051e247492a5si4514759edv.626.2023.07.08.14.26.22; Sat, 08 Jul 2023 14:26:23 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E90B068C566; Sun, 9 Jul 2023 00:25:44 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay9-d.mail.gandi.net (relay9-d.mail.gandi.net [217.70.183.199]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7D65768C54F for ; Sun, 9 Jul 2023 00:25:37 +0300 (EEST) X-GND-Sasl: michael@niedermayer.cc Received: by mail.gandi.net (Postfix) with ESMTPSA id ACE49FF803 for ; Sat, 8 Jul 2023 21:25:36 +0000 (UTC) From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sat, 8 Jul 2023 23:25:17 +0200 Message-Id: <20230708212530.109692-5-michael@niedermayer.cc> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230708212530.109692-1-michael@niedermayer.cc> References: <20230708212530.109692-1-michael@niedermayer.cc> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 05/18] avradio/sdrdemux: Do not timeout negative stations X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: LMdIep5rcp+S If we identified that a station is an artifact of the SDR, we dont want to timeout that to avoid it being redetected as station Signed-off-by: Michael Niedermayer --- libavradio/sdrdemux.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/libavradio/sdrdemux.c b/libavradio/sdrdemux.c index 13cec10505..39eaa0c094 100644 --- a/libavradio/sdrdemux.c +++ b/libavradio/sdrdemux.c @@ -347,6 +347,7 @@ static void decay_stations(SDRContext *sdr) for (int i=0; ifrequency - station->bandwidth/2 < sdr->block_center_freq - sdr->bandwidth/2 || station->frequency + station->bandwidth/2 > sdr->block_center_freq + sdr->bandwidth/2) @@ -355,9 +356,10 @@ static void decay_stations(SDRContext *sdr) if (station->timeout) station->non_detection_per_mix_frequency[histogram_index(sdr, station->frequency)] ++; + hs = histogram_score(station); + if (station->in_station_list) { int station_timeout = STATION_TIMEOUT; - int hs = histogram_score(station); if (hs == 0) { station_timeout = 5; //give the station a moment to be properly detected and then discard it @@ -370,7 +372,13 @@ static void decay_stations(SDRContext *sdr) station->in_station_list = 0; } } else { - if (station->timeout++ > CANDIDATE_STATION_TIMEOUT) { + int station_timeout = CANDIDATE_STATION_TIMEOUT; + + //We do not want to drop "negative" stations to avoid them being redetected + if (hs <= 0) + station_timeout = INT_MAX; + + if (station->timeout++ > station_timeout) { struct AVTreeNode *next = NULL; tree_remove(&sdr->station_root, station, station_cmp, &next); av_freep(&next); From patchwork Sat Jul 8 21:25:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 42539 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6d25:b0:130:f365:34ad with SMTP id fv37csp663249pzb; Sat, 8 Jul 2023 14:26:32 -0700 (PDT) X-Google-Smtp-Source: APBJJlGoZUMcjIApPrvOkXfyDon8gYnbLbt/n3YFdGuMXG+C3UMz8j3IBzycLvsbiOCHUNMPV+G1 X-Received: by 2002:aa7:c610:0:b0:51a:2013:583 with SMTP id h16-20020aa7c610000000b0051a20130583mr6831032edq.13.1688851592354; Sat, 08 Jul 2023 14:26:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688851592; cv=none; d=google.com; s=arc-20160816; b=PMGwXWLKv3EDBYdKcPwART4RtSySCIxLlp5CZzVaAJ5YhlylqQTjnzuutRXLJuzY0N rmBVPICmChIGRFpls2HvPcp4Y/dGeo+cMmziK2ZdXBfK2rRJNlCEMfQ2zkC/exABt0CX ek3+Z0vejuMGcyjGFFq2+HDJ2MuUYRCB9crhnlATKWhNbx76Qd5RUxA7/TZ+XpaTNI9S Zq4taZ/NVrUrELh3zO9NqqOHEc5JkUjN3mfBdwLDam6e3o2gFjx16IwxvJRNiR2If4EI uOoiw/rzyIAk+f8+0+Tptc1h4xdyRVb8dCMvHNK0hI+JeffbICqZNnkSw+yobkwwb3lE 5hDQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=aCE9y+hqPpB5CCGunXXSMnM/gdx9M0Y5DFayBS8/6PY=; fh=YYwLYmpaV0Fpw/rxmSKNRLS2XzDkAlGbHATiKOPtZrY=; b=kGvszs93uFa2H8VUTk/Fp679urcYSMNNrJEZXP3w2wqD6BNlv5p3NUxxFZBcxWZjoA t76oIYjI4rheT+Y6mR7wXAWwrRsRWPvWV5bzeh+qwwy1UmkyCfleOnq+pn0Q7m3BY+8C UKehQnx+TUuf/DF5SLGQ/IIVrfcuvUtQ+/Z4hX5+NlN7SKB0o4webbgQ4tAeWUIDwHa9 fFag6VBmHXkuhDZ3dylH2O6jPxsLpH9hYKBU3sCSgVLNXXrLCzrVVtIPJmv1rqQzppV9 cdEd5pJkym/km65DNoCwkuEN3+RxrWXHYf9yeKQpUwta4cOa+jXvfD3qhuitUsU9JT7f mw9w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id l17-20020a056402345100b0051ddfef0dd6si4390692edc.240.2023.07.08.14.26.31; Sat, 08 Jul 2023 14:26:32 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F322F68C572; Sun, 9 Jul 2023 00:25:45 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay1-d.mail.gandi.net (relay1-d.mail.gandi.net [217.70.183.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 254AB68C54B for ; Sun, 9 Jul 2023 00:25:38 +0300 (EEST) X-GND-Sasl: michael@niedermayer.cc Received: by mail.gandi.net (Postfix) with ESMTPSA id 876D9240006 for ; Sat, 8 Jul 2023 21:25:37 +0000 (UTC) From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sat, 8 Jul 2023 23:25:18 +0200 Message-Id: <20230708212530.109692-6-michael@niedermayer.cc> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230708212530.109692-1-michael@niedermayer.cc> References: <20230708212530.109692-1-michael@niedermayer.cc> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 06/18] avradio/sdrinradio: Factor print_and_free_list() out X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: yL/oH788frl8 Signed-off-by: Michael Niedermayer --- libavradio/sdrinradio.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/libavradio/sdrinradio.c b/libavradio/sdrinradio.c index 052e2298da..e4f17f4bc9 100644 --- a/libavradio/sdrinradio.c +++ b/libavradio/sdrinradio.c @@ -93,6 +93,17 @@ static int sdrindev_set_frequency_callback(SDRContext *sdr, int64_t freq) return 0; } +static void print_and_free_list(AVFormatContext *s, char** names, size_t length, const char *title) +{ + if (length) { + av_log(s, AV_LOG_INFO, "%s:", title); + for (int i = 0; i < length; i++) + av_log(s, AV_LOG_INFO, "%c%s", ", "[!i], names[i]); + av_log(s, AV_LOG_INFO, "\n"); + } + SoapySDRStrings_clear(&names, length); +} + /** * Initial setup of SDR HW through soapy. * This will go over available settings and match them up with what the user requested @@ -162,19 +173,11 @@ static int sdrindev_initial_hw_setup(AVFormatContext *s) //Go over all Antennas and print them names = SoapySDRDevice_listAntennas(soapy, SOAPY_SDR_RX, 0, &length); - av_log(s, AV_LOG_INFO, "Antennas: "); - for (i = 0; i < length; i++) - av_log(s, AV_LOG_INFO, "%s, ", names[i]); - av_log(s, AV_LOG_INFO, "\n"); - SoapySDRStrings_clear(&names, length); + print_and_free_list(s, names, length, "Antennas"); //Go over all Gain Elements and print them names = SoapySDRDevice_listGains(soapy, SOAPY_SDR_RX, 0, &length); - av_log(s, AV_LOG_INFO, "Rx Gain Elements: "); - for (i = 0; i < length; i++) - av_log(s, AV_LOG_INFO, "%s, ", names[i]); - av_log(s, AV_LOG_INFO, "\n"); - SoapySDRStrings_clear(&names, length); + print_and_free_list(s, names, length, "Rx Gain Elements"); //Inform the user if AGC is supported and setup AGC as requested by the user has_agc = SoapySDRDevice_hasGainMode(soapy, SOAPY_SDR_RX, 0); From patchwork Sat Jul 8 21:25:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 42541 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6d25:b0:130:f365:34ad with SMTP id fv37csp663347pzb; Sat, 8 Jul 2023 14:26:49 -0700 (PDT) X-Google-Smtp-Source: APBJJlFJzKWY3JPcLZovDpT/4KLnrKWSAnEwEihfa7aJzzokANZJRM6E3YcTF6bNiiyl/SI6hIQ2 X-Received: by 2002:ac2:4e81:0:b0:4fb:9168:1fc7 with SMTP id o1-20020ac24e81000000b004fb91681fc7mr5924491lfr.51.1688851609621; Sat, 08 Jul 2023 14:26:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688851609; cv=none; d=google.com; s=arc-20160816; b=tvRNzHYYlh6jjFww8qD2TpZC1rrIz7k9TIBAu4c6qTn4TLOdeSJ0cb4OsL6iMBlQkJ kHmEI+VZNMtGy0AoR1EmswRp5HNiHMVR8cx6TaF9wK/rZZtRlA3y4Ll0AUnEkNFbWgZ/ AUz/njLoH3INCyAIq58NPq45oxYANCcTgA+umyxm4l/9c2HJCAvnkDFoXnUb0N7bzFz9 oiYC7nzf0Y4xq42fOxKjaZU0VeBPcY05mu0UTt4SB3mBnBE2/Yp7iir2OSMldlUvONO3 BjWMZz1KRsWPFYigIqlySeBpFw5k9cKsEt4efraHM7EPMgCzkcAPIVmNnCOATibEWLfq nSIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=qG4t9sBhUxRgLHWS8Lr/dDSvw8ppgorIn6Av6YuAn3k=; fh=YYwLYmpaV0Fpw/rxmSKNRLS2XzDkAlGbHATiKOPtZrY=; b=lxeajTZHbshSw8v9yE9HbMN4SII6JdCoi/Z0z7mbuo61D8iHvZvZonPpF+2rU+bbcu 0AxmuYZfk/4saVmlfJZGZfGVPHY5FhqNT7/UBcmpHiWDIbyk7lADJaEAnCjkRdeOdbwH MEJz7YLxmJPH4Lgq8e7yJQ/k2IvysbobGPfbxHdRa/y6JGuG5f5/kZGsXdT0TIXS/jJH 8OAG9hMfE9yaJKCEtAKuSxTKxvK2Q/uteaIBH7LI0DjOciqtniIAKin0+GeUacUJOG+E csOCJaAJU0dOigJhjQy+kzw8dvvOXf1iPST8sYSz+aB7W+r5wPEMI3Rf1y7ry+jTRc1E JtXw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id n14-20020aa7c44e000000b0051e28e8f27dsi4027396edr.602.2023.07.08.14.26.49; Sat, 08 Jul 2023 14:26:49 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2873668C552; Sun, 9 Jul 2023 00:25:48 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay7-d.mail.gandi.net (relay7-d.mail.gandi.net [217.70.183.200]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E5BC268C553 for ; Sun, 9 Jul 2023 00:25:38 +0300 (EEST) X-GND-Sasl: michael@niedermayer.cc Received: by mail.gandi.net (Postfix) with ESMTPSA id 5AFCA20003 for ; Sat, 8 Jul 2023 21:25:38 +0000 (UTC) From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sat, 8 Jul 2023 23:25:19 +0200 Message-Id: <20230708212530.109692-7-michael@niedermayer.cc> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230708212530.109692-1-michael@niedermayer.cc> References: <20230708212530.109692-1-michael@niedermayer.cc> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 07/18] avradio/sdrinradio: Print list of Time Sources X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: RHBJ6EEBEGq7 Signed-off-by: Michael Niedermayer --- libavradio/sdrinradio.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libavradio/sdrinradio.c b/libavradio/sdrinradio.c index e4f17f4bc9..af87b49495 100644 --- a/libavradio/sdrinradio.c +++ b/libavradio/sdrinradio.c @@ -171,6 +171,9 @@ static int sdrindev_initial_hw_setup(AVFormatContext *s) return AVERROR_EXTERNAL; } + names = SoapySDRDevice_listTimeSources(soapy, &length); + print_and_free_list(s, names, length, "Clocks"); + //Go over all Antennas and print them names = SoapySDRDevice_listAntennas(soapy, SOAPY_SDR_RX, 0, &length); print_and_free_list(s, names, length, "Antennas"); From patchwork Sat Jul 8 21:25:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 42543 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6d25:b0:130:f365:34ad with SMTP id fv37csp663433pzb; Sat, 8 Jul 2023 14:27:07 -0700 (PDT) X-Google-Smtp-Source: APBJJlGfWydryjAphPXt89Bb+C+yMcC3hSSZTLC+O+fGQPzgQdbg4g1GUxe8qS9EZJaHyRXZ3EW7 X-Received: by 2002:a17:906:1046:b0:993:d5bd:a75e with SMTP id j6-20020a170906104600b00993d5bda75emr4433496ejj.6.1688851627068; Sat, 08 Jul 2023 14:27:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688851627; cv=none; d=google.com; s=arc-20160816; b=C//RpxHaIUUVgx21TnEtI//PTQXNvRss7mBkAh0O6OuOMc27SBv8ybT2HNJNpY3IXq 6BJaBVn/zYalaUCGMWsazSsdMLY2txcdWDfu/lbE22JVK82Ia1RmUmR7rO38jn2YpEBZ q6OK6q+ZQuBty01jx97YSDC0+cyI+0wrm6QYzDb8g4ne/D4XPgSt3AQ5SFe9BHB+pngN QhvUB0/WAquYv3bBXZ5g62qs1UQP93xMwH5NrauwdxNUk6PzCXOHnhljacvbg3dwZ0PZ ouxqGe0WLrVie5znbBgJRiCevUuyItDhpgdX/9ndCLeLwaILqpL46TpHdXu6O4g5Swaq 8OEw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=nR17v1qOzjrVuhPYpa8pAsNY9FMzTTbeuTU4PUsOXbc=; fh=YYwLYmpaV0Fpw/rxmSKNRLS2XzDkAlGbHATiKOPtZrY=; b=CU7thz6h2JaX6rcpDpibcd698tKvz3g98eSbcxvRafRPtoCv/gqHHDTsNThSblApbp kFXJpu5TlKramENw6bwW4sJqcwGPpJWc721i+CZAwWEnYvEnce1DvTJ4FlVn3fMY6/cA jd2VygPzjYAtzfrhWz1LKTulb6I7yUTM7PLgET6p2d8lMBxZfh5OPuM2mo6rPCuE/q8H sqjqO37HmS4XaLwqSn3G2lFSBT/7h3COqydCVK5+XPJFlNq9hQDJzQPB8Z4wRIufg643 8mcz+D0MTsd9lMMNFl+QiiIXRKgA8spUvkKRWYXoLOi3IQHqW1itcA0vB6uQdsQtz0H1 clJw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id s6-20020a170906454600b00987a0569370si3479433ejq.703.2023.07.08.14.27.06; Sat, 08 Jul 2023 14:27:07 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2FFCE68C59A; Sun, 9 Jul 2023 00:25:50 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay4-d.mail.gandi.net (relay4-d.mail.gandi.net [217.70.183.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2FE6868C563 for ; Sun, 9 Jul 2023 00:25:40 +0300 (EEST) X-GND-Sasl: michael@niedermayer.cc Received: by mail.gandi.net (Postfix) with ESMTPSA id 56FCEE0002 for ; Sat, 8 Jul 2023 21:25:39 +0000 (UTC) From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sat, 8 Jul 2023 23:25:20 +0200 Message-Id: <20230708212530.109692-8-michael@niedermayer.cc> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230708212530.109692-1-michael@niedermayer.cc> References: <20230708212530.109692-1-michael@niedermayer.cc> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 08/18] avradio: split out vissualization code X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: +egxGDZtOg+Q Signed-off-by: Michael Niedermayer --- libavradio/Makefile | 4 +- libavradio/sdr.h | 21 ++++ libavradio/sdrdemux.c | 207 +++------------------------------------- libavradio/vissualize.c | 200 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 238 insertions(+), 194 deletions(-) create mode 100644 libavradio/vissualize.c diff --git a/libavradio/Makefile b/libavradio/Makefile index 23c173bc58..40b38f798e 100644 --- a/libavradio/Makefile +++ b/libavradio/Makefile @@ -11,5 +11,5 @@ OBJS = allradios.o \ # input/output radios -OBJS-$(CONFIG_SDR_INRADIO) += sdrinradio.o -OBJS-$(CONFIG_SDRFILE_INRADIO) += sdrdemux.o +OBJS-$(CONFIG_SDR_INRADIO) += sdrinradio.o vissualize.o +OBJS-$(CONFIG_SDRFILE_INRADIO) += sdrdemux.o vissualize.o diff --git a/libavradio/sdr.h b/libavradio/sdr.h index ff4bfcaa1f..95ff903293 100644 --- a/libavradio/sdr.h +++ b/libavradio/sdr.h @@ -34,6 +34,8 @@ #include "libavutil/tx.h" #include "libavformat/avformat.h" +#define FREQ_BITS 22 +#define TIMEBASE ((48000ll / 128) << FREQ_BITS) #define INDEX2F(INDEX) (((INDEX) - sdr->block_size + 0.5) * 0.5 * sdr->sdr_sample_rate / sdr->block_size + sdr->block_center_freq) #define F2INDEX(F) ((( F) - sdr->block_center_freq) * 2 * sdr->block_size / sdr->sdr_sample_rate + sdr->block_size - 0.5) @@ -229,6 +231,8 @@ typedef struct BandDescriptor { extern const AVOption avpriv_sdr_options[]; +extern ModulationDescriptor ff_sdr_modulation_descs[]; + /** * Set the center frequency of the hardware * this will check the argument and call set_frequency_callback() @@ -250,4 +254,21 @@ void avpriv_sdr_stop_threading(AVFormatContext *s); int avpriv_sdr_read_close(AVFormatContext *s); +int ff_sdr_vissualization(SDRContext *sdr, AVStream *st, AVPacket *pkt); + +/** + * Find stations within the given parameters. + * @param[out] station_list array to return stations in + * @param nb_stations size of station array + * @returns number of stations found + */ +int ff_sdr_find_stations(SDRContext *sdr, double freq, double range, Station **station_list, int station_list_size); + +int ff_sdr_histogram_score(Station *s); + +static inline float len2(AVComplexFloat c) +{ + return c.re*c.re + c.im*c.im; +} + #endif /* AVRADIO_SDR_H */ diff --git a/libavradio/sdrdemux.c b/libavradio/sdrdemux.c index 39eaa0c094..392fece4e9 100644 --- a/libavradio/sdrdemux.c +++ b/libavradio/sdrdemux.c @@ -48,7 +48,6 @@ #include "libavutil/thread.h" #include "libavutil/tree.h" #include "libavutil/tx.h" -#include "libavutil/xga_font_data.h" #include "libavcodec/kbdwin.h" #include "libavformat/avformat.h" #include "libavformat/demux.h" @@ -58,9 +57,6 @@ #include "libavutil/lfg.h" #endif -#define FREQ_BITS 22 -#define TIMEBASE ((48000ll / 128) << FREQ_BITS) - #define AM_FREQ_TOLERANCE 5 #define FM_FREQ_TOLERANCE 500 @@ -101,11 +97,6 @@ static void apply_deemphasis(SDRContext *sdr, AVComplexFloat *data, int len, int } } -static float len2(AVComplexFloat c) -{ - return c.re*c.re + c.im*c.im; -} - static void free_station(Station *station) { av_freep(&station->name); @@ -120,7 +111,7 @@ static inline int histogram_index(SDRContext *sdr, double f) return av_clip((int)f, 0, HISTOGRAMM_SIZE-1); } -static int histogram_score(Station *s) +int ff_sdr_histogram_score(Station *s) { int score = 0; for(int i = 0; iblock_center_freq, sdr->sdr_sample_rate*0.5, station_list, FF_ARRAY_ELEMS(station_list)); + int nb_stations = ff_sdr_find_stations(sdr, sdr->block_center_freq, sdr->sdr_sample_rate*0.5, station_list, FF_ARRAY_ELEMS(station_list)); for (i=0; ifrequency - freq); @@ -305,7 +290,7 @@ static void create_stations(SDRContext *sdr) if (!sdr->block_center_freq) return; - int nb_stations = find_stations(sdr, sdr->block_center_freq, sdr->sdr_sample_rate*0.5, station_list, FF_ARRAY_ELEMS(station_list)); + int nb_stations = ff_sdr_find_stations(sdr, sdr->block_center_freq, sdr->sdr_sample_rate*0.5, station_list, FF_ARRAY_ELEMS(station_list)); for(int i = 0; iblock_center_freq, sdr->bandwidth*0.5, station_list, FF_ARRAY_ELEMS(station_list)); + int nb_stations = ff_sdr_find_stations(sdr, sdr->block_center_freq, sdr->bandwidth*0.5, station_list, FF_ARRAY_ELEMS(station_list)); for (int i=0; itimeout) station->non_detection_per_mix_frequency[histogram_index(sdr, station->frequency)] ++; - hs = histogram_score(station); + hs = ff_sdr_histogram_score(station); if (station->in_station_list) { int station_timeout = STATION_TIMEOUT; @@ -395,7 +380,7 @@ static int create_candidate_station(SDRContext *sdr, enum Modulation modulation, struct AVTreeNode *next = NULL; Station *station_list[1000]; double snapdistance = modulation == AM ? AM_FREQ_TOLERANCE : FM_FREQ_TOLERANCE; - int nb_stations = find_stations(sdr, freq, snapdistance, station_list, FF_ARRAY_ELEMS(station_list)); + int nb_stations = ff_sdr_find_stations(sdr, freq, snapdistance, station_list, FF_ARRAY_ELEMS(station_list)); if (nb_stations) { for(int i = 1; iblock_center_freq, sdr->sdr_sample_rate*0.5, station_list, FF_ARRAY_ELEMS(station_list)); + int nb_stations = ff_sdr_find_stations(sdr, sdr->block_center_freq, sdr->sdr_sample_rate*0.5, station_list, FF_ARRAY_ELEMS(station_list)); if (sst->station) { current_freq = sst->station->frequency; @@ -1612,168 +1597,6 @@ static int sdrfile_initial_setup(AVFormatContext *s) return avpriv_sdr_common_init(s); } -static inline void draw_point_component(uint8_t *frame_buffer, ptrdiff_t stride, int x, int y, int r, int g, int b, int w, int h) -{ - uint8_t *p; - - if (x<0 || y<0 || x>=w || y>=h) - return; - p = frame_buffer + 4*x + stride*y; - - p[0] = av_clip_uint8(p[0] + (b>>16)); - p[1] = av_clip_uint8(p[1] + (g>>16)); - p[2] = av_clip_uint8(p[2] + (r>>16)); -} - -// Draw a point with subpixel precission, (it looked bad otherwise) -static void draw_point(uint8_t *frame_buffer, ptrdiff_t stride, int x, int y, int r, int g, int b, int w, int h) -{ - int px = x>>8; - int py = y>>8; - int sx = x&255; - int sy = y&255; - int s; - - s = (256 - sx) * (256 - sy); - draw_point_component(frame_buffer, stride, px , py , r*s, g*s, b*s, w, h); - s = sx * (256 - sy); - draw_point_component(frame_buffer, stride, px+1, py , r*s, g*s, b*s, w, h); - s = (256 - sx) * sy; - draw_point_component(frame_buffer, stride, px , py+1, r*s, g*s, b*s, w, h); - s = sx * sy; - draw_point_component(frame_buffer, stride, px+1, py+1, r*s, g*s, b*s, w, h); -} - -static void draw_char(uint8_t *frame_buffer, ptrdiff_t stride, char ch, int x0, int y0, int xd, int yd, int r, int g, int b, int w, int h) -{ - for(int y = 0; y < 16; y++) { - int mask = avpriv_vga16_font[16*ch + y]; - for(int x = 0; x < 8; x++) { - if (mask&0x80) - draw_point(frame_buffer, stride, x0 + xd*x - yd*y, y0 + yd*x + xd*y, r, g, b, w, h); - mask<<=1; - } - } -} - -static void draw_string(uint8_t *frame_buffer, ptrdiff_t stride, char *str, int x0, int y0, int xd, int yd, int r, int g, int b, int w, int h) -{ - while(*str) { - draw_char(frame_buffer, stride, *str++, x0, y0, xd, yd, r, g, b, w, h); - x0 += xd*9; - y0 += yd*9; - } -} - -static int vissualization(SDRContext *sdr, AVStream *st, AVPacket *pkt) -{ - SDRStream *sst = st->priv_data; - int w = st->codecpar->width; - int h = st->codecpar->height; - int h2 = FFMIN(64, h / 4); - int frame_index = av_rescale(sdr->pts, sdr->fps.num, sdr->fps.den * TIMEBASE); - int last_index = av_rescale(sdr->last_pts, sdr->fps.num, sdr->fps.den * TIMEBASE); - int skip = frame_index == last_index || sdr->missing_streams; - av_assert0(sdr->missing_streams >= 0); - - for(int x= 0; xframe_buffer_line*w); - int bindex = x * 2ll * sdr->block_size / w; - int bindex2 = (x+1) * 2ll * sdr->block_size / w; - float a = 0; - av_assert0(bindex2 <= 2 * sdr->block_size); - for (int i = bindex; i < bindex2; i++) { - AVComplexFloat sample = sdr->block[i]; - a += len2(sample); - } - color = lrintf(log(a)*8 + 32); - - sst->frame_buffer[idx + 0] = color; - sst->frame_buffer[idx + 1] = color; - sst->frame_buffer[idx + 2] = color; - sst->frame_buffer[idx + 3] = 255; - } - - // Display locations of all vissible stations -// for(int station_index = 0; station_indexnb_stations; station_index++) { -// Station *s = sdr->station[station_index]; -// double f = s->frequency; -// // int bw = s->bandwidth; -// // int xleft = 256*((f-bw) - sdr->block_center_freq + sdr->sdr_sample_rate/2) * w / sdr->sdr_sample_rate; -// // int xright= 256*((f+bw) - sdr->block_center_freq + sdr->sdr_sample_rate/2) * w / sdr->sdr_sample_rate; -// int xmid = 256*( f - sdr->block_center_freq + sdr->sdr_sample_rate/2) * w / sdr->sdr_sample_rate; -// int g = s->modulation == AM ? 50 : 0; -// int b = s->modulation == AM ? 0 : 70; -// int r = s->stream ? 50 : 0; -// -// draw_point(sst->frame_buffer, 4*w, xmid, 256*(sst->frame_buffer_line+1), r, g, b, w, h); -// } - - if (!skip) { - int ret = av_new_packet(pkt, sst->frame_size); - if (ret < 0) - return ret; - - for(int y= 0; yblock_size / (w * h2); - int bindex2 = (idx+1) * 2ll * sdr->block_size / (w * h2); - float a = 0; - av_assert0(bindex2 <= 2 * sdr->block_size); - for (int i = bindex; i < bindex2; i++) { - AVComplexFloat sample = sdr->block[i]; - a += len2(sample); - } - color = lrintf(log(a)*9 + 64); - - idx_t *= 4; - - pkt->data[idx_t+0] = color; - pkt->data[idx_t+1] = color; - pkt->data[idx_t+2] = color; - pkt->data[idx_t+3] = 255; - } - } - - for (int y= h2; ydata + 4*y*w, sst->frame_buffer + 4*(y + sst->frame_buffer_line - h2)*w, 4*w); - - Station *station_list[1000]; - int nb_stations = find_stations(sdr, sdr->block_center_freq, sdr->sdr_sample_rate*0.6, station_list, FF_ARRAY_ELEMS(station_list)); - for(int station_index = 0; station_indexfrequency; - int xmid = 256*( f - sdr->block_center_freq + sdr->sdr_sample_rate/2) * w / sdr->sdr_sample_rate; - char text[20]; - int color = s->stream ? 64 : 32; - int size = s->stream ? 181 : 128; - int xd = size, yd = size; - - if (!s->in_station_list) - continue; - - snprintf(text, sizeof(text), "%s %f Mhz", - modulation_descs[s->modulation].shortname, - f/1000000); - draw_string(pkt->data, 4*w, text, xmid + 8*yd, 320*h2, xd, yd, color, color, color, w, h); - } - } - - if (!sst->frame_buffer_line) { - memcpy(sst->frame_buffer + sst->frame_size, sst->frame_buffer, sst->frame_size); - sst->frame_buffer_line = h-1; - } else - sst->frame_buffer_line--; - -//TODO -// draw RDS* - return skip; -} - int avpriv_sdr_read_packet(AVFormatContext *s, AVPacket *pkt) { SDRContext *sdr = s->priv_data; @@ -1789,13 +1612,13 @@ process_next_block: if (sst->processing_index) { int skip = 1; if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { - skip = vissualization(sdr, st, pkt); + skip = ff_sdr_vissualization(sdr, st, pkt); if (skip < 0) return skip; } else if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) { if (sst->station) { skip = 0; - ret = modulation_descs[ sst->station->modulation ].demodulate(sdr, stream_index, pkt); + ret = ff_sdr_modulation_descs[ sst->station->modulation ].demodulate(sdr, stream_index, pkt); if (ret < 0) { av_log(s, AV_LOG_ERROR, "demodulation failed ret = %d\n", ret); } @@ -1970,8 +1793,8 @@ process_next_block: sdr->skip_probe = 5; probe_common(sdr); - for(int i = 0; i < FF_ARRAY_ELEMS(modulation_descs); i++) { - ModulationDescriptor *md = &modulation_descs[i]; + for(int i = 0; i < FF_ARRAY_ELEMS(ff_sdr_modulation_descs); i++) { + ModulationDescriptor *md = &ff_sdr_modulation_descs[i]; md->probe(sdr); av_assert0(i == md->modulation); } @@ -1992,7 +1815,7 @@ process_next_block: } else { av_assert0(sdr->mode == AllStationMode); Station *station_list[1000]; - int nb_stations = find_stations(sdr, sdr->block_center_freq, sdr->sdr_sample_rate*0.5, station_list, FF_ARRAY_ELEMS(station_list)); + int nb_stations = ff_sdr_find_stations(sdr, sdr->block_center_freq, sdr->sdr_sample_rate*0.5, station_list, FF_ARRAY_ELEMS(station_list)); for(int i = 0; istream) { diff --git a/libavradio/vissualize.c b/libavradio/vissualize.c new file mode 100644 index 0000000000..c165e0fb63 --- /dev/null +++ b/libavradio/vissualize.c @@ -0,0 +1,200 @@ +/* + * SDR Demuxer / Demodulator Vissualization + * Copyright (c) 2023 Michael Niedermayer + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file + * + * + */ + + +#include "sdr.h" + +#include +#include "libavutil/avassert.h" +#include "libavutil/ffmath.h" +#include "libavutil/intreadwrite.h" +#include "libavutil/opt.h" +#include "libavutil/avstring.h" +#include "libavutil/xga_font_data.h" +#include "libavformat/avformat.h" + +static inline void draw_point_component(uint8_t *frame_buffer, ptrdiff_t stride, int x, int y, int r, int g, int b, int w, int h) +{ + uint8_t *p; + + if (x<0 || y<0 || x>=w || y>=h) + return; + p = frame_buffer + 4*x + stride*y; + + p[0] = av_clip_uint8(p[0] + (b>>16)); + p[1] = av_clip_uint8(p[1] + (g>>16)); + p[2] = av_clip_uint8(p[2] + (r>>16)); +} + +// Draw a point with subpixel precission, (it looked bad otherwise) +static void draw_point(uint8_t *frame_buffer, ptrdiff_t stride, int x, int y, int r, int g, int b, int w, int h) +{ + int px = x>>8; + int py = y>>8; + int sx = x&255; + int sy = y&255; + int s; + + s = (256 - sx) * (256 - sy); + draw_point_component(frame_buffer, stride, px , py , r*s, g*s, b*s, w, h); + s = sx * (256 - sy); + draw_point_component(frame_buffer, stride, px+1, py , r*s, g*s, b*s, w, h); + s = (256 - sx) * sy; + draw_point_component(frame_buffer, stride, px , py+1, r*s, g*s, b*s, w, h); + s = sx * sy; + draw_point_component(frame_buffer, stride, px+1, py+1, r*s, g*s, b*s, w, h); +} + +static void draw_char(uint8_t *frame_buffer, ptrdiff_t stride, char ch, int x0, int y0, int xd, int yd, int r, int g, int b, int w, int h) +{ + for(int y = 0; y < 16; y++) { + int mask = avpriv_vga16_font[16*ch + y]; + for(int x = 0; x < 8; x++) { + if (mask&0x80) + draw_point(frame_buffer, stride, x0 + xd*x - yd*y, y0 + yd*x + xd*y, r, g, b, w, h); + mask<<=1; + } + } +} + +static void draw_string(uint8_t *frame_buffer, ptrdiff_t stride, char *str, int x0, int y0, int xd, int yd, int r, int g, int b, int w, int h) +{ + while(*str) { + draw_char(frame_buffer, stride, *str++, x0, y0, xd, yd, r, g, b, w, h); + x0 += xd*9; + y0 += yd*9; + } +} + +int ff_sdr_vissualization(SDRContext *sdr, AVStream *st, AVPacket *pkt) +{ + SDRStream *sst = st->priv_data; + int w = st->codecpar->width; + int h = st->codecpar->height; + int h2 = FFMIN(64, h / 4); + int frame_index = av_rescale(sdr->pts, sdr->fps.num, sdr->fps.den * TIMEBASE); + int last_index = av_rescale(sdr->last_pts, sdr->fps.num, sdr->fps.den * TIMEBASE); + int skip = frame_index == last_index || sdr->missing_streams; + av_assert0(sdr->missing_streams >= 0); + + for(int x= 0; xframe_buffer_line*w); + int bindex = x * 2ll * sdr->block_size / w; + int bindex2 = (x+1) * 2ll * sdr->block_size / w; + float a = 0; + av_assert0(bindex2 <= 2 * sdr->block_size); + for (int i = bindex; i < bindex2; i++) { + AVComplexFloat sample = sdr->block[i]; + a += len2(sample); + } + color = lrintf(log(a)*8 + 32); + + sst->frame_buffer[idx + 0] = color; + sst->frame_buffer[idx + 1] = color; + sst->frame_buffer[idx + 2] = color; + sst->frame_buffer[idx + 3] = 255; + } + + // Display locations of all vissible stations +// for(int station_index = 0; station_indexnb_stations; station_index++) { +// Station *s = sdr->station[station_index]; +// double f = s->frequency; +// // int bw = s->bandwidth; +// // int xleft = 256*((f-bw) - sdr->block_center_freq + sdr->sdr_sample_rate/2) * w / sdr->sdr_sample_rate; +// // int xright= 256*((f+bw) - sdr->block_center_freq + sdr->sdr_sample_rate/2) * w / sdr->sdr_sample_rate; +// int xmid = 256*( f - sdr->block_center_freq + sdr->sdr_sample_rate/2) * w / sdr->sdr_sample_rate; +// int g = s->modulation == AM ? 50 : 0; +// int b = s->modulation == AM ? 0 : 70; +// int r = s->stream ? 50 : 0; +// +// draw_point(sst->frame_buffer, 4*w, xmid, 256*(sst->frame_buffer_line+1), r, g, b, w, h); +// } + + if (!skip) { + int ret = av_new_packet(pkt, sst->frame_size); + if (ret < 0) + return ret; + + for(int y= 0; yblock_size / (w * h2); + int bindex2 = (idx+1) * 2ll * sdr->block_size / (w * h2); + float a = 0; + av_assert0(bindex2 <= 2 * sdr->block_size); + for (int i = bindex; i < bindex2; i++) { + AVComplexFloat sample = sdr->block[i]; + a += len2(sample); + } + color = lrintf(log(a)*9 + 64); + + idx_t *= 4; + + pkt->data[idx_t+0] = color; + pkt->data[idx_t+1] = color; + pkt->data[idx_t+2] = color; + pkt->data[idx_t+3] = 255; + } + } + + for (int y= h2; ydata + 4*y*w, sst->frame_buffer + 4*(y + sst->frame_buffer_line - h2)*w, 4*w); + + Station *station_list[1000]; + int nb_stations = ff_sdr_find_stations(sdr, sdr->block_center_freq, sdr->sdr_sample_rate*0.6, station_list, FF_ARRAY_ELEMS(station_list)); + for(int station_index = 0; station_indexfrequency; + int xmid = 256*( f - sdr->block_center_freq + sdr->sdr_sample_rate/2) * w / sdr->sdr_sample_rate; + char text[80]; + int color = s->stream ? 64 : 32; + int size = s->stream ? 181 : 128; + int xd = size, yd = size; + + if (!s->in_station_list) + continue; + + snprintf(text, sizeof(text), "%s %f Mhz %d %d %d", + ff_sdr_modulation_descs[s->modulation].shortname, + f/1000000, (int)s->score, ff_sdr_histogram_score(s), s->timeout); + draw_string(pkt->data, 4*w, text, xmid + 8*yd, 320*h2, xd, yd, color, color, color, w, h); + } + } + + if (!sst->frame_buffer_line) { + memcpy(sst->frame_buffer + sst->frame_size, sst->frame_buffer, sst->frame_size); + sst->frame_buffer_line = h-1; + } else + sst->frame_buffer_line--; + +//TODO +// draw RDS* + return skip; +} From patchwork Sat Jul 8 21:25:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 42545 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6d25:b0:130:f365:34ad with SMTP id fv37csp663520pzb; Sat, 8 Jul 2023 14:27:24 -0700 (PDT) X-Google-Smtp-Source: APBJJlGpveWAwJoffA6qYLQdTXpEGvboVWL91LwRxuxhB/0H0paIWo7xT+JvXXoV0/e8U7mqwPGJ X-Received: by 2002:a17:907:6d1f:b0:993:22a2:9234 with SMTP id sa31-20020a1709076d1f00b0099322a29234mr13457191ejc.31.1688851644446; Sat, 08 Jul 2023 14:27:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688851644; cv=none; d=google.com; s=arc-20160816; b=E7rYnaE5pmjYr+aDGezBraV6XMCUqb3XbyknQ/jcGz7Bbki4KX1uRExwTHbOwcoZJQ LFPnR4OkHithwC4aD942E97AI/OegvrdtJeOmXtLmq2g0K+3/BM/aIzaDlI2W0P+wHzO G/qujLEptGAb0RTT40l01kppUbEK52r+HBWeF6tMBsfbby9L8IyY9OCgsV1jEgsaLb9Z 2R24Jc28QPgZQNCk4qsCReIzpEC14rrzAWc3j9XqYmXMupYFGDseqM1+18JZXrU4ap2e Ob4rWB2W+U6nc2Hr5uM6HaTbuEZC3koHv9+gLHW8DTNivPaGb45VmNT30pQpTvzaIuVZ jMvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=d7OAxJh2f4tL+MstPlKkwHP7DnN8hWDfFuzjUl98JVI=; fh=YYwLYmpaV0Fpw/rxmSKNRLS2XzDkAlGbHATiKOPtZrY=; b=sBbaPiSRGvZOc8MDvGeC7f9fJ8mheYVDj+Lf3+fPqyxFCwtAPM7ggcQQR59tIHMhxT HxDJakT47dOo6o70SxIrIQN73ZjmpVSJ/1bhL15XWP6m/6LFWICzhgmaPNe/Ea3Rienr YQz5F+AQY/YfpGNQ7rB+Fc4t+deKXtemVj7vnT56dVAN++UkEl+zm9ot/SR5KO3G8uwL 5UJk3igGXfUnfb/u1tenux2Wye2EqF5rF5ntZvLhbhZEmhq3ELSdoGTz7FkWLFvrwM19 JCY9sLo4vUOLugU+9KUehybZlyH+nYG3yW/FLXoBPIAUWfTJiaDiGGaSkDfrwP9FqtTX cBGg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id l14-20020aa7d94e000000b0051e4728e759si2008322eds.520.2023.07.08.14.27.24; Sat, 08 Jul 2023 14:27:24 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D700A68C5CC; Sun, 9 Jul 2023 00:25:51 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay7-d.mail.gandi.net (relay7-d.mail.gandi.net [217.70.183.200]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C51E668C572 for ; Sun, 9 Jul 2023 00:25:40 +0300 (EEST) X-GND-Sasl: michael@niedermayer.cc Received: by mail.gandi.net (Postfix) with ESMTPSA id 345D620007 for ; Sat, 8 Jul 2023 21:25:40 +0000 (UTC) From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sat, 8 Jul 2023 23:25:21 +0200 Message-Id: <20230708212530.109692-9-michael@niedermayer.cc> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230708212530.109692-1-michael@niedermayer.cc> References: <20230708212530.109692-1-michael@niedermayer.cc> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 09/18] avradio/sdrdemux: The RTLSDR DC artifact is not consistent X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: CL3w8iXX+TQH so we need to check every block, we cannot just check a few and then subtract the same value Signed-off-by: Michael Niedermayer --- libavradio/sdr.h | 1 - libavradio/sdrdemux.c | 23 +++++++++++------------ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/libavradio/sdr.h b/libavradio/sdr.h index 95ff903293..13237707b3 100644 --- a/libavradio/sdr.h +++ b/libavradio/sdr.h @@ -202,7 +202,6 @@ typedef struct SDRContext { int missing_streams; int rtlsdr_fixes; - float rtlsdr_dc_offset; } SDRContext; typedef struct ModulationDescriptor { diff --git a/libavradio/sdrdemux.c b/libavradio/sdrdemux.c index 392fece4e9..6682768461 100644 --- a/libavradio/sdrdemux.c +++ b/libavradio/sdrdemux.c @@ -1705,21 +1705,20 @@ process_next_block: const int8_t *halfblock0 = fifo_element[0].halfblock; const int8_t *halfblock1 = fifo_element[1].halfblock; if (sdr->rtlsdr_fixes>0) { - if (!sdr->rtlsdr_dc_offset || !sdr->block_center_freq) { - int sum = 0; - for (i = 0; i<2*sdr->block_size; i++) - sum += halfblock0[i] - + halfblock1[i]; - sdr->rtlsdr_dc_offset = -sum / (4.0*sdr->block_size); - av_log(s, AV_LOG_DEBUG, "Compensating DC offset %f (this should be around -0.6)\n", sdr->rtlsdr_dc_offset); - } + int sum = 0; + float offset; + for (i = 0; i<2*sdr->block_size; i++) + sum += halfblock0[i] + + halfblock1[i]; + offset = -sum / (4.0*sdr->block_size); + av_log(s, AV_LOG_DEBUG, "Compensating DC offset %f (this should be around -0.6)\n", offset); for (i = 0; iblock_size; i++) { - sdr->windowed_block[i].re = (halfblock0[2*i+0] + sdr->rtlsdr_dc_offset) * sdr->window[i]; - sdr->windowed_block[i].im = (halfblock0[2*i+1] + sdr->rtlsdr_dc_offset) * sdr->window[i]; + sdr->windowed_block[i].re = (halfblock0[2*i+0] + offset) * sdr->window[i]; + sdr->windowed_block[i].im = (halfblock0[2*i+1] + offset) * sdr->window[i]; } for (i = sdr->block_size; i<2*sdr->block_size; i++) { - sdr->windowed_block[i].re = (halfblock1[2*(i - sdr->block_size)+0] + sdr->rtlsdr_dc_offset) * sdr->window[i]; - sdr->windowed_block[i].im = (halfblock1[2*(i - sdr->block_size)+1] + sdr->rtlsdr_dc_offset) * sdr->window[i]; + sdr->windowed_block[i].re = (halfblock1[2*(i - sdr->block_size)+0] + offset) * sdr->window[i]; + sdr->windowed_block[i].im = (halfblock1[2*(i - sdr->block_size)+1] + offset) * sdr->window[i]; } } else { for (i = 0; iblock_size; i++) { From patchwork Sat Jul 8 21:25:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 42547 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6d25:b0:130:f365:34ad with SMTP id fv37csp663609pzb; Sat, 8 Jul 2023 14:27:41 -0700 (PDT) X-Google-Smtp-Source: APBJJlGgthxJ7XgT1x65JyAP/Bs1TlkGvLh8x6T7wcg6+NRkRpuFjJBGGfKDtcZp83kD2leclDta X-Received: by 2002:a2e:809a:0:b0:2b3:47b3:3c39 with SMTP id i26-20020a2e809a000000b002b347b33c39mr6502496ljg.23.1688851661372; Sat, 08 Jul 2023 14:27:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688851661; cv=none; d=google.com; s=arc-20160816; b=mDyhDFhlk3E4qUaojM7QLl5kIOdyc0OSvnKtlopJI9iSch2/8E5oJ6AiVyBFF6vht2 iTzNMXTfsv2nxrnMpRsypSkWpw4hEbE8g09z+7G4CgNBMVmVCdbRY7YGsTTKKokD6C5b 07s0FO7zaNc2UdMYBl743mN43VBrkV++prskVxGNP1WxtB1Po/zJXoYyNCKyNCoiKVrH SHFJhfYFB+8FmyG7rvA+ZptttVxb1Wxkw//fSVNAkwa7B3LDHmDEJjdvjQ2C8f2pRwh8 xfulUSLXSCGn5/0zozmSVwoMlpaScDzEVlFAmQW8T1l2w0M97wlYEO2g/ooWRW61Lvfg T8ZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=0aDKk7PfIwIRzhd0oPudWczbxAGNiTrpCuGsYKNE5T0=; fh=YYwLYmpaV0Fpw/rxmSKNRLS2XzDkAlGbHATiKOPtZrY=; b=N8ScTTSaZ0Q5imABqyiG+l6hdXcaYfTFEk0XcOlGZSwU/dbv/L/6jBez1f+b9Ty/IX e9IN0+gfbB2lMXMcOKU7V2sNnXACCTnxY8fsV8pCfd4CO6oS7jGSfpQ4e1P2Ds6nq8o6 hXTWHbcMiVo33SZeh5jiyeK2yHawMEtuqeB3b2Obl9RpHjBWuWd9vvcuYY1Idfzg8leP 7Cm2FG8vW1GVzBnUSnRTHyF38aKAgHMjWnFyJD+WnhHhr7WdRLYfAHGj5t8N/KT2AE5j tYf31FQ0PpI+8wC8VwhmkEiywu4hBYQieTcdbSHsTKLG/+OrgavDtzI5yz3+0oVZkMAd W4ow== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id j23-20020a17090686d700b0097455b9d069si4192133ejy.1033.2023.07.08.14.27.41; Sat, 08 Jul 2023 14:27:41 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B075168C5E0; Sun, 9 Jul 2023 00:25:53 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay9-d.mail.gandi.net (relay9-d.mail.gandi.net [217.70.183.199]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 959FA68C55A for ; Sun, 9 Jul 2023 00:25:41 +0300 (EEST) X-GND-Sasl: michael@niedermayer.cc Received: by mail.gandi.net (Postfix) with ESMTPSA id 0680CFF802 for ; Sat, 8 Jul 2023 21:25:40 +0000 (UTC) From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sat, 8 Jul 2023 23:25:22 +0200 Message-Id: <20230708212530.109692-10-michael@niedermayer.cc> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230708212530.109692-1-michael@niedermayer.cc> References: <20230708212530.109692-1-michael@niedermayer.cc> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 10/18] avradio/sdr: eliminate avpriv_* X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 049U1lrU3Ho8 Signed-off-by: Michael Niedermayer --- libavradio/sdr.h | 14 +++++++------- libavradio/sdrdemux.c | 32 ++++++++++++++++---------------- libavradio/sdrinradio.c | 14 +++++++------- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/libavradio/sdr.h b/libavradio/sdr.h index 13237707b3..2940ffa389 100644 --- a/libavradio/sdr.h +++ b/libavradio/sdr.h @@ -228,7 +228,7 @@ typedef struct BandDescriptor { int64_t freq_max; } BandDescriptor ; -extern const AVOption avpriv_sdr_options[]; +extern const AVOption ff_sdr_options[]; extern ModulationDescriptor ff_sdr_modulation_descs[]; @@ -237,21 +237,21 @@ extern ModulationDescriptor ff_sdr_modulation_descs[]; * this will check the argument and call set_frequency_callback() * It can be called before the thread is started or from within the thread, */ -int avpriv_sdr_set_freq(SDRContext *sdr, int64_t freq); +int ff_sdr_set_freq(SDRContext *sdr, int64_t freq); -int avpriv_sdr_common_init(AVFormatContext *s); +int ff_sdr_common_init(AVFormatContext *s); -int avpriv_sdr_read_packet(AVFormatContext *s, AVPacket *pkt); +int ff_sdr_read_packet(AVFormatContext *s, AVPacket *pkt); -int avpriv_sdr_read_seek(AVFormatContext *s, int stream_index, int64_t target, int flags); +int ff_sdr_read_seek(AVFormatContext *s, int stream_index, int64_t target, int flags); /** * shuts down threads, destroys mutex * Safe to call if no thread was started or after it was shutdown */ -void avpriv_sdr_stop_threading(AVFormatContext *s); +void ff_sdr_stop_threading(AVFormatContext *s); -int avpriv_sdr_read_close(AVFormatContext *s); +int ff_sdr_read_close(AVFormatContext *s); int ff_sdr_vissualization(SDRContext *sdr, AVStream *st, AVPacket *pkt); diff --git a/libavradio/sdrdemux.c b/libavradio/sdrdemux.c index 6682768461..2bce1045f4 100644 --- a/libavradio/sdrdemux.c +++ b/libavradio/sdrdemux.c @@ -1056,7 +1056,7 @@ ModulationDescriptor ff_sdr_modulation_descs[] = { {"Frequency Modulation", "FM", FM, AVMEDIA_TYPE_AUDIO, probe_fm, demodulate_fm}, }; -int avpriv_sdr_set_freq(SDRContext *sdr, int64_t freq) +int ff_sdr_set_freq(SDRContext *sdr, int64_t freq) { freq = av_clip64(freq, sdr->min_center_freq, sdr->max_center_freq); @@ -1390,9 +1390,9 @@ static void *soapy_needs_bigger_buffers_worker(SDRContext *sdr) } if (sdr->wanted_freq != sdr->freq) { //We could use a seperate MUTEX for the FIFO and for soapy - avpriv_sdr_set_freq(sdr, sdr->wanted_freq); + ff_sdr_set_freq(sdr, sdr->wanted_freq); //This shouldnt really cause any problem if we just continue on error except that we continue returning data with the previous target frequency range - //And theres not much else we can do, an error message was already printed by avpriv_sdr_set_freq() in that case + //And theres not much else we can do, an error message was already printed by ff_sdr_set_freq() in that case block_counter = 0; // we just changed the frequency, do not trust the next blocks content } pthread_mutex_unlock(&sdr->mutex); @@ -1416,7 +1416,7 @@ static void *soapy_needs_bigger_buffers_worker(SDRContext *sdr) return NULL; } -int avpriv_sdr_common_init(AVFormatContext *s) +int ff_sdr_common_init(AVFormatContext *s) { SDRContext *sdr = s->priv_data; AVStream *st; @@ -1588,16 +1588,16 @@ static int sdrfile_initial_setup(AVFormatContext *s) //After reading the first packet header we return to the begin so the packet can be read whole avio_seek(s->pb, 0, SEEK_SET); - ret = avpriv_sdr_set_freq(sdr, sdr->wanted_freq); + ret = ff_sdr_set_freq(sdr, sdr->wanted_freq); if (ret < 0) return ret; sdr->read_callback = sdrfile_read_callback; - return avpriv_sdr_common_init(s); + return ff_sdr_common_init(s); } -int avpriv_sdr_read_packet(AVFormatContext *s, AVPacket *pkt) +int ff_sdr_read_packet(AVFormatContext *s, AVPacket *pkt) { SDRContext *sdr = s->priv_data; int ret, i, full_blocks, seek_direction; @@ -1860,7 +1860,7 @@ process_next_block: return AVERROR(EAGAIN); } -int avpriv_sdr_read_seek(AVFormatContext *s, int stream_index, +int ff_sdr_read_seek(AVFormatContext *s, int stream_index, int64_t target, int flags) { SDRContext *sdr = s->priv_data; @@ -1900,7 +1900,7 @@ int avpriv_sdr_read_seek(AVFormatContext *s, int stream_index, return 0; } -void avpriv_sdr_stop_threading(AVFormatContext *s) +void ff_sdr_stop_threading(AVFormatContext *s) { SDRContext *sdr = s->priv_data; @@ -1919,12 +1919,12 @@ void avpriv_sdr_stop_threading(AVFormatContext *s) sdr->thread_started = 0; } -int avpriv_sdr_read_close(AVFormatContext *s) +int ff_sdr_read_close(AVFormatContext *s) { SDRContext *sdr = s->priv_data; int i; - avpriv_sdr_stop_threading(s); + ff_sdr_stop_threading(s); av_fifo_freep2(&sdr->empty_block_fifo); av_fifo_freep2(&sdr->full_block_fifo); @@ -1969,7 +1969,7 @@ static int sdrfile_probe(const AVProbeData *p) #define OFFSET(x) offsetof(SDRContext, x) #define DEC AV_OPT_FLAG_DECODING_PARAM -const AVOption avpriv_sdr_options[] = { +const AVOption ff_sdr_options[] = { { "video_size", "set frame size", OFFSET(width), AV_OPT_TYPE_IMAGE_SIZE, {.str = "0x0"}, 0, 0, DEC }, { "framerate" , "set frame rate", OFFSET(fps), AV_OPT_TYPE_VIDEO_RATE, {.str = "25"}, 0, INT_MAX,DEC }, { "block_size", "FFT block size", OFFSET(block_size), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, DEC}, @@ -2015,7 +2015,7 @@ const AVOption avpriv_sdr_options[] = { static const AVClass sdrfile_demuxer_class = { .class_name = "sdrfile", .item_name = av_default_item_name, - .option = avpriv_sdr_options, + .option = ff_sdr_options, .version = LIBAVUTIL_VERSION_INT, .category = AV_CLASS_CATEGORY_DEMUXER, }; @@ -2026,9 +2026,9 @@ const AVInputFormat ff_sdrfile_demuxer = { .priv_data_size = sizeof(SDRContext), .read_probe = sdrfile_probe, .read_header = sdrfile_initial_setup, - .read_packet = avpriv_sdr_read_packet, - .read_close = avpriv_sdr_read_close, - .read_seek = avpriv_sdr_read_seek, + .read_packet = ff_sdr_read_packet, + .read_close = ff_sdr_read_close, + .read_seek = ff_sdr_read_seek, .flags_internal = FF_FMT_INIT_CLEANUP, .priv_class = &sdrfile_demuxer_class, }; diff --git a/libavradio/sdrinradio.c b/libavradio/sdrinradio.c index af87b49495..0e7442fddf 100644 --- a/libavradio/sdrinradio.c +++ b/libavradio/sdrinradio.c @@ -272,7 +272,7 @@ static int sdrindev_initial_hw_setup(AVFormatContext *s) av_log(s, AV_LOG_ERROR, "setSampleRate fail: %s\n", SoapySDRDevice_lastError()); return AVERROR_EXTERNAL; } - ret = avpriv_sdr_set_freq(sdr, sdr->wanted_freq); + ret = ff_sdr_set_freq(sdr, sdr->wanted_freq); if (ret < 0) return ret; @@ -331,7 +331,7 @@ static int sdrindev_initial_hw_setup(AVFormatContext *s) SoapySDRDevice_activateStream(soapy, soapyRxStream, 0, 0, 0); - return avpriv_sdr_common_init(s); + return ff_sdr_common_init(s); } static int sdrindev_read_close(AVFormatContext *s) @@ -339,7 +339,7 @@ static int sdrindev_read_close(AVFormatContext *s) SDRContext *sdr = s->priv_data; SoapySDRDevice *soapy = sdr->soapy; - avpriv_sdr_stop_threading(s); + ff_sdr_stop_threading(s); if (soapy) { if (sdr->soapyRxStream) { @@ -352,7 +352,7 @@ static int sdrindev_read_close(AVFormatContext *s) sdr->soapy = NULL; } - return avpriv_sdr_read_close(s); + return ff_sdr_read_close(s); } static int sdr_get_device_list(AVFormatContext *ctx, AVDeviceInfoList *device_list) @@ -402,7 +402,7 @@ static int sdr_get_device_list(AVFormatContext *ctx, AVDeviceInfoList *device_li static const AVClass sdr_demuxer_class = { .class_name = "sdr", .item_name = av_default_item_name, - .option = avpriv_sdr_options, + .option = ff_sdr_options, .version = LIBAVUTIL_VERSION_INT, .category = AV_CLASS_CATEGORY_RADIO_INPUT, }; @@ -412,9 +412,9 @@ const AVInputFormat ff_sdr_demuxer = { .long_name = NULL_IF_CONFIG_SMALL("Software Defined Radio Demodulator"), .priv_data_size = sizeof(SDRContext), .read_header = sdrindev_initial_hw_setup, - .read_packet = avpriv_sdr_read_packet, + .read_packet = ff_sdr_read_packet, .read_close = sdrindev_read_close, - .read_seek = avpriv_sdr_read_seek, + .read_seek = ff_sdr_read_seek, .get_device_list= sdr_get_device_list, .flags = AVFMT_NOFILE, .flags_internal = FF_FMT_INIT_CLEANUP, From patchwork Sat Jul 8 21:25:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 42549 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6d25:b0:130:f365:34ad with SMTP id fv37csp663682pzb; Sat, 8 Jul 2023 14:27:59 -0700 (PDT) X-Google-Smtp-Source: APBJJlEumCQW7rHtOQ3pMaVJsUfuEB4rZ4sn0gy/p9VOJ1T11AltniFG30UCQMjxh1SEp5VU8dcv X-Received: by 2002:a17:907:587:b0:977:e310:1ce7 with SMTP id vw7-20020a170907058700b00977e3101ce7mr5484901ejb.38.1688851679074; Sat, 08 Jul 2023 14:27:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688851679; cv=none; d=google.com; s=arc-20160816; b=RSM86vIAm19lTJHve9N0wgUK/NFQCs6U9VLxSDt23eMjchn9DMdONtTZhXbWmYGv99 +hS+WfLj+3m12Cq/dLfhPPTbsMtsJw6CpGqFbnD2mo0Xp4F2i8YewPojggyrGoLVPIxH T86QCAPPCnOzGaPkTOIqur6LrPcobkif+LMcIa9gyUaLd/l0sO/KYHfTufnpI4Xnfgr+ MA6tbio/iO60d8W/to+51LgvjnkTKdxjN0C6Su4CanOvTL3k/0J2zec/8vlMf7KBhn1N lk07ggJJxnSp24OKU0U2RRtRU9FUwqvasr/mZqlymvhM/qeRJfvIcWsvFj6kgPnNrDfn kMpA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=rUslcL5LzCKm7Te8D7LsWEDncmNmh1/pfLT+9dsSr0Y=; fh=YYwLYmpaV0Fpw/rxmSKNRLS2XzDkAlGbHATiKOPtZrY=; b=KE/t5GEiVe+Bp2qZ0QOVrMk02ZNe94c6XTZRxUWNg8u9GJj9yW6RXnQ/uIEO/2wd8s ++8vznYvnjnc479J2PRJOhW+jvP09jdJXXVuR6QzCxz0i7z03tnKxjhPcsCKU3WSZ+S0 M3hPvBhSpXG1ggXbfkiFV+pdzj40zwcIGrk4aCFt4HtUdh3WCMIXp7wPeQ0Rd3VNYfx4 kRqou96uLT/nG5nTyd1zzQgwkpqxUqWf3KhKz/s//Q9Zl9Nk1CJv7dOBrfaWDYPR0ipY FXIJuEyMrPSMkYgjMKPFfj+1FDmvwvtryp1Zg1oTN//DQKlBbGYyY6QO07gDv80e0FP/ YU7g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id f2-20020a17090624c200b00992e0f6514asi4430683ejb.248.2023.07.08.14.27.58; Sat, 08 Jul 2023 14:27:59 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9D21968C5F5; Sun, 9 Jul 2023 00:25:55 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net [217.70.183.201]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 03A7568C59B for ; Sun, 9 Jul 2023 00:25:42 +0300 (EEST) X-GND-Sasl: michael@niedermayer.cc Received: by mail.gandi.net (Postfix) with ESMTPSA id 41C4C1BF204 for ; Sat, 8 Jul 2023 21:25:41 +0000 (UTC) From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sat, 8 Jul 2023 23:25:23 +0200 Message-Id: <20230708212530.109692-11-michael@niedermayer.cc> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230708212530.109692-1-michael@niedermayer.cc> References: <20230708212530.109692-1-michael@niedermayer.cc> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 11/18] avradio/vissualize: rotate waterfall X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 2EguVPUa07is Signed-off-by: Michael Niedermayer --- libavradio/sdr.h | 1 + libavradio/vissualize.c | 35 ++++++++++++++++++++++++++++++----- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/libavradio/sdr.h b/libavradio/sdr.h index 2940ffa389..8a2ab1c78a 100644 --- a/libavradio/sdr.h +++ b/libavradio/sdr.h @@ -116,6 +116,7 @@ typedef struct SDRStream { int frame_size; int frame_buffer_line; uint8_t *frame_buffer; + int64_t last_block_center_freq; } SDRStream; typedef struct SDRContext { diff --git a/libavradio/vissualize.c b/libavradio/vissualize.c index c165e0fb63..b27f78f171 100644 --- a/libavradio/vissualize.c +++ b/libavradio/vissualize.c @@ -90,6 +90,14 @@ static void draw_string(uint8_t *frame_buffer, ptrdiff_t stride, char *str, int } } +static void advance_waterfall(SDRStream *sst, int h) { + if (!sst->frame_buffer_line) { + memcpy(sst->frame_buffer + sst->frame_size, sst->frame_buffer, sst->frame_size); + sst->frame_buffer_line = h-1; + } else + sst->frame_buffer_line--; +} + int ff_sdr_vissualization(SDRContext *sdr, AVStream *st, AVPacket *pkt) { SDRStream *sst = st->priv_data; @@ -101,6 +109,27 @@ int ff_sdr_vissualization(SDRContext *sdr, AVStream *st, AVPacket *pkt) int skip = frame_index == last_index || sdr->missing_streams; av_assert0(sdr->missing_streams >= 0); + if (sdr->block_center_freq) { + if (sst->last_block_center_freq) { + int last_center = lrint((F2INDEX(sst->last_block_center_freq) - sdr->block_size) * w / (2*sdr->block_size)); + + last_center %= w; + if (last_center < 0) + last_center += w; + av_assert0(last_center >= 0 && last_center < w); + + for(int y= 0; yframe_buffer + 4*w*(sst->frame_buffer_line + y); + uint8_t *src = dst + 4*w; + + memcpy(dst + 4*last_center, src, 4*(w - last_center)); + memcpy(dst , src + 4*(w - last_center), 4* last_center ); + } + advance_waterfall(sst, h); + } + sst->last_block_center_freq = sdr->block_center_freq; + } + for(int x= 0; xframe_buffer_line*w); @@ -188,11 +217,7 @@ int ff_sdr_vissualization(SDRContext *sdr, AVStream *st, AVPacket *pkt) } } - if (!sst->frame_buffer_line) { - memcpy(sst->frame_buffer + sst->frame_size, sst->frame_buffer, sst->frame_size); - sst->frame_buffer_line = h-1; - } else - sst->frame_buffer_line--; + advance_waterfall(sst, h); //TODO // draw RDS* From patchwork Sat Jul 8 21:25:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 42540 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6d25:b0:130:f365:34ad with SMTP id fv37csp663289pzb; Sat, 8 Jul 2023 14:26:40 -0700 (PDT) X-Google-Smtp-Source: APBJJlEjUyd8wEL7/qfn2ffo0nZ5cO8lDd2mZGy4IrKbBbCCE+ZUxXKnH4emBDHhpL7xWC5XRpnz X-Received: by 2002:a5d:5301:0:b0:314:44c8:aa98 with SMTP id e1-20020a5d5301000000b0031444c8aa98mr8945154wrv.67.1688851600684; Sat, 08 Jul 2023 14:26:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688851600; cv=none; d=google.com; s=arc-20160816; b=wdTmkYJOeeaRkD0BzYAhZzsSv0gGbgDnuRqqe/McfnwLAKYwppuG+aNWEtaOdjxOXz Bq6BTgudSaLtq6p5N0yjNgMkdogTlgbuGT89bvTiK9LDUUxpjtptOOOufGdpj1IqfpTS d4GQTL7Fg86WJYxrmaLr7ZGMzZtQ87KnhfDgzr6jhpofP66DPp/oHln9cGn/lZXVOEZ9 lMcraCOfeoHxx0C4TNRqUYqsp0ZNagACmKII9ESknjPWk5yzeWg9/+XlFkYGewfdkQGb my6VV3GX5bGKdIeFBCWbQy72gDcX/V3Yuw+bQXmOIUgj3Cd0NVfCVYXiB1ZGF5gk/Cuo 3wmw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=cEKOITHiZoZGLgQocZFA8Dn8S7e5YAJr2f6QdLO8Esg=; fh=YYwLYmpaV0Fpw/rxmSKNRLS2XzDkAlGbHATiKOPtZrY=; b=F0/DuEDx+12xx/Bc3H7lxsBqrEQNF8aWjE3YRgEZMVtKPDHdirYe6jHNphDueubdUL eE72FrmtsEH5lkhoWpZKRfijT+U1MHJJcxZJiSb/qVrAY3tdPYPfhBOYF+4xQRUZVZA0 nl4QTUh3qJnGX1vbfcWIHKJQrInNjKRDH9TsDHV8KnHz/uEuPv2AycwqK0/4s4R+w+69 2wZZPO/HwCg4nFy2PraicPB40HoO6Icy4nEvdU7VqcUnYVQt8G0pcHcpahZZStiXz5j2 nkPwjf72gFD7e5crf9vNJiMl8iT70PFnf5ztPypWIagVKJxUflaMPNYJnfaSl8IkO2GY kyog== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id rv25-20020a17090710d900b00992bbbb019dsi4508186ejb.119.2023.07.08.14.26.40; Sat, 08 Jul 2023 14:26:40 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0B11C68C56E; Sun, 9 Jul 2023 00:25:47 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay7-d.mail.gandi.net (relay7-d.mail.gandi.net [217.70.183.200]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B244168C553 for ; Sun, 9 Jul 2023 00:25:43 +0300 (EEST) X-GND-Sasl: michael@niedermayer.cc Received: by mail.gandi.net (Postfix) with ESMTPSA id 1046320002 for ; Sat, 8 Jul 2023 21:25:42 +0000 (UTC) From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sat, 8 Jul 2023 23:25:24 +0200 Message-Id: <20230708212530.109692-12-michael@niedermayer.cc> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230708212530.109692-1-michael@niedermayer.cc> References: <20230708212530.109692-1-michael@niedermayer.cc> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 12/18] avradio/sdrdemux: Set AVFMTCTX_NOHEADER X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: U8HoUgeoM33M This is needed as stations may not be detected immedeately Signed-off-by: Michael Niedermayer --- libavradio/sdrdemux.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libavradio/sdrdemux.c b/libavradio/sdrdemux.c index 2bce1045f4..1c77583fd4 100644 --- a/libavradio/sdrdemux.c +++ b/libavradio/sdrdemux.c @@ -1425,6 +1425,7 @@ int ff_sdr_common_init(AVFormatContext *s) float scale = 1.0 / sdr->sample_scale; sdr->avfmt = s; + s->ctx_flags |= AVFMTCTX_NOHEADER; if (sdr->width>1 && sdr->height>1) { /* video stream */ From patchwork Sat Jul 8 21:25:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 42542 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6d25:b0:130:f365:34ad with SMTP id fv37csp663394pzb; Sat, 8 Jul 2023 14:26:58 -0700 (PDT) X-Google-Smtp-Source: APBJJlHR+j/u7sRorqqjZjb4+Dqmk3xEdNZ7jNjvh1nYt6AfkSS/0xpfmem13CVLyQWbPGd5nnCy X-Received: by 2002:a2e:b163:0:b0:2b6:df6b:84c0 with SMTP id a3-20020a2eb163000000b002b6df6b84c0mr6235381ljm.25.1688851617931; Sat, 08 Jul 2023 14:26:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688851617; cv=none; d=google.com; s=arc-20160816; b=NmLmTWzzX7Lxl85xR5pWyqdC6caBVWcsH/A7c7wvDSRCplNL/Rv0zjORuqvB0fq9eu 2UvJzfmIjBauNQj8opv8uuDyQ5acHZKF98JnFM/UqR3ve62Nwf4mW5Mx5Dr/VC/z85ql qKdyK3iHemdkZ19nwlrwQBOZDZidODt/ZpZyhcJzhwjvJfg5XiKiZSX4bocpbt1irn05 vtwcVusON1xS9Rll2dzphVHXpks+ZFaKDF13Ua42qDn1jPU/a1fsz3EGz0K1OiStpglj T8hyrcREUQ7kgqwwUabPnAuv0f0DFhi/ftpTj3OsPt3duH+pmd/uV3HND6EQkizX8WTf I7pg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=OSEenhevlNIlD8U1e+PvtPzUbjUkPfHZUivTjVnF/o4=; fh=YYwLYmpaV0Fpw/rxmSKNRLS2XzDkAlGbHATiKOPtZrY=; b=cXGjluSfpJrvzJuxUDbjRS53v8vr46qux7LwudhYrMYb5l7CZS3UbcF9A/LYpyRYxT X6oM+0Z5DfUJ9a/uih5yfj6Qii6PBheIE76p7X6B8QpMYBD3H3O9GW+wxS5JRDJYNvXX C3E/uoXTQYM3sxeCrwFIPATBUTlQIpOkq3Yx4X3rOso8RmKNVygl2EgC+Op/R0mGkgA4 d6VI6h01cMne4Sp4wk0OaIv+u8wisYxxi37bQ3n0CSlJvgp2FdeVD9RZUfPf7zLgjoea EBdheb8zxoNMDcv/++67TBUzCjkDHjLqykWZXMoVzxCSfdx8U08d9KouvUQ7vWwSTl3Q XryQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id ju23-20020a17090798b700b0099207b3bc46si4166096ejc.322.2023.07.08.14.26.57; Sat, 08 Jul 2023 14:26:57 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4AEDB68C5A1; Sun, 9 Jul 2023 00:25:49 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay4-d.mail.gandi.net (relay4-d.mail.gandi.net [217.70.183.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8207968C559 for ; Sun, 9 Jul 2023 00:25:44 +0300 (EEST) X-GND-Sasl: michael@niedermayer.cc Received: by mail.gandi.net (Postfix) with ESMTPSA id DB5F2E0004 for ; Sat, 8 Jul 2023 21:25:43 +0000 (UTC) From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sat, 8 Jul 2023 23:25:25 +0200 Message-Id: <20230708212530.109692-13-michael@niedermayer.cc> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230708212530.109692-1-michael@niedermayer.cc> References: <20230708212530.109692-1-michael@niedermayer.cc> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 13/18] avradio/sdrdemux: fix bug adding candidate stations and then crashing X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: qFdZEDtUEror Signed-off-by: Michael Niedermayer --- libavradio/sdrdemux.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavradio/sdrdemux.c b/libavradio/sdrdemux.c index 1c77583fd4..5300311c3a 100644 --- a/libavradio/sdrdemux.c +++ b/libavradio/sdrdemux.c @@ -1818,7 +1818,7 @@ process_next_block: int nb_stations = ff_sdr_find_stations(sdr, sdr->block_center_freq, sdr->sdr_sample_rate*0.5, station_list, FF_ARRAY_ELEMS(station_list)); for(int i = 0; istream) { + if (!station->stream && station->in_station_list) { /* audio stream */ AVStream *st = avformat_new_stream(s, NULL); SDRStream *sst; From patchwork Sat Jul 8 21:25:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 42544 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6d25:b0:130:f365:34ad with SMTP id fv37csp663481pzb; Sat, 8 Jul 2023 14:27:16 -0700 (PDT) X-Google-Smtp-Source: APBJJlHAs8Vz6bK6ZcNr2SW9mBkPNw5UAv/SCI6JC6qHIlAqJIQ7E6EFJMsP6uah8FvXO0l/itXx X-Received: by 2002:a17:906:de:b0:974:1d8b:ca5e with SMTP id 30-20020a17090600de00b009741d8bca5emr6861273eji.14.1688851636302; Sat, 08 Jul 2023 14:27:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688851636; cv=none; d=google.com; s=arc-20160816; b=GFZdp3rK4A2CkAow6agugjyzn5GhnZmbvEOPjz0ujXXocQ17df6YsVLjoBOxnn9p9K c9DIkKwj49febjqrNl6wHTEAE3teFaC0cVGw06OFmvAchdhUAj2rizgHxFGM0JFPqcyR Yt+3JXy2dfKXbga+spXmFsnQhm4ZDi+PTjAQXxpqmH+LszVH5kMTXEPWIxseYcWYOtxM p0fBd8AuJCpa0eIQLR4V64yqg5ENxwK5TQq8SPMAgjIP7SG7yH24nmBpRzIVEYXKjPGx cgIbbRs30ZBCmFYnGKvmyUxR02CufY2l0PTgpqqBS4wJJfG0O/y6K+wXZO7JfkL7wA1b j8BQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=Pe3z4LHyMkbnbnErmo0ivVGeVmQAENNiC8HrvShSxH4=; fh=YYwLYmpaV0Fpw/rxmSKNRLS2XzDkAlGbHATiKOPtZrY=; b=EDc1fpbFI5IW63OrCXIEfyOn7j+D5U4BGYw8/5FO0ngg0FBtNuZ67uJHUP+BDrrJd8 ioslQ9xU1xGH4BFziCxInMKBio9mysO/+0V27xVTRtdN0NS7DOI3lqkEKlntF/pG9ViF X3O4afnSnbMt8FO8UGmCXA1xTeESRoWv64GnSjQ9JeFYwn0JuIP5i/gNs4GUfrQ0IBB3 I9z8yQpfP2U3OkiWBzQq+iRrUz0uUqA7vtui9mHxyJmi4zjlivHrWBJm4ptariqa8BpL czcNVPRxESo4G+yvolIOXYH1XWeWZVtud91bIz0EyzyPfD21l8Q5LPEfnZSOaM67CrFC 4DlQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id s20-20020a170906285400b00993949aad30si4314460ejc.37.2023.07.08.14.27.15; Sat, 08 Jul 2023 14:27:16 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 10C3768C5C9; Sun, 9 Jul 2023 00:25:51 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay6-d.mail.gandi.net (relay6-d.mail.gandi.net [217.70.183.198]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 622C768C56C for ; Sun, 9 Jul 2023 00:25:45 +0300 (EEST) X-GND-Sasl: michael@niedermayer.cc Received: by mail.gandi.net (Postfix) with ESMTPSA id BA44DC0002 for ; Sat, 8 Jul 2023 21:25:44 +0000 (UTC) From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sat, 8 Jul 2023 23:25:26 +0200 Message-Id: <20230708212530.109692-14-michael@niedermayer.cc> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230708212530.109692-1-michael@niedermayer.cc> References: <20230708212530.109692-1-michael@niedermayer.cc> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 14/18] avradio/sdrdemux: fm_probe: dont allow bandwidh=sample rate X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: qNhukcjbJRq/ if bandwidth is set incorrectly the noise floor can be very wrong, which causes issues as the threshold is based on the noise floor Signed-off-by: Michael Niedermayer --- libavradio/sdrdemux.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavradio/sdrdemux.c b/libavradio/sdrdemux.c index 5300311c3a..b51fa4296a 100644 --- a/libavradio/sdrdemux.c +++ b/libavradio/sdrdemux.c @@ -843,7 +843,7 @@ static int probe_fm(SDRContext *sdr) int bandwidth_p2 = 38*1000; //phase 2 bandwidth int half_bw_i = bandwidth_f * (int64_t)sdr->block_size / sdr->sdr_sample_rate; float last_score[3] = {FLT_MAX, FLT_MAX, FLT_MAX}; - int border_i = (sdr->sdr_sample_rate - sdr->bandwidth) * sdr->block_size / sdr->sdr_sample_rate; + int border_i = (sdr->sdr_sample_rate - FFMIN(sdr->bandwidth, sdr->sdr_sample_rate*7/8)) * sdr->block_size / sdr->sdr_sample_rate; double noise_floor = FLT_MAX; if (2*half_bw_i > 2*sdr->block_size) From patchwork Sat Jul 8 21:25:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 42546 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6d25:b0:130:f365:34ad with SMTP id fv37csp663576pzb; Sat, 8 Jul 2023 14:27:33 -0700 (PDT) X-Google-Smtp-Source: APBJJlGK8gk05iX43/IcjdXCN/HDTLp9UF6wy74v/bsvAstbS6bcbVG5iiSRnPhGFpKcF7CkwID3 X-Received: by 2002:a17:906:4dce:b0:991:e17c:f8fa with SMTP id f14-20020a1709064dce00b00991e17cf8famr6163196ejw.61.1688851652919; Sat, 08 Jul 2023 14:27:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688851652; cv=none; d=google.com; s=arc-20160816; b=xkCBpsl5dawT7oN1bEQi9CaWKC4IMJN7vQt6+X4aORN5MHg66xSv2wyXNwgsFCNR9r ybkSmnpao8GsyVCd7gVrzJow7OPPd8RImEsrSjh0Cbe5cwspoktZZCITK2HiG1/0GEHo 6dj/trFjQV/4ZVX6VYQEzSg3IIfS42a4QVdP8DegoKAuSUWiMXje194Tfg+sUiJUFUeJ /CuVxgJj5edXB8EEYVRvQCxgJwmNggOh9LqK5nihuBSSOfRlVeIjJhET/C4Du805FFRP RCStfydOe3BWY7XqQFxWIsEg+AwVT7wTd2roMgkc8vMSJPwC09RDmP7O2qQpjyKihmU5 HN3g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=A0edly1fhbABVOO9ypgfP2fZ5GxN8hWA+pAEnbFEw+w=; fh=YYwLYmpaV0Fpw/rxmSKNRLS2XzDkAlGbHATiKOPtZrY=; b=uUl4F01SNTlkGCAzGyonazzYsGO52I7AWVIRiSE8ejieaV+HhhArOsnQODbO3UU7Hs BET9hKJBmbLv4FmniRpZmTrWJID4CAjoDXTlFr3iI3B0rWpi46emCEihZ/cM0s40kM0K fJidwB1kZ1Xew2az+JuZx8o68YOzlYKHOlmCgGzZYz/n4NSHfWU8sMiv6EU+7uQKlaiZ GkdXXOqYOZUPEFO8csA1W+AM06ko6qU+ctYazafwJCcDPftgKhoPv6Sqi4cqNJ4dIbWS 0ukt9ZhSnB0d460SvPKT10HYn8xuToPA0UCNrAXG+ymATt6BJB9Cqjs03gNdar2Z58kS T/2w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id o17-20020a1709061b1100b0098642e99c22si4084061ejg.604.2023.07.08.14.27.32; Sat, 08 Jul 2023 14:27:32 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CA56A68C5D7; Sun, 9 Jul 2023 00:25:52 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net [217.70.183.201]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2F16B68C55A for ; Sun, 9 Jul 2023 00:25:46 +0300 (EEST) X-GND-Sasl: michael@niedermayer.cc Received: by mail.gandi.net (Postfix) with ESMTPSA id 87E841BF206 for ; Sat, 8 Jul 2023 21:25:45 +0000 (UTC) From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sat, 8 Jul 2023 23:25:27 +0200 Message-Id: <20230708212530.109692-15-michael@niedermayer.cc> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230708212530.109692-1-michael@niedermayer.cc> References: <20230708212530.109692-1-michael@niedermayer.cc> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 15/18] doc: add sdr examples X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Iaofs4u7gSqb Signed-off-by: Michael Niedermayer --- doc/demuxers.texi | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/doc/demuxers.texi b/doc/demuxers.texi index 86f031b9ed..75ec55170a 100644 --- a/doc/demuxers.texi +++ b/doc/demuxers.texi @@ -1003,6 +1003,16 @@ No emphasis used @end table +Example: Use ffplay to listen to radio, arrow keys allow switching stations +@example +ffplay -sdr_freq 88M -f sdr a -video_size 1600x600 +@end example + +Example: Record all radio stations between about 101Mhz and 107Mhz +@example +ffmpeg -sdr_freq 104M -sdr_sr 7M -mode all_mode -f sdr -i a -map 0 -y fm.nut +@end example + @end table @section tedcaptions From patchwork Sat Jul 8 21:25:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 42548 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6d25:b0:130:f365:34ad with SMTP id fv37csp663648pzb; Sat, 8 Jul 2023 14:27:50 -0700 (PDT) X-Google-Smtp-Source: APBJJlHaIFAff2c/H4Hg2MLMt8ZE/NxzDi9Cyjsx8rsZedNdTgajHaBcidEtWo1nEA8GbDGx1exi X-Received: by 2002:aa7:db48:0:b0:514:a4cd:85d7 with SMTP id n8-20020aa7db48000000b00514a4cd85d7mr6700508edt.26.1688851670207; Sat, 08 Jul 2023 14:27:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688851670; cv=none; d=google.com; s=arc-20160816; b=LuyiicLwl6yyEzNyX576QDDdx2xk/tqaPAF6xCE4rEzwU42Zk2UESUIGDOV32bOZYG mZhagrV08BxmW28/rCtbJggA2PNW4sX7+L3bEcDeUOj0QMt670aNne3RlJlek9E/CNXV d4DkfYO+VXC5kx5CFY+PA0l2v03R1h0WXKHuNlJKi4Z9ABSaU6iME7aT9lO2gxF8JuPB nr4Ip+BrjqgVl4xNUD62OiXoZ7YUK4Gkl8xZ5JH+O5HRik86lCl4ypdcI20WeKsl+i1X HDAOpJP7oMMspTKVJtOd8lhkDSAXVTcCM42il8fraSinHhS2eQJf74FY7QNCH0IelP+e 3S5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=5AkJysmMwDDu/6sgvypjNcRQp6aeqLO5YsxT98qdEC0=; fh=YYwLYmpaV0Fpw/rxmSKNRLS2XzDkAlGbHATiKOPtZrY=; b=ss4kDCk/ZS/hKRMrrnb2jLN/Qv4wKl6dOVRFcCYie5LqRXCEMrjreR7DirC/vuODE+ BAXPV+FPAi+HHWcfY/vBN0JENGBYsBCKGlwBXYqJNstmh3NOcZV8iSFphEha1mNHTyZB MLf5iVUnf7ZJTqE7xYHsvVlsFCmdkpb+W47Bonc3V48MYZlWMpDZFLn0sS8Psmd4n/Kk 8Xridib9SiPz4+eBJc0wvNh78WGCKP1FfOst+p4f7YD+tRPtvaoqUjFyZYIM13KdlOZ0 6flrYj5lGj4+yJW94CDmwwzASDdaHULRvauzS4g5pZUchqBuL3aS+F40lrFwSW3j1u/p TCQA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id n4-20020a056402060400b0051e0d8c614fsi4191113edv.567.2023.07.08.14.27.49; Sat, 08 Jul 2023 14:27:50 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9470768C5E8; Sun, 9 Jul 2023 00:25:54 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay3-d.mail.gandi.net (relay3-d.mail.gandi.net [217.70.183.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F391968C59A for ; Sun, 9 Jul 2023 00:25:47 +0300 (EEST) X-GND-Sasl: michael@niedermayer.cc Received: by mail.gandi.net (Postfix) with ESMTPSA id E475E60003 for ; Sat, 8 Jul 2023 21:25:46 +0000 (UTC) From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sat, 8 Jul 2023 23:25:28 +0200 Message-Id: <20230708212530.109692-16-michael@niedermayer.cc> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230708212530.109692-1-michael@niedermayer.cc> References: <20230708212530.109692-1-michael@niedermayer.cc> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 16/18] avradio/sdr: rename fft_p2 X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: qB5Wrfs1QM+3 The FFT really is from the point of view of the stream Phase 1 not Phase 2 of the demodulation. Signed-off-by: Michael Niedermayer --- libavradio/sdr.h | 4 ++-- libavradio/sdrdemux.c | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libavradio/sdr.h b/libavradio/sdr.h index 8a2ab1c78a..1582f70d86 100644 --- a/libavradio/sdr.h +++ b/libavradio/sdr.h @@ -95,10 +95,10 @@ typedef struct FIFOElement { typedef struct SDRStream { AVTXContext *ifft_ctx; - AVTXContext *fft_p2_ctx; + AVTXContext *fft_ctx; AVTXContext *ifft_p2_ctx; av_tx_fn ifft; - av_tx_fn fft_p2; + av_tx_fn fft; av_tx_fn ifft_p2; int block_size; int block_size_p2; diff --git a/libavradio/sdrdemux.c b/libavradio/sdrdemux.c index b51fa4296a..1ded01e957 100644 --- a/libavradio/sdrdemux.c +++ b/libavradio/sdrdemux.c @@ -979,7 +979,7 @@ static int demodulate_fm(SDRContext *sdr, int stream_index, AVPacket *pkt) //FIXME this only needs to be a RDFT //CONSIDER, this and in fact alot can be done with bandpass and lowpass filters instead of FFTs, find out which is better //CONSIDER synthesizing the carrier instead of IFFT, we have all parameters for that - sst->fft_p2(sst->fft_p2_ctx, sst->block, sst->iblock, sizeof(AVComplexFloat)); + sst->fft(sst->fft_ctx, sst->block, sst->iblock, sizeof(AVComplexFloat)); // Only the low N/2+1 are used the upper is just a reflection carrier19_i_exact = find_am_carrier(sdr, sst->block, 2*sst->block_size, (void*)(sst->block + 1 + sst->block_size), carrier19_i, 10, 10); @@ -1078,10 +1078,10 @@ static void free_stream(SDRContext *sdr, int stream_index) SDRStream *sst = st->priv_data; av_tx_uninit(&sst->ifft_ctx); - av_tx_uninit(&sst->fft_p2_ctx); + av_tx_uninit(&sst->fft_ctx); av_tx_uninit(&sst->ifft_p2_ctx); sst->ifft = NULL; - sst->fft_p2 = NULL; + sst->fft = NULL; sst->ifft_p2 = NULL; sst->block_size = 0; @@ -1127,7 +1127,7 @@ static int setup_stream(SDRContext *sdr, int stream_index, Station *station) if (sst->station->bandwidth_p2) { //Allocate 2nd stage demodulation fields if needed - ret = av_tx_init(&sst-> fft_p2_ctx, &sst-> fft_p2, AV_TX_FLOAT_FFT, 0, 2*sst->block_size , NULL, 0); + ret = av_tx_init(&sst-> fft_ctx, &sst-> fft, AV_TX_FLOAT_FFT, 0, 2*sst->block_size , NULL, 0); if (ret < 0) return ret; From patchwork Sat Jul 8 21:25:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 42550 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6d25:b0:130:f365:34ad with SMTP id fv37csp663726pzb; Sat, 8 Jul 2023 14:28:07 -0700 (PDT) X-Google-Smtp-Source: APBJJlHV9hEKilzY+9fbaJ/lZq5NVbypdqcP3LN7loBnVn5JJdet+T1gp8XxqAkn4OYGwaHpIG/V X-Received: by 2002:a19:5043:0:b0:4f8:43b8:c722 with SMTP id z3-20020a195043000000b004f843b8c722mr6144623lfj.67.1688851687493; Sat, 08 Jul 2023 14:28:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688851687; cv=none; d=google.com; s=arc-20160816; b=kVjZ1DhEM58f/qWJ5+1g0A1pXKA5U1EGQuJNcUGEl9MrfOGNBnXz21L/DRn8wirFgN pxoGBdC368sSpdfr1hVwNYBBmJoLrr5cEgcQfbmVHytPTOhQ1KrBDQZFa71esLt3xCzC bKebmXwdSEJc8Cg0tjvPPjMzZJ6OL3Mxhne4gox3Uv3cg/pcTcOm2NxfKd/DUFtM1nQC NdGx+rUg3b7DyqEOPzjnMuGcxAe31GURTrGl7fGtNRagor7lA8Y4VDbLNL45VtKskq42 tlKwHGd4rvWxAAzvk6XVzmJFoPxrerODS5g0RqMYDxU1ejnklrnRhtVYrY2Wdk8fgTrp C8Cg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=m0tZ4utfyBL1rx5syUjxXCKIN7N2Ydg/JtvlGdupkRI=; fh=YYwLYmpaV0Fpw/rxmSKNRLS2XzDkAlGbHATiKOPtZrY=; b=DdaRLf3KiySst0+RsqyQrFzo+PQ3ovOZUPzZsvyMMSAUb+c3zPYOOU+QtM9jlB2M3W OoFrFFIeqJWRxthykdiEA6Rabtcp7yugpYgbjGEYy7SpdszwZwKkyw2M+/0ZFOB0HD7+ ZPjHY5J/xut4HS4gXuOkx82U8hMrxUjZGFB1EJo83pfZiSRBwzUowBa4q9VljXrcHZcV swIKVA6QTtRhCeJBygPY2zm6czxfRMb49m+iQXhHAmApEo27hUPj4H1tjF3bdrZUFppR MSJLCf2i6P4Qv9mc3Vw3WmCqXl2Qf0xVDKeD0hcOwlWrB5ikjtKq7KH4cQ5XpFXG6cck v6Xg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id e9-20020a1709067e0900b0099233cac125si4760020ejr.915.2023.07.08.14.28.07; Sat, 08 Jul 2023 14:28:07 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 923BE68C5F9; Sun, 9 Jul 2023 00:25:56 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay1-d.mail.gandi.net (relay1-d.mail.gandi.net [217.70.183.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 663FF68C57D for ; Sun, 9 Jul 2023 00:25:48 +0300 (EEST) X-GND-Sasl: michael@niedermayer.cc Received: by mail.gandi.net (Postfix) with ESMTPSA id BA299240004 for ; Sat, 8 Jul 2023 21:25:47 +0000 (UTC) From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sat, 8 Jul 2023 23:25:29 +0200 Message-Id: <20230708212530.109692-17-michael@niedermayer.cc> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230708212530.109692-1-michael@niedermayer.cc> References: <20230708212530.109692-1-michael@niedermayer.cc> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 17/18] avradio/sdrdemux: more correct phase 2 bandwidth of FM demodulation X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: u6hZAohvQ5Zn Signed-off-by: Michael Niedermayer --- libavradio/sdrdemux.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavradio/sdrdemux.c b/libavradio/sdrdemux.c index 1ded01e957..d73cbc0a06 100644 --- a/libavradio/sdrdemux.c +++ b/libavradio/sdrdemux.c @@ -840,7 +840,7 @@ static int probe_fm(SDRContext *sdr) { int i; int bandwidth_f = 180*1000; - int bandwidth_p2 = 38*1000; //phase 2 bandwidth + int bandwidth_p2 = 18*1000; //phase 2 bandwidth int half_bw_i = bandwidth_f * (int64_t)sdr->block_size / sdr->sdr_sample_rate; float last_score[3] = {FLT_MAX, FLT_MAX, FLT_MAX}; int border_i = (sdr->sdr_sample_rate - FFMIN(sdr->bandwidth, sdr->sdr_sample_rate*7/8)) * sdr->block_size / sdr->sdr_sample_rate; From patchwork Sat Jul 8 21:25:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 42551 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6d25:b0:130:f365:34ad with SMTP id fv37csp663759pzb; Sat, 8 Jul 2023 14:28:16 -0700 (PDT) X-Google-Smtp-Source: APBJJlFfXkXtHj3K/pLv6rxKrjkSIFCX/Q8TDNXxY230jYiBXVC9QOi9rdSTu15Htt3PsWNJwbwN X-Received: by 2002:a05:6512:3e25:b0:4f8:4216:e91f with SMTP id i37-20020a0565123e2500b004f84216e91fmr7672371lfv.63.1688851696048; Sat, 08 Jul 2023 14:28:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688851696; cv=none; d=google.com; s=arc-20160816; b=ADEJzOq1u9tMCSK4Uivlx2p2OcvzcdS4QtLYkDzv62P1AAY6YmFHR43MRou6VdZXz0 PAk9/MPFgvbiWRB22D1xQw3SVZm3+iRn7M2642wqM6z8tb+ziITAAnkZXprKxYsV7G+2 tvrhD43iWW15Oo04XEySNeoEpRPLJcNuZvTRRUidAUh18oVkjH4aOi2E4jLWwAG/VjVh Nq4VB8ZpI+KHxY7S7bFSYQ7dsjnkenKUq8WBVWtkBjWDG63rJVMmKPGrgX+im9UUxVS8 rCQbHUkn79qcUqdSjeTmLhGlr3BPD+lDOIcKIyAXMIvdzFcr46UK+Kl2JbxkWpoKHkBl zbOA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=SkSqvxHRNL349eAZKIihJa8JaxiyVBUDmU+Ub7zBz+E=; fh=YYwLYmpaV0Fpw/rxmSKNRLS2XzDkAlGbHATiKOPtZrY=; b=Qb1eQHgkOXCF4bULqMwXehlc3BplRlsLQF1H44OLaQxxqcy1jOTembaMsm/Cf3lG9k VWW/NVVAVNapmdtwraHEu6PdfMx443CbI3N2oc26ATSMdmJ4s2QUm0v73EhBK8TeAMqy 1xHtlJvXuzjnbxJwlmXajJBtUyksU/q1M9jZ48aWG8RqyY76PbUIZos6b7MlVH6n3Lh3 Iavqzw9GUK1v6DOhS34AftElO8iMfypSDgcypimTWIOe6T2PqM82VLFY6KskKVwhlhN3 3rE2tbhf9sW50eMDQHksiIXMJ361x3OE9y2qtAPHGzNbAULEiFooTa+6STYru9U9qALL 6Szw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id ay13-20020a170906d28d00b0095317ae767esi3124561ejb.46.2023.07.08.14.28.15; Sat, 08 Jul 2023 14:28:15 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7BD6868C60F; Sun, 9 Jul 2023 00:25:57 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay6-d.mail.gandi.net (relay6-d.mail.gandi.net [217.70.183.198]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2FBD868C5A0 for ; Sun, 9 Jul 2023 00:25:49 +0300 (EEST) X-GND-Sasl: michael@niedermayer.cc Received: by mail.gandi.net (Postfix) with ESMTPSA id 87EE7C0002 for ; Sat, 8 Jul 2023 21:25:48 +0000 (UTC) From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sat, 8 Jul 2023 23:25:30 +0200 Message-Id: <20230708212530.109692-18-michael@niedermayer.cc> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230708212530.109692-1-michael@niedermayer.cc> References: <20230708212530.109692-1-michael@niedermayer.cc> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 18/18] avradio/sdrdemux: Fix DC offset issue in AM demodulation X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: uBbIOY4Ml9L5 Signed-off-by: Michael Niedermayer --- libavradio/sdrdemux.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/libavradio/sdrdemux.c b/libavradio/sdrdemux.c index d73cbc0a06..7cc71b2cfb 100644 --- a/libavradio/sdrdemux.c +++ b/libavradio/sdrdemux.c @@ -740,7 +740,8 @@ static int demodulate_am(SDRContext *sdr, int stream_index, AVPacket *pkt) AVComplexFloat mm; double s2 = 0; double dcw = 0; - float amp, amp2; + float amp, stamp, wamp; + for(i = 0; i<2*sst->block_size; i++) { double tmp; AVComplexFloat v = sst->iblock[i]; @@ -755,17 +756,17 @@ static int demodulate_am(SDRContext *sdr, int stream_index, AVPacket *pkt) dcw += sst->window[i] * sst->window[i]; } - amp = dcw / (dc1.re*dc1.re + dc1.im*dc1.im); - amp2= dcw / s2; - amp = FFMIN(amp, amp2 * 0.1); + stamp = dcw / (dc1.re*dc1.re + dc1.im*dc1.im); + amp = FFMIN(stamp, dcw / s2 * 0.1); if (sst->am_amplitude) amp = 0.9*sst->am_amplitude + 0.1*amp; sst->am_amplitude = amp; + wamp = amp/stamp; mm = (AVComplexFloat){dc1.re * amp, -dc1.im * amp}; for(i = 0; i<2*sst->block_size; i++) { AVComplexFloat v = sst->iblock[i]; - sst->iblock[i].re = v.re*mm.re - v.im*mm.im - sst->window[i]; + sst->iblock[i].re = v.re*mm.re - v.im*mm.im - sst->window[i] * wamp; sst->iblock[i].im = v.re*mm.im + v.im*mm.re; }