diff --git a/include/libmkv.h b/include/libmkv.h index 146a91f..f03d608 100644 --- a/include/libmkv.h +++ b/include/libmkv.h @@ -94,6 +94,7 @@ extern "C" { #define MK_SUBTITLE_USF "S_TEXT/USF" #define MK_SUBTITLE_VOBSUB "S_VOBSUB" #define MK_SUBTITLE_BMP "S_IMAGE/BMP" +#define MK_SUBTITLE_PGS "S_HDMV/PGS" /* Official Tags */ #define MK_TAG_TITLE "TITLE" @@ -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/matroska.c b/src/matroska.c index faa29d2..5b235b6 100644 --- a/src/matroska.c +++ b/src/matroska.c @@ -27,6 +27,11 @@ #include +#if defined( __MINGW32__ ) +#undef fseeko +#define fseeko fseeko64 +#endif + #define RESERVED_SEEKHEAD 0x100 /* 256 bytes should be enough room for our Seek entries. */ #define RESERVED_CHAPTERS 0x1000 @@ -34,7 +39,7 @@ int mk_seekFile(mk_Writer *w, uint64_t pos) { - if (fseek(w->fp, pos, SEEK_SET)) + if (fseeko(w->fp, pos, SEEK_SET)) return -1; w->f_pos = pos; 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;