vr-converter / spatial-media /spatialmedia_test.py
rohitmeshram976's picture
Update VR 180 Converter with HF_TOKEN and spatial-media
a2fcab8
"""
Unit tests for the spatialmedia CLI tool.
# Test inputs are generated with
ffmpeg -y -f lavfi -i testsrc -vf scale=320:240 -vcodec libx264 -t 0.05 data/testsrc_320x240_h264.mp4
ffmpeg -y -f lavfi -i testsrc -vf scale=320:240 -vcodec libvpx-vp9 -t 0.05 data/testsrc_320x240_vp9.mp4
ffmpeg -y -f lavfi -i testsrc -vf scale=32:24 -vcodec prores -t 0.05 data/testsrc_32x24_prores.mov
"""
import unittest
import os
from spatialmedia.__main__ import main
from spatialmedia import metadata_utils
_OUTPUT_DIR = 'test_output'
def append_contents(contents):
def append(x):
contents = contents + x
return append
class TestAdd(unittest.TestCase):
def inject_metadata(self, args):
self.assertIsNone(main(args))
contents = []
metadata_utils.parse_metadata(args[-1],
lambda x: contents.append(x))
try:
os.remove(args[-1])
except:
return ''
return '\n'.join(contents[2:])
def test_inject_v1_equirect_mono(self):
contents = self.inject_metadata(['-i',
'--projection', 'equirectangular',
'data/testsrc_320x240_h264.mp4',
f'{_OUTPUT_DIR}/equirect_mono_v1.mp4'])
self.assertFalse(contents.find('SV3D') >= 0)
self.assertFalse(contents.find('PRHD') >= 0)
self.assertFalse(contents.find('EQUI') >= 0)
self.assertFalse(contents.find('ST3D') >= 0)
self.assertTrue(contents.find("ProjectionType = equirectangular") > 0)
def test_inject_v1_rectangular_left_right(self):
contents = self.inject_metadata(['-i',
'--stereo', 'left-right',
'--projection', 'none',
'data/testsrc_320x240_h264.mp4',
f'{_OUTPUT_DIR}/rectangular_left_right_v1.mp4'])
self.assertFalse(contents.find('SV3D') >= 0)
self.assertFalse(contents.find('PRHD') >= 0)
self.assertFalse(contents.find('EQUI') >= 0)
self.assertFalse(contents.find('ST3D') >= 0)
self.assertFalse(contents.find("ProjectionType = equirectangular") > 0)
self.assertTrue(contents.find("ProjectionType = rectangular") > 0)
self.assertTrue(contents.find("Spherical = false") > 0)
def test_inject_v2_equirect_mono(self):
contents = self.inject_metadata(['-i',
'--v2', '--projection', 'equirectangular',
'data/testsrc_320x240_h264.mp4',
f'{_OUTPUT_DIR}/equirect_mono.mp4'])
self.assertTrue(contents.find('SV3D') >= 0)
self.assertTrue(contents.find('PRHD') >= 0)
self.assertTrue(contents.find('EQUI') >= 0)
self.assertFalse(contents.find('ST3D') >= 0)
def test_inject_v2_equirect_mono_vp9(self):
contents = self.inject_metadata(['-i',
'--v2', '--projection', 'equirectangular',
'data/testsrc_320x240_vp9.mp4',
f'{_OUTPUT_DIR}/equirect_mono_vp9.mp4'])
self.assertTrue(contents.find('SV3D') >= 0)
self.assertTrue(contents.find('PRHD') >= 0)
self.assertTrue(contents.find('EQUI') >= 0)
self.assertFalse(contents.find('ST3D') >= 0)
def test_inject_v2_equirect_mono_prores(self):
contents = self.inject_metadata(['-i',
'--v2', '--projection', 'equirectangular',
'data/testsrc_32x24_prores.mov',
f'{_OUTPUT_DIR}/equirect_mono_prores.mov'])
self.assertTrue(contents.find('SV3D') >= 0)
self.assertTrue(contents.find('PRHD') >= 0)
self.assertTrue(contents.find('EQUI') >= 0)
self.assertFalse(contents.find('ST3D') >= 0)
def test_inject_v2_rectangular_left_right(self):
contents = self.inject_metadata(['-i',
'--v2', '--stereo', 'left-right',
'--projection', 'none',
'data/testsrc_320x240_h264.mp4',
f'{_OUTPUT_DIR}/rectangular_left_right.mp4'])
self.assertFalse(contents.find('SV3D') >= 0)
self.assertFalse(contents.find('PRHD') >= 0)
self.assertFalse(contents.find('EQUI') >= 0)
self.assertTrue(contents.find('ST3D') >= 0)
self.assertTrue(contents.find('Stereo Mode: 2') >= 0)
def test_inject_v2_rectangular_top_bottom(self):
contents = self.inject_metadata(['-i',
'--v2', '--stereo', 'top-bottom',
'--projection', 'none',
'data/testsrc_320x240_h264.mp4',
f'{_OUTPUT_DIR}/rectangular_top_bottom.mp4'])
self.assertFalse(contents.find('SV3D') >= 0)
self.assertFalse(contents.find('PRHD') >= 0)
self.assertFalse(contents.find('EQUI') >= 0)
self.assertTrue(contents.find('ST3D') >= 0)
self.assertTrue(contents.find('Stereo Mode: 1') >= 0)
if __name__ == '__main__':
try:
os.mkdir('test_output')
except:
pass
unittest.main()