0
0
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:
derrod 2024-05-18 19:23:26 +02:00 committed by Lain
parent adf744e6f0
commit c815d6ad61
2 changed files with 15 additions and 2 deletions

View File

@ -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;

View File

@ -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,