From patchwork Wed Jun 1 09:06:16 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matt Jacobson X-Patchwork-Id: 36024 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6914:b0:82:6b11:2509 with SMTP id q20csp3311055pzj; Wed, 1 Jun 2022 02:10:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz4746gbIG+vKToqMvCQrin0JupleXIQrJ5c+oktHtLiHcRJPZ6InMAvkztK1Dyk3V5sel3 X-Received: by 2002:a17:906:4784:b0:6ff:34ea:d824 with SMTP id cw4-20020a170906478400b006ff34ead824mr22690861ejc.526.1654074610200; Wed, 01 Jun 2022 02:10:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654074610; cv=none; d=google.com; s=arc-20160816; b=kQ8TnNWBcmlW0lMpK1h+kw9+dWRYuNK+uEUtIHAsONhsk1cYJLSwxuyNQ/LKjZEBgA 5hx7rBmoNZtPSzhsNtfabyN8nJZOKCjJZtAvmkWKbUHR6J75wrAakOMLe6RnS0RPqiqV LCwKGgBnTazGrseBT5alrBWhffOiFN6pMDOh3GWtx5aZYMtlmz3dttVDdA6ikH98k3PP GFwMe7PuV3cijgUM1/xEPr443WIg7VHYGPmtsPZ9QGN4al2VkB1xBtWUtSMEzjeXCDQC +oZdU0PxVLZXgRh6tCtIGs1PoKALlnDeo7mtEvljgIcXC8fu1PCJL3NCWjtoKkYZhVj4 /QuQ== 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:message-id:date:to:from :dkim-signature:delivered-to; bh=Tjtm+gCY411SjrtHuVO7ETLxAIeGyhbg9f/GVrt4e+w=; b=PTQL1h8PJGpF3ZamL+MW6iOF4qnI2REcokDG3i1FubieoFNmAeQxbL0OHQk7YeILwh ELWGJDBJw7amKcPJWfmYAddZo8ozEVOZslPJ/29FZZX/IeqKjQcaWR+C4fQJ6Ui1FGtu X5Qiu2Okay3Q7hS+MN5YRjXooeVbdCCNqgGlK2KhwMY8nE6/rRJGfkRNNK+1xDzrXgPk OKlnmbVtNsSPIfWAIxw3GoJqfJ9gl04d5CGZn3cOfGpn2D8M+i4RmKhlbKPzDe+vFXhL ZbDzVVcvnl/F6jivMYi74cLvMm/dpmQL6cMap5KVPBHHG40P+KJJxBJewqsb4yd2Nhke P9tQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@me.com header.s=1a1hai header.b=Aq7H1pRN; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=me.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id y8-20020a056402358800b0042b66caa358si1414621edc.17.2022.06.01.02.10.09; Wed, 01 Jun 2022 02:10:10 -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=@me.com header.s=1a1hai header.b=Aq7H1pRN; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=me.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6657D68B709; Wed, 1 Jun 2022 12:10:07 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from st43p00im-ztfb10073301.me.com (st43p00im-ztfb10073301.me.com [17.58.63.186]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1751468B698 for ; Wed, 1 Jun 2022 12:10:01 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=me.com; s=1a1hai; t=1654074600; bh=HF/Fpiucr5/fwgM5s87Djz/f4LSxPeD8HLoM33qClLs=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=Aq7H1pRNNqhCAoeDHYtEogGrCepReISTMiLwgeKvMyI9bXFz1/HhjUP2q9TFgCJ/7 BQLivt1wkUV/TLgDLO4UzumS1DTc/7UiH2Hhu1n79Ot22Omp7j6zxXIA+5/uQlZFg2 ipWgDAr2VtwtZqlV/szS97hWJYo9rFN9vp3uc8EINVvAooN2cGFUwuxiXzg8sOhKkZ czudGy3Rgc/e235GdO8s9PJyQEYni3oQCRsXf3I4XqoGxC7SVXZGpu4/nqzFteloMw L8TRtd6NwB16kSwk2WcRkIt1mHzWXPSn9O3KPb7t6r8Kjvu86o2DS5jM+ru4NZwM5N /QCyTnsrlw0CQ== Received: from localhost.localdomain (st43p00im-dlb-asmtp-mailmevip.me.com [17.42.251.41]) by st43p00im-ztfb10073301.me.com (Postfix) with ESMTPSA id 834AB80035F; Wed, 1 Jun 2022 09:09:59 +0000 (UTC) From: Matt Jacobson To: ffmpeg-devel@ffmpeg.org Date: Wed, 1 Jun 2022 05:06:16 -0400 Message-Id: <20220601090615.52719-1-mhjacobson@me.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.517, 18.0.874 definitions=2022-06-01_03:2022-05-30, 2022-06-01 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1011 mlxscore=0 mlxlogscore=857 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-2009150000 definitions=main-2206010041 Subject: [FFmpeg-devel] [PATCH] oss: account for sample size when computing timestamp 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: Matt Jacobson Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 2Tj8J1dywH50 This is my first patch to ffmpeg; please let me know if I've made any process errors. Thanks! --- Don't assume each sample is one byte in size. Doing so results in wrong and occasionally non-monotonically-increasing timestamps. Fix nearby cosmetic typo. Signed-off-by: Matt Jacobson --- libavdevice/oss.c | 4 +++- libavdevice/oss.h | 1 + libavdevice/oss_dec.c | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/libavdevice/oss.c b/libavdevice/oss.c index eddc2ddf1a..b042f58875 100644 --- a/libavdevice/oss.c +++ b/libavdevice/oss.c @@ -102,9 +102,11 @@ int ff_oss_audio_open(AVFormatContext *s1, int is_output, switch(tmp) { case AFMT_S16_LE: s->codec_id = AV_CODEC_ID_PCM_S16LE; + s->sample_size = 2; break; case AFMT_S16_BE: s->codec_id = AV_CODEC_ID_PCM_S16BE; + s->sample_size = 2; break; default: av_log(s1, AV_LOG_ERROR, "Soundcard does not support 16 bit sample format\n"); @@ -112,7 +114,7 @@ int ff_oss_audio_open(AVFormatContext *s1, int is_output, return AVERROR(EIO); } err=ioctl(audio_fd, SNDCTL_DSP_SETFMT, &tmp); - CHECK_IOCTL_ERROR(SNDCTL_DSP_SETFMTS) + CHECK_IOCTL_ERROR(SNDCTL_DSP_SETFMT) tmp = (s->channels == 2); err = ioctl(audio_fd, SNDCTL_DSP_STEREO, &tmp); diff --git a/libavdevice/oss.h b/libavdevice/oss.h index 66d1a34cf6..f1da2b1bec 100644 --- a/libavdevice/oss.h +++ b/libavdevice/oss.h @@ -30,6 +30,7 @@ typedef struct OSSAudioData { AVClass *class; int fd; int sample_rate; + int sample_size; /* in bytes ! */ int channels; int frame_size; /* in bytes ! */ enum AVCodecID codec_id; diff --git a/libavdevice/oss_dec.c b/libavdevice/oss_dec.c index d3dbe77cf9..2cdc4324e8 100644 --- a/libavdevice/oss_dec.c +++ b/libavdevice/oss_dec.c @@ -91,7 +91,7 @@ static int audio_read_packet(AVFormatContext *s1, AVPacket *pkt) bdelay += abufi.bytes; } /* subtract time represented by the number of bytes in the audio fifo */ - cur_time -= (bdelay * 1000000LL) / (s->sample_rate * s->channels); + cur_time -= (bdelay * 1000000LL) / (s->sample_rate * s->sample_size * s->channels); /* convert to wanted units */ pkt->pts = cur_time;