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 666E240F0F for ; Fri, 25 Mar 2022 14:11:50 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AFE0268B250; Fri, 25 Mar 2022 16:11:36 +0200 (EET) Received: from mail-lf1-f51.google.com (mail-lf1-f51.google.com [209.85.167.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5AA0A68B240 for ; Fri, 25 Mar 2022 16:11:34 +0200 (EET) Received: by mail-lf1-f51.google.com with SMTP id bu29so13681862lfb.0 for ; Fri, 25 Mar 2022 07:11:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=g1lgHVjWngNs9b9/sHUUezN1BW/V71DT6B2ywGZsOtY=; b=gJU+EStyC/F9BRiTEu8JHFVZiUzkMTc7J1IuGw1etuMqPlaR8iwt5WKX6Rb46J+TeS /GMwibgqg+TlqEYYkMssfTJ9p8cwXVOjmgYS4cpgcL7vIAowN3jLbrVIE1fGFBsAbRNM fdOLkEvIhVq6HJoDtOp6meHblPetBlzf8KkjkO7n2DNjdySG6sB/fkMEude7Zp9BfXL+ LtgAudFf46UU1Q7f2c+XjRr90KXYRGGerQ8PRXMhr8fxRtdIFiQJSdpYoweGQg7cdNNB vELwXLM85oGg00QM2CbjQUAw2vwErAqXD35Fivqy28IB9fX8HCTf/gwGVTDSKyu2aYVE 4i3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=g1lgHVjWngNs9b9/sHUUezN1BW/V71DT6B2ywGZsOtY=; b=KEgIUQNsOR5jCeLIafFsDa4Zg/Yu6Np0f4ZsZME7EVbQht3+bbAWNQFxLqASGku9KU ljUjYINbSlbY2j2DFNeBr7F2cqLVqIpCLlz+vky40ZefTrYAVdyYCQwq5H5XMqHxZclv FmtKsWKWhDlmzuGgCvRXMgtT5W0o+xSqpCmVltzMWLvDD0YDiOvFR5hWZfUZFhIHZBN1 F8FOEZ51dzeBegRkI0eA4Xvp8Z4sAZjSljQimeoYvlmNntROdjtqs51k21zIsVLbw9tK 4AZw3PjXn18SXR0V+Hi6etaywdFy3SidJaDNLnWzzGi7az5PyP7AHDyVtj/f+cjR90ON VBHQ== X-Gm-Message-State: AOAM532lMglShVklbkG8cBibKzO4b+EhmQ+OothzUNUkv1Q4zIeWzQAe oxnFBNZCYPda7jvHoyB2pNgbJzcmiD4= X-Google-Smtp-Source: ABdhPJx0GehrCc9iJFG9zSOaMcLBdiEJQ4VrCMaKv2F13kNcaKp3OhWR1rsNNavI7IU4lJAHdP6RGQ== X-Received: by 2002:a05:6512:2347:b0:44a:6e3f:74f7 with SMTP id p7-20020a056512234700b0044a6e3f74f7mr3630414lfu.660.1648217493021; Fri, 25 Mar 2022 07:11:33 -0700 (PDT) Received: from localhost.localdomain (deedock.humlab.lu.se. [130.235.135.183]) by smtp.gmail.com with ESMTPSA id h14-20020a056512338e00b0044a1d49f459sm715604lfg.227.2022.03.25.07.11.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 25 Mar 2022 07:11:31 -0700 (PDT) From: Diederick Niehorster To: ffmpeg-devel@ffmpeg.org Date: Fri, 25 Mar 2022 15:10:23 +0100 Message-Id: <20220325141041.1748-5-dcnieho@gmail.com> X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20220325141041.1748-1-dcnieho@gmail.com> References: <20220325141041.1748-1-dcnieho@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 04/22] 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 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 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. Bumping avdevice version. Signed-off-by: Diederick Niehorster --- libavdevice/dshow.c | 42 +++++++++++++++++++++++++++++++++++++ libavdevice/dshow_capture.h | 1 + libavdevice/version.h | 2 +- 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/libavdevice/dshow.c b/libavdevice/dshow.c index abb8325bc3..652e093204 100644 --- a/libavdevice/dshow.c +++ b/libavdevice/dshow.c @@ -1503,6 +1503,45 @@ 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; + HRESULT hr; + + 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 play state change requested, apply + if (run_state != ctx->is_running) { + if (run_state) + hr = IMediaControl_Run(ctx->control); + else + hr = IMediaControl_Pause(ctx->control); + + if (hr == S_FALSE) { + OAFilterState pfs; + hr = IMediaControl_GetState(ctx->control, 0, &pfs); + } + if (hr != 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) { @@ -1747,6 +1786,7 @@ static int dshow_read_header(AVFormatContext *avctx) } // don't exit yet, allow it to list crossbar options in dshow_open_device } + 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) { @@ -1820,6 +1860,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; @@ -1932,6 +1973,7 @@ const AVInputFormat ff_dshow_demuxer = { .read_packet = dshow_read_packet, .read_close = dshow_read_close, .get_device_list= dshow_get_device_list, + .control_message= dshow_control_message, .flags = AVFMT_NOFILE | AVFMT_NOBINSEARCH | AVFMT_NOGENSEARCH | AVFMT_NO_BYTE_SEEK, .priv_class = &dshow_class, }; diff --git a/libavdevice/dshow_capture.h b/libavdevice/dshow_capture.h index b548cd7afc..d0dd35a670 100644 --- a/libavdevice/dshow_capture.h +++ b/libavdevice/dshow_capture.h @@ -331,6 +331,7 @@ struct dshow_ctx { IMediaControl *control; IMediaEvent *media_event; + int is_running; enum AVPixelFormat pixel_format; enum AVCodecID video_codec_id; diff --git a/libavdevice/version.h b/libavdevice/version.h index 01e566a1be..69317c9280 100644 --- a/libavdevice/version.h +++ b/libavdevice/version.h @@ -31,7 +31,7 @@ #include "version_major.h" #define LIBAVDEVICE_VERSION_MINOR 7 -#define LIBAVDEVICE_VERSION_MICRO 100 +#define LIBAVDEVICE_VERSION_MICRO 101 #define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \ LIBAVDEVICE_VERSION_MINOR, \ -- 2.28.0.windows.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".