mirror of https://git.ffmpeg.org/ffmpeg.git
pulse: compute frame_duration once and fix it
The frame duration was calculated without taking in account the bytes per sample. Thanks to Lorenzo Pistone <blaffablaffa@gmail.com> for pointing the issue and providing an initial fix.
This commit is contained in:
parent
caf27e37b6
commit
2625b621ce
|
@ -46,6 +46,7 @@ typedef struct PulseData {
|
||||||
int fragment_size;
|
int fragment_size;
|
||||||
pa_simple *s;
|
pa_simple *s;
|
||||||
int64_t pts;
|
int64_t pts;
|
||||||
|
int64_t frame_duration;
|
||||||
} PulseData;
|
} PulseData;
|
||||||
|
|
||||||
static pa_sample_format_t codec_id_to_pulse_format(int codec_id) {
|
static pa_sample_format_t codec_id_to_pulse_format(int codec_id) {
|
||||||
|
@ -110,6 +111,8 @@ static av_cold int pulse_read_header(AVFormatContext *s,
|
||||||
av_set_pts_info(st, 64, 1, 1000000); /* 64 bits pts in us */
|
av_set_pts_info(st, 64, 1, 1000000); /* 64 bits pts in us */
|
||||||
|
|
||||||
pd->pts = AV_NOPTS_VALUE;
|
pd->pts = AV_NOPTS_VALUE;
|
||||||
|
pd->frame_duration = (pd->frame_size * 1000000LL * 8) /
|
||||||
|
(pd->sample_rate * pd->channels * av_get_bits_per_sample(codec_id));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -119,8 +122,6 @@ static int pulse_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||||
PulseData *pd = s->priv_data;
|
PulseData *pd = s->priv_data;
|
||||||
int res;
|
int res;
|
||||||
pa_usec_t latency;
|
pa_usec_t latency;
|
||||||
uint64_t frame_duration =
|
|
||||||
(pd->frame_size*1000000LL) / (pd->sample_rate * pd->channels);
|
|
||||||
|
|
||||||
if (av_new_packet(pkt, pd->frame_size) < 0) {
|
if (av_new_packet(pkt, pd->frame_size) < 0) {
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
|
@ -145,7 +146,7 @@ static int pulse_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||||
|
|
||||||
pkt->pts = pd->pts;
|
pkt->pts = pd->pts;
|
||||||
|
|
||||||
pd->pts += frame_duration;
|
pd->pts += pd->frame_duration;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue