+
IVAS FORMAT - Worst Case WMOPS Performance
+
+
+
+
+
+ - Worst case encoder + decoder performance: Encoder and decoder mode might be different.
+ - Worst case encoder + decoder performance (rateswitching): Encoder and decoder mode might be different.
+ - Worst case codec performance: Encoder and decoder modes are identical.
+ - Worst case codec performance (rateswitching): Encoder and decoder modes are identical.
+ - Worst case encoder performance
+ - Worst case encoder performance (rateswitching)
+ - Worst case decoder performance
+ - Worst case decoder performance (rateswitching)
+
+
+
+
+
+
IVAS FORMAT - Worst Case WMOPS Performance
+ per Operating Point
+
+
+
+
+
+
+
+
+
+
+
IVAS FORMAT - Worst Case RAM Demand
+
+
+
+
+
+ - Max. total RAM Codec:
+ Encoder + Decoder
+ - Max. total RAM Encoder:
+ Encoder only
+ - Max. total RAM Decoder:
+ Decoder only
+
+ - Max. HEAP Codec:
+ Encoder + Decoder
+ - Max. HEAP Encoder
+ Encoder only
+ - Max. HEAP Decoder
+ Decoder only
+
+ - Max. STACK Codec:
+ max(Encoder, Decoder)
+ - Max. STACK Encoder:
+ Encoder only
+ - Max. STACK Decoder:
+ Decoder only
+
+
+
+
+
+
+
+
IVAS FORMAT - Worst Case ROM Demand
+
+
+
+
+
+ - Max. total ROM Codec: Encoder + Decoder
+
+ - Max. Program ROM Encoder Library: lib_enc only
+ - Max. Program ROM Decoder Library: lib_dec only
+ - Max. Program ROM Common Library: lib_com only
+ - Max. Program ROM Ext Renderer Library: lib_rend only
+
+ - Max. Table ROM Encoder Library: lib_enc only
+ - Max. Table ROM Decoder Library: lib_dec only
+ - Max. Table ROM Common Library: lib_com only
+ - Max. Table ROM Ext Renderer Library: lib_rend only
+
+
+
+
+
+
FAQ
+
+ - Q:
- What is the meaning of these funny symbols in the navigation box, in the left upper corner of this page?
+ - A:
-
+ 1) Traffic light ●●●, ●●● or ●●●: !!!CURRENTLY NOT WORKING CORRECTLY AS NO REQUIREMENTS DEFINED YET!!! The traffic light symbols show, whether the last datapoint matches the requirement (green) or not (red). A yellow traffic light means that the requirement is matched, but the score is very close (within a 3% margin) to the requirement.
+ 2) Arrow ↑, ↓, →: The arrow indicates the trend of the last datapoint, compared to the last but one. An upwards arrow means that the score got higher (i.e. worse), downwards arrow arrow means that the score got lower (i.e. better), and a rightwards arrow means that the score was kept constant (within a 1% margin).
+
+ - Q:
- Which input files are used for audio-input? What error pattern is used?
+ - A:
- The input files can be found here. The error pattern is here.
+
+
+
+
+
Legal notice
+
+ This webpage uses jQuery and Flot.js libraries for which the following licenses apply:
+
+ - jQuery:
+ -
+ Copyright OpenJS Foundation and other contributors, https://openjsf.org/
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ - Flot.js:
+ -
+ Copyright (c) 2007-2014 IOLA and Ole Laursen
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use,
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following
+ conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+
+
+
+
+
+
+
+
+
diff --git a/ci/complexity_measurements/mergeNewsletterRam.py b/ci/complexity_measurements/mergeNewsletterRam.py
new file mode 100644
index 0000000000000000000000000000000000000000..d578b51c56f8b7a4cf6dee50c87f0d94d7c64422
--- /dev/null
+++ b/ci/complexity_measurements/mergeNewsletterRam.py
@@ -0,0 +1,89 @@
+#!/usr/bin/env python3
+# coding: utf-8
+
+# (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB,
+# Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
+# Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
+# Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
+# contributors to this repository. All Rights Reserved.
+
+# This software is protected by copyright law and by international treaties.
+# The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB,
+# Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
+# Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
+# Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
+# contributors to this repository retain full ownership rights in their respective contributions in
+# the software. This notice grants no license of any kind, including but not limited to patent
+# license, nor is any license granted by implication, estoppel or otherwise.
+
+# Contributors are required to enter into the IVAS codec Public Collaboration agreement before making
+# contributions.
+
+# This software is provided "AS IS", without any express or implied warranties. The software is in the
+# development stage. It is intended exclusively for experts who have experience with such software and
+# solely for the purpose of inspection. All implied warranties of non-infringement, merchantability
+# and fitness for a particular purpose are hereby disclaimed and excluded.
+
+# Any dispute, controversy or claim arising under or in relation to providing this software shall be
+# submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in
+# accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and
+# the United Nations Convention on Contracts on the International Sales of Goods.
+import csv
+import sys
+
+newsletterFilename = ""
+newsletterFilenameLast = ""
+revision = ""
+shortDate = ""
+fullDate = ""
+
+if __name__ == "__main__":
+ newsletterFilenameHEAP = sys.argv[1]
+ newsletterFilenameSTACK = sys.argv[2]
+
+ram_table = {}
+
+with open(newsletterFilenameHEAP, "r") as csvfile:
+ HEAP = csv.reader(csvfile, delimiter=";")
+ for row in HEAP:
+ if row[0] == "conf":
+ continue
+ key = row[0]
+ lst = row[1:]
+ ram_table[key] = lst
+
+with open(newsletterFilenameSTACK, "r") as csvfile:
+ STACK = csv.reader(csvfile, delimiter=";")
+ for row in STACK:
+ if row[0] == "conf":
+ continue
+ key = row[0]
+ lst = row[1:]
+ ram_table[key] += lst
+
+# now we have the following format
+# HEAP enc, HEAP dec, HEAP total, STACK enc, STACK dec, STACK max(enc, dec)
+
+print("conf;HEAP enc;HEAP dec;HEAP total;STACK enc;STACK dec;STACK max;total")
+
+for key in ram_table:
+ ram = ram_table[key]
+ total = int(ram[0]) + int(ram[1]) + int(ram[5])
+ print(
+ key,
+ ";",
+ ram[0],
+ ";",
+ ram[1],
+ ";",
+ ram[2],
+ ";",
+ ram[3],
+ ";",
+ ram[4],
+ ";",
+ ram[5],
+ ";",
+ total,
+ sep="",
+ )
diff --git a/ci/complexity_measurements/mergeNewsletterRom.py b/ci/complexity_measurements/mergeNewsletterRom.py
new file mode 100644
index 0000000000000000000000000000000000000000..b46e6c55709ee8c401cec78554218f8cff283bf7
--- /dev/null
+++ b/ci/complexity_measurements/mergeNewsletterRom.py
@@ -0,0 +1,99 @@
+#!/usr/bin/env python3
+# coding: utf-8
+
+# (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB,
+# Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
+# Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
+# Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
+# contributors to this repository. All Rights Reserved.
+
+# This software is protected by copyright law and by international treaties.
+# The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB,
+# Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
+# Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
+# Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
+# contributors to this repository retain full ownership rights in their respective contributions in
+# the software. This notice grants no license of any kind, including but not limited to patent
+# license, nor is any license granted by implication, estoppel or otherwise.
+
+# Contributors are required to enter into the IVAS codec Public Collaboration agreement before making
+# contributions.
+
+# This software is provided "AS IS", without any express or implied warranties. The software is in the
+# development stage. It is intended exclusively for experts who have experience with such software and
+# solely for the purpose of inspection. All implied warranties of non-infringement, merchantability
+# and fitness for a particular purpose are hereby disclaimed and excluded.
+
+# Any dispute, controversy or claim arising under or in relation to providing this software shall be
+# submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in
+# accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and
+# the United Nations Convention on Contracts on the International Sales of Goods.
+import csv
+import sys
+
+newsletterFilename = ""
+newsletterFilenameLast = ""
+revision = ""
+shortDate = ""
+fullDate = ""
+
+if __name__ == "__main__":
+ newsletterFilenamePROM = sys.argv[1]
+ newsletterFilenameTROM = sys.argv[2]
+
+rom_table = {}
+
+with open(newsletterFilenamePROM, "r") as csvfile:
+ PROM = csv.reader(csvfile, delimiter=";")
+ for row in PROM:
+ if row[0] == "conf":
+ continue
+ key = row[0]
+ lst = row[1:]
+ rom_table[key] = lst
+
+with open(newsletterFilenameTROM, "r") as csvfile:
+ TROM = csv.reader(csvfile, delimiter=";")
+ for row in TROM:
+ if row[0] == "conf":
+ continue
+ key = row[0]
+ lst = row[1:]
+ rom_table[key] += lst
+
+# now we have the following format
+# PROM enc, PROM dec, PROM com, PROM rend, PROM total, TROM enc, TROM dec, TROM com, TROM rend, TROM total
+
+print(
+ "conf;PROM enc;PROM dec;PROM com;PROM rend;PROM total;TROM enc;TROM dec;TROM com;TROM rend;TROM total;total"
+)
+
+for key in rom_table:
+ rom = rom_table[key]
+ total = int(rom[4]) + int(rom[9])
+ print(
+ key,
+ ";",
+ rom[0],
+ ";",
+ rom[1],
+ ";",
+ rom[2],
+ ";",
+ rom[3],
+ ";",
+ rom[4],
+ ";",
+ rom[5],
+ ";",
+ rom[6],
+ ";",
+ rom[7],
+ ";",
+ rom[8],
+ ";",
+ rom[9],
+ ";",
+ total,
+ sep="",
+ )
diff --git a/ci/complexity_measurements/parseNewsletterRam.py b/ci/complexity_measurements/parseNewsletterRam.py
new file mode 100644
index 0000000000000000000000000000000000000000..55eecff5738264d933b13470ee0f35789c138853
--- /dev/null
+++ b/ci/complexity_measurements/parseNewsletterRam.py
@@ -0,0 +1,157 @@
+#!/usr/bin/env python3
+# coding: utf-8
+"""
+ (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB,
+ Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
+ Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
+ Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
+ contributors to this repository. All Rights Reserved.
+
+ This software is protected by copyright law and by international treaties.
+ The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB,
+ Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
+ Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
+ Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
+ contributors to this repository retain full ownership rights in their respective contributions in
+ the software. This notice grants no license of any kind, including but not limited to patent
+ license, nor is any license granted by implication, estoppel or otherwise.
+
+ Contributors are required to enter into the IVAS codec Public Collaboration agreement before making
+ contributions.
+
+ This software is provided "AS IS", without any express or implied warranties. The software is in the
+ development stage. It is intended exclusively for experts who have experience with such software and
+ solely for the purpose of inspection. All implied warranties of non-infringement, merchantability
+ and fitness for a particular purpose are hereby disclaimed and excluded.
+
+ Any dispute, controversy or claim arising under or in relation to providing this software shall be
+ submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in
+ accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and
+ the United Nations Convention on Contracts on the International Sales of Goods.
+"""
+
+import csv
+import re
+import sys
+
+newsletterFilename = ""
+newsletterFilenameLast = ""
+revision = ""
+shortDate = ""
+fullDate = ""
+
+if __name__ == "__main__":
+ newsletterFilenameHEAP = sys.argv[1]
+ newsletterFilenameSTACK = sys.argv[2]
+ newsletterFilenameLast = sys.argv[3]
+ revision = sys.argv[4]
+ shortDate = sys.argv[5]
+ fullDate = sys.argv[6]
+
+max_total_enc = ["None", 0]
+max_total_dec = ["None", 0]
+max_total_encdec = ["None", 0]
+
+max_stack_enc = ["None", 0]
+max_stack_dec = ["None", 0]
+max_stack_encdec = ["None", 0]
+
+max_heap_enc = ["None", 0]
+max_heap_dec = ["None", 0]
+max_heap_encdec = ["None", 0]
+
+ram_table = {}
+
+with open(newsletterFilenameHEAP, "r") as csvfile:
+ HEAP = csv.reader(csvfile, delimiter=";")
+ for row in HEAP:
+ if row[0] == "conf":
+ continue
+ key = row[0]
+ lst = row[1:]
+ ram_table[key] = lst
+
+with open(newsletterFilenameSTACK, "r") as csvfile:
+ STACK = csv.reader(csvfile, delimiter=";")
+ for row in STACK:
+ if row[0] == "conf":
+ continue
+ key = row[0]
+ lst = row[1:]
+ ram_table[key] += lst
+
+# now we have the following format
+# HEAP enc, HEAP dec, HEAP total, STACK enc, STACK dec, STACK max(enc, dec), total
+
+for key in ram_table:
+ ram = ram_table[key]
+ heap_enc = int(ram[0])
+ heap_dec = int(ram[1])
+ heap_encdec = heap_enc + heap_dec
+
+ stack_enc = int(ram[3])
+ stack_dec = int(ram[4])
+ stack_encdec = int(ram[5])
+
+ total_enc = heap_enc + stack_enc
+ total_dec = heap_dec + stack_dec
+ total_encdec = heap_encdec + stack_encdec
+
+ if heap_enc > max_heap_enc[1]:
+ max_heap_enc[0] = re.sub(" ", "_", key)
+ max_heap_enc[1] = heap_enc
+
+ if heap_dec > max_heap_dec[1]:
+ max_heap_dec[0] = re.sub(" ", "_", key)
+ max_heap_dec[1] = heap_dec
+
+ if heap_encdec > max_heap_encdec[1]:
+ max_heap_encdec[0] = re.sub(" ", "_", key)
+ max_heap_encdec[1] = heap_encdec
+
+ if stack_enc > max_stack_enc[1]:
+ max_stack_enc[0] = re.sub(" ", "_", key)
+ max_stack_enc[1] = stack_enc
+
+ if stack_dec > max_stack_dec[1]:
+ max_stack_dec[0] = re.sub(" ", "_", key)
+ max_stack_dec[1] = stack_dec
+
+ if stack_encdec > max_stack_encdec[1]:
+ max_stack_encdec[0] = re.sub(" ", "_", key)
+ max_stack_encdec[1] = stack_encdec
+
+ if total_enc > max_total_enc[1]:
+ max_total_enc[0] = re.sub(" ", "_", key)
+ max_total_enc[1] = total_enc
+
+ if total_dec > max_total_dec[1]:
+ max_total_dec[0] = re.sub(" ", "_", key)
+ max_total_dec[1] = total_dec
+
+ if total_encdec > max_total_encdec[1]:
+ max_total_encdec[0] = re.sub(" ", "_", key)
+ max_total_encdec[1] = total_encdec
+
+
+print(
+ revision, # string revision $tmp[1]
+ shortDate, # string shortDate $tmp[2]
+ fullDate, # string fullDate $tmp[3]
+ max_total_encdec[1], # value maxTotalRamCodecScore $tmp[4]
+ max_total_enc[0], # string maxTotalRamEnc $tmp[5]
+ max_total_enc[1], # value maxTotalRamEnc $tmp[6]
+ max_total_dec[0], # string maxTotalRamDec $tmp[7]
+ max_total_dec[1], # value maxTotalRamDecScore $tmp[8]
+ max_stack_encdec[1], # value maxStackCodecScore $tmp[9]
+ max_stack_enc[0], # string maxStackEnc $tmp[10]
+ max_stack_enc[1], # value maxStackEncScore $tmp[11]
+ max_stack_dec[0], # string maxStackDec $tmp[12]
+ max_stack_dec[1], # value maxStackDecScore $tmp[13]
+ max_heap_encdec[1], # value maxHeapCodecScore $tmp[14]
+ max_heap_enc[0], # string maxHeapEnc $tmp[15]
+ max_heap_enc[1], # value maxHeapEncScore $tmp[16]
+ max_heap_dec[0], # string maxHeapDec $tmp[17]
+ max_heap_dec[1], # value maxHeapDecScore $tmp[19]
+ newsletterFilenameLast, # string logFile $tmp[19]
+)
diff --git a/ci/complexity_measurements/parseNewsletterRom.py b/ci/complexity_measurements/parseNewsletterRom.py
new file mode 100644
index 0000000000000000000000000000000000000000..a4a3df4ecfe0da6763668dd4e4e5639ebbb087aa
--- /dev/null
+++ b/ci/complexity_measurements/parseNewsletterRom.py
@@ -0,0 +1,164 @@
+#!/usr/bin/env python3
+# coding: utf-8
+
+"""
+ (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB,
+ Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
+ Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
+ Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
+ contributors to this repository. All Rights Reserved.
+
+ This software is protected by copyright law and by international treaties.
+ The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB,
+ Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
+ Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
+ Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
+ contributors to this repository retain full ownership rights in their respective contributions in
+ the software. This notice grants no license of any kind, including but not limited to patent
+ license, nor is any license granted by implication, estoppel or otherwise.
+
+ Contributors are required to enter into the IVAS codec Public Collaboration agreement before making
+ contributions.
+
+ This software is provided "AS IS", without any express or implied warranties. The software is in the
+ development stage. It is intended exclusively for experts who have experience with such software and
+ solely for the purpose of inspection. All implied warranties of non-infringement, merchantability
+ and fitness for a particular purpose are hereby disclaimed and excluded.
+
+ Any dispute, controversy or claim arising under or in relation to providing this software shall be
+ submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in
+ accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and
+ the United Nations Convention on Contracts on the International Sales of Goods.
+"""
+
+import csv
+import re
+import sys
+
+newsletterFilename = ""
+newsletterFilenameLast = ""
+revision = ""
+shortDate = ""
+fullDate = ""
+
+if __name__ == "__main__":
+ newsletterFilenamePROM = sys.argv[1]
+ newsletterFilenameTROM = sys.argv[2]
+ newsletterFilenameLast = sys.argv[3]
+ revision = sys.argv[4]
+ shortDate = sys.argv[5]
+ fullDate = sys.argv[6]
+
+max_prom_enc = ["None", 0]
+max_prom_dec = ["None", 0]
+max_prom_com = ["None", 0]
+max_prom_rend = ["None", 0]
+max_prom_total = ["None", 0]
+
+max_trom_enc = ["None", 0]
+max_trom_dec = ["None", 0]
+max_trom_com = ["None", 0]
+max_trom_rend = ["None", 0]
+max_trom_total = ["None", 0]
+
+max_total_encdec = ["None", 0]
+
+rom_table = {}
+
+with open(newsletterFilenamePROM, "r") as csvfile:
+ PROM = csv.reader(csvfile, delimiter=";")
+ for row in PROM:
+ if row[0] == "conf":
+ continue
+ key = row[0]
+ lst = row[1:]
+ rom_table[key] = lst
+
+with open(newsletterFilenameTROM, "r") as csvfile:
+ TROM = csv.reader(csvfile, delimiter=";")
+ for row in TROM:
+ if row[0] == "conf":
+ continue
+ key = row[0]
+ lst = row[1:]
+ rom_table[key] += lst
+
+# now we have the following format
+# PROM enc, PROM dec, PROM com, PROM rend, PROM total, TROM enc, TROM dec, TROM com, TROM rend, TROM total, total
+
+for key in rom_table:
+ rom = rom_table[key]
+ prom_enc = int(rom[0])
+ prom_dec = int(rom[1])
+ prom_com = int(rom[2])
+ prom_rend = int(rom[3])
+ prom_total = int(rom[4])
+
+ trom_enc = int(rom[5])
+ trom_dec = int(rom[6])
+ trom_com = int(rom[7])
+ trom_rend = int(rom[8])
+ trom_total = int(rom[9])
+
+ total_encdec = prom_total + trom_total
+
+ if prom_enc > max_prom_enc[1]:
+ max_prom_enc[0] = re.sub(" ", "_", key)
+ max_prom_enc[1] = prom_enc
+
+ if prom_dec > max_prom_dec[1]:
+ max_prom_dec[0] = re.sub(" ", "_", key)
+ max_prom_dec[1] = prom_dec
+
+ if prom_com > max_prom_com[1]:
+ max_prom_com[0] = re.sub(" ", "_", key)
+ max_prom_com[1] = prom_com
+
+ if prom_rend > max_prom_rend[1]:
+ max_prom_rend[0] = re.sub(" ", "_", key)
+ max_prom_rend[1] = prom_rend
+
+ if trom_enc > max_trom_enc[1]:
+ max_trom_enc[0] = re.sub(" ", "_", key)
+ max_trom_enc[1] = trom_enc
+
+ if trom_dec > max_trom_dec[1]:
+ max_trom_dec[0] = re.sub(" ", "_", key)
+ max_trom_dec[1] = trom_dec
+
+ if trom_com > max_trom_com[1]:
+ max_trom_com[0] = re.sub(" ", "_", key)
+ max_trom_com[1] = trom_com
+
+ if trom_rend > max_trom_rend[1]:
+ max_trom_rend[0] = re.sub(" ", "_", key)
+ max_trom_rend[1] = trom_rend
+
+ if total_encdec > max_total_encdec[1]:
+ max_total_encdec[0] = re.sub(" ", "_", key)
+ max_total_encdec[1] = total_encdec
+
+
+print(
+ revision, # string revision $tmp[1]
+ shortDate, # string shortDate $tmp[2]
+ fullDate, # string fullDate $tmp[3]
+ max_total_encdec[1], # value maxTotalRomCodecScore $tmp[4]
+ max_prom_enc[0], # string maxPROMEnc $tmp[5]
+ max_prom_enc[1], # value maxPROMEncScore $tmp[6]
+ max_prom_dec[0], # string maxPROMDec $tmp[7]
+ max_prom_dec[1], # value maxPROMDecScore $tmp[8]
+ max_prom_com[0], # string maxPROMCom $tmp[9]
+ max_prom_com[1], # value maxPROMComScore $tmp[10]
+ max_prom_rend[0], # string maxPROMRend $tmp[11]
+ max_prom_rend[1], # value maxPROMRendScore $tmp[12]
+ max_trom_enc[0], # string maxTROMEnc $tmp[13]
+ max_trom_enc[1], # value maxTROMEncScore $tmp[14]
+ max_trom_dec[0], # string maxTROMDec $tmp[15]
+ max_trom_dec[1], # value maxTROMDecScore $tmp[16]
+ max_trom_com[0], # string maxTROMCom $tmp[17]
+ max_trom_com[1], # value maxTROMComScore $tmp[18]
+ max_trom_rend[0], # string maxTROMRend $tmp[19]
+ max_trom_rend[1], # value maxTROMRendScore $tmp[20]
+ newsletterFilenameLast, # string logFile $tmp[21]
+)
diff --git a/ci/complexity_measurements/parseNewsletterWmops.py b/ci/complexity_measurements/parseNewsletterWmops.py
new file mode 100644
index 0000000000000000000000000000000000000000..a00171ead797c3117aaf8e571cd88415480ad47d
--- /dev/null
+++ b/ci/complexity_measurements/parseNewsletterWmops.py
@@ -0,0 +1,90 @@
+#!/usr/bin/env python3
+# coding: utf-8
+"""
+ (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB,
+ Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
+ Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
+ Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
+ contributors to this repository. All Rights Reserved.
+
+ This software is protected by copyright law and by international treaties.
+ The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB,
+ Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
+ Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
+ Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
+ contributors to this repository retain full ownership rights in their respective contributions in
+ the software. This notice grants no license of any kind, including but not limited to patent
+ license, nor is any license granted by implication, estoppel or otherwise.
+
+ Contributors are required to enter into the IVAS codec Public Collaboration agreement before making
+ contributions.
+
+ This software is provided "AS IS", without any express or implied warranties. The software is in the
+ development stage. It is intended exclusively for experts who have experience with such software and
+ solely for the purpose of inspection. All implied warranties of non-infringement, merchantability
+ and fitness for a particular purpose are hereby disclaimed and excluded.
+
+ Any dispute, controversy or claim arising under or in relation to providing this software shall be
+ submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in
+ accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and
+ the United Nations Convention on Contracts on the International Sales of Goods.
+"""
+
+import csv
+import re
+import sys
+
+newsletterFilename = ""
+newsletterFilenameLast = ""
+revision = ""
+shortDate = ""
+fullDate = ""
+
+if __name__ == "__main__":
+ newsletterFilename = sys.argv[1]
+ newsletterFilenameLast = sys.argv[2]
+ revision = sys.argv[3]
+ shortDate = sys.argv[4]
+ fullDate = sys.argv[5]
+
+max_enc = ["None", 0]
+max_dec = ["None", 0]
+max_total = ["None", 0]
+fixedpointScalingFac = 1.0
+
+with open(newsletterFilename, "r") as csvfile:
+ wmops = csv.reader(csvfile, delimiter=";")
+ for row in wmops:
+ if row[0] == "conf":
+ continue
+ if float(row[1]) > max_enc[1]:
+ max_enc[0] = re.sub(" ", "_", row[0])
+ max_enc[1] = float(row[1])
+ if float(row[2]) > max_dec[1]:
+ max_dec[0] = re.sub(" ", "_", row[0])
+ max_dec[1] = float(row[2])
+ if float(row[3]) > max_total[1]:
+ max_total[0] = re.sub(" ", "_", row[0])
+ max_total[1] = float(row[3])
+
+print(
+ revision,
+ shortDate,
+ fullDate,
+ max_enc[1] + max_dec[1],
+ max_enc[0],
+ max_enc[1],
+ max_dec[0],
+ max_dec[1],
+ max_total[0],
+ max_total[1],
+ fixedpointScalingFac,
+ max_enc[1] + max_dec[1],
+ max_enc[0],
+ max_enc[1],
+ max_dec[0],
+ max_dec[1],
+ max_total[0],
+ max_total[1],
+ newsletterFilenameLast,
+)
diff --git a/ci/complexity_measurements/style.css b/ci/complexity_measurements/style.css
new file mode 100644
index 0000000000000000000000000000000000000000..764ed0d94ff13958cbb612872e9bd9054e193387
--- /dev/null
+++ b/ci/complexity_measurements/style.css
@@ -0,0 +1,220 @@
+body {
+ background-color:#FFF;
+ font:.6875em Verdana, Arial, Helvetica, sans-serif;
+ color:#000;
+}
+a {
+ color:#000;
+ text-decoration:underline;
+}
+a:hover {
+ text-decoration:none;
+}
+h1 {
+ font-size:2.265em;
+ font-weight:700;
+ text-align: center;
+}
+em {
+ font-style: normal;
+ font-weight: bold;
+}
+hr {
+ margin-top: 30px;
+ margin-bottom: 30px;
+ margin-left: 150px;
+ margin-right:150px;
+ height: 0px;
+ border-top-width: 2px;
+ border-bottom-width: 0px;
+ border-left-width: 0px;
+ border-right-width: 0px;
+ border-top-style: solid;
+ color: #606060;
+}
+.graph {
+ width: 800px;
+ height: 350px;
+}
+.graph-container {
+ margin: 0 auto;
+ width: 1600px;
+}
+.message-box {
+ margin-top: 2em;
+ padding: 1em;
+ background-color: #FF8000;
+ border-radius: 20px;
+}
+#wmops-graph {
+ height:500px;
+ width:1600px;
+ float:left;
+}
+#wmops_per_op-graph {
+ height:500px;
+ width:1600px;
+ float:left;
+}
+#wmops-48kHz-graph {
+ height:500px;
+ width:1600px;
+ float:left;
+}
+#wmops_per_op-48kHz-graph {
+ height:500px;
+ width:1600px;
+ float:left;
+}
+#wmops_basop_per_op-graph {
+ height:500px;
+ width:1600px;
+ float:left;
+}
+#wmops-graph-basop {
+ height:500px;
+ width:1600px;
+ float:left;
+}
+#conversion_factors_basop_flc {
+ height:500px;
+ width:1600px;
+ float:left;
+}
+#ram-graph {
+ height:500px;
+ width:1600px;
+ float:left;
+}
+#ram-graph-basop {
+ height:500px;
+ width:1600px;
+ float:left;
+}
+#rom-graph {
+ height:500px;
+ width:1600px;
+ float:left;
+}
+#rom-graph-basop{
+ height:500px;
+ width:1600px;
+ float:left;
+}
+#prom-graph {
+ height:500px;
+ width:1600px;
+ float:left;
+}
+#tooltip {
+ border-radius:.35em;
+ border-radius:.35em;
+ background-color:#000;
+ color:#FFF;
+ display:none;
+ opacity:0.8;
+ padding:.25em;
+ position:absolute;
+ box-shadow: 6px 6px 6px #666;
+}
+#tooltip a:link, #tooltip a:active, #tooltip a:visited {
+ color:#FFF;
+ text-decoration: underline;
+}
+#tooltip a:hover {
+ color:#FFF;
+ text-decoration: none;
+}
+.legend {
+ display: inline;
+}
+.legend li {
+ border-left: 1.2em solid #FFF;
+ margin-right: 2em;
+ padding-left: .3em;
+ margin-bottom: .2em;
+ list-style-type: none;
+}
+
+#menu {
+ color: #FFFFFF;
+}
+
+#menu ul {
+ color: #FFFFFF;
+ list-style: none;
+ margin-left: -1em;
+ position: relative;
+ margin-top: 1.5em;
+ margin-bottom: 1.5em;
+}
+
+#menu li {
+ margin-left: -1em;
+ margin-bottom: 1.0em;
+ margin-top: 1.0em;
+}
+
+#menu a {
+ color: #FFFFFF;
+}
+
+dt {
+ font-weight: bold;
+}
+
+dd hr {
+ margin-top: 0.1em;
+ margin-bottom: 0.1em;
+ margin-left: 48%;
+ margin-right: 48%;
+}
+
+#menu {
+ float: left;
+ margin-left: 1em;
+ margin-top: 1em;
+ width: 22em;
+ border-radius: 1em;
+ position: fixed;
+ background-color: #000000;
+ opacity: 0.8;
+ box-shadow: 6px 6px 6px #666;
+}
+
+#content {
+ margin-left: 17em;
+}
+
+.symbols {
+ float: right;
+ font-weight: bolder;
+ font-size: 2em;
+ margin-top: -0.4em;
+}
+
+.trafficlight {
+ margin-right: 0px;
+ margin-left: 0px;
+ position: absolute;
+ right: 2em;
+ color: #202020;
+}
+
+.trend {
+ margin-right: 0.5em;
+ margin-left: 0.2em;
+}
+
+th, td {
+ padding: 0.5em 2em;
+ border: 1px solid #606060;
+}
+
+th {
+ text-align: left;
+}
+
+td#number {
+ text-align: right;
+}
diff --git a/ci/create_trajectories.py b/ci/create_trajectories.py
new file mode 100644
index 0000000000000000000000000000000000000000..6b957df0926bdb2f08a43727571d160ea164894a
--- /dev/null
+++ b/ci/create_trajectories.py
@@ -0,0 +1,25 @@
+import numpy as np
+
+
+FRAMES_PER_SEC = 50
+
+
+def random_trajectory(duration_sec):
+ n_frames = int(FRAMES_PER_SEC * duration_sec)
+ trj = np.random.random((n_frames, 4))
+ trj[:, 0] = -3
+ trj[:, 1] *= 180
+ trj[:, 2] *= 90
+ trj[:, 3] *= 180
+ return trj
+
+
+def constant_trajectory(duration_sec, yaw=0, pitch=0, roll=0):
+ n_frames = int(FRAMES_PER_SEC * duration_sec)
+ trj = np.empty((n_frames, 4))
+ trj[:, 0] = -3
+ trj[:, 1] = yaw
+ trj[:, 2] = pitch
+ trj[:, 3] = roll
+ return trj
+
diff --git a/ci/get_id_of_last_job_occurence.py b/ci/get_id_of_last_job_occurence.py
new file mode 100644
index 0000000000000000000000000000000000000000..f7540523b9e24295729df259205eb832b157c8a5
--- /dev/null
+++ b/ci/get_id_of_last_job_occurence.py
@@ -0,0 +1,95 @@
+#!/usr/bin/env python3
+
+"""
+(C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB,
+Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
+Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
+Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
+contributors to this repository. All Rights Reserved.
+
+This software is protected by copyright law and by international treaties.
+The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB,
+Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
+Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
+Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
+contributors to this repository retain full ownership rights in their respective contributions in
+the software. This notice grants no license of any kind, including but not limited to patent
+license, nor is any license granted by implication, estoppel or otherwise.
+
+Contributors are required to enter into the IVAS codec Public Collaboration agreement before making
+contributions.
+
+This software is provided "AS IS", without any express or implied warranties. The software is in the
+development stage. It is intended exclusively for experts who have experience with such software and
+solely for the purpose of inspection. All implied warranties of non-infringement, merchantability
+and fitness for a particular purpose are hereby disclaimed and excluded.
+
+Any dispute, controversy or claim arising under or in relation to providing this software shall be
+submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in
+accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and
+the United Nations Convention on Contracts on the International Sales of Goods.
+"""
+
+import argparse
+
+import requests
+
+
+PER_PAGE_SUFFIX = "?per_page=50"
+PAGE_SUFFIX = "&page={}"
+API_URL_TMPL = "https://forge.3gpp.org/rep/api/v4/projects/{}/pipelines"
+SCOPE_FAILED = "&scope[]=failed"
+SCOPE_SUCCESS = "&scope[]=success"
+
+
+def get_job_id(branch_name, job_name, project_id, success_only):
+ job_id = -1
+ # check last 500 pipelines max
+ for page in range(100):
+ url_pls = API_URL_TMPL.format(project_id)
+
+ # need both suffixes here to descend through the pages and get also older pipelines
+ suffix = PER_PAGE_SUFFIX + PAGE_SUFFIX.format(page)
+ resp_pls = requests.get(url_pls + suffix)
+ for pl in resp_pls.json():
+ if pl["ref"] == branch_name:
+ url_args = PER_PAGE_SUFFIX
+
+ url_args += SCOPE_SUCCESS
+ if not success_only:
+ url_args += SCOPE_FAILED
+
+ url_jobs = url_pls + f"/{pl['id']}/jobs" + url_args
+
+ resp_jobs = requests.get(url_jobs)
+ if job_name not in resp_jobs.text:
+ continue
+
+ # find actual job by name, exclude timed out or stuck jobs
+ for job in resp_jobs.json():
+ name_matches = job["name"] == job_name
+ is_success = job["status"] == "success"
+ has_timed_out = job.get("failure_reason", "") == "stuck_or_timeout_failure"
+ if name_matches and (is_success or not has_timed_out):
+ job_id = job["id"]
+ break
+ if job_id >= 0:
+ break
+
+ if job_id >= 0:
+ break
+
+ return job_id
+
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser()
+ parser.add_argument("branch_name", help="Name of the branch to search on")
+ parser.add_argument("job_name", help="Name of the job to get the id of")
+ parser.add_argument("project_id", help="ID of project to search in", type=int)
+ parser.add_argument("--success_only", help="Only include jobs with status 'success'", action="store_true")
+
+ args = parser.parse_args()
+
+ job_id = get_job_id(args.branch_name, args.job_name, args.project_id, args.success_only)
+ print(job_id)
diff --git a/ci/index-pages.html b/ci/index-pages.html
new file mode 100644
index 0000000000000000000000000000000000000000..510e2031155ac1b2a2296b1066d29c37cb1344f7
--- /dev/null
+++ b/ci/index-pages.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+