Steve Macintosh
Member
Hey!
So I've been reading the OBS Studio sources the past few days, trying to get a grasp of it all and to get somewhat comfortable with the code base. So far so good (and if I may say, it's such a huge improvement to the OBS source), almost everything is straight forward for me at this point.
Now for me personally OBS Studio has just about everything that OBS Classic offered me but there is one thing lacking in both Classic and Studio that I want, namely an OSD of recording/stream status. A quick trial of DXtory made me extra aware of this as their latest OSD information actually is quite brilliant. I saw a couple of threads here and there about this feature request, and if I understand correctly it's something Jim wanted to add but basically it not being prioritised because of more important or more pressing issues/features to bring OBS Studio in parity with OBS Classic. That's fine and all and totally understandable, but so I thought, hey... it's open source after all and I have my sheer years of developing, nothing is stopping me from implementing it myself.
Now first of all, is anybody actually working actively on implementing this? For me personally, I would see it as a fun project to do, but if somebody else is already putting in work on it I see no reason to reinvent the wheel and would rather help there if needed.
If nobody else is working on this:
Assuming nobody else is already working on it, at least not actively, I mainly wanted to create this thread to connect with those of you who already actively contribute to OBS before I get started. While my main focus is to implement this for my own personal use I would prefer implementing it in such a way that it's in accordance with how you generally implement new functionality and in such a way that it later stands a bigger chance of surviving review and being accepted into the main branch. So part reason of why I'm creating this thread is to connect to you, whoever you are, that might already have thought about this to a great extent, or have the details planned out just waiting for some spare time to actually implement it. Or maybe you just have great insight into the OBS Studio architecture and can chime in on how you envision new functionality like this should be implemented. (and no need to point out obvious things such as coding style etc, and the "how" being more in general terms / patterns / where to put things rather than code specific)
Questions/Points of discussion:
* How modular do you envision this to be? My initial thoughts have been to extend the win-capture plugin and add this functionality. Or to ensure multiplatform compability, the actual hook specific code to be in win-capture for windows and things like settings/etc to be seperated. Do you think that is acceptable? If not, what would be your preferred way?
* Do you see functionality like this being a part of the core, or would you rather see extended functionality in core allowing for modules/plugins to do this if they so want? (while I'm not personally against exposing this to modules, as there can be many innovative usages of this, I personally see this as a core feature)
My goals for first version / PoC:
* Implementation will be for Windows only. And more specifically, for the Game Capture source.
* I plan to start with D3D9 as a proof of concept and then move my way up as I go, adding support for all the DX/OGL hooks.
* Initial functionality will be as simple as possible, first proof of concept being the ability to see that you're recording and an FPS counter.
* After PoC functionality is done I want to post it back to the community for some feedback/thoughts on the implementation to enable me to do revisions or refactoring.
Assuming everything progresses smoothly these are the features that I would like to see implemented in a final version:
* Settings for the OSD to customize what information you want on the OSD.
* Settings for the OSD to customize what colors to be used for a specific threshold (I'm thinking OK/WARNING/ERROR-thresholds here)
* Settings for the OSD where you can specify where on the screen the OSD should be rendered. (I'm thinking something simple here: top left, top right, bottom left and bottom right)
* Available OSD information to be displayed: recording status, streaming status, CPU usage, GPU usage, memory usage, HDD usage, record/stream duration, file size, FPS.
* Option to show "bottleneck warnings" on OSD: "How many lagged frames", "How many skipped frames", "How many dropped frames". Simply put, I want to make the streamer/recorder aware of this while recording/streaming instead of afterwards.
Now last but not least, I know this functionality in particular can be perceived as advanced, while I don't have extensive experience with C/C++ I do have over 10 years of professional developing experience and another 10 or so as a hobbyist, and for better or worse I'm fully self-taught. I'm a fast learner and can do my own own research without somebody holding my hand. More importantly I have the desire and ambition to see this through and I do like a challenge. I'm also aware that my lack of real world C/C++ experience probably will result in a stupid solution or two but I put faith into the community correcting me and generally improving my code should that happen.
Sorry for the long post, but I wanted to get most of my initial thoughts and pointers of discussions that I've been thinking about these past few days down in text before going any further. So any thoughts, insights or ideas, in whatever size or shape they might come, are much appreciated!
So I've been reading the OBS Studio sources the past few days, trying to get a grasp of it all and to get somewhat comfortable with the code base. So far so good (and if I may say, it's such a huge improvement to the OBS source), almost everything is straight forward for me at this point.
Now for me personally OBS Studio has just about everything that OBS Classic offered me but there is one thing lacking in both Classic and Studio that I want, namely an OSD of recording/stream status. A quick trial of DXtory made me extra aware of this as their latest OSD information actually is quite brilliant. I saw a couple of threads here and there about this feature request, and if I understand correctly it's something Jim wanted to add but basically it not being prioritised because of more important or more pressing issues/features to bring OBS Studio in parity with OBS Classic. That's fine and all and totally understandable, but so I thought, hey... it's open source after all and I have my sheer years of developing, nothing is stopping me from implementing it myself.
Now first of all, is anybody actually working actively on implementing this? For me personally, I would see it as a fun project to do, but if somebody else is already putting in work on it I see no reason to reinvent the wheel and would rather help there if needed.
If nobody else is working on this:
Assuming nobody else is already working on it, at least not actively, I mainly wanted to create this thread to connect with those of you who already actively contribute to OBS before I get started. While my main focus is to implement this for my own personal use I would prefer implementing it in such a way that it's in accordance with how you generally implement new functionality and in such a way that it later stands a bigger chance of surviving review and being accepted into the main branch. So part reason of why I'm creating this thread is to connect to you, whoever you are, that might already have thought about this to a great extent, or have the details planned out just waiting for some spare time to actually implement it. Or maybe you just have great insight into the OBS Studio architecture and can chime in on how you envision new functionality like this should be implemented. (and no need to point out obvious things such as coding style etc, and the "how" being more in general terms / patterns / where to put things rather than code specific)
Questions/Points of discussion:
* How modular do you envision this to be? My initial thoughts have been to extend the win-capture plugin and add this functionality. Or to ensure multiplatform compability, the actual hook specific code to be in win-capture for windows and things like settings/etc to be seperated. Do you think that is acceptable? If not, what would be your preferred way?
* Do you see functionality like this being a part of the core, or would you rather see extended functionality in core allowing for modules/plugins to do this if they so want? (while I'm not personally against exposing this to modules, as there can be many innovative usages of this, I personally see this as a core feature)
My goals for first version / PoC:
* Implementation will be for Windows only. And more specifically, for the Game Capture source.
* I plan to start with D3D9 as a proof of concept and then move my way up as I go, adding support for all the DX/OGL hooks.
* Initial functionality will be as simple as possible, first proof of concept being the ability to see that you're recording and an FPS counter.
* After PoC functionality is done I want to post it back to the community for some feedback/thoughts on the implementation to enable me to do revisions or refactoring.
Assuming everything progresses smoothly these are the features that I would like to see implemented in a final version:
* Settings for the OSD to customize what information you want on the OSD.
* Settings for the OSD to customize what colors to be used for a specific threshold (I'm thinking OK/WARNING/ERROR-thresholds here)
* Settings for the OSD where you can specify where on the screen the OSD should be rendered. (I'm thinking something simple here: top left, top right, bottom left and bottom right)
* Available OSD information to be displayed: recording status, streaming status, CPU usage, GPU usage, memory usage, HDD usage, record/stream duration, file size, FPS.
* Option to show "bottleneck warnings" on OSD: "How many lagged frames", "How many skipped frames", "How many dropped frames". Simply put, I want to make the streamer/recorder aware of this while recording/streaming instead of afterwards.
Now last but not least, I know this functionality in particular can be perceived as advanced, while I don't have extensive experience with C/C++ I do have over 10 years of professional developing experience and another 10 or so as a hobbyist, and for better or worse I'm fully self-taught. I'm a fast learner and can do my own own research without somebody holding my hand. More importantly I have the desire and ambition to see this through and I do like a challenge. I'm also aware that my lack of real world C/C++ experience probably will result in a stupid solution or two but I put faith into the community correcting me and generally improving my code should that happen.
Sorry for the long post, but I wanted to get most of my initial thoughts and pointers of discussions that I've been thinking about these past few days down in text before going any further. So any thoughts, insights or ideas, in whatever size or shape they might come, are much appreciated!