Esempio n. 1
0
    def read_logs(self, files):
        self.name = files
        current_file = open(files, "rU")
        lines = current_file.readlines()
        for line in lines:
            r = CodecLogUtil.SETTING_TYPE_RE.search(line)
            if r is not None:
                cur_dt = CodecLogUtil.extract_timestamp(line)
                self.usage_type = int(r.groups()[0])
                continue

            r = CodecLogUtil.LAYER_SETTING_RE.search(line)
            if r is not None:
                cur_dt = CodecLogUtil.extract_timestamp(line)
                self.get_settings(cur_dt, r)
                continue

            r = CodecLogUtil.SETOPTION_BR_RE.search(line)
            if r is not None:
                cur_dt = CodecLogUtil.extract_timestamp(line)
                CodecLogUtil.option_br_update(self.settings, cur_dt, int(r.group(1)))
                continue

            r = CodecLogUtil.SETOPTION_MAXBR_RE.search(line)
            if r is not None:
                cur_dt = CodecLogUtil.extract_timestamp(line)
                CodecLogUtil.option_max_br_update(self.settings, cur_dt, int(r.group(1)))
                continue

            r = CodecLogUtil.ENCODER_STAT_LOG_RE.search(line)
            if r is not None:
                cur_dt = CodecLogUtil.extract_timestamp(line)
                ts = self.check_ts(r.group(14))
                encoded_bytes = int(r.group(13))
                self.stats.append((cur_dt, ts, encoded_bytes))

                self.idr.append(int(r.group(12)))
                self.frame_skipped.append(int(r.group(9)))
                continue

            r = CodecLogUtil.VIDEO_LAYER_LOG_RE.search(line)
            if r is not None:
                cur_dt = CodecLogUtil.extract_timestamp(line)
                did = __init__.get_did_from_resolution(int(r.group(1)), int(r.group(2)))
                br = int(r.group(4))
                if br > 0:
                    self.layer_stats.append((cur_dt, did, br))
                continue

        current_file.close()
Esempio n. 2
0
    def get_settings(self, time, r):
        cur_settings = {}
        CodecLogUtil.settings_log(time, r, cur_settings)
        if self.usage_type == 0:
            cur_settings["timewindow"] = 5000  # ms
            cur_settings["fluctuation_range"] = 0.1
        elif self.usage_type == 1:
            cur_settings["timewindow"] = 10000  # ms
            cur_settings["fluctuation_range"] = 0.3

        cur_settings["target_bit_rate_upper"] = int(
            cur_settings["target_bit_rate"] * (1 + cur_settings["fluctuation_range"]) + 0.5
        )

        self.settings.append(cur_settings)
Esempio n. 3
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:]], CodecLogUtil.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:]],
                CodecLogUtil.get_derive(self.frame_skipped),
                "-o",
                label="frame_skipped_count",
            )
            axes[axes_idx].legend()
        x = [item[0] for item in self.stats[1:]]
        y = CodecLogUtil.get_derive(self.frame_skipped)
        for p1, p2 in zip(x, y):
            print("%s,%d\n" % (p1, p2))

        plt.savefig("RatesinLog.png")
        plt.show()
Esempio n. 4
0
                break
        else:
            build_target_file.write("\nAPI_TEST_CPP_SRCS += $(API_TEST_SRCDIR)/encode_decode_api_test_generated.cpp\n")


def generate_encoder_cmd():
    pass

if __name__ == '__main__':
    #set you search path in config.py
    argParser = argparse.ArgumentParser()
    argParser.add_argument("-log", nargs='?', help="log file")
    argParser.add_argument("-test", nargs='?', help="test_file_path")
    # #argParser.add_argument("-encoder", nargs='?', help="encoder_path")
    #argParser.add_argument("-source", nargs='?', help="source_yuv")

    args = argParser.parse_args()
    if not os.path.isfile(args.log):
        exit()

    setting_list, stat_list, idr_list = CodecLogUtil.read_production_log(args.log)
    if not CodecLogUtil.check_setting_valid([item[1] for item in setting_list]):
        print("warning! incomplete setting!\n")
    if CodecLogUtil.check_same_setting_in_log([item[1] for item in setting_list]):
        cmd_line = generate_encoder_cmd()
        print("same setting in whole call!\n")
        print(cmd_line)


    if os.path.isdir(args.test):
        generate_ut(args.test, setting_list, stat_list, idr_list)