From patchwork Tue Jul 18 21:45:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 42821 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:b813:b0:130:ccc6:6c4b with SMTP id fi19csp782094pzb; Tue, 18 Jul 2023 14:47:41 -0700 (PDT) X-Google-Smtp-Source: APBJJlEM0WsSHU9JQ74iMNBbqLVCFGt3OY2IuW55KojWvPPmwVUG8DxT7JBEbGovEk6fORGLNsqd X-Received: by 2002:a2e:9798:0:b0:2b6:a344:29cf with SMTP id y24-20020a2e9798000000b002b6a34429cfmr411903lji.17.1689716861430; Tue, 18 Jul 2023 14:47:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689716861; cv=none; d=google.com; s=arc-20160816; b=ZIBZnUYk/aQBc9XqP5KEnvN+ajG/leWgFLCW4fv0MKcGdLDm2y/kewSOMVfrqsKmiF IDVbh4yDTEZvzMlVgZbChECgb4We52Z0Rf6XTsQS85QC6wdVExN1rfI0fu0VgSFvZ3U/ e9IVu4n8DhoOXMT4SLqc8kxRFBqMClxzyXDsbZWRD60yge6azTSj7sqBaRqS9H4aBoRB CdpTVdrgoxtnMAxN84INcUexspNkmh4W8hHqGeutzfRbt8IVikTAn9DEFcN5Z4+5uRpJ Ox1pbwz8AShnLsWoAC43NJ2ydpw/nxUBd2PmZYE6h7S5772E1wCXCFg9kEHE3fnwtlIO uyUw== 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=otGe4Ry3B5OvlVe7LdfEp8Qvzhx6zNo7WUjgPaWvPZQ=; fh=YYwLYmpaV0Fpw/rxmSKNRLS2XzDkAlGbHATiKOPtZrY=; b=Iau2ZRAkFYf5SkFu4X82sPhLYVTS8fik9yrB/XiaL8C/8dItL1++w8FY4YyOBBAjtH uYc03wI99zJHBUT13HZ8GeB4OpoDx99a00KQjIkZlLlHvVmiBAyZZOFDw/z20UnMyJb2 sp3H8QGxX4GnML29UjvQi4dp8ErzCEMmDPaQS49ZDmc48Oxvbp5AJC/iUe5ilzKxqJrc x45Tgf4V73VBlERT/UqShCN51hGl2dQfKgeNDeHNWIgACi/fpW1lgctfH6d8ZpyEL9xL 7IRd/J7UFhAQj7nLBvVWPTDxfG8UkBNzQUPKFXD/F8y+fAkdOScRbwkZ28QSJvdWa0l+ uDqg== 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 z5-20020a1709064e0500b009893fe84e74si1853363eju.484.2023.07.18.14.47.41; Tue, 18 Jul 2023 14:47: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 4F93068C613; Wed, 19 Jul 2023 00:46:26 +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 5CEF568C62F for ; Wed, 19 Jul 2023 00:46:19 +0300 (EEST) Received: by mail.gandi.net (Postfix) with ESMTPSA id C5EAA240007 for ; Tue, 18 Jul 2023 21:46:18 +0000 (UTC) From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Tue, 18 Jul 2023 23:45:42 +0200 Message-Id: <20230718214542.685375-14-michael@niedermayer.cc> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230718214542.685375-1-michael@niedermayer.cc> References: <20230718214542.685375-1-michael@niedermayer.cc> MIME-Version: 1.0 X-GND-Sasl: michael@niedermayer.cc Subject: [FFmpeg-devel] [PATCH 14/14] avradio/sdrdemux: Fix wraparound with seeking 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: kHaF2MGzrj3x This implementation is clean and requires no communication between the threads. It requires a few more lines than i would like though Signed-off-by: Michael Niedermayer --- libavradio/sdr.h | 1 + libavradio/sdrdemux.c | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/libavradio/sdr.h b/libavradio/sdr.h index 3f76aec2a6..c651ba0d99 100644 --- a/libavradio/sdr.h +++ b/libavradio/sdr.h @@ -171,6 +171,7 @@ typedef struct SDRContext { int kbd_alpha; AVComplexFloat *windowed_block; int64_t block_center_freq; ///< center frequency the current block contains + int wraparound; int64_t station_freq; int64_t user_wanted_freq; int sample_size; diff --git a/libavradio/sdrdemux.c b/libavradio/sdrdemux.c index 65b5e6df8d..8967ff1ea9 100644 --- a/libavradio/sdrdemux.c +++ b/libavradio/sdrdemux.c @@ -1307,7 +1307,9 @@ static int snap2station(SDRContext *sdr, int *seek_direction) { Station *station_list[MAX_STATIONS]; int nb_stations; - if (sst->station) { + if (sdr->wraparound) { + current_freq = (*seek_direction) > 0 ? 0 : INT64_MAX; + } else if (sst->station) { current_freq = sst->station->frequency; } else if (sdr->station_freq) { current_freq = sdr->station_freq; @@ -1354,6 +1356,7 @@ static int snap2station(SDRContext *sdr, int *seek_direction) { *seek_direction = 0; atomic_store(&sdr->seek_direction, 0); atomic_store(&sdr->wanted_freq, wanted_freq); + sdr->wraparound = 0; //200*1000 had artifacts av_log(avfmt, AV_LOG_DEBUG, "request f = %"PRId64"\n", atomic_load(&sdr->wanted_freq)); @@ -2021,6 +2024,13 @@ process_next_block: ret = snap2station(sdr, &seek_direction); if (ret < 0) return ret; + if (seek_direction && !ret) { + int wrapdir = sdr->wraparound == 0 ? seek_direction : -seek_direction; + int64_t end_freq = snap2band(sdr, wrapdir > 0 ? 0 : INT64_MAX, wrapdir); + if (fabs(end_freq - sdr->block_center_freq) < 1500) + sdr->wraparound++; + + } } } else { av_assert0(sdr->mode == AllStationMode); @@ -2104,6 +2114,7 @@ int ff_sdr_read_seek(AVFormatContext *s, int stream_index, return ret; //snap2station found no station lets command the thread to seek if (!ret) { + sdr->wraparound = 0; atomic_store(&sdr->seek_direction, dir); flush_fifo(sdr, sdr->full_block_fifo); }