There are actually two parts to this question:
How can the application be informed of a decoding error in mfw_vpudecoder?
And much more importantly, how to force mfw_vpuencoder to immediately send a new key frame (aka Intra-frame) ?
Background:
When transmitting video over an Internet connection, packets get lost. If this happens the decoder fails and you can get artefacts in the picture. This remains until the next key frame refreshes the whole picture, which can be many seconds. To speed this up protocols such as SIP/H.323 have a fast update mechanism, but this requires that we can force the decoder to send a new key frame. This clears up the corrupted picture as soon as possible, improving the user experience.
Hi Robert, this is what I think you can do:
1. You need a BUS (Chapter 7. Bus), this way the element can communicate messages to an app. In resume, Read the GStreamer Application Manual :smileyhappy:
2. For this feature, You may need to send an event to the pipeline, and this one has to be attended by the decoder, which in turn you can send the new key frame.
DaianeAngolini, do you think the key frame can be injected the way Robert mentioned?
Leo
Hi Leo, I don´t think it is implemented on the current source code, but I believe it may be implemented....
I have a pipeline, I have a bus on that pipeline.
Now, what's the message to be sent?
What's the event I should receive?
gst-inpect of the modules do not have any events indicated, which is worrying.
You need to create an application, using gstreamer/gobject/glib libraries. A pipeline is actually an object where you can attach to it a bus (another object); in turn, it has a switch statement all you need to specify which messages you are listening to.... About the message/event/signal types, I do not know, but this is the gstreamer way to communicate between application-pipeline (alias elements), there is no other way.
Leo