// DjVu images have to be handled slightly differently
$tmpGlobals['wgMediaHandlers']['image/vnd.djvu'] = 'MockDjVuHandler';
+ // Ogg video/audio increasingly more differently
+ $tmpGlobals['wgMediaHandlers']['application/ogg'] = 'MockOggHandler';
+
$tmpHooks = $wgHooks;
$tmpHooks['ParserTestParser'][] = 'ParserTestParserHook::setup';
$tmpHooks['ParserGetVariableValueTs'][] = 'ParserTest::getFakeTimestamp';
if ( !$this->db->selectField( 'image', '1', [ 'img_name' => $image->getName() ] ) ) {
$image->recordUpload2( '', 'A pretty movie', 'Will it play', [
'size' => 12345,
- 'width' => 240,
- 'height' => 180,
+ 'width' => 320,
+ 'height' => 240,
'bits' => 0,
'media_type' => MEDIATYPE_VIDEO,
'mime' => 'application/ogg',
'metadata' => serialize( [] ),
- 'sha1' => Wikimedia\base_convert( '', 16, 36, 31 ),
+ 'sha1' => Wikimedia\base_convert( '', 16, 36, 32 ),
'fileExists' => true
], $this->db->timestamp( '20010115123500' ), $user );
}
--- /dev/null
+<?php
+/**
+ * Fake handler for Ogg videos.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Media
+ */
+
+class MockOggHandler extends OggHandlerTMH {
+ function doTransform( $file, $dstPath, $dstUrl, $params, $flags = 0 ) {
+ # Important or height handling is wrong.
+ if ( !$this->normaliseParams( $file, $params ) ) {
+ return new TransformParameterError( $params );
+ }
+
+ $srcWidth = $file->getWidth();
+ $srcHeight = $file->getHeight();
+
+ // Audio should not be transformed by size, give it a default width and height
+ if ( $this->isAudio( $file ) ) {
+ $srcWidth = 220;
+ $srcHeight = 23;
+ }
+
+ $params['width'] = isset( $params['width'] ) ? $params['width'] : $srcWidth;
+
+ // if height overtakes width use height as max:
+ $targetWidth = $params['width'];
+ $targetHeight = $srcWidth == 0 ? $srcHeight : round( $params['width'] * $srcHeight / $srcWidth );
+ if ( isset( $params['height'] ) && $targetHeight > $params['height'] ) {
+ $targetHeight = $params['height'];
+ $targetWidth = round( $params['height'] * $srcWidth / $srcHeight );
+ }
+ $options = [
+ 'file' => $file,
+ 'length' => $this->getLength( $file ),
+ 'offset' => $this->getOffset( $file ),
+ 'width' => $targetWidth,
+ 'height' => $targetHeight,
+ 'isVideo' => !$this->isAudio( $file ),
+ 'thumbtime' => isset(
+ $params['thumbtime']
+ ) ? $params['thumbtime'] : intval( $file->getLength() / 2 ),
+ 'start' => isset( $params['start'] ) ? $params['start'] : false,
+ 'end' => isset( $params['end'] ) ? $params['end'] : false,
+ 'fillwindow' => isset( $params['fillwindow'] ) ? $params['fillwindow'] : false,
+ 'disablecontrols' => isset ( $params['disablecontrols'] ) ? $params['disablecontrols'] : false
+ ];
+
+ // No thumbs for audio
+ if ( !$options['isVideo'] ) {
+ return new TimedMediaTransformOutput( $options );
+ }
+
+ // Setup pointer to thumb arguments
+ $options[ 'thumbUrl' ] = $dstUrl;
+ $options[ 'dstPath' ] = $dstPath;
+ $options[ 'path' ] = $dstPath;
+
+ return new TimedMediaTransformOutput( $options );
+ }
+
+ function getLength( $file ) {
+ return 4.3666666666667;
+ }
+
+ function getBitRate( $file ) {
+ return 590013;
+ }
+
+ function getWebType( $file ) {
+ return "video/ogg; codecs=\"theora\"";
+ }
+
+ function getFramerate( $file ) {
+ return 30;
+ }
+}