code: def process(self, frames, eod=False):
      self.eod = eod
      if eod:
          self.num_samples += frames.shape[0]
      else:
          self.num_samples += self.blocksize()
  
      buf = numpy_array_to_gst_buffer(
          frames, frames.shape[0], self.num_samples, self.samplerate()
      )
  
      self.src.emit("push-buffer", buf)
      if self.eod:
          self.src.emit("end-of-stream")
  
      return frames, eod
  
file_path: TimeSide/timeside/core/encoder.py
imports: from timeside.core import Processor, implements, interfacedoc, abstract
  from timeside.core.api import IEncoder
  from .tools.gstutils import numpy_array_to_gst_buffer, MainloopThread
  import gi
  from gi.repository import GLib, Gst
  import threading
label_desc: Use image node_id 9 for calling the GstEncoder obj's underlying member method code with example usage: obj.process(frames, eod) and returns: frames,  eod