From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 2C4AD40333 for ; Tue, 18 Jul 2023 21:47:39 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0D5DB68C65B; Wed, 19 Jul 2023 00:46:26 +0300 (EEST) 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: 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); } -- 2.31.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".