1. 13 Sep, 2019 1 commit
  2. 10 Sep, 2019 1 commit
    • Seungha Yang's avatar
      msdk: Allow video and system memory share among buffers · d4112d3d
      Seungha Yang authored
      gst_buffer_make_writable() requires exclusive reference to the
      GstMemory so the _make_writable() for the msdk buffer will result
      to fallback system memory copy, because the msdk memory were initialized
      with GST_MEMORY_FLAG_NO_SHARE flag.
      
      Note that, disable sharing GstMemory brings high overhead but actually
      the msdk memory objects can be shared over multiple buffers.
      If the memory is not shareable, newly added GstAllocator::mem_copy will
      create copied msdk memory.
      d4112d3d
  3. 29 Jun, 2019 1 commit
  4. 25 Mar, 2019 1 commit
  5. 26 Nov, 2018 1 commit
  6. 01 Oct, 2018 1 commit
  7. 30 Mar, 2018 2 commits
  8. 13 Mar, 2018 2 commits
  9. 08 Mar, 2018 1 commit
    • Hyunjun Ko's avatar
      msdk: manage MSDK surfaces seperately · b08b8dda
      Hyunjun Ko authored
      Currently a gst buffer has one mfxFrameSurface when it's allocated and
      can't be changed.
      This is based on that the life of gst buffer and mfxFrameSurface would
      be same.
      But it's not true. Sometimes even if a gst buffer of a frame is finished
      on downstream,
      mfxFramesurface coupled with the gst buffer is still locked, which means
      it's still being used in the driver.
      
      So this patch does this.
      Every time a gst buffer is acquired from the pool, it confirms if the
      surface coupled with the buffer is unlocked.
      If not, replace it with new unlocked one.
      In this way, user(decoder or encoder) doesn't need to manage gst buffers
      including locked surface.
      
      To do that, this patch includes the following:
      1. GstMsdkContext
      - Manages MSDK surfaces available, used, locked respectively as the
      following:
        1\ surfaces_avail : surfaces which are free and unused anywhere
        2\ surfaces_used : surfaces coupled with a gst buffer and being used
      now.
        3\ surfaces_locked : surfaces still locked even after the gst buffer
      is released.
      
      - Provide an api to get MSDK surface available.
      - Provide an api to release MSDK surface.
      
      2. GstMsdkVideoMemory
      - Gets a surface available when it's allocated.
      - Provide an api to get an available surface with new unlocked one.
      - Provide an api to release surface in the msdk video memory.
      
      3. GstMsdkBufferPool
      - In acquire_buffer, every time a gst buffer is acquired, get new
      available surface from the list.
      - In release_buffer, it confirms if the buffer's surface is unlocked or
      not.
        - If unlocked, it is put to the available list.
        - If still locked, it is put to the locked list.
      
      This also fixes bug #793525.
      
      https://bugzilla.gnome.org/show_bug.cgi?id=793413
      https://bugzilla.gnome.org/show_bug.cgi?id=793525
      b08b8dda
  10. 13 Feb, 2018 2 commits