コード例 #1
0
def MpegFiles():
  the_set = optimizer.FileAndRateSet()
  my_directory = 'video/mpeg_video'
  # Class A
  the_set.AddFilesAndRates(["Kimono1_1920x1080_24.yuv",
                            "ParkScene_1920x1080_24.yuv"],
                           [1600, 2500, 4000, 6000],
                           my_directory)
  # Class B
  the_set.AddFilesAndRates(["Cactus_1920x1080_50.yuv",
                            "BasketballDrive_1920x1080_50.yuv"],
                           [3000, 4500, 7000, 10000],
                            my_directory)
  # Class C
  the_set.AddFilesAndRates(["BasketballDrill_832x480_50.yuv",
                            "BQMall_832x480_60.yuv",
                            "PartyScene_832x480_50.yuv",
                            "RaceHorses_832x480_30.yuv"],
                           [512, 768, 1200, 2000],
                            my_directory)
  # Class D
  the_set.AddFilesAndRates(["FourPeople_1280x720_60.yuv",
                            "Johnny_1280x720_60.yuv",
                            "KristenAndSara_1280x720_60.yuv"],
                           [384, 512, 850, 1500],
                            my_directory)
  return the_set
コード例 #2
0
 def test_BestOverallConfiguration(self):
     self.file_set = optimizer.FileAndRateSet(verify_files_present=False)
     self.file_set.AddFilesAndRates([self.videofile.filename], [100, 200])
     my_optimizer = self.StdOptimizer()
     # When there is nothing in the database, None should be returned.
     best_encoder = my_optimizer.BestOverallEncoder()
     self.assertIsNone(best_encoder)
     # Fill in the database with all the files and rates.
     my_encoder = self.EncoderFromParameterString('--score=7')
     for rate, filename in self.file_set.AllFilesAndRates():
         my_encoder.Encoding(rate,
                             encoder.Videofile(filename)).Execute().Store()
     best_encoder = my_optimizer.BestOverallEncoder()
     self.assertTrue(best_encoder)
     self.assertEquals(my_encoder.parameters.ToString(),
                       best_encoder.parameters.ToString())
     # Add an incomplete encode. This should be ignored.
     (self.EncoderFromParameterString('--score=9').Encoding(
         100, self.videofile).Execute().Store())
     best_encoder = my_optimizer.BestOverallEncoder()
     self.assertTrue(best_encoder)
     self.assertEquals(my_encoder.parameters.ToString(),
                       best_encoder.parameters.ToString())
     #  Complete the set for 'score=9'. This should cause a change.
     (self.EncoderFromParameterString('--score=9').Encoding(
         200, self.videofile).Execute().Store())
     best_encoder = my_optimizer.BestOverallEncoder()
     self.assertTrue(best_encoder)
     self.assertEquals('--score=9', best_encoder.parameters.ToString())
コード例 #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())
コード例 #4
0
def OldMpegFiles():
    the_set = optimizer.FileAndRateSet()
    my_directory = 'video/mpeg_video'
    # Class A
    the_set.AddFilesAndRates([
        "Traffic_2560x1600_30_crop.yuv", "PeopleOnStreet_2560x1600_30_crop.yuv"
    ], [2500, 3500, 5000, 8000, 14000], my_directory)
    # Class B1
    the_set.AddFilesAndRates(
        ["Kimono1_1920x1080_24.yuv", "ParkScene_1920x1080_24.yuv"],
        [1000, 1600, 2500, 4000, 6000], my_directory)
    # Class B2
    the_set.AddFilesAndRates(
        ["Cactus_1920x1080_50.yuv", "BasketballDrive_1920x1080_50.yuv"],
        [2000, 3000, 4500, 7000, 10000], my_directory)
    # Class C
    the_set.AddFilesAndRates([
        "BasketballDrill_832x480_50.yuv", "BQMall_832x480_60.yuv",
        "PartyScene_832x480_50.yuv", "RaceHorses_832x480_30.yuv"
    ], [384, 512, 768, 1200, 2000], my_directory)
    # Class D
    the_set.AddFilesAndRates([
        "BasketballPass_416x240_50.yuv", "BlowingBubbles_416x240_50.yuv",
        "RaceHorses_416x240_30.yuv"
    ], [256, 384, 512, 850, 1500], my_directory)
    # Class E
    the_set.AddFilesAndRates([
        "FourPeople_1280x720_60.yuv", "Johnny_1280x720_60.yuv",
        "KristenAndSara_1280x720_60.yuv"
    ], [256, 384, 512, 850, 1500], my_directory)
    return the_set
コード例 #5
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'])
コード例 #6
0
 def test_AddPresentFile(self):
     the_set = optimizer.FileAndRateSet()
     file_name = 'file_1024_768_30.yuv'
     test_tools.MakeYuvFileWithOneBlankFrame(file_name)
     the_set.AddFilesAndRates([file_name], [100],
                              basedir=os.getenv('CODEC_WORKDIR'))
     self.assertTrue(the_set.AllFilesAndRates())
     self.assertTrue(the_set.set_is_complete)
コード例 #7
0
 def test_AddPresentFile(self):
     the_set = optimizer.FileAndRateSet()
     file_name = 'file_1024_768_30.yuv'
     test_tools.MakeYuvFileWithOneBlankFrame(file_name)
     the_set.AddFilesAndRates([file_name], [100],
                              basedir=encoder_configuration.conf.workdir())
     self.assertTrue(the_set.AllFilesAndRates())
     self.assertTrue(the_set.set_is_complete)
コード例 #8
0
 def test_TwoAddCalls(self):
   the_set = optimizer.FileAndRateSet()
   the_set.AddFilesAndRates(['filename'], [100, 200], 'dirname')
   the_set.AddFilesAndRates(['otherfilename'], [200, 300], 'dirname')
   self.assertEqual(set([(100, 'dirname/filename'),
                         (200, 'dirname/filename'),
                         (200, 'dirname/otherfilename'),
                         (300, 'dirname/otherfilename')]),
                    set(the_set.AllFilesAndRates()))
コード例 #9
0
def GenerateFilesetFromDirectory(name):
  """Returns a FileAndRateSet containing all the YUV files in the directory."""
  yuvfiles = glob.glob(os.path.join(os.getenv('WORKDIR'),
                                    'video', name, '*.yuv'))
  my_set = optimizer.FileAndRateSet()
  for yuvfile in yuvfiles:
    videofile = encoder.Videofile(yuvfile)
    my_set.AddFilesAndRates([videofile.filename],
                            ChooseRates(videofile.width, videofile.framerate))
  return my_set
コード例 #10
0
ファイル: test_tools.py プロジェクト: xelement/compare-codecs
def TestFileSet():
    """Returns a file set containing a file with one black frame.

  Creates the file as a side effect."""

    the_set = optimizer.FileAndRateSet()
    filename = 'one_black_frame_1024_768_30.yuv'
    MakeYuvFileWithOneBlankFrame(filename)
    my_directory = encoder_configuration.conf.workdir()
    the_set.AddFilesAndRates([filename], [300, 1000, 3000], my_directory)
    return the_set
コード例 #11
0
def TestFileSet():
  """Returns a file set containing a file with one black frame.

  Creates the file as a side effect."""

  the_set = optimizer.FileAndRateSet()
  filename = 'one_black_frame_1024_768_30.yuv'
  MakeYuvFileWithOneBlankFrame(filename)
  my_directory = os.environ['CODEC_WORKDIR']
  the_set.AddFilesAndRates([filename],
                           [300, 1000, 3000],
                           my_directory)
  return the_set
コード例 #12
0
 def test_EncodingGoodOnOtherRate(self):
     self.file_set = optimizer.FileAndRateSet(verify_files_present=False)
     self.file_set.AddFilesAndRates([self.videofile.filename], [100, 200])
     my_optimizer = self.StdOptimizer()
     my_encoder = self.EncoderFromParameterString('--score=7')
     my_encoder.Encoding(100, self.videofile).Execute().Store()
     first_encoder = self.EncoderFromParameterString('--score=8')
     first_encoding = first_encoder.Encoding(200, self.videofile)
     first_encoding.Execute().Store()
     # pylint: disable=W0212
     next_encoding = my_optimizer._EncodingGoodOnOtherRate(
         first_encoding, 200, self.videofile, None)
     self.assertTrue(next_encoding)
     self.assertEqual('--score=7',
                      next_encoding.encoder.parameters.ToString())
コード例 #13
0
 def __init__(self, filename, codec, score_function):
     self.name = codec.name
     self.videofile = encoder.Videofile(filename)
     self.fileset = optimizer.FileAndRateSet()
     self.fileset.AddFilesAndRates([filename],
                                   fileset_picker.ChooseRates(
                                       self.videofile.width,
                                       self.videofile.framerate))
     self.my_optimizer = optimizer.Optimizer(codec,
                                             file_set=self.fileset,
                                             score_function=score_function)
     self.filename = filename
     self.encoder = self.my_optimizer.BestOverallEncoder()
     if not self.encoder:
         raise NotEnoughDataError('No overall encoder for %s on %s' %
                                  (codec.name, filename))
     self.points = None
コード例 #14
0
 def test_RatesForFile(self):
   the_set = optimizer.FileAndRateSet()
   the_set.AddFilesAndRates(['filename'], [100, 200])
   the_set.AddFilesAndRates(['otherfilename'], [200, 300])
   self.assertEqual(set([100, 200]),
                    set(the_set.AllRatesForFile('filename')))
コード例 #15
0
 def test_OneFileMultipleRates(self):
   the_set = optimizer.FileAndRateSet()
   the_set.AddFilesAndRates(['filename'], [100, 200], 'dirname')
   self.assertEqual(set([(100, 'dirname/filename'),
                         (200, 'dirname/filename')]),
                    set(the_set.AllFilesAndRates()))
コード例 #16
0
 def test_NoDirName(self):
   the_set = optimizer.FileAndRateSet()
   the_set.AddFilesAndRates(['filename'], [100])
   self.assertEqual([(100, 'filename')], the_set.AllFilesAndRates())
コード例 #17
0
 def test_OneFileAddedAndReturned(self):
   the_set = optimizer.FileAndRateSet()
   the_set.AddFilesAndRates(['filename'], [100], 'dirname')
   self.assertEqual([(100, 'dirname/filename')], the_set.AllFilesAndRates())
コード例 #18
0
 def test_AddMissingFile(self):
     the_set = optimizer.FileAndRateSet()
     the_set.AddFilesAndRates(['nosuchfile'], [100])
     self.assertFalse(the_set.AllFilesAndRates())
     self.assertFalse(the_set.set_is_complete)