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 B859742762 for ; Wed, 30 Mar 2022 12:18:56 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E45E868B1EB; Wed, 30 Mar 2022 15:18:46 +0300 (EEST) Received: from mail-lf1-f45.google.com (mail-lf1-f45.google.com [209.85.167.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 02D7D68B159 for ; Wed, 30 Mar 2022 15:18:41 +0300 (EEST) Received: by mail-lf1-f45.google.com with SMTP id bt26so35452608lfb.3 for ; Wed, 30 Mar 2022 05:18:40 -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=mColGxwyuFwu4Z8UoHQjQkqEwKQRklFDL2AuubPFmZ8=; b=HM/TUujx8beufeRYWRqPzLXg+7gSzLqMXyV+5L8Jd+JKfJRGb2wbr+F7iGOrFEewjM JwTJuC8z2GPNkp7G/NeZ9Qble2IKFUdu6X9GnhabNVae0Zv3hVzgIja+xuBrXdBaD45W bD8R1NJ0i/QVi2RSYCc5+7iw1IYs7JlJvJUvwiPDzQ3L/QYLxZmcLX3Zh0wVsxAIZC8y 8gHK/pEYLfNfGEpiMOEY9mlITzCUQZ9y1M4Bkcgj7ClHmDuufYD8UbEPsiEKtSHqSQKe HLxKypJ3SQQKH04SB9mPAb8fYOzN5GA0bdQEfLBnnncJKE82gNMj6A9YTrsrUeqsp+s2 HL0A== 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=mColGxwyuFwu4Z8UoHQjQkqEwKQRklFDL2AuubPFmZ8=; b=z1Ahp76Wt3HJezOcZu+TBt/jsldT5WK5F3SMp6n8X1R9izzRL219hqaacosHfFAcDm 9P8bcAwkpCZGFtzN25NBVUKUv787DLuDUKLtxAb9qh+MBoWmvtQh0N6r7Ea2XtVgY8Ds 0v1wtKeeu8UIFZuJ882I4SRZSrzpzLlPZIonkf9Xp4Whr210tK9huA8OXtTWnSD5yCy6 Dn9qOo2cFHcVOISvNI5S9c/g1+h4SQljFPwdgXns4KpmzvDd6FTN9aJ7S5NtF1eDr9C7 KPRbeALpZxcq51TTb9f8dc6tm/8gAYu/zHdk2T8JcGIFHJNA8yGcm4EzJGsLt7x3vLeI A7KA== X-Gm-Message-State: AOAM532C8jj8UgXDWh9RDM9+tpSsqT/KR0f5OrQ5oJvm7O1Up+52UMxd U4vYQ9XTwFISyNGBAkAXqUIDPxJryVI= X-Google-Smtp-Source: ABdhPJwbeCdKBcwow/NLIXxcbmR9aITtdEoY/HZvwrGsNS5kO7EgP9xcDgCtmSIw9t/v+dboqoyu1A== X-Received: by 2002:a05:6512:b83:b0:44a:9fb7:784b with SMTP id b3-20020a0565120b8300b0044a9fb7784bmr6461386lfv.547.1648642720133; Wed, 30 Mar 2022 05:18:40 -0700 (PDT) Received: from localhost.localdomain (deedock.humlab.lu.se. [130.235.135.183]) by smtp.gmail.com with ESMTPSA id f14-20020a056512322e00b0044a1507b232sm2316431lfe.120.2022.03.30.05.18.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Mar 2022 05:18:39 -0700 (PDT) From: Diederick Niehorster To: ffmpeg-devel@ffmpeg.org Date: Wed, 30 Mar 2022 14:17:48 +0200 Message-Id: <20220330121806.822-4-dcnieho@gmail.com> X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20220330121806.822-1-dcnieho@gmail.com> References: <20220330121806.822-1-dcnieho@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v5 03/21] 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 4efe7f8649..fb1dccb6b3 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".