--- /dev/null
+diff --git a/include/libmkv.h b/include/libmkv.h
+index 146a91f..f03d608 100644
+--- a/include/libmkv.h
++++ b/include/libmkv.h
+@@ -203,6 +204,7 @@ struct mk_TrackConfig_s {
+ } video;
+ struct {
+ float samplingFreq; /* Sampling Frequency in Hz */
++ float outputSamplingFreq; /* Playback Sampling Frequency in Hz (e.g. for AAC w/SBR) */
+ unsigned channels; /* Number of channels for this track */
+ unsigned bitDepth; /* Bits per sample (PCM) */
+ } audio;
+diff --git a/src/tracks.c b/src/tracks.c
+index f9c7e48..a2a60ca 100644
+--- a/src/tracks.c
++++ b/src/tracks.c
+@@ -174,6 +174,11 @@ mk_Track *mk_createTrack(mk_Writer *w, mk_TrackConfig *tc)
+ /* SamplingFrequency */
+ if (mk_writeFloat(v, MATROSKA_ID_AUDIOSAMPLINGFREQ, tc->extra.audio.samplingFreq) < 0)
+ return NULL;
++ if (tc->extra.audio.outputSamplingFreq) {
++ /* Output SamplingFrequency */
++ if (mk_writeFloat(v, MATROSKA_ID_AUDIOOUTSAMPLINGFREQ, tc->extra.audio.outputSamplingFreq) < 0)
++ return NULL;
++ }
+ /* Channels */
+ if (mk_writeUInt(v, MATROSKA_ID_AUDIOCHANNELS, tc->extra.audio.channels) < 0)
+ return NULL;
// MKV lang codes should be ISO-639-2/B
lang = lang_for_code2( audio->config.lang.iso639_2 );
track->language = lang->iso639_2b ? lang->iso639_2b : lang->iso639_2;
- track->extra.audio.samplingFreq = (float)audio->config.out.samplerate;
+ // sample rate
+ if ((audio->config.out.codec == HB_ACODEC_CA_HAAC) ||
+ (audio->config.out.codec == HB_ACODEC_AAC_PASS &&
+ audio->priv.config.extradata.length == 5))
+ {
+ // For HE-AAC, write outputSamplingFreq too
+ // samplingFreq is half of outputSamplingFreq
+ track->extra.audio.outputSamplingFreq = (float)audio->config.out.samplerate;
+ track->extra.audio.samplingFreq = track->extra.audio.outputSamplingFreq / 2.;
+ }
+ else
+ {
+ track->extra.audio.samplingFreq = (float)audio->config.out.samplerate;
+ }
if (audio->config.out.codec & HB_ACODEC_PASS_FLAG)
{
track->extra.audio.channels = HB_INPUT_CH_LAYOUT_GET_DISCRETE_COUNT(audio->config.in.channel_layout);