media/libmkv/bug970774.patch

Thu, 15 Jan 2015 15:59:08 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 15 Jan 2015 15:59:08 +0100
branch
TOR_BUG_9701
changeset 10
ac0c01689b40
permissions
-rw-r--r--

Implement a real Private Browsing Mode condition by changing the API/ABI;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     1 diff --git a/media/libmkv/WebMElement.c b/media/libmkv/WebMElement.c
     2 --- a/media/libmkv/WebMElement.c
     3 +++ b/media/libmkv/WebMElement.c
     4 @@ -52,32 +52,39 @@ static UInt64 generateTrackID(unsigned i
     5    r = r << 32;
     6    r +=  rand();
     7  //  UInt64 rval = t ^ r;
     8    return t ^ r;
     9  }
    11  void writeVideoTrack(EbmlGlobal *glob, unsigned int trackNumber, int flagLacing,
    12                       const char *codecId, unsigned int pixelWidth, unsigned int pixelHeight,
    13 +                     unsigned int displayWidth, unsigned int displayHeight,
    14                       double frameRate) {
    15    EbmlLoc start;
    16    UInt64 trackID;
    17    Ebml_StartSubElement(glob, &start, TrackEntry);
    18    Ebml_SerializeUnsigned(glob, TrackNumber, trackNumber);
    19    trackID = generateTrackID(trackNumber);
    20    Ebml_SerializeUnsigned(glob, TrackUID, trackID);
    21    Ebml_SerializeString(glob, CodecName, "VP8");  // TODO shouldn't be fixed
    23    Ebml_SerializeUnsigned(glob, TrackType, 1); // video is always 1
    24    Ebml_SerializeString(glob, CodecID, codecId);
    25    {
    26      EbmlLoc videoStart;
    27      Ebml_StartSubElement(glob, &videoStart, Video);
    28      Ebml_SerializeUnsigned(glob, PixelWidth, pixelWidth);
    29      Ebml_SerializeUnsigned(glob, PixelHeight, pixelHeight);
    30 +    if (pixelWidth != displayWidth) {
    31 +      Ebml_SerializeUnsigned(glob, DisplayWidth, displayWidth);
    32 +    }
    33 +    if (pixelHeight != displayHeight) {
    34 +      Ebml_SerializeUnsigned(glob, DisplayHeight, displayHeight);
    35 +    }
    36      Ebml_SerializeFloat(glob, FrameRate, frameRate);
    37      Ebml_EndSubElement(glob, &videoStart); // Video
    38    }
    39    Ebml_EndSubElement(glob, &start); // Track Entry
    40  }
    41  void writeAudioTrack(EbmlGlobal *glob, unsigned int trackNumber, int flagLacing,
    42                       const char *codecId, double samplingFrequency, unsigned int channels,
    43                       unsigned char *private, unsigned long privateSize) {
    44 diff --git a/media/libmkv/WebMElement.h b/media/libmkv/WebMElement.h
    45 --- a/media/libmkv/WebMElement.h
    46 +++ b/media/libmkv/WebMElement.h
    47 @@ -16,16 +16,17 @@ extern "C" {
    48  #include "EbmlWriter.h"
    50  // these are helper functions
    51  void writeHeader(EbmlGlobal *ebml);
    52  void writeSegmentInformation(EbmlGlobal *ebml, EbmlLoc *startInfo, unsigned long timeCodeScale, double duration);
    53  // this function is a helper only, it assumes a lot of defaults
    54  void writeVideoTrack(EbmlGlobal *ebml, unsigned int trackNumber, int flagLacing,
    55                       const char *codecId, unsigned int pixelWidth, unsigned int pixelHeight,
    56 +                     unsigned int displayWidth, unsigned int displayHeight,
    57                       double frameRate);
    58  void writeAudioTrack(EbmlGlobal *glob, unsigned int trackNumber, int flagLacing,
    59                       const char *codecId, double samplingFrequency, unsigned int channels,
    60                       unsigned char *private_, unsigned long privateSize);
    62  void writeSimpleBlock(EbmlGlobal *ebml, unsigned char trackNumber, short timeCode,
    63                        int isKeyframe, unsigned char lacingFlag, int discardable,
    64                        unsigned char *data, unsigned long dataLength);

mercurial