diff --git a/src/core/libraries/ajm/ajm.h b/src/core/libraries/ajm/ajm.h index f6dca8c2c..34aeb9aa4 100644 --- a/src/core/libraries/ajm/ajm.h +++ b/src/core/libraries/ajm/ajm.h @@ -76,6 +76,7 @@ union AjmJobFlags { enum class AjmStatisticsFlags : u64 { Memory = 1 << 0, + EnginePerCodec = 1 << 15, Engine = 1 << 16, }; DECLARE_ENUM_FLAG_OPERATORS(AjmStatisticsFlags) @@ -145,19 +146,25 @@ union AjmSidebandInitParameters { u8 reserved[8]; }; -typedef struct { +struct AjmSidebandStatisticsEngine { float usage_batch; float usage_interval[3]; -} AjmSidebandStatisticsEngine; +}; -typedef struct { +struct AjmSidebandStatisticsEnginePerCodec { + u8 codec_count; + u8 codec_id[3]; + float codec_percentage[3]; +}; + +struct AjmSidebandStatisticsMemory { u32 instance_free; u32 buffer_free; u32 batch_size; u32 input_size; u32 output_size; u32 small_size; -} AjmSidebandStatisticsMemory; +}; struct AjmSidebandStatisticsEngineParameters { u32 interval_count; diff --git a/src/core/libraries/ajm/ajm_batch.cpp b/src/core/libraries/ajm/ajm_batch.cpp index 222dff1ee..30e1deb71 100644 --- a/src/core/libraries/ajm/ajm_batch.cpp +++ b/src/core/libraries/ajm/ajm_batch.cpp @@ -183,6 +183,11 @@ AjmJob AjmStatisticsJobFromBatchBuffer(u32 instance_id, AjmBatchBuffer batch_buf job.output.p_engine = &output_batch.Consume(); *job.output.p_engine = AjmSidebandStatisticsEngine{}; } + if (True(flags.statistics_flags & AjmStatisticsFlags::EnginePerCodec)) { + job.output.p_engine_per_codec = + &output_batch.Consume(); + *job.output.p_engine_per_codec = AjmSidebandStatisticsEnginePerCodec{}; + } if (True(flags.statistics_flags & AjmStatisticsFlags::Memory)) { job.output.p_memory = &output_batch.Consume(); *job.output.p_memory = AjmSidebandStatisticsMemory{}; diff --git a/src/core/libraries/ajm/ajm_batch.h b/src/core/libraries/ajm/ajm_batch.h index c335af9c5..9ac9ef1a4 100644 --- a/src/core/libraries/ajm/ajm_batch.h +++ b/src/core/libraries/ajm/ajm_batch.h @@ -34,6 +34,7 @@ struct AjmJob { AjmSidebandStream* p_stream = nullptr; AjmSidebandFormat* p_format = nullptr; AjmSidebandStatisticsMemory* p_memory = nullptr; + AjmSidebandStatisticsEnginePerCodec* p_engine_per_codec = nullptr; AjmSidebandStatisticsEngine* p_engine = nullptr; AjmSidebandGaplessDecode* p_gapless_decode = nullptr; AjmSidebandMFrame* p_mframe = nullptr; diff --git a/src/core/libraries/ajm/ajm_instance_statistics.cpp b/src/core/libraries/ajm/ajm_instance_statistics.cpp index 45c5e594b..c0c1af8bb 100644 --- a/src/core/libraries/ajm/ajm_instance_statistics.cpp +++ b/src/core/libraries/ajm/ajm_instance_statistics.cpp @@ -14,6 +14,11 @@ void AjmInstanceStatistics::ExecuteJob(AjmJob& job) { job.output.p_engine->usage_interval[idx] = 0.01; } } + if (job.output.p_engine_per_codec) { + job.output.p_engine_per_codec->codec_count = 1; + job.output.p_engine_per_codec->codec_id[0] = static_cast(AjmCodecType::At9Dec); + job.output.p_engine_per_codec->codec_percentage[0] = 0.01; + } if (job.output.p_memory) { job.output.p_memory->instance_free = 0x400000; job.output.p_memory->buffer_free = 0x400000;