From patchwork Wed Jun 2 11:28:56 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Diederick C. Niehorster" X-Patchwork-Id: 28049 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:b214:0:0:0:0:0 with SMTP id b20csp456715iof; Wed, 2 Jun 2021 04:29:44 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyitukjEf+VcUI0cWTZtVZhWu8bKhVQGiu28Q1aYaorwDvKeCYTCxKJJZR/CbMxEf85Slc9 X-Received: by 2002:a17:906:1912:: with SMTP id a18mr6358849eje.117.1622633384143; Wed, 02 Jun 2021 04:29:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622633384; cv=none; d=google.com; s=arc-20160816; b=ETuvi68v/L1X8kvykWYpKUp+1o20MKVGeVAWSb50xfN2BsAHAOAdS6O/RgNM0/UtqB apd28fmBWxNitGM39Rv3dYy/4nEPhVr/6z11l+VmhsyZncb1XU8ymBAL/bVwS5gMEzsN EISzlrzlPoQ/KWJVYC2jIk+5cU4DtyEp5VQpuY+lqgRsEhGW3KOmjYPX5cnyCMSgokib fRmPXBcvOHV/kTREkzdDhhJ+oetpO5Eb1exO+b7xoLHUqMn6Sf1NesXKcjVfhSDiP7Hy xlUaZAXYdhQxkC6d3zGr5/W1K+vywjV2hCI79oS6PN+5NHw8yg3LqPpswgaMdZUX0vu8 w4xg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc: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:dkim-signature:delivered-to; bh=d9p0lPZzZi/hRhzj7ZVSaZiKwzgrnpyYgqY1Lvulkkk=; b=lWxikvlRFU+c3rhdydAWQs4lQmEIwPzYV496L9eZsh8B55IC4cU8XnkIylTHAjzGgD n/IOukR3S2AHTEtG6deBUoG8KNjSUFvNyRHjhws3R6PQ3svCeLFFS80olyfgX85As37Q 76YWaQL2DS1fAbUctfnSwZP4mKhA/2KU6MzUBiC7VqLg5VGfT4g5SI+vkjhR15H4yjCv nR/Msog6PJnivAC3MD5WuJFQdFLfDWRVOAwRZJszIkVMzmJcO13lgfhLp7Gljm2qOb2s 0pdShL6Hdyqp7VMwB2WNlYQ5NeVikOkG5V8EEGAyZrnuGqyA6mdMFZaQn3Gw+NTvnabt 76+g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=Y68vj7x3; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id n9si1753624edd.98.2021.06.02.04.29.43; Wed, 02 Jun 2021 04:29: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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=Y68vj7x3; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1AB2B68A037; Wed, 2 Jun 2021 14:29:29 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf1-f46.google.com (mail-lf1-f46.google.com [209.85.167.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 28DE36804A2 for ; Wed, 2 Jun 2021 14:29:21 +0300 (EEST) Received: by mail-lf1-f46.google.com with SMTP id j10so2786764lfb.12 for ; Wed, 02 Jun 2021 04:29:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=8FZ/3mPjoi+sy9OfbHiUqSdbm5jYHI4/2O9IuPgAQgA=; b=Y68vj7x3+ediV6KN3+LST4ODaUf7c/ow8hfwkFGQ5ley0XCTjEzV2CwOp0FYWvBdp5 OQPX8gHK8Qe2aiLrviVPHENJAACFXyL5h/IXmlBqvuRRkf1ful2Jg4Q3BnH01/FAJ+GL DXzlJtkEjzsOMRNjQO93lR/EOE430gHWYBEWHpnp4guqsf+13rr+5s0FsfYzBcKRDLOF 1w0Pc31hVkTr0PiV8miGqlIQLR7KEgjIFHs9WUiWYOT/vAsaLJdciol4O0+LtL5SY81i E+mEJGVOSRFXY9eEurrrd2+IV+Zsk9O43xY9XxYwfn1w5g/kaznCikBoOy/fnmjH5Ln0 khlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=8FZ/3mPjoi+sy9OfbHiUqSdbm5jYHI4/2O9IuPgAQgA=; b=IaKWjDB7DW0dxVZI10FRClUc5Wt+RRxNFhVzAJ9kKswvLvrigCna0kkZoMEII22lPg Q0W7LITve4R9rGAdA8VfD1AShCfFRbccNh9FKIO7LA9o2htI9EbicDSaReyyn8K+xOgi PJMFn/s9RUYDVIM/1M9oujJZ1XieU54qC7fcPBMEBBRE8LqEt1GeEnNZn+A7gBtr1riK tgqV3koI/IPPmdaWpUG1OE6kXWmQihEOsZNGeeouAnahPoH3SyehUhYRul5OO8To9mjd AHCEWa0obHhsxMEDDFPV0tFHtAfCG0w41gjTMyRJV60oqU5UhK2gyZJc0A++y3niFmAn lqpg== X-Gm-Message-State: AOAM53154cuqd+tuGUt5LROhrHMSNXsGXW92muYAfJSegz1ksKf396E+ ND4Z0AAEJebwzE2WXaDP/iRTgFyrEqW5gg== X-Received: by 2002:ac2:5ddb:: with SMTP id x27mr22300916lfq.31.1622633360271; Wed, 02 Jun 2021 04:29:20 -0700 (PDT) Received: from localhost.localdomain (deedock.humlab.lu.se. [130.235.135.183]) by smtp.gmail.com with ESMTPSA id v6sm1249497lfr.182.2021.06.02.04.29.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Jun 2021 04:29:19 -0700 (PDT) From: Diederick Niehorster To: ffmpeg-devel@ffmpeg.org Date: Wed, 2 Jun 2021 13:28:56 +0200 Message-Id: <20210602112901.2163-2-dcnieho@gmail.com> X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20210602112901.2163-1-dcnieho@gmail.com> References: <20210602112901.2163-1-dcnieho@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/6] avformat: add control_message function to AVInputFormat 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 Cc: Diederick Niehorster Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: SN8KrefXkPJT Control messages are useful for programmatic control of not only outdevs but also indevs. Bumping avformat version. Signed-off-by: Diederick Niehorster --- libavdevice/avdevice.c | 8 +++++--- libavformat/avformat.h | 6 ++++++ libavformat/version.h | 4 ++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/libavdevice/avdevice.c b/libavdevice/avdevice.c index 22b7595ab1..cee4b0cb0d 100644 --- a/libavdevice/avdevice.c +++ b/libavdevice/avdevice.c @@ -53,9 +53,11 @@ const char * avdevice_license(void) int avdevice_app_to_dev_control_message(struct AVFormatContext *s, enum AVAppToDevMessageType type, void *data, size_t data_size) { - if (!s->oformat || !s->oformat->control_message) - return AVERROR(ENOSYS); - return s->oformat->control_message(s, type, data, data_size); + if (s->oformat && s->oformat->control_message) + return s->oformat->control_message(s, type, data, data_size); + if (s->iformat && s->iformat->control_message) + return s->iformat->control_message(s, type, data, data_size); + return AVERROR(ENOSYS); } int avdevice_dev_to_app_control_message(struct AVFormatContext *s, enum AVDevToAppMessageType type, diff --git a/libavformat/avformat.h b/libavformat/avformat.h index a28ac372da..adbdd712a7 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -737,6 +737,12 @@ typedef struct AVInputFormat { */ int (*read_seek2)(struct AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags); + /** + * Allows sending messages from application to device. + */ + int (*control_message)(struct AVFormatContext *s, int type, + void *data, size_t data_size); + /** * Returns device list with it properties. * @see avdevice_list_devices() for more details. diff --git a/libavformat/version.h b/libavformat/version.h index 5de0814316..7f02e18f24 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -32,8 +32,8 @@ // Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) // Also please add any ticket numbers that you believe might be affected here #define LIBAVFORMAT_VERSION_MAJOR 59 -#define LIBAVFORMAT_VERSION_MINOR 2 -#define LIBAVFORMAT_VERSION_MICRO 101 +#define LIBAVFORMAT_VERSION_MINOR 3 +#define LIBAVFORMAT_VERSION_MICRO 100 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ LIBAVFORMAT_VERSION_MINOR, \ From patchwork Wed Jun 2 11:28:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Diederick C. Niehorster" X-Patchwork-Id: 28053 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:b214:0:0:0:0:0 with SMTP id b20csp456796iof; Wed, 2 Jun 2021 04:29:52 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxio8IPEC3gO2XofCFbDOr16ccUk+p66iLO4kMUerg+AcR4aXJORbt7q9QuUjxm6Jg09Lzm X-Received: by 2002:a17:906:757:: with SMTP id z23mr24468519ejb.537.1622633392751; Wed, 02 Jun 2021 04:29:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622633392; cv=none; d=google.com; s=arc-20160816; b=cTn+ln4wsNVl9vfjP67lRA10zLnc0k6XAgc/JC0qbPnlHwwd/m/t5LMz9zxdQwv8P7 lkkythePl+kqc/3gqSdGCqE5sqor04N1L4G11nok7RZUt+cXtEJudHiSNMqBGrWSpRkf TBmeVLhwNu4Ztk6TzXfij/Uogw1Gn2qY3ZqcpxpO9mkWEUvzgRz6SP/vQY9gEgrcedjF SvHETGOM/h3mlpT1ucphREzJi1ZhXR1eF8bZ77KeJ5ETkyoevw636AWcZvbMsc7WaVoq Z7snAhvhR0Z5WS4M+NpcOxcZMip62Hc+4OfCywxQlsQ+cZbAwlTMw5sr2sYuZFSGIte1 lBsQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc: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:dkim-signature:delivered-to; bh=OfKMVgVkNmnDGk/e/wwew1owY9r9dKqbJ9B8xLV8dqw=; b=qtqhp9I7HHrU0gSDasZWPQLhTVzQEbhdGQfTaRgBtib8no5VIpIQ47sUmGc6ZYdT0V 5vFpfl9reZ9jQjJrlXVvpyAgLDc5txuuclEwZSvsMtbY8NlI81OBt+gwMRpVt1ubiqh9 RMlmGWFGd+G5fxP2+pgzdUQuMvWiFRbgtdU6x9/xaYb+mdiuuOfjlMy0bPYyhF9mS6iK fgf+imwafcEXvYhvelfVydeBSgweACCmNjV+4CE5J0vIXxeaByeROxMAotPQgkQxLqIZ BQAd9YrYEhvJb/dz28+qzIzIJozzz2DpscNX459iVipQERJjFzLtVbb/3XQ9HTtOAMa8 GWIQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=W58Psjcy; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id j10si18586189ejd.87.2021.06.02.04.29.52; Wed, 02 Jun 2021 04:29:52 -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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=W58Psjcy; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2CF2D68A046; Wed, 2 Jun 2021 14:29:30 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf1-f42.google.com (mail-lf1-f42.google.com [209.85.167.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D5B58689DAB for ; Wed, 2 Jun 2021 14:29:21 +0300 (EEST) Received: by mail-lf1-f42.google.com with SMTP id j10so2786821lfb.12 for ; Wed, 02 Jun 2021 04:29:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=NZOBSLBHMHm3wos2u3cHUBvplpkk2bSMror5SpJDB/o=; b=W58PsjcyGdHt8cEoVRHBkt6xHrFcISf1fDKeYjsdznu92WqoteVH7NymN/qFGN1fpz rj5SwqVW96pQF9kQfpij+RHt2DNSwLwv6lMQBRYiqhBY71vAau+xPxQmi3NlweMIBHBv Bvqpr3zpgmVIv3+cevQpn9AKIIA/28H/yQ+rC0Hq4eFDg0tOXJbYaPcj/jJi0O2eM6FN I5fqjBhQfbWGK9tvGGjTyUSrh8+LJ1yJ6S6Osoz4DO+lmQx0FyVuLZpquMQGB/7khs/v z2leQHpg/xjUeBJceeMulSdSteLD/1mx0FIDQre+FEQMqWgTfiauE2k9Pe5iZfrSX6el JXQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=NZOBSLBHMHm3wos2u3cHUBvplpkk2bSMror5SpJDB/o=; b=cHzx8bPJA00bq/Wd7WE+S7Y4PtH3nonDqjlNtdNYF2eJ8DQMDoxmzsMorN6JT8bhsI SRvBedw/2UmK8MM3ee+lncWEaju8pk1v71AD6JObPs5NP34q9gHwKDQSn+g15AFcKmaX yR2gfN3N2HQAoibtOqF+TyNCfzNodf1PZyIg4ACIkLwMt/aHoLM1N+Rc/jrQdghlL7C+ XYjPb1xRPvQqOlUV3Z8fM8kWY6i6H3TxC7O6iP05HNPAlWBqnTRuWSShqDJENwLy6GR1 uNIlMyQgUtkDgwjS+cBimWeyWH9espML8WSKjkFoRv0el2j6yhvbj6iyQ6H06zHj2tid wAXA== X-Gm-Message-State: AOAM531PWUHdKHqAqPAmLz1pNcH3CU9lUUDO79NBfc22f1rRLTZhn74h oAKiYPZ9Gx6bnecxpyYtqpdC/YjNBXqxXw== X-Received: by 2002:ac2:5c03:: with SMTP id r3mr21359122lfp.504.1622633361003; Wed, 02 Jun 2021 04:29:21 -0700 (PDT) Received: from localhost.localdomain (deedock.humlab.lu.se. [130.235.135.183]) by smtp.gmail.com with ESMTPSA id v6sm1249497lfr.182.2021.06.02.04.29.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Jun 2021 04:29:20 -0700 (PDT) From: Diederick Niehorster To: ffmpeg-devel@ffmpeg.org Date: Wed, 2 Jun 2021 13:28:57 +0200 Message-Id: <20210602112901.2163-3-dcnieho@gmail.com> X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20210602112901.2163-1-dcnieho@gmail.com> References: <20210602112901.2163-1-dcnieho@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/6] avdevice/dshow: implement control_message interface 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 Cc: Diederick Niehorster Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 1vv/wLtfq3gC This allows programmatic users of avdevice to start and stop the DirectShow Capture graph (i.e. receive frames or not). This is important because now the buffer fills up and starts dropping samples when enqueued packets are not read out immediately after the demuxer is opened. Signed-off-by: Diederick Niehorster --- libavdevice/dshow.c | 41 +++++++++++++++++++++++++++++++++++++ libavdevice/dshow_capture.h | 1 + 2 files changed, 42 insertions(+) diff --git a/libavdevice/dshow.c b/libavdevice/dshow.c index 8d0a6fcc09..6e0147aed7 100644 --- a/libavdevice/dshow.c +++ b/libavdevice/dshow.c @@ -912,6 +912,44 @@ error: return ret; } +static int dshow_control_message(AVFormatContext* avctx, int type, void* data, size_t data_size) +{ + struct dshow_ctx* ctx = avctx->priv_data; + int run_state = ctx->is_running; + int r; + + switch (type) { + case AV_APP_TO_DEV_PAUSE: + run_state = 0; + break; + case AV_APP_TO_DEV_PLAY: + run_state = 1; + break; + case AV_APP_TO_DEV_TOGGLE_PAUSE: + run_state = !run_state; + break; + } + + if (run_state != ctx->is_running) { + if (run_state) + r = IMediaControl_Run(ctx->control); + else + r = IMediaControl_Pause(ctx->control); + + if (r == S_FALSE) { + OAFilterState pfs; + r = IMediaControl_GetState(ctx->control, 0, &pfs); + } + if (r != S_OK) { + av_log(avctx, AV_LOG_ERROR, "Could not run/pause graph\n"); + return AVERROR(EIO); + } + ctx->is_running = run_state; + } + + return 0; +} + static enum AVCodecID waveform_codec_id(enum AVSampleFormat sample_fmt) { switch (sample_fmt) { @@ -1152,6 +1190,7 @@ static int dshow_read_header(AVFormatContext *avctx) } } } + ctx->is_running = 0; if (ctx->device_name[VideoDevice]) { if ((r = dshow_open_device(avctx, devenum, VideoDevice, VideoSourceDevice)) < 0 || (r = dshow_add_device(avctx, VideoDevice)) < 0) { @@ -1225,6 +1264,7 @@ static int dshow_read_header(AVFormatContext *avctx) av_log(avctx, AV_LOG_ERROR, "Could not run graph (sometimes caused by a device already in use by other application)\n"); goto error; } + ctx->is_running = 1; ret = 0; @@ -1335,6 +1375,7 @@ const AVInputFormat ff_dshow_demuxer = { .read_header = dshow_read_header, .read_packet = dshow_read_packet, .read_close = dshow_read_close, + .control_message = dshow_control_message, .flags = AVFMT_NOFILE, .priv_class = &dshow_class, }; diff --git a/libavdevice/dshow_capture.h b/libavdevice/dshow_capture.h index 06ded2ba96..b7ef3770df 100644 --- a/libavdevice/dshow_capture.h +++ b/libavdevice/dshow_capture.h @@ -330,6 +330,7 @@ struct dshow_ctx { IMediaControl *control; IMediaEvent *media_event; + int is_running; enum AVPixelFormat pixel_format; enum AVCodecID video_codec_id; From patchwork Wed Jun 2 11:28:58 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Diederick C. Niehorster" X-Patchwork-Id: 28048 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:b214:0:0:0:0:0 with SMTP id b20csp456902iof; Wed, 2 Jun 2021 04:30:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw96fjK/l1lz6AlVpgoDlCEHdYHRON3IS9K89szIP0oDljvNyG6aZqEzERP6VQ7WJ72lblt X-Received: by 2002:a17:906:2a8e:: with SMTP id l14mr20780688eje.549.1622633401808; Wed, 02 Jun 2021 04:30:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622633401; cv=none; d=google.com; s=arc-20160816; b=Hjbny0q175yvSh7VOsu0tr4QIPlY18K5ic3CKnxkoyqnOyLYJae8Yufbtgafly3AT+ omA7HUV/YjB9YhZwkZ7MUemfmba6MrsZCMsl6XWyy+p/hoU6c7Ls76ntZT8kkumd+nSs CCc8rBLN7Lij0dVIBn2yVas+tBV1swA4JO5Etv5LLYutu2fliRLxaTpj6O7rd6vLlggj 8tkzNSIOiPQ0ONU1apPkLXyayLW/83d+BBnOnj+JQ8yiOFUuGSBEHYKHY9rKOQ2mijNF MkqJI0tVBvT+bJB1v+39eKeZH2udACmLYKsHZ4f7NimtfCs1npPp+1zv/avO+OGotYO/ bEng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc: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:dkim-signature:delivered-to; bh=N0CroBT1lK70HZHadGVIDQCqtzkKBxMEOk5eH406P8M=; b=cqXuFUrdRCKvPPU6IzbWEYoUFNByZtOn/H2vlH0HatdYdEBoXheU01DXkwA5D1eoIA NVZhmauvxhSc7ZpbuRtaxixUCOGFW1LdLMtczJ7UeTp+2E5pIKtnv3WWY5VkY+22WFOi WYMPTbOLV1cP/T0St4wGy3itCtvSCZ6a3HCXgSBYmCTKpYlapp867y9e5SfIaeujNQa4 dPnSbxkq+TZYJanVji8eotfpZBI1H0zipjPUjrGWYoAx4v5n1iZLcPkG786FNfPFIAJj siXBCM1wzGzIeFiLvPJKENz18P9IlP4nNofGKuSFObp38ZLN9OpsatdqZoPsIF0U0IVu r/NQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b="pz/qV2pF"; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id hh16si19939781ejb.532.2021.06.02.04.30.01; Wed, 02 Jun 2021 04:30:01 -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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b="pz/qV2pF"; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3A59F68A094; Wed, 2 Jun 2021 14:29:31 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f180.google.com (mail-lj1-f180.google.com [209.85.208.180]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9D093689FD9 for ; Wed, 2 Jun 2021 14:29:22 +0300 (EEST) Received: by mail-lj1-f180.google.com with SMTP id w15so2122046ljo.10 for ; Wed, 02 Jun 2021 04:29:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=wm4CiWpDk7cyuXPa1jh0qiZIsJK69JCqXXbXNenlXB8=; b=pz/qV2pFBD5zRlf5o1GEgPp59VogCqdkj8oT1x/StFt4OTmbHBZCdgJnGA13pJp9Kq dLvYivp8+IPtgN60QtI296jAiX5TRUvHQXW04YwlLc8t7FurAvBVYn+Wie+fdeyHkOT/ IkZKGiAAjfc+gUbTYbJKQuciGPrLYds07W+N30b06uyg3d12blxFv+JAS66KKBdY/0q3 KIHZuzsvbamlFq3Ejl6MX9ZfrdBZ6EB0JUQtf31debiyGV5HZXNNGCiIju+FjT2QyD3G uPdA0TFCfXhV+N/rKt61L2QPfzkDaKwO8Rcebn+dt8ZmkfqbXtESjLeVt4DfuXUNlKD+ QA9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=wm4CiWpDk7cyuXPa1jh0qiZIsJK69JCqXXbXNenlXB8=; b=QnvlGtAaJamsTplmkEyZOGM1KylfS4JB0af0pEY/7nTRcJX8HqlCIpwK5sN0v9kEXb cO7PLGyEIyNcBVTPmTGbNcWXQ4kD4vYuDaETX1YwQ2Z+x1xcJGoie7K1RYuGeIsOAmkk LU8PQ8nGTDjRHekYKgin4ZvWEyDDu5hLQG9IohmixS6Xxz6nCGY6b4KMRGqbFfAP4oDN vlHb/mZXcUZAga4zXFL3r54ZXY1HLCp0n9DvL843HWuPKO3vffcXMOSK2bvwKcB/t+T3 qz/3Mydrdqd01pvCiXL30LhTSRMJnkqiDGWYRfk0ykAwhroL98fdXtV97vlwPbFE7IL3 Ix7w== X-Gm-Message-State: AOAM53239RmQz/V5L96xri8zxSkbpS9emNGMtjXSd7lp1GhEN0jCWr6z O0KLZEPQA1MqEfrNfMJz6PvbYrSas8Fs5w== X-Received: by 2002:a2e:860c:: with SMTP id a12mr3165545lji.78.1622633361697; Wed, 02 Jun 2021 04:29:21 -0700 (PDT) Received: from localhost.localdomain (deedock.humlab.lu.se. [130.235.135.183]) by smtp.gmail.com with ESMTPSA id v6sm1249497lfr.182.2021.06.02.04.29.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Jun 2021 04:29:21 -0700 (PDT) From: Diederick Niehorster To: ffmpeg-devel@ffmpeg.org Date: Wed, 2 Jun 2021 13:28:58 +0200 Message-Id: <20210602112901.2163-4-dcnieho@gmail.com> X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20210602112901.2163-1-dcnieho@gmail.com> References: <20210602112901.2163-1-dcnieho@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/6] avdevice: adding control message requesting to show config dialog 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 Cc: Diederick Niehorster Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 2b+XkO94lZBu This control message can be used to programmatically ask a device to show its configuration dialog. Bumping avdevice version. Signed-off-by: Diederick Niehorster --- libavdevice/avdevice.h | 10 ++++++++++ libavdevice/version.h | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/libavdevice/avdevice.h b/libavdevice/avdevice.h index 8370bbc7f2..b4b8465e19 100644 --- a/libavdevice/avdevice.h +++ b/libavdevice/avdevice.h @@ -190,6 +190,16 @@ enum AVAppToDevMessageType { */ AV_APP_TO_DEV_GET_VOLUME = MKBETAG('G', 'V', 'O', 'L'), AV_APP_TO_DEV_GET_MUTE = MKBETAG('G', 'M', 'U', 'T'), + + /** + * Request to show configuration dialog. + * + * If device has a configuration dialog of type indicated by + * data, show it. + * + * data: int. + */ + AV_APP_TO_DEV_CONFIG = MKBETAG('C', 'O', 'N', 'F'), }; /** diff --git a/libavdevice/version.h b/libavdevice/version.h index 6021a0dd65..6e593ba00e 100644 --- a/libavdevice/version.h +++ b/libavdevice/version.h @@ -28,7 +28,7 @@ #include "libavutil/version.h" #define LIBAVDEVICE_VERSION_MAJOR 59 -#define LIBAVDEVICE_VERSION_MINOR 0 +#define LIBAVDEVICE_VERSION_MINOR 1 #define LIBAVDEVICE_VERSION_MICRO 100 #define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \ From patchwork Wed Jun 2 11:28:59 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Diederick C. Niehorster" X-Patchwork-Id: 28050 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:b214:0:0:0:0:0 with SMTP id b20csp457031iof; Wed, 2 Jun 2021 04:30:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzb3mfMV6TVTzb5oytIE1na3kZU8QzVASynq6mobqwAjyhQuwMLDNunB1D6xAaFcgj5z9Kv X-Received: by 2002:a17:906:19d0:: with SMTP id h16mr9764414ejd.193.1622633411355; Wed, 02 Jun 2021 04:30:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622633411; cv=none; d=google.com; s=arc-20160816; b=B98muSnx40mDPDeAthiI3XtBGzMhzwTPLvWELHDROZuOOT1f2Ux/ZR2vaPP/Bepj6H lEGxBEpI5Gzy8yCjW6BTHoeBzPk2E072gB9l5pO/0KV+2hXklRuCdyb/fzxxtzhdzbKS sJL3A4DYa1NLUZdPfQw4slylGaHQNOuwZ/nsyV3sgHzatG2aBUzVQlGlB9YyOwJeOyOP 7xDZG9v7hiHSxTs4COIqK/LfCjCJ4aBByiYnwqIKbLcGDO+LcOzQfxhZ8kroK7la7Nk/ uNicVJhPmpMLxcSenY++m7/s9aDtUN79uzjpwd2MZ/Q+wlCU37gZIf6ivYAC2pOvfDOf jjwQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc: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:dkim-signature:delivered-to; bh=FUW04J1SzXfS0VxbI3rcnzkDXHaeUakqghFdoObizMM=; b=O/MiwytJkjkGXbCk6lsFCI//PRsam79I9tytjcnV5ngWcgUagouBJlytU8Q7Xnt3ka mwKch2LnFQdPvmSrYsz9qNI8+jApC7VudpQo7UoJ+NrW902Gx9Q7oWfpo4+3xfqMAru/ 7CsPIe+1HTXkM9OESNSaX3I5pBtX4Ugfo2HE/ntvTmaIQ++U3cu4S/A2V05gJXBHI1cn L78+JB0k2aL33I2VSg0AIozcnm854x9GGcldBHIIZELsG9S/DrGFkGX5RJAV9KSViyyI cRa54mEy+92hHf2U6hXcuNiCs51gRWmOWwUEhiFy/HGf/VrmXDjxuMJoibBsWA6rpWa3 teWw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=WyJtsraH; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id p3si21887174ejy.228.2021.06.02.04.30.11; Wed, 02 Jun 2021 04:30:11 -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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=WyJtsraH; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4C602689E3B; Wed, 2 Jun 2021 14:29:32 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf1-f50.google.com (mail-lf1-f50.google.com [209.85.167.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4C31B689F62 for ; Wed, 2 Jun 2021 14:29:23 +0300 (EEST) Received: by mail-lf1-f50.google.com with SMTP id b18so2785024lfv.11 for ; Wed, 02 Jun 2021 04:29:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=63d/7q18GJa/f2DJkPbdcecTbhFZPP3C99PKfriHR+Y=; b=WyJtsraH4MQRCON7bSWfNb6K639jyZUwu/ra9hhpJTuOfS0yx2QMmfTbeeY+XlgVlO T87vqgGKKrzhn3dG81L9r6EB6ctJiTQRzKLyC94vhtkRUZd81A0SGJscqOX3RXfMgw7q FdOgmbSb5bU8q0ouN8FawnHbfwWkjMu8/b5MxQLX5Bw8C/jke6B22xPfzQhJpa23qsrY uS8vbN2JFBSgK5uZMmOgy92lyX552xACCpe8TzE0Ak55abY4pEmMedkOBIzF5gTsXTpO ssXc9pMplgJ3bGkhoFJbpygDdsv/PBqcguasFIQLpHwvGoe7sIWlOuX0Y7MyqtMQh3Tf qWxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=63d/7q18GJa/f2DJkPbdcecTbhFZPP3C99PKfriHR+Y=; b=dk9JPAM5Irp+xGaNqvncs0sXiRBzsKm1E5tQ28LMoxy8Ftg75nrfT6rpUZS1ZSSpN6 1tFSALne/ocX/GeLOrAp0fU9S/+V3cjJxY70xATgy46ZQZ05CJC+IrHDdtCKCxkDHEK4 2RBs5EZd4yqRVL+GtSayWf1TWL+/I6hXt+ybUd+FdJBISBLX08zivRrEjxB5KE3nvDgo GFnwJH2awuH+vyKe1IbvAucXlb7iC3/tsDVGiSPTXMPoVC7nl+Nc8HK3uI+ILJvpLPox SyhLshsNrwHG/NxsohSSuRmXq6IAou8WD/EFnQoTApWAiVtsDGmNNT0unqFAKy5PbXJG uU0w== X-Gm-Message-State: AOAM532h6s+vHBxAg3tNQkQUiEdwaEeNX1OpQWqgTjNGkK9tHymU0Vxu si9ktuIdRDS4KjTlN0XeNwrmwhQqCnzYvQ== X-Received: by 2002:a05:6512:2249:: with SMTP id i9mr11191057lfu.592.1622633362435; Wed, 02 Jun 2021 04:29:22 -0700 (PDT) Received: from localhost.localdomain (deedock.humlab.lu.se. [130.235.135.183]) by smtp.gmail.com with ESMTPSA id v6sm1249497lfr.182.2021.06.02.04.29.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Jun 2021 04:29:22 -0700 (PDT) From: Diederick Niehorster To: ffmpeg-devel@ffmpeg.org Date: Wed, 2 Jun 2021 13:28:59 +0200 Message-Id: <20210602112901.2163-5-dcnieho@gmail.com> X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20210602112901.2163-1-dcnieho@gmail.com> References: <20210602112901.2163-1-dcnieho@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/6] avdevice/dshow: accept show config dialog control message 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 Cc: Diederick Niehorster Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: JkN5p/A0jNdu DirectShow source will pop up its configuration dialog when AV_APP_TO_DEV_CONFIG is received. Implementation for several other possible configuration dialogs is more involved and will be provided in the next commit. Signed-off-by: Diederick Niehorster --- libavdevice/dshow.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/libavdevice/dshow.c b/libavdevice/dshow.c index 6e0147aed7..561b85f4e0 100644 --- a/libavdevice/dshow.c +++ b/libavdevice/dshow.c @@ -928,6 +928,25 @@ static int dshow_control_message(AVFormatContext* avctx, int type, void* data, s case AV_APP_TO_DEV_TOGGLE_PAUSE: run_state = !run_state; break; + case AV_APP_TO_DEV_CONFIG: + { + int dialog = *(int*)data; + enum dshowDeviceType devtype = (dialog & 1) ? AudioDevice : VideoDevice; + if (dialog & 2) { + // device_dialog + if (ctx->device_filter[devtype]) + ff_dshow_show_filter_properties(ctx->device_filter[devtype], avctx); + } + else if (dialog & 2) { + // crossbar_connection_dialog + // TODO + } + else if (dialog & 4) { + // tv_tuner_dialog + // TODO + } + break; + } } if (run_state != ctx->is_running) { From patchwork Wed Jun 2 11:29:00 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Diederick C. Niehorster" X-Patchwork-Id: 28051 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:b214:0:0:0:0:0 with SMTP id b20csp457132iof; Wed, 2 Jun 2021 04:30:21 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx0cewPf213XCqC000cHbAfDUJHIC4hITbCOJEHlwEQRi5bRxzjsEv5aO8O8/+Lak7Xt0aQ X-Received: by 2002:a17:907:c01:: with SMTP id ga1mr34470849ejc.80.1622633421591; Wed, 02 Jun 2021 04:30:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622633421; cv=none; d=google.com; s=arc-20160816; b=RC8AE29GH2R3Gl/hFvrWJ1eSTBnGouI618R8LOTzRqLCrUHQbPQOwCIi3DQbJ/B20m Fjz3oxLhE2BjCJlbuuC8vHhzPu9ovdjma7rhlwq/mSFY73hYEfty5qrwIB3ZDSc0Ct7C OiP2DXAvV7esPfjpOBVL6h7yxB98xO2jQg3ePrGExGjJVlghKxYWxd4zxNtQFNNUNQOZ vu+cbfnq97wEtKuY0ZgcDRr+PR6rmSDrhsMjlZrW4SRrQ4PKk/2R7ZRtrqjY2n5uK9w7 T7/NWI+xVQ0TQy085p6OKnlwn6UpYRI3QEhHCqT18aIaYf7w2JzFGIMXLrPhh08lZ6vw df4A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc: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:dkim-signature:delivered-to; bh=XCu248PzwMAozMSlmdtLD+IxtRlVIM6FYC3XUfHe8Ok=; b=O6/iwKecjLvdrEmLwlRO5BgaMX++zlmj3Ptu4bcE/Kc8s9naG51c3m4b7IgmqBTN7F TNwenoCfr3m9AjfmQD5N3/+u6TeodgEfVp/xOpfzq8kd/QICnoZuplFYdWiDpjacycTr S7tqsJFmmlDA/6bpCOey+RejaosjAb0b8G0AYFsDeMlp3q7AJZwxHjNMOERcGJzlzhtK 1CykbEsRclAXSRjT611FyvuH3TUaaGD9bN+TmdMluVKVI3Y6YHRp96mWhRP/Id69NjhI yxH2f57JyDMIhCa/Qkj7qRcLQLY+QUiGheg0RtUQ8uC6jvn9/G5A+h/15/1P9R492wEV kA/A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=mtvnupLC; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id q2si22836224ejx.574.2021.06.02.04.30.21; Wed, 02 Jun 2021 04:30:21 -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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=mtvnupLC; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4C98768A0CD; Wed, 2 Jun 2021 14:29:33 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f181.google.com (mail-lj1-f181.google.com [209.85.208.181]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 13EFF68A02F for ; Wed, 2 Jun 2021 14:29:24 +0300 (EEST) Received: by mail-lj1-f181.google.com with SMTP id a4so2154982ljd.5 for ; Wed, 02 Jun 2021 04:29:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=TiS2EyLNfOgvHsMC5x9MpWtcUa1+OfdI7FPuIjhXpYk=; b=mtvnupLCMVNfTVVHL3U2nKeuznlpGej1P9f5kxN5GxwD3V2djxeF+TxHa+g9zNswCE 434Mfy0ofO4DIEGVWY65T0v9s6KkimzlN4aC8xF+P/rwDrWMIMNs2MIHfrJN5vahJBFs lrITJaZfgeqUojIwNN4syxaVloU/rp7Wn8dpPw6AxqwUw+qBg+/bOBlFY7ei4HWP4ok/ 9BgtFbeeAt0KvTfANOwuREidWTOaFfJcBNhyencU7Jg6CpqkyWF7uf/KqsMR22AYBL7d ewGgWYvCGOFCQl0+pXzeXZz1Le34e99yoH7p7iJYgU/od+s0efzDBH6n6jk13YvCaPnp e9EA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=TiS2EyLNfOgvHsMC5x9MpWtcUa1+OfdI7FPuIjhXpYk=; b=BtREHnpmMpOWE3aZ9JVXtQD4qQXmxGqdFrFx03q/tnfffiFjfLGOlUmGjgk/K6pL6r fm3x1OIlPgqDFpuzrUDifSp7rTaAX8Ro2scpMZXoJZ/dRHsBiz2/dSNSSF3phjGHoNee NmylItoI4OGWXPSe5JmQejNIcx6cX7AM74Q9zx3LF9KBbM41XDNxR49gKDxOOXNc8nkF mtbZnCe36YK9yO+aXbXV/8/ktig+/gQ23XYLbM+JGEWUyabHfkNPO4XXZOHfLr2PpuR1 JA8P23LVEwtcpD0uVNub3hjHJGD0ZwXmCzZt1m8IE7MXR+6cGfodu8Vzc9gXihPAnTB6 u4/g== X-Gm-Message-State: AOAM532Ra2BjmMvS0N4qA8Jh0DF8M7UnN4yb0di1d2WeTlhcWumNf9NR FL2LGyX7RhNXz6LeYv4b7RMtMgopPsGQ/Q== X-Received: by 2002:a05:651c:50c:: with SMTP id o12mr24777556ljp.287.1622633363181; Wed, 02 Jun 2021 04:29:23 -0700 (PDT) Received: from localhost.localdomain (deedock.humlab.lu.se. [130.235.135.183]) by smtp.gmail.com with ESMTPSA id v6sm1249497lfr.182.2021.06.02.04.29.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Jun 2021 04:29:22 -0700 (PDT) From: Diederick Niehorster To: ffmpeg-devel@ffmpeg.org Date: Wed, 2 Jun 2021 13:29:00 +0200 Message-Id: <20210602112901.2163-6-dcnieho@gmail.com> X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20210602112901.2163-1-dcnieho@gmail.com> References: <20210602112901.2163-1-dcnieho@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/6] avdevice/dshow: tv_tuner_audio_dialog cleanup missing 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 Cc: Diederick Niehorster Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 0twA2SPqnlOp Cleanup in case the show_analog_tv_tuner_audio_dialog was set was missing. Signed-off-by: Diederick Niehorster --- libavdevice/dshow_crossbar.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libavdevice/dshow_crossbar.c b/libavdevice/dshow_crossbar.c index 2438683cde..961defe690 100644 --- a/libavdevice/dshow_crossbar.c +++ b/libavdevice/dshow_crossbar.c @@ -204,5 +204,9 @@ end: IAMTVTuner_Release(tv_tuner_filter); if (tv_tuner_base_filter) IBaseFilter_Release(tv_tuner_base_filter); + if (tv_audio_filter) + IAMAudioInputMixer_Release(tv_audio_filter); + if (tv_audio_base_filter) + IBaseFilter_Release(tv_audio_base_filter); return hr; } From patchwork Wed Jun 2 11:29:01 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Diederick C. Niehorster" X-Patchwork-Id: 28052 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:b214:0:0:0:0:0 with SMTP id b20csp457270iof; Wed, 2 Jun 2021 04:30:32 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyGnJpupI7e/KXbh3CGN8c1+ip8aTOzBkaOts3LEdbmhojVSeDjT7lKlA93urE/xGUUFT4c X-Received: by 2002:a17:906:b104:: with SMTP id u4mr33231581ejy.211.1622633432036; Wed, 02 Jun 2021 04:30:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622633432; cv=none; d=google.com; s=arc-20160816; b=y4crZt0GPwR01Hae1CcQ/qyv6T1PH8UAgvLZIMvbzUWlrC2pTXA8utPC4pbEHvNAIa igY/iqdla2AZZZD5icFAVrMlNnJ9cL8+hPXU6JpQtYluSZmrUXWKMze6c81P239iHGR7 J5mILfeTnAxj8q216ZRlPv03cCzXXn0O1Rl1yxLUy5qUEQU11nU3sQlNH2Lofs5YYWqk qhEtsqfaYeggdzHpA957n2dcaWsUaiV+wqryVtEYCyrHpdvS2qwqaaEeOs2pQoQ7PPta PP5lXW/dAYV4u91FCZJFROHjiOBUCNv0H4PPX2/ZbzYEnSJjv3Q+udrLBmncqIkSSfQA 598A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc: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:dkim-signature:delivered-to; bh=n/KSRAtVKibI+1o9fN98gRSYIgH4Id+aQTpiaYpFvRs=; b=El61pZyKpZ4Taa32oVdwHN3C8RKSZA7wNVX31q2q7DvsaqnoA3LK75O8V1jZMNzjgv 4xIWbXJaNjD7axSeAAzW6IHcMd3yglAtdz9659R2EoKUKZ7aKUPgMvkvczFtCwWrDDla s/UbSeWYhjRWbo93M1uW/4K0DQJ7O73w5f+7kHv3IE8dO+O8tN0EFcDFNkd46vIqiCPp GKx+WgrOC8LyATR3lmsr83MpUnL/G6bwA4sgf8/NEyKbTytZIapknmrxtwHgjc19AF2A Q0paWn/xpTxyLY4hYGk0DKGBK6WroUtxVCzBHRyh5fd5tDugwVgRxG5405qeL1XKhVFQ ed6A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=SMPzhb26; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id f20si10604190eja.621.2021.06.02.04.30.31; Wed, 02 Jun 2021 04:30: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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=SMPzhb26; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5727768A0DE; Wed, 2 Jun 2021 14:29:34 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf1-f48.google.com (mail-lf1-f48.google.com [209.85.167.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 10F9E68A08E for ; Wed, 2 Jun 2021 14:29:25 +0300 (EEST) Received: by mail-lf1-f48.google.com with SMTP id a2so2804270lfc.9 for ; Wed, 02 Jun 2021 04:29:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0B7DBN06VjXWk8KdXvM9BrlyoiWkvsQlLXYZ/bhkCaQ=; b=SMPzhb26srljjhfytzBGsazTRVEd/vsEp5Rx7/3sPAn8a5letwBxW2uO5SmgekwaE0 5D79e7h+iSZuLYdt8pRQtyG6pe5tkt3Ps1BOhq6D7XM7f4lf1HsfZuyFbvVzpAvWjlex 4FgA2vQgehGIzV18RyhCrKyk1483lcqAI8jY5cLR1Ufdm5Ouel+kDP0xbVrR6uw3/V0L TLj6IZWmh70htGzjPBW1shxtTa8q1LeV7DkEH5jAixBqQNFsB63cnOc0b+yshQvY92iH anNnMZtMb+tajd8cXO4SwknyOjc1Zn3nr5hHraHHBkoNvQtDZFIbVUZR3KzXlhU1pO7+ PunQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=0B7DBN06VjXWk8KdXvM9BrlyoiWkvsQlLXYZ/bhkCaQ=; b=AHJr/Qyh+OD91OnkFZVm0PCMiUpvQQEKwf+goEbqiHgsx6oATASaspSARlk5kbjttv tG6/ZYPKA1HhnNG9fTUODOLAeoBnZ9UtRBfPkTy9qmLM+gBana4MLyhGFa9qVw4FVKqm fKKGrxQLsDIzg/GZNVctHSMPfi54bS4NebfbH1KW+Qe8aTp9c2FIOzmI6ClKkhxtrJFg i71hjmE3aajKtYfa5A0YEjzTxLjQi2Q/d1re4+1acbU9N0xwQ9fQ9WNTUoyaX/APyTX1 CGGuR567Pv6WOxXLgR44XefKZHmiCNnbaX7O1ZgOCTiRF36oskQFkqLM1AzfOw4ts56U ATxg== X-Gm-Message-State: AOAM531UiXu1uFVMss/TcwOEDFlCfEEa15JZIs58QrtCEI71yKE0PSZq gnNgOdeghvoxLjOWbOq2NS3/ezJomCoXkQ== X-Received: by 2002:ac2:5edd:: with SMTP id d29mr602013lfq.57.1622633363912; Wed, 02 Jun 2021 04:29:23 -0700 (PDT) Received: from localhost.localdomain (deedock.humlab.lu.se. [130.235.135.183]) by smtp.gmail.com with ESMTPSA id v6sm1249497lfr.182.2021.06.02.04.29.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Jun 2021 04:29:23 -0700 (PDT) From: Diederick Niehorster To: ffmpeg-devel@ffmpeg.org Date: Wed, 2 Jun 2021 13:29:01 +0200 Message-Id: <20210602112901.2163-7-dcnieho@gmail.com> X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20210602112901.2163-1-dcnieho@gmail.com> References: <20210602112901.2163-1-dcnieho@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 6/6] avdevice/dshow: add config dialog command for crossbar and tv tuner 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 Cc: Diederick Niehorster Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: IYRBDuIW3dNj The "show config dialog" command message can now also trigger dialog boxes for the crossbar connecting pins filter the analog tuner audio / analog tuner filters. _Untested_ as I do not have either device. Signed-off-by: Diederick Niehorster --- libavdevice/dshow.c | 78 +++++++++++++++++++++++++------ libavdevice/dshow_capture.h | 10 ++++ libavdevice/dshow_crossbar.c | 91 +++++++++++++++++++++++------------- 3 files changed, 132 insertions(+), 47 deletions(-) diff --git a/libavdevice/dshow.c b/libavdevice/dshow.c index 561b85f4e0..d274d93dc3 100644 --- a/libavdevice/dshow.c +++ b/libavdevice/dshow.c @@ -60,6 +60,11 @@ dshow_read_close(AVFormatContext *s) struct dshow_ctx *ctx = s->priv_data; PacketList *pktl; + if (ctx->graph_builder2[VideoDevice]) + ICaptureGraphBuilder2_Release(ctx->graph_builder2[VideoDevice]); + if (ctx->graph_builder2[AudioDevice]) + ICaptureGraphBuilder2_Release(ctx->graph_builder2[AudioDevice]); + if (ctx->control) { IMediaControl_Stop(ctx->control); IMediaControl_Release(ctx->control); @@ -873,6 +878,7 @@ dshow_open_device(AVFormatContext *avctx, ICreateDevEnum *devenum, av_log(avctx, AV_LOG_ERROR, "Could not create CaptureGraphBuilder2\n"); goto error; } + ctx->graph_builder2[devtype] = graph_builder2; ICaptureGraphBuilder2_SetFiltergraph(graph_builder2, graph); if (r != S_OK) { av_log(avctx, AV_LOG_ERROR, "Could not set graph for CaptureGraphBuilder2\n"); @@ -897,9 +903,6 @@ dshow_open_device(AVFormatContext *avctx, ICreateDevEnum *devenum, ret = 0; error: - if (graph_builder2 != NULL) - ICaptureGraphBuilder2_Release(graph_builder2); - if (pers_stream) IPersistStream_Release(pers_stream); @@ -912,11 +915,11 @@ error: return ret; } -static int dshow_control_message(AVFormatContext* avctx, int type, void* data, size_t data_size) +static int dshow_control_message(AVFormatContext *avctx, int type, void *data, size_t data_size) { - struct dshow_ctx* ctx = avctx->priv_data; + struct dshow_ctx *ctx = avctx->priv_data; int run_state = ctx->is_running; - int r; + HRESULT hr; switch (type) { case AV_APP_TO_DEV_PAUSE: @@ -930,7 +933,14 @@ static int dshow_control_message(AVFormatContext* avctx, int type, void* data, s break; case AV_APP_TO_DEV_CONFIG: { - int dialog = *(int*)data; + /* + * Documentation of dialog variable: + * 1st bit: if set, audio device, if not set, video device + * 2nd bit: if set, show property dialog for audio/video capture device + * 3rd bit: if set, show property dialog for crossbar connecting pins filter on audio/video device + * 4th bit: if set, show property dialog for analog tuner audio / analog tuner filter + */ + int dialog = *(int *) data; enum dshowDeviceType devtype = (dialog & 1) ? AudioDevice : VideoDevice; if (dialog & 2) { // device_dialog @@ -939,27 +949,67 @@ static int dshow_control_message(AVFormatContext* avctx, int type, void* data, s } else if (dialog & 2) { // crossbar_connection_dialog - // TODO + if (ctx->device_filter[devtype] && ctx->graph_builder2[devtype]) { + IAMCrossbar *cross_bar = NULL; + IBaseFilter *cross_bar_base_filter = NULL; + hr = ff_dshow_get_crossbar_and_filter(ctx->graph_builder2[devtype], ctx->device_filter[devtype], cross_bar, &cross_bar_base_filter); + + if (hr == S_OK && cross_bar_base_filter) + ff_dshow_show_filter_properties(cross_bar_base_filter, avctx); + + if (cross_bar) + IAMCrossbar_Release(cross_bar); + if (cross_bar_base_filter) + IBaseFilter_Release(cross_bar_base_filter); + } } else if (dialog & 4) { // tv_tuner_dialog - // TODO + if (ctx->device_filter[devtype] && ctx->graph_builder2[devtype]) { + if (devtype == VideoDevice) { + IAMTVTuner *tv_tuner_filter = NULL; + IBaseFilter *tv_tuner_base_filter = NULL; + hr = ff_dshow_get_tvtuner_and_filter(ctx->graph_builder2[devtype], ctx->device_filter[devtype], tv_tuner_filter, tv_tuner_base_filter); + + if (hr == S_OK && tv_tuner_base_filter) + ff_dshow_show_filter_properties(tv_tuner_base_filter, avctx); + + if (tv_tuner_filter) + IAMTVTuner_Release(tv_tuner_filter); + if (tv_tuner_base_filter) + IBaseFilter_Release(tv_tuner_base_filter); + } + else { + IAMAudioInputMixer *tv_audio_filter = NULL; + IBaseFilter *tv_audio_base_filter = NULL; + hr = ff_dshow_get_audiomixer_and_filter(ctx->graph_builder2[devtype], ctx->device_filter[devtype], tv_audio_filter, tv_audio_base_filter); + + if (hr == S_OK && tv_audio_base_filter) + ff_dshow_show_filter_properties(tv_audio_base_filter, avctx); + + if (tv_audio_filter) + IAMAudioInputMixer_Release(tv_audio_filter); + if (tv_audio_base_filter) + IBaseFilter_Release(tv_audio_base_filter); + } + } } break; } } + // if play state change requested, apply if (run_state != ctx->is_running) { if (run_state) - r = IMediaControl_Run(ctx->control); + hr = IMediaControl_Run(ctx->control); else - r = IMediaControl_Pause(ctx->control); + hr = IMediaControl_Pause(ctx->control); - if (r == S_FALSE) { + if (hr == S_FALSE) { OAFilterState pfs; - r = IMediaControl_GetState(ctx->control, 0, &pfs); + hr = IMediaControl_GetState(ctx->control, 0, &pfs); } - if (r != S_OK) { + if (hr != S_OK) { av_log(avctx, AV_LOG_ERROR, "Could not run/pause graph\n"); return AVERROR(EIO); } diff --git a/libavdevice/dshow_capture.h b/libavdevice/dshow_capture.h index b7ef3770df..5a665d0ee0 100644 --- a/libavdevice/dshow_capture.h +++ b/libavdevice/dshow_capture.h @@ -317,6 +317,7 @@ struct dshow_ctx { IPin *device_pin[2]; DShowFilter *capture_filter[2]; DShowPin *capture_pin[2]; + ICaptureGraphBuilder2 *graph_builder2[2]; HANDLE mutex; HANDLE event[2]; /* event[0] is set by DirectShow @@ -351,6 +352,15 @@ struct dshow_ctx { HRESULT ff_dshow_try_setup_crossbar_options(ICaptureGraphBuilder2 *graph_builder2, IBaseFilter *device_filter, enum dshowDeviceType devtype, AVFormatContext *avctx); +HRESULT ff_dshow_get_crossbar_and_filter(ICaptureGraphBuilder2 *graph_builder2, IBaseFilter *device_filter, + IAMCrossbar *cross_bar, IBaseFilter **cross_bar_base_filter); + +HRESULT ff_dshow_get_tvtuner_and_filter(ICaptureGraphBuilder2 *graph_builder2, IBaseFilter *device_filter, + IAMTVTuner *tv_tuner_filter, IBaseFilter *tv_tuner_base_filter); + +HRESULT ff_dshow_get_audiomixer_and_filter(ICaptureGraphBuilder2 *graph_builder2, IBaseFilter *device_filter, + IAMAudioInputMixer *tv_audio_filter, IBaseFilter *tv_audio_base_filter); + void ff_dshow_show_filter_properties(IBaseFilter *pFilter, AVFormatContext *avctx); #endif /* AVDEVICE_DSHOW_CAPTURE_H */ diff --git a/libavdevice/dshow_crossbar.c b/libavdevice/dshow_crossbar.c index 961defe690..6b714e849c 100644 --- a/libavdevice/dshow_crossbar.c +++ b/libavdevice/dshow_crossbar.c @@ -133,6 +133,44 @@ setup_crossbar_options(IAMCrossbar *cross_bar, enum dshowDeviceType devtype, AVF return S_OK; } +HRESULT +ff_dshow_get_crossbar_and_filter(ICaptureGraphBuilder2 *graph_builder2, IBaseFilter *device_filter, + IAMCrossbar *cross_bar, IBaseFilter **cross_bar_base_filter) +{ + HRESULT hr = ICaptureGraphBuilder2_FindInterface(graph_builder2, &LOOK_UPSTREAM_ONLY, (const GUID *) NULL, + device_filter, &IID_IAMCrossbar, (void **) &cross_bar); + if (hr != S_OK) + /* no crossbar found */ + return hr; + + if (cross_bar_base_filter) + hr = IAMCrossbar_QueryInterface(cross_bar, &IID_IBaseFilter, (void**)cross_bar_base_filter); + + return hr; +} + +HRESULT +ff_dshow_get_tvtuner_and_filter(ICaptureGraphBuilder2 *graph_builder2, IBaseFilter *device_filter, + IAMTVTuner *tv_tuner_filter, IBaseFilter *tv_tuner_base_filter) +{ + HRESULT hr = ICaptureGraphBuilder2_FindInterface(graph_builder2, &LOOK_UPSTREAM_ONLY, NULL, + device_filter, &IID_IAMTVTuner, (void **) &tv_tuner_filter); + if (hr == S_OK) + hr = IAMCrossbar_QueryInterface(tv_tuner_filter, &IID_IBaseFilter, (void **) &tv_tuner_base_filter); + return hr; +} + +HRESULT +ff_dshow_get_audiomixer_and_filter(ICaptureGraphBuilder2 *graph_builder2, IBaseFilter *device_filter, + IAMAudioInputMixer *tv_audio_filter, IBaseFilter *tv_audio_base_filter) +{ + HRESULT hr = ICaptureGraphBuilder2_FindInterface(graph_builder2, &LOOK_UPSTREAM_ONLY, NULL, + device_filter, &IID_IAMTVAudio, (void **) &tv_audio_filter); + if (hr == S_OK) + hr = IAMCrossbar_QueryInterface(tv_audio_filter, &IID_IBaseFilter, (void **) &tv_audio_base_filter); + return hr; +} + /** * Given a fully constructed graph, check if there is a cross bar filter, and configure its pins if so. */ @@ -140,55 +178,42 @@ HRESULT ff_dshow_try_setup_crossbar_options(ICaptureGraphBuilder2 *graph_builder2, IBaseFilter *device_filter, enum dshowDeviceType devtype, AVFormatContext *avctx) { - struct dshow_ctx *ctx = avctx->priv_data; - IAMCrossbar *cross_bar = NULL; - IBaseFilter *cross_bar_base_filter = NULL; - IAMTVTuner *tv_tuner_filter = NULL; - IBaseFilter *tv_tuner_base_filter = NULL; - IAMAudioInputMixer *tv_audio_filter = NULL; - IBaseFilter *tv_audio_base_filter = NULL; + struct dshow_ctx *ctx = avctx->priv_data; + IAMCrossbar *cross_bar = NULL; + IBaseFilter *cross_bar_base_filter = NULL; + IAMTVTuner *tv_tuner_filter = NULL; + IBaseFilter *tv_tuner_base_filter = NULL; + IAMAudioInputMixer *tv_audio_filter = NULL; + IBaseFilter *tv_audio_base_filter = NULL; HRESULT hr; + int should_show_crossbar_properties = (devtype == VideoDevice) ? ctx->show_video_crossbar_connection_dialog : ctx->show_audio_crossbar_connection_dialog; - hr = ICaptureGraphBuilder2_FindInterface(graph_builder2, &LOOK_UPSTREAM_ONLY, (const GUID *) NULL, - device_filter, &IID_IAMCrossbar, (void**) &cross_bar); + hr = ff_dshow_get_crossbar_and_filter(graph_builder2, device_filter, cross_bar, should_show_crossbar_properties ? &cross_bar_base_filter : NULL); if (hr != S_OK) { - /* no crossbar found */ - hr = S_OK; + if (!cross_bar) + /* no crossbar found */ + hr = S_OK; goto end; } + /* TODO some TV tuners apparently have multiple crossbars? */ - if (devtype == VideoDevice && ctx->show_video_crossbar_connection_dialog || - devtype == AudioDevice && ctx->show_audio_crossbar_connection_dialog) { - hr = IAMCrossbar_QueryInterface(cross_bar, &IID_IBaseFilter, (void **) &cross_bar_base_filter); - if (hr != S_OK) - goto end; + if (should_show_crossbar_properties && cross_bar_base_filter) ff_dshow_show_filter_properties(cross_bar_base_filter, avctx); - } if (devtype == VideoDevice && ctx->show_analog_tv_tuner_dialog) { - hr = ICaptureGraphBuilder2_FindInterface(graph_builder2, &LOOK_UPSTREAM_ONLY, NULL, - device_filter, &IID_IAMTVTuner, (void**) &tv_tuner_filter); - if (hr == S_OK) { - hr = IAMCrossbar_QueryInterface(tv_tuner_filter, &IID_IBaseFilter, (void **) &tv_tuner_base_filter); - if (hr != S_OK) - goto end; + hr = ff_dshow_get_tvtuner_and_filter(graph_builder2, device_filter, tv_tuner_filter, tv_tuner_base_filter); + if (hr == S_OK && tv_tuner_base_filter) ff_dshow_show_filter_properties(tv_tuner_base_filter, avctx); - } else { + else av_log(avctx, AV_LOG_WARNING, "unable to find a tv tuner to display dialog for!"); - } } if (devtype == AudioDevice && ctx->show_analog_tv_tuner_audio_dialog) { - hr = ICaptureGraphBuilder2_FindInterface(graph_builder2, &LOOK_UPSTREAM_ONLY, NULL, - device_filter, &IID_IAMTVAudio, (void**) &tv_audio_filter); - if (hr == S_OK) { - hr = IAMCrossbar_QueryInterface(tv_audio_filter, &IID_IBaseFilter, (void **) &tv_audio_base_filter); - if (hr != S_OK) - goto end; + hr = ff_dshow_get_audiomixer_and_filter(graph_builder2, device_filter, tv_audio_filter, tv_audio_base_filter); + if (hr == S_OK && tv_audio_base_filter) ff_dshow_show_filter_properties(tv_audio_base_filter, avctx); - } else { + else av_log(avctx, AV_LOG_WARNING, "unable to find a tv audio tuner to display dialog for!"); - } } hr = setup_crossbar_options(cross_bar, devtype, avctx);