0016-hack-h264enc-manually-force-keyframes.patch 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. From 9413f4c11e0a64501ef44e5a69b2080fa6fafaf4 Mon Sep 17 00:00:00 2001
  2. From: Felipe Contreras <felipe.contreras@nokia.com>
  3. Date: Fri, 23 Oct 2009 18:56:15 +0300
  4. Subject: [PATCH] hack: h264enc: manually force keyframes
  5. The algorithm should be doing that.
  6. Suggestions by Mikhail Zabaluev. Fixes by Thiago Santos.
  7. Signed-off-by: Felipe Contreras <felipe.contreras@nokia.com>
  8. ---
  9. gstdspvenc.c | 5 +++++
  10. gstdspvenc.h | 1 +
  11. 2 files changed, 6 insertions(+), 0 deletions(-)
  12. diff --git a/gstdspvenc.c b/gstdspvenc.c
  13. index a2506de..9196140 100644
  14. --- a/gstdspvenc.c
  15. +++ b/gstdspvenc.c
  16. @@ -578,7 +578,12 @@ h264venc_in_send_cb(GstDspBase *base,
  17. self->keyframe_event = NULL;
  18. }
  19. g_mutex_unlock(self->keyframe_mutex);
  20. + param->force_i_frame |= self->force_i_frame_counter >=
  21. + self->keyframe_interval * self->framerate;
  22. + if (param->force_i_frame)
  23. + self->force_i_frame_counter = 0;
  24. dmm_buffer_clean(p, sizeof(*param));
  25. + self->force_i_frame_counter++;
  26. }
  27. static inline gboolean
  28. diff --git a/gstdspvenc.h b/gstdspvenc.h
  29. index 0e17c15..fe8a6cb 100644
  30. --- a/gstdspvenc.h
  31. +++ b/gstdspvenc.h
  32. @@ -62,6 +62,7 @@ struct GstDspVEnc {
  33. GMutex *keyframe_mutex;
  34. gint mode;
  35. gint keyframe_interval;
  36. + gint force_i_frame_counter;
  37. };
  38. struct GstDspVEncClass {