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 ESMTPS id 85D4A488A6 for ; Tue, 28 Jan 2025 12:58:27 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1674D68B5C9; Tue, 28 Jan 2025 14:58:19 +0200 (EET) Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 51FBC68B557 for ; Tue, 28 Jan 2025 14:58:13 +0200 (EET) Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-215770613dbso69417365ad.2 for ; Tue, 28 Jan 2025 04:58:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738069091; x=1738673891; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=Utje7BrNOO1yzqQHZrfYnX3GTJWeYsnwHkp9lquEGis=; b=kgfkUKg4250Kh6wAGWKmdKOkDpmo/dbQWbW5LksNTSywFhTi2O9rWdDuN73ixOVrjv NoLklJ/QSrSWNLp1km55TLSaa2dc32d0lvy8lTtiFa7+PfQmZdH0NKcF6HhQa1kVSDFx IvuZ90qfLH3F3O81q2N8sqhfHIy0bOYawkwXepqwE6Qld343NW5z8BxUn/FSwji89T1w 2hrvwEYpbWOJ2GRallFLH4JZ++qEzjQVUa2FXeNwLNowAylHWD1XTaWyEwuRBlmGOTBz CEz6sN9KNop30OLhY3vPyH0BDMfboK6rr/aYwne0wW2vuS30h0jH2t6QZdRmyi6JwR8n JPxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738069091; x=1738673891; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Utje7BrNOO1yzqQHZrfYnX3GTJWeYsnwHkp9lquEGis=; b=KpF7ijzLkqoqQZw+8OUW9LyYbkpCtx1A4eqemEmO1yubDXhPfFfbU1P0c59DxE0lP2 jA7wZSrPgbHwIFgiDk7PL85kTwd2TT0x8m48ZbcktNrnGmgGuTjloHZdkJm8TUqZWQJY Fmym0Fn/aMADfBQDuv7UZwtu670UpKIMTIQNKD8KNZMuOMLqAXIWCDix8Zp5n+EkwYDL BIP4ZmKTBC7sqrsTt0XiEEv+ar02+x7//GXpnuyJKks/9Boli6NgaB8nkMKJbcnHOxxV ymMmGsROeAJIDFWAMzWeOvLhwJpfo3LFtTVN1LB8tegIPFG7UxlhCRShaAZ9zw68crHo gPbA== X-Gm-Message-State: AOJu0YwetjT3sA6C2WIMe0SwmaL/51B74joOSMKA/miZq4J1Z/B2RpC5 HM/ELj8nlK+iv75A4pTbuPfwwledzwenWp/LxpajtS4HyequWsNcjC5wfA== X-Gm-Gg: ASbGnctd73LtLY4pnvm/YFof3De+AoPjJvUvo8rquYOgsWV6RBbR7xrh32Wlo1ikh7B 8PVIoPDdqnk8gbFmoxBf7u0AlcO14xv2Qlu99MXB9Cswty9n1N0e/pwC1QAM2a/13vlkj68vyuo pdOryV3uuyLxzzl8nVjG6RG/hObxi8J7AgtSpOIuk/TkVZbYcAI40CrOyzaFY2pnh5NkWqYdjK3 otvXnh0av6/c1YpzhuV9hcJGDysAxRcX/gCJmv7GkOedHRCeaKh0OlvAFUCeR3mXKvcHE9F9B+A 5ILfez8ofmvw3WqhxMfgCtw/+fQ8ZA8= X-Google-Smtp-Source: AGHT+IFmrpJ0eSkJUPOtsg70X3g7KaK3/SThBQfURa5nYVRmj5XHc8gLkHpYBM4YPGhqXurThMqj6Q== X-Received: by 2002:a17:903:1252:b0:215:a04a:89d5 with SMTP id d9443c01a7336-21c352d6cd1mr626209805ad.2.1738069089930; Tue, 28 Jan 2025 04:58:09 -0800 (PST) Received: from localhost.localdomain ([2800:2121:b040:c:f8c4:754f:745c:b9b7]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21da414116asm80959655ad.129.2025.01.28.04.58.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jan 2025 04:58:09 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 28 Jan 2025 09:57:57 -0300 Message-ID: <20250128125757.742-1-jamrial@gmail.com> X-Mailer: git-send-email 2.48.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avdevice/alsa_dec: add a ch_layout option 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: Missed in ffc4fd3cc2ccb2cadb71f19849842b18ca1281c6, which after e78173557da898f18a78241cc3525b76694164b5 broke setting channel count. Should fix ticket #11434. Signed-off-by: James Almer --- libavdevice/alsa.h | 4 ++++ libavdevice/alsa_dec.c | 24 +++++++++++++++++++----- libavdevice/version_major.h | 1 + 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/libavdevice/alsa.h b/libavdevice/alsa.h index 07783c983a..3e1ba31384 100644 --- a/libavdevice/alsa.h +++ b/libavdevice/alsa.h @@ -35,6 +35,7 @@ #include "libavutil/log.h" #include "timefilter.h" #include "avdevice.h" +#include "version.h" /* XXX: we make the assumption that the soundcard accepts this format */ /* XXX: find better solution with "preinit" method, needed also in @@ -51,7 +52,10 @@ typedef struct AlsaData { int frame_size; ///< bytes per sample * channels int period_size; ///< preferred size for reads and writes, in frames int sample_rate; ///< sample rate set by user +#if FF_API_ALSA_CHANNELS int channels; ///< number of channels set by user +#endif + AVChannelLayout ch_layout; ///< Channel layout set by user int last_period; TimeFilter *timefilter; void (*reorder_func)(const void *, void *, int); diff --git a/libavdevice/alsa_dec.c b/libavdevice/alsa_dec.c index 018afaef08..b037c0bf1b 100644 --- a/libavdevice/alsa_dec.c +++ b/libavdevice/alsa_dec.c @@ -73,7 +73,14 @@ static av_cold int audio_read_header(AVFormatContext *s1) } codec_id = s1->audio_codec_id; - ret = ff_alsa_open(s1, SND_PCM_STREAM_CAPTURE, &s->sample_rate, s->channels, +#if FF_API_ALSA_CHANNELS + if (s->channels > 0) { + av_channel_layout_uninit(&s->ch_layout); + s->ch_layout.nb_channels = s->channels; + } +#endif + + ret = ff_alsa_open(s1, SND_PCM_STREAM_CAPTURE, &s->sample_rate, s->ch_layout.nb_channels, &codec_id); if (ret < 0) { return AVERROR(EIO); @@ -83,20 +90,24 @@ static av_cold int audio_read_header(AVFormatContext *s1) st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; st->codecpar->codec_id = codec_id; st->codecpar->sample_rate = s->sample_rate; - st->codecpar->ch_layout.nb_channels = s->channels; + ret = av_channel_layout_copy(&st->codecpar->ch_layout, &s->ch_layout); + if (ret < 0) + goto fail; st->codecpar->frame_size = s->frame_size; avpriv_set_pts_info(st, 64, 1, 1000000); /* 64 bits pts in us */ /* microseconds instead of seconds, MHz instead of Hz */ s->timefilter = ff_timefilter_new(1000000.0 / s->sample_rate, s->period_size, 1.5E-6); - if (!s->timefilter) + if (!s->timefilter) { + ret = AVERROR(EIO); goto fail; + } return 0; fail: snd_pcm_close(s->h); - return AVERROR(EIO); + return ret; } static int audio_read_packet(AVFormatContext *s1, AVPacket *pkt) @@ -146,7 +157,10 @@ static int audio_get_device_list(AVFormatContext *h, AVDeviceInfoList *device_li static const AVOption options[] = { { "sample_rate", "", offsetof(AlsaData, sample_rate), AV_OPT_TYPE_INT, {.i64 = 48000}, 1, INT_MAX, AV_OPT_FLAG_DECODING_PARAM }, - { "channels", "", offsetof(AlsaData, channels), AV_OPT_TYPE_INT, {.i64 = 2}, 1, INT_MAX, AV_OPT_FLAG_DECODING_PARAM }, +#if FF_API_ALSA_CHANNELS + { "channels", "", offsetof(AlsaData, channels), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_DEPRECATED }, +#endif + { "ch_layout", "", offsetof(AlsaData, ch_layout), AV_OPT_TYPE_CH_LAYOUT, {.str = "2C"}, INT_MIN, INT_MAX, AV_OPT_FLAG_DECODING_PARAM }, { NULL }, }; diff --git a/libavdevice/version_major.h b/libavdevice/version_major.h index f16abb6909..50f577f295 100644 --- a/libavdevice/version_major.h +++ b/libavdevice/version_major.h @@ -39,5 +39,6 @@ #define FF_API_OPENGL_DEVICE (LIBAVDEVICE_VERSION_MAJOR < 62) // reminder to remove the sdl2 device on next major bump #define FF_API_SDL2_DEVICE (LIBAVDEVICE_VERSION_MAJOR < 62) +#define FF_API_ALSA_CHANNELS (LIBAVDEVICE_VERSION_MAJOR < 62) #endif /* AVDEVICE_VERSION_MAJOR_H */ -- 2.48.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".