darkyp
16th June 2008, 18:35
Hello everyone,
I've just recently started using x264 for a non-stop realtime recording system. I'm using it currently through the x264vfw (tried ffdshow as well) as the system's working under MS Win XP OS. So far I've used XviD mostly because of x264 higher cpu usage and realtime requirements. Now I have a better cpu and modified the my software a bit so that it uses x264 as well. Have to say that I was greatly impressed bye the quality / bitrate (file size) ratio.
To everyone of the developers - thanks for making this available as an open source project!
Now, some questions from me. Basically I have a MS DShow graph with capture - my filter - x264 - avi mux - filewriter. If I try to deliver samples to x264 from a different thread an exception is thrown from the x264 address space. This occurs both using x264vfw and ffdshow vfw. When using XviD this will not occur.
My second question, that I found out has been asked a couple of times here though with no definite answer is: is it possible to force a given frame to be an IDR (real Keyframe) when being sent to the encoder? With XviD I found out my own way of doing it and it is working properly. The necessity of having this functionality for me is that at every half an hour or one hour (precisely +/- 2 or 3 frames) I have to start creating a new AVI file - thus it should start with a key frame; morover I do not stop the capture (encoding) graph - I simply change to which file writer graph the frames should go - thus no missing frames between consecutive AVI files.
So far I've tried changing the i_keyint_min before sending a sample hoping to fall into this part of the encoder.c code:
else if( i_gop_size >= h->param.i_keyint_min )
Well it is a working solution but not quite stable as my changes are not synchronized in any way with x264 code and sometime exceptions occur (I suppose due to multithreading and unsychronized access).
Something interesting as well for those still fighting VFW and directshow - it is not possible (at least I think so) to use IAMVideoCompressDialogs.SetState to apply vfw codec settings. In order to do it I did quite a research and found no answers. Finally reversed (disasm) a bit qcap.dll just to find that every time one calls SetState, MS opens the driver, sends the message and then closes the driver!? What do we set these settings using SetState then? If anyone's interested, I'll post my solution to this problem.
Hope I will find a solution to my keyframe problem here as well.
Thanks!
I've just recently started using x264 for a non-stop realtime recording system. I'm using it currently through the x264vfw (tried ffdshow as well) as the system's working under MS Win XP OS. So far I've used XviD mostly because of x264 higher cpu usage and realtime requirements. Now I have a better cpu and modified the my software a bit so that it uses x264 as well. Have to say that I was greatly impressed bye the quality / bitrate (file size) ratio.
To everyone of the developers - thanks for making this available as an open source project!
Now, some questions from me. Basically I have a MS DShow graph with capture - my filter - x264 - avi mux - filewriter. If I try to deliver samples to x264 from a different thread an exception is thrown from the x264 address space. This occurs both using x264vfw and ffdshow vfw. When using XviD this will not occur.
My second question, that I found out has been asked a couple of times here though with no definite answer is: is it possible to force a given frame to be an IDR (real Keyframe) when being sent to the encoder? With XviD I found out my own way of doing it and it is working properly. The necessity of having this functionality for me is that at every half an hour or one hour (precisely +/- 2 or 3 frames) I have to start creating a new AVI file - thus it should start with a key frame; morover I do not stop the capture (encoding) graph - I simply change to which file writer graph the frames should go - thus no missing frames between consecutive AVI files.
So far I've tried changing the i_keyint_min before sending a sample hoping to fall into this part of the encoder.c code:
else if( i_gop_size >= h->param.i_keyint_min )
Well it is a working solution but not quite stable as my changes are not synchronized in any way with x264 code and sometime exceptions occur (I suppose due to multithreading and unsychronized access).
Something interesting as well for those still fighting VFW and directshow - it is not possible (at least I think so) to use IAMVideoCompressDialogs.SetState to apply vfw codec settings. In order to do it I did quite a research and found no answers. Finally reversed (disasm) a bit qcap.dll just to find that every time one calls SetState, MS opens the driver, sends the message and then closes the driver!? What do we set these settings using SetState then? If anyone's interested, I'll post my solution to this problem.
Hope I will find a solution to my keyframe problem here as well.
Thanks!