mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-09-19 20:32:15 +02:00
coreaudio-encoder: Fix pts/dts not including encoder delay
This commit is contained in:
parent
adf744e6f0
commit
c815d6ad61
@ -112,6 +112,7 @@ struct ca_encoder {
|
||||
|
||||
uint64_t total_samples = 0;
|
||||
uint64_t samples_per_second = 0;
|
||||
uint32_t priming_samples = 0;
|
||||
|
||||
vector<uint8_t> extra_data;
|
||||
|
||||
@ -595,6 +596,11 @@ static void *aac_create(obs_data_t *settings, obs_encoder_t *encoder)
|
||||
ca->converter, kAudioConverterCurrentOutputStreamDescription,
|
||||
&size, &out));
|
||||
|
||||
AudioConverterPrimeInfo primeInfo;
|
||||
size = sizeof(primeInfo);
|
||||
STATUS_CHECK(AudioConverterGetProperty(
|
||||
ca->converter, kAudioConverterPrimeInfo, &size, &primeInfo));
|
||||
|
||||
/*
|
||||
* Fix channel map differences between CoreAudio AAC, FFmpeg, Wav
|
||||
* New channel mappings below assume 2.1, 4.0, 4.1, 5.1, 7.1 resp.
|
||||
@ -649,6 +655,7 @@ static void *aac_create(obs_data_t *settings, obs_encoder_t *encoder)
|
||||
ca->in_bytes_required = ca->in_packets * ca->in_frame_size;
|
||||
|
||||
ca->out_frames_per_packet = out.mFramesPerPacket;
|
||||
ca->priming_samples = primeInfo.leadingFrames;
|
||||
|
||||
ca->output_buffer_size = out.mBytesPerPacket;
|
||||
|
||||
@ -770,8 +777,8 @@ static bool aac_encode(void *data, struct encoder_frame *frame,
|
||||
if (!(*received_packet = packets > 0))
|
||||
return true;
|
||||
|
||||
packet->pts = ca->total_samples;
|
||||
packet->dts = ca->total_samples;
|
||||
packet->pts = ca->total_samples - ca->priming_samples;
|
||||
packet->dts = ca->total_samples - ca->priming_samples;
|
||||
packet->timebase_num = 1;
|
||||
packet->timebase_den = (uint32_t)ca->samples_per_second;
|
||||
packet->type = OBS_ENCODER_AUDIO;
|
||||
|
@ -79,6 +79,12 @@ struct AudioChannelLayout {
|
||||
};
|
||||
typedef struct AudioChannelLayout AudioChannelLayout;
|
||||
|
||||
struct AudioConverterPrimeInfo {
|
||||
UInt32 leadingFrames;
|
||||
UInt32 trailingFrames;
|
||||
};
|
||||
typedef struct AudioConverterPrimeInfo AudioConverterPrimeInfo;
|
||||
|
||||
typedef OSStatus (*AudioConverterComplexInputDataProc)(
|
||||
AudioConverterRef inAudioConverter, UInt32 *ioNumberDataPackets,
|
||||
AudioBufferList *ioData,
|
||||
|
Loading…
Reference in New Issue
Block a user