Message ID | 20220601090615.52719-1-mhjacobson@me.com |
---|---|
State | Accepted |
Commit | b3e261bab381f43ab5f842725d30479d511d1111 |
Headers | show |
Series | [FFmpeg-devel] oss: account for sample size when computing timestamp | expand |
Context | Check | Description |
---|---|---|
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
andriy/make_armv7_RPi4 | success | Make finished |
andriy/make_fate_armv7_RPi4 | success | Make fate finished |
Hi, > On Jun 1, 2022, at 5:06 AM, Matt Jacobson <mhjacobson@me.com> wrote: > > 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. Friendly ping on this patch. Original mail: <https://ffmpeg.org/pipermail/ffmpeg-devel/2022-June/297066.html> Please let me know if any changes are desired. If not, could someone please help me commit it? (Is there a process to request access?) Thank you, Matt
On Wed, 15 Jun 2022, Matt Jacobson wrote: > Hi, > >> On Jun 1, 2022, at 5:06 AM, Matt Jacobson <mhjacobson@me.com> wrote: >> >> 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. > > Friendly ping on this patch. Original mail: > > <https://ffmpeg.org/pipermail/ffmpeg-devel/2022-June/297066.html> > > Please let me know if any changes are desired. If not, could someone please > help me commit it? (Is there a process to request access?) Thanks, will apply. Regards, Marton
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;
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 <mhjacobson@me.com> --- libavdevice/oss.c | 4 +++- libavdevice/oss.h | 1 + libavdevice/oss_dec.c | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-)