{"record":{"id":"2f7fea35f96330fb","repo":"SubtitleEdit/subtitleedit","slug":"failed-to-create-software-render-context-geterro","errorCode":null,"errorMessage":"Failed to create software render context: {GetErrorString(err)}","messagePattern":"Failed to create software render context: (.+?)","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/ui/Logic/VideoPlayers/LibMpvDynamic/LibMpvDynamicPlayer.cs","lineNumber":1821,"sourceCode":"                new MpvRenderParam { type = MPV_RENDER_PARAM_INVALID, data = IntPtr.Zero }\n            };\n\n            var renderParamsSize = Marshal.SizeOf<MpvRenderParam>() * renderParams.Length;\n            var renderParamsPtr = Marshal.AllocHGlobal(renderParamsSize);\n\n            try\n            {\n                for (var i = 0; i < renderParams.Length; i++)\n                {\n                    var offset = renderParamsPtr + (i * Marshal.SizeOf<MpvRenderParam>());\n                    Marshal.StructureToPtr(renderParams[i], offset, false);\n                }\n\n                // Create render context\n                err = _mpvRenderContextCreate(out _renderContext, _mpv, renderParamsPtr);\n                if (err < 0)\n                {\n                    throw new InvalidOperationException($\"Failed to create software render context: {GetErrorString(err)}\");\n                }\n\n                // Set update callback\n                _renderUpdateCallback = OnRenderUpdate;\n                var callbackPtr = Marshal.GetFunctionPointerForDelegate(_renderUpdateCallback);\n                _mpvRenderContextSetUpdateCallback(_renderContext, callbackPtr, IntPtr.Zero);\n            }\n            finally\n            {\n                Marshal.FreeHGlobal(renderParamsPtr);\n            }\n        }\n        finally\n        {\n            Marshal.FreeHGlobal(apiTypePtr);\n        }\n    }\n","sourceCodeStart":1803,"sourceCodeEnd":1839,"githubUrl":"https://github.com/SubtitleEdit/subtitleedit/blob/17a9f0748781032255db3526b7215d2fb891e3af/src/ui/Logic/VideoPlayers/LibMpvDynamic/LibMpvDynamicPlayer.cs#L1803-L1839","documentation":"InvalidOperationException: mpv_render_context_create returned a negative code for the MPV_RENDER_API_TYPE_SW parameters. The mpv core initialized successfully but could not create a software render context.","triggerScenarios":"A libmpv build compiled without software-render support, an SW render API type unsupported by the loaded build, a GPU-only libmpv, or an MpvRenderParam struct layout mismatch across ABI versions.","commonSituations":"Minimal or embedded libmpv builds, or a version skew where the marshalled MpvRenderParam layout no longer matches the linked library.","solutions":["Use a libmpv build that supports software rendering.","Fall back to a GPU vo render context when software context creation fails.","Verify the MpvRenderParam marshalling matches the linked libmpv's ABI."],"exampleFix":"// before\nerr = _mpvRenderContextCreate(out _renderContext, _mpv, renderParamsPtr);\nif (err < 0) throw new InvalidOperationException($\"Failed to create software render context: {GetErrorString(err)}\");\n\n// after\nerr = _mpvRenderContextCreate(out _renderContext, _mpv, renderParamsPtr);\nif (err < 0)\n{\n    logger.LogWarning(\"software render context unavailable: {Msg}\", GetErrorString(err));\n    await SwitchToGpuVoAsync();\n}","handlingStrategy":"try-catch","validationCode":"if (!LibMpvSupportsSoftwareRender())\n{\n    logger.LogWarning(\"libmpv has no SW render; using GPU vo\");\n    SwitchToGpuVo();\n    return;\n}","typeGuard":null,"tryCatchPattern":"try { player.InitializeWithSoftwareRendering(); }\ncatch (InvalidOperationException ex) when (ex.Message.Contains(\"software render context\"))\n{\n    logger.LogWarning(\"{Msg}; falling back to GPU vo\", ex.Message);\n    await SwitchToGpuVoAsync();\n}","preventionTips":["Bundle a full libmpv build that supports software rendering.","Offer a GPU-vo fallback when SW context creation fails.","Verify the MpvRenderParam marshalling matches the linked ABI."],"tags":["mpv","rendering","native","software","abi"],"backgroundTag":null,"analyzedSha":"17a9f0748781032255db3526b7215d2fb891e3af","analyzedAt":"2026-08-13T18:11:43.374Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}