docs: function canBeOrientatedMixin (self,
                                                                getDomElementCallback,
                                                                orientationChangedHandler,
                                                                initialOrientation) {
        var _orientation = initialOrientation;
  
        OT.$.defineProperties(self, {
          isRotated: {
            get: function() {
              return this.orientation() &&
                        (this.orientation().videoOrientation === 270 ||
                         this.orientation().videoOrientation === 90);
            }
          },
  
          orientation: {
            get: function() { return _orientation; },
            set: function(orientation) {
              _orientation = orientation;
  
              var transform = VideoOrientationTransforms[orientation.videoOrientation] ||
                              VideoOrientationTransforms.ROTATED_NORMAL;
  
              switch(OT.$.env.name) {
                case 'Chrome':
                case 'Safari':
                  getDomElementCallback().style.webkitTransform = transform;
                  break;
  
                case 'IE':
                  if (OT.$.env.version >= 9) {
                    getDomElementCallback().style.msTransform = transform;
                  }
                  else {
                    // So this basically defines matrix that represents a rotation
                    // of a single vector in a 2d basis.
                    //
                    //    R =  [cos(Theta) -sin(Theta)]
                    //         [sin(Theta)  cos(Theta)]
                    //
                    // Where Theta is the number of radians to rotate by
                    //
                    // Then to rotate the vector v:
                    //    v' = Rv
                    //
                    // We then use IE8 Matrix filter property, which takes
                    // a 2x2 rotation matrix, to rotate our DOM element.
                    //
                    var radians = orientation.videoOrientation * DEGREE_TO_RADIANS,
                        element = getDomElementCallback(),
                        costheta = Math.cos(radians),
                        sintheta = Math.sin(radians);
  
                    // element.filters.item(0).M11 = costheta;
                    // element.filters.item(0).M12 = -sintheta;
                    // element.filters.item(0).M21 = sintheta;
                    // element.filters.item(0).M22 = costheta;
  
                    element.style.filter = 'progid:DXImageTransform.Microsoft.Matrix(' +
                                              'M11='+costheta+',' +
                                              'M12='+(-sintheta)+',' +
                                              'M21='+sintheta+',' +
                                              'M22='+costheta+',SizingMethod=\'auto expand\')';
                  }
  
  
                  break;
  
                default:
                  // The standard version, just Firefox, Opera, and IE > 9
                  getDomElementCallback().style.transform = transform;
              }
  
              orientationChangedHandler(_orientation);
  
            }
          },
  
          // see https://wiki.mozilla.org/WebAPI/AudioChannels
          // The audioChannelType is currently only available in Firefox. This property returns
          // "unknown" in other browser. The related HTML tag attribute is "mozaudiochannel"
          audioChannelType: {
            get: function() {
              if ('mozAudioChannelType' in this.domElement) {
                return this.domElement.mozAudioChannelType;
              } else {
                return 'unknown';
              }
            },
            set: function(type) {
              if ('mozAudioChannelType' in this.domElement) {
                this.domElement.mozAudioChannelType = type;
              }
            }
          }
        });
      }