michael@0: diff --git a/media/libmkv/WebMElement.c b/media/libmkv/WebMElement.c michael@0: --- a/media/libmkv/WebMElement.c michael@0: +++ b/media/libmkv/WebMElement.c michael@0: @@ -52,32 +52,39 @@ static UInt64 generateTrackID(unsigned i michael@0: r = r << 32; michael@0: r += rand(); michael@0: // UInt64 rval = t ^ r; michael@0: return t ^ r; michael@0: } michael@0: michael@0: void writeVideoTrack(EbmlGlobal *glob, unsigned int trackNumber, int flagLacing, michael@0: const char *codecId, unsigned int pixelWidth, unsigned int pixelHeight, michael@0: + unsigned int displayWidth, unsigned int displayHeight, michael@0: double frameRate) { michael@0: EbmlLoc start; michael@0: UInt64 trackID; michael@0: Ebml_StartSubElement(glob, &start, TrackEntry); michael@0: Ebml_SerializeUnsigned(glob, TrackNumber, trackNumber); michael@0: trackID = generateTrackID(trackNumber); michael@0: Ebml_SerializeUnsigned(glob, TrackUID, trackID); michael@0: Ebml_SerializeString(glob, CodecName, "VP8"); // TODO shouldn't be fixed michael@0: michael@0: Ebml_SerializeUnsigned(glob, TrackType, 1); // video is always 1 michael@0: Ebml_SerializeString(glob, CodecID, codecId); michael@0: { michael@0: EbmlLoc videoStart; michael@0: Ebml_StartSubElement(glob, &videoStart, Video); michael@0: Ebml_SerializeUnsigned(glob, PixelWidth, pixelWidth); michael@0: Ebml_SerializeUnsigned(glob, PixelHeight, pixelHeight); michael@0: + if (pixelWidth != displayWidth) { michael@0: + Ebml_SerializeUnsigned(glob, DisplayWidth, displayWidth); michael@0: + } michael@0: + if (pixelHeight != displayHeight) { michael@0: + Ebml_SerializeUnsigned(glob, DisplayHeight, displayHeight); michael@0: + } michael@0: Ebml_SerializeFloat(glob, FrameRate, frameRate); michael@0: Ebml_EndSubElement(glob, &videoStart); // Video michael@0: } michael@0: Ebml_EndSubElement(glob, &start); // Track Entry michael@0: } michael@0: void writeAudioTrack(EbmlGlobal *glob, unsigned int trackNumber, int flagLacing, michael@0: const char *codecId, double samplingFrequency, unsigned int channels, michael@0: unsigned char *private, unsigned long privateSize) { michael@0: diff --git a/media/libmkv/WebMElement.h b/media/libmkv/WebMElement.h michael@0: --- a/media/libmkv/WebMElement.h michael@0: +++ b/media/libmkv/WebMElement.h michael@0: @@ -16,16 +16,17 @@ extern "C" { michael@0: #include "EbmlWriter.h" michael@0: michael@0: // these are helper functions michael@0: void writeHeader(EbmlGlobal *ebml); michael@0: void writeSegmentInformation(EbmlGlobal *ebml, EbmlLoc *startInfo, unsigned long timeCodeScale, double duration); michael@0: // this function is a helper only, it assumes a lot of defaults michael@0: void writeVideoTrack(EbmlGlobal *ebml, unsigned int trackNumber, int flagLacing, michael@0: const char *codecId, unsigned int pixelWidth, unsigned int pixelHeight, michael@0: + unsigned int displayWidth, unsigned int displayHeight, michael@0: double frameRate); michael@0: void writeAudioTrack(EbmlGlobal *glob, unsigned int trackNumber, int flagLacing, michael@0: const char *codecId, double samplingFrequency, unsigned int channels, michael@0: unsigned char *private_, unsigned long privateSize); michael@0: michael@0: void writeSimpleBlock(EbmlGlobal *ebml, unsigned char trackNumber, short timeCode, michael@0: int isKeyframe, unsigned char lacingFlag, int discardable, michael@0: unsigned char *data, unsigned long dataLength);