private JobMemory ScheduleYuvToRgbJob(List <Av1Frame> frames, int frameNumber) { var jobMemory = JobMemory.Rent(frames.Count, frameNumber); jobMemory.ScheduleJob(frames); return(jobMemory); }
void OnDestroy() { _rawTextures.ForEach(Object.Destroy); foreach (var ivfAv1Decoder in _ivfAv1Decoders) { ivfAv1Decoder?.Dispose(); } foreach (var jobMemory in _jobMemories) { jobMemory.jobHandle.Complete(); jobMemory.Dispose(); } JobMemory.DestroyPool(); }
public static JobMemory Rent(int frameCount, int frameNumber) { JobMemory jobMemory; if (Pool.Count > 0) { var index = Pool.Count - 1; jobMemory = Pool[index]; Pool.RemoveAt(index); } else { jobMemory = new JobMemory(frameCount); } jobMemory.frameNumber = frameNumber; return(jobMemory); }
private void UpdateTextureFromCompletedJob() { while (_jobMemories.Count > 0 && _jobMemories.Peek().jobHandle.IsCompleted&& _freeTextureQueue.Count > 0) { _stopwatch.Restart(); var jobMemory = _jobMemories.Dequeue(); jobMemory.jobHandle.Complete(); var texture = _freeTextureQueue.Dequeue(); texture.SetPixelData(jobMemory._rgbList, 0); texture.Apply(); _decodedQueue.Enqueue(texture); foreach (var ivfAv1Decoder in _ivfAv1Decoders) { ivfAv1Decoder.CheckConsumedFrameNumber(jobMemory.frameNumber); } JobMemory.Return(jobMemory); _stopwatch.Stop(); Debug.Log($"UpdateTextureFromCompletedJob 1 Cycle {_stopwatch.ElapsedMilliseconds}"); } }
public static void Return(JobMemory jobMemory) { Pool.Add(jobMemory); }