Exemple #1
0
    def plot_overall_graph(self):
        max_d_layer = max([item['did'] for item in self.settings])
        axes_count = 2 if max_d_layer == 0 else (1 + self.MAX_D_LAYER)
        axes_count += 1 if max(self.idr) > 0 else 0
        axes_count += 1 if max(self.frame_skipped) > 0 else 0
        print('draw %d charts\n' % axes_count)
        fig, axes = plt.subplots(axes_count, 1, sharex=True)
        plt.xlabel('time')

        axes[0].plot(self.dt_list, self.br_list, label='actual_bit_rate')
        axes[0].legend()

        if max_d_layer > 0:
            for layer_idx in range(self.MAX_D_LAYER):
                cur_list = [
                    item for item in self.settings
                    if layer_idx == __init__.get_did_from_resolution(
                        item['width'], item['height'])
                ]
                if cur_list == []:
                    axes[layer_idx + 1].plot(self.dt_list,
                                             self.br_list,
                                             label='actual_bit_rate')
                else:
                    for info in ('max_bit_rate', 'target_bit_rate_upper'):
                        axes[layer_idx +
                             1].plot([item['ts'] for item in cur_list],
                                     [item[info] for item in cur_list],
                                     label=info + '_%d' % layer_idx)

                cur_list = [
                    item for item in self.layer_stats if item[1] == layer_idx
                ]
                if cur_list == []:
                    axes[layer_idx + 1].plot(self.dt_list,
                                             self.br_list,
                                             label='actual_bit_rate')
                    axes[layer_idx + 1].legend()
                else:
                    axes[layer_idx + 1].plot([item[0] for item in cur_list],
                                             [item[2] for item in cur_list],
                                             label='layer_%d' % layer_idx)
                    axes[layer_idx + 1].legend()

        else:
            cur_list = [item for item in self.settings]
            for info in ('max_bit_rate', 'target_bit_rate_upper',
                         'target_bit_rate'):
                axes[0].plot([item['ts'] for item in cur_list],
                             [item[info] for item in cur_list],
                             label=info)
            axes[1].plot(
                [item['ts'] for item in self.settings],
                [item['width'] + item['height'] for item in self.settings],
                label='resolution')
            axes[1].legend()

        axes_idx = 2 if max_d_layer == 0 else (1 + self.MAX_D_LAYER)
        if max(self.idr) > 0:
            axes[axes_idx].plot([item[0] for item in self.stats[1:]],
                                RateControlUtil.get_derive(self.idr),
                                '-o',
                                label='idr_count')
            axes[axes_idx].legend()
            axes_idx += 1

        if max(self.frame_skipped) > 0:
            axes[axes_idx].plot([item[0] for item in self.stats[1:]],
                                RateControlUtil.get_derive(self.frame_skipped),
                                '-o',
                                label='frame_skipped_count')
            axes[axes_idx].legend()
        x = [item[0] for item in self.stats[1:]]
        y = RateControlUtil.get_derive(self.frame_skipped)
        for p1, p2 in zip(x, y):
            print("%s,%d\n" % (p1, p2))

        plt.savefig('RatesinLog.png')
        plt.show()
    def plot_overall_graph(self):
        max_d_layer = max([item['did'] for item in self.settings])
        axes_count = 2 if max_d_layer == 0 else (1+self.MAX_D_LAYER)
        axes_count += 1 if max(self.idr) > 0 else 0
        axes_count += 1 if max(self.frame_skipped) > 0 else 0
        print('draw %d charts\n' %axes_count)
        fig, axes = plt.subplots(axes_count, 1, sharex=True)
        plt.xlabel('time')

        axes[0].plot(self.dt_list, self.br_list, label='actual_bit_rate')
        axes[0].legend()

        if max_d_layer>0:
            for layer_idx in range(self.MAX_D_LAYER):
                cur_list = [item for item in self.settings
                            if layer_idx == __init__.get_did_from_resolution(item['width'],item['height'])]
                if cur_list == []:
                    axes[layer_idx+1].plot(self.dt_list, self.br_list, label='actual_bit_rate')
                else:
                    for info in ('max_bit_rate', 'target_bit_rate_upper'):
                        axes[layer_idx+1].plot([item['ts'] for item in cur_list],
                                 [item[info] for item in cur_list],
                                 label=info+'_%d' %layer_idx)

                cur_list = [item for item in self.layer_stats if item[1]==layer_idx]
                if cur_list == []:
                    axes[layer_idx+1].plot(self.dt_list, self.br_list, label='actual_bit_rate')
                    axes[layer_idx+1].legend()
                else:
                    axes[layer_idx+1].plot([item[0] for item in cur_list],
                                 [item[2] for item in cur_list],
                                 label='layer_%d' %layer_idx)
                    axes[layer_idx+1].legend()

        else:
            cur_list = [item for item in self.settings]
            for info in ('max_bit_rate', 'target_bit_rate_upper', 'target_bit_rate'):
                axes[0].plot([item['ts'] for item in cur_list],
                                 [item[info] for item in cur_list],
                                 label=info)
            axes[1].plot([item['ts'] for item in self.settings],
                     [item['width']+item['height'] for item in self.settings], label='resolution')
            axes[1].legend()

        axes_idx = 2 if max_d_layer==0 else (1+self.MAX_D_LAYER)
        if max(self.idr) > 0:
            axes[axes_idx].plot([item[0] for item in self.stats[1:]],
                                  RateControlUtil.get_derive(self.idr),
                                  '-o', label='idr_count')
            axes[axes_idx].legend()
            axes_idx += 1

        if max(self.frame_skipped) > 0:
            axes[axes_idx].plot([item[0] for item in self.stats[1:]],
                                  RateControlUtil.get_derive(self.frame_skipped),
                                  '-o', label='frame_skipped_count')
            axes[axes_idx].legend()
        x=[item[0] for item in self.stats[1:]]
        y=RateControlUtil.get_derive(self.frame_skipped)
        for p1,p2 in zip(x,y):
            print("%s,%d\n" %(p1,p2))

        plt.savefig('RatesinLog.png')
        plt.show()