Exemple #1
0
 def test_LinearRegressionDifference(self):
   fileobject = test_tools.MakeYuvFileWithOneBlankFrame(
       'one_black_frame_1024_768_30.yuv')
   fileset = optimizer.FileAndRateSet()
   fileset.AddFilesAndRates([fileobject.filename],
                            fileset_picker.ChooseRates(fileobject.width,
                                                       fileobject.framerate))
   context1 = encoder.Context(FakeCodec1(), encoder.EncodingDiskCache)
   encoder1 = context1.codec.StartEncoder(context1)
   # Produce two straight lines, one using 50% more bits than the others.
   for rate in fileset.AllRatesForFile(fileobject.filename):
     encoding = encoder1.Encoding(rate, fileobject)
     encoding.result = {'bitrate': rate, 'psnr': rate / 10}
     encoding.Store()
   context2 = encoder.Context(FakeCodec2(), encoder.EncodingDiskCache)
   encoder2 = context2.codec.StartEncoder(context2)
   for rate in fileset.AllRatesForFile(fileobject.filename):
     encoding = encoder2.Encoding(rate, fileobject)
     encoding.result = {'bitrate': rate * 1.5, 'psnr': rate / 10}
     encoding.Store()
   score = graph_metrics.BdRateAnalysis(fileobject.filename,
                                         (FakeCodec1(), FakeCodec2()),
                                         score_tools.ScorePsnrBitrate)
   self.assertEqual('mock2', score.score()[0][0])
   self.assertAlmostEqual(50.0, score.score()[0][1]['difference'])
Exemple #2
0
 def testReadResultWithoutFrameData(self):
     context = encoder.Context(DummyCodec())
     my_encoder = context.codec.StartEncoder(context)
     videofile = DummyVideofile('foofile_640_480_30.yuv', clip_time=1)
     encoding = my_encoder.Encoding(1000, videofile)
     encoding.result = {'foo': 5, 'frame': ['first', 'second']}
     self.assertEqual({'foo': 5}, encoding.ResultWithoutFrameData())
Exemple #3
0
    def test_BestOverallConfigurationNotInWorkDirectory(self):
        other_dir = os.path.join(encoder_configuration.conf.sysdir(),
                                 'multirepo_test')
        os.mkdir(other_dir)
        encoder_configuration.conf.override_scorepath_for_test([other_dir])

        self.file_set = optimizer.FileAndRateSet(verify_files_present=False)
        self.file_set.AddFilesAndRates([self.videofile.filename], [100, 200])
        self.optimizer = optimizer.Optimizer(self.codec, self.file_set)
        # When there is nothing in the database, None should be returned.
        best_encoder = self.optimizer.BestOverallEncoder()
        self.assertIsNone(best_encoder)
        # Fill in the database with all the files and rates.
        other_context = encoder.Context(self.codec,
                                        encoder.EncodingDiskCache,
                                        scoredir='multirepo_test')
        my_encoder = self.EncoderFromParameterString('--score=7')
        other_context.cache.StoreEncoder(my_encoder)
        my_encoder.context.cache.StoreEncoder(my_encoder)
        for rate, filename in self.file_set.AllFilesAndRates():
            my_encoding = my_encoder.Encoding(rate,
                                              encoder.Videofile(filename))
            my_encoding.Execute()
            other_context.cache.StoreEncoding(my_encoding)
        # The best encoder should now be from the workdir, but the results are
        # all fetched from the searchpath.
        best_encoder = self.optimizer.BestOverallEncoder()
        self.assertTrue(best_encoder)
        self.assertEquals(my_encoder.parameters.ToString(),
                          best_encoder.parameters.ToString())
        one_encoding = best_encoder.Encoding(100, self.videofile)
        one_encoding.Recover()
        self.assertTrue(one_encoding.Result())
Exemple #4
0
 def test_Changevalue(self):
     config = encoder.OptionValueSet(
         encoder.OptionSet(encoder.Option('foo', ['foo', 'bar'])),
         '--foo=foo')
     context = encoder.Context(DummyCodec())
     my_encoder = encoder.Encoder(context, config)
     next_encoder = my_encoder.ChangeValue('foo', 'bar')
     self.assertEquals(next_encoder.parameters, '--foo=bar')
Exemple #5
0
 def test_ParametersCanChangeMayReturnTrue(self):
     context = encoder.Context(DummyCodec())
     my_encoder = encoder.Encoder(
         context,
         encoder.OptionValueSet(
             encoder.OptionSet(encoder.Option('key', ['value1', 'value2'])),
             '--parameters'))
     self.assertTrue(my_encoder.ParametersCanChange())
Exemple #6
0
 def testInitFromFile(self):
     context = encoder.Context(DummyCodec())
     my_encoder = encoder.Encoder(
         context, encoder.OptionValueSet(encoder.OptionSet(),
                                         '--parameters'))
     my_encoder.Store()
     new_encoder = encoder.Encoder(context, filename=my_encoder.Hashname())
     self.assertEquals(new_encoder.parameters, my_encoder.parameters)
Exemple #7
0
 def __init__(self, codec, file_set=None,
              cache_class=None, score_function=None,
              scoredir=None):
   # pylint: disable=too-many-arguments
   self.context = encoder.Context(codec,
                                  cache_class or encoder.EncodingDiskCache,
                                  scoredir=scoredir)
   self.file_set = file_set
   self.score_function = score_function or score_tools.ScorePsnrBitrate
 def __init__(self,
              codec,
              file_set=None,
              cache_class=None,
              score_function=None):
     self.context = encoder.Context(
         codec, cache_class or encoder.EncodingDiskCache)
     self.file_set = file_set
     self.score_function = score_function or score_tools.ScorePsnrBitrate
Exemple #9
0
 def testGenerateSomeUntriedVariants(self):
     context = encoder.Context(DummyCodec())
     my_encoder = context.codec.StartEncoder(context)
     videofile = DummyVideofile('foofile_640_480_30.yuv', clip_time=1)
     encoding = my_encoder.Encoding(1000, videofile)
     # The dummy codec has a parameter with multiple possible values,
     # so at least some variants should be returned.
     variants = encoding.SomeUntriedVariants()
     self.assertTrue(variants)
Exemple #10
0
 def test_HasBaselineFlag(self):
   codec = x264_baseline.X264BaselineCodec()
   context = encoder.Context(codec)
   my_encoder = codec.StartEncoder(context)
   videofile = test_tools.MakeYuvFileWithOneBlankFrame(
       'one_black_frame_1024_768_30.yuv')
   encoding = my_encoder.Encoding(1000, videofile)
   commandline = encoding.EncodeCommandLine()
   self.assertRegexpMatches(commandline, '--profile baseline ')
Exemple #11
0
 def test_ParametersCanBeStoredAndRetrieved(self):
     context = encoder.Context(DummyCodec())
     my_encoder = encoder.Encoder(
         context, encoder.OptionValueSet(encoder.OptionSet(),
                                         '--parameters'))
     my_encoder.Store()
     filename = my_encoder.Hashname()
     next_encoder = encoder.Encoder(context, filename=filename)
     self.assertEqual(my_encoder.parameters, next_encoder.parameters)
Exemple #12
0
 def test_OptionValues(self):
     codec = DummyCodec()
     my_encoder = encoder.Encoder(
         encoder.Context(codec),
         encoder.OptionValueSet(
             encoder.OptionSet(encoder.IntegerOption('score', 0, 100)),
             '--score=77'))
     self.assertEqual(repr(my_encoder.OptionValues()), "{'score': '77'}")
     self.assertEqual(my_encoder.DisplayValues(), '77')
 def test_DistinctWorkdirs(self):
     seen_dirs = set()
     for codec_name in pick_codec.AllCodecNames():
         codec = pick_codec.PickCodec(codec_name)
         context = encoder.Context(codec)
         workdir = os.path.abspath(context.cache.WorkDir())
         self.assertNotIn(
             workdir, seen_dirs,
             'Duplicate workdir %s for codec %s' % (workdir, codec_name))
         seen_dirs.add(workdir)
Exemple #14
0
 def test_Threading(self):
     codec = x264.X264Codec()
     context = encoder.Context(codec, encoder.EncodingDiskCache)
     one_thread_encoder = codec.StartEncoder(context).ChangeValue(
         'threads', 1)
     two_thread_encoder = codec.StartEncoder(context).ChangeValue(
         'threads', 2)
     videofile = test_tools.MakeYuvFileWithOneBlankFrame(
         'one_black_frame_1024_768_30.yuv')
     one_encoding = one_thread_encoder.Encoding(1000, videofile)
     one_encoding.Execute()
     two_encoding = two_thread_encoder.Encoding(1000, videofile)
     two_encoding.Execute()
     self.assertAlmostEquals(float(one_encoding.Result()['psnr']),
                             float(two_encoding.Result()['psnr']))
Exemple #15
0
 def testInitFromBrokenFile(self):
     context = encoder.Context(DummyCodec())
     my_encoder = encoder.Encoder(
         context, encoder.OptionValueSet(encoder.OptionSet(),
                                         '--parameters'))
     my_encoder.Store()
     # Break stored object. Note: This uses knowledge of the memory cache.
     old_filename = my_encoder.Hashname()
     parameters = context.cache.encoders[old_filename].parameters
     parameters.other_parts.append('--extra-stuff')
     # Now Hashname() should return a different value.
     with self.assertRaisesRegexp(encoder.Error,
                                  'contains wrong arguments'):
         # pylint: disable=W0612
         new_encoder = encoder.Encoder(context, filename=old_filename)
Exemple #16
0
 def testGenerateUntriedVariantsUntilNoneFound(self):
     context = encoder.Context(DummyCodec())
     my_encoder = context.codec.StartEncoder(context)
     videofile = DummyVideofile('foofile_640_480_30.yuv', clip_time=1)
     encoding = my_encoder.Encoding(1000, videofile)
     variants = encoding.SomeUntriedVariants()
     # Keep generating variants until we run out. This should happen
     # after 3 variants for the Dummy codec.
     variant_count = 0
     while variants:
         for variant in variants:
             variant.Execute().Store()
             variant_count += 1
         variants = encoding.SomeUntriedVariants()
     # We cannot guarantee that all 3 are found, since the process
     # is random, but no more than 3 should be found.
     self.assertGreaterEqual(3, variant_count)
 def test_VbvMaxrateFlag(self):
     codec = x264.X264Codec()
     context = encoder.Context(codec)
     my_encoder = codec.StartEncoder(context)
     videofile = test_tools.MakeYuvFileWithOneBlankFrame(
         'one_black_frame_1024_768_30.yuv')
     encoding = my_encoder.Encoding(1000, videofile)
     # The start encoder should have no bitrate.
     commandline = encoding.EncodeCommandLine()
     self.assertNotRegexpMatches(commandline, 'vbv-maxrate')
     # Add in the use-vbv-maxrate parameter.
     new_encoder = encoder.Encoder(
         context,
         my_encoder.parameters.ChangeValue('use-vbv-maxrate',
                                           'use-vbv-maxrate'))
     encoding = new_encoder.Encoding(1000, videofile)
     commandline = encoding.EncodeCommandLine()
     # vbv-maxrate should occur, but not use-vbv-maxrate.
     self.assertRegexpMatches(commandline, '--vbv-maxrate 1000 ')
     self.assertNotRegexpMatches(commandline, 'use-vbv-maxrate')
Exemple #18
0
 def test_ParametersCanChangeMayReturnFalse(self):
     context = encoder.Context(DummyCodec())
     my_encoder = encoder.Encoder(
         context, encoder.OptionValueSet(encoder.OptionSet(),
                                         '--parameters'))
     self.assertFalse(my_encoder.ParametersCanChange())