コード例 #1
0
ファイル: gstvbisrc.c プロジェクト: LjsOks1/KOTELES_ROGZITES
static GstFlowReturn 
gst_vbisrc_create(GstPushSrc *psrc, GstBuffer **buf)
{
  Gstvbisrc *vbisrc = GST_VBISRC_CAST(psrc);
  GstFlowReturn ret;
  GstMapInfo info;
  fd_set rd;
  int res;
  struct timeval timeout;
  int vbi_fd=vbi_capture_fd(vbisrc->pVbiCapt);
  vbi_capture_buffer *pVbiBuf;
  vbi_sliced *pVbiData;
  GstBuffer *outbuf;
  uint lineCount;
  uint line;
  
  FD_ZERO(&rd);
  FD_SET(vbi_fd,&rd);
  select(vbi_fd +1 ,&rd , NULL, NULL, NULL);
  if (FD_ISSET(vbi_fd,&rd))
  {
    timeout.tv_sec = 0;
    timeout.tv_usec = 1000;
    res = vbi_capture_pull_sliced(vbisrc->pVbiCapt,&pVbiBuf,&timeout);
    if (res>0 && pVbiBuf !=NULL)
    {
      lineCount = ((unsigned int)pVbiBuf->size)/sizeof(vbi_sliced);
      pVbiData = pVbiBuf->data;
      GST_LOG_OBJECT(vbisrc,"Having %d lines in buffer",lineCount);
      for (line=0; line<lineCount; line++ ) {
        if((pVbiData[line].id & (VBI_SLICED_TELETEXT_B))!=0) {
           GST_LOG_OBJECT(vbisrc,"SLICED_TELETEXT found in line %d",pVbiData[line].line);
        }
      }
      ret=GST_BASE_SRC_CLASS(parent_class) -> alloc (GST_BASE_SRC_CAST(vbisrc),
               -1,pVbiBuf->size,&outbuf);
      gst_buffer_map(outbuf,&info,GST_MAP_WRITE);
      memcpy(info.data,(guint8*)pVbiBuf->data,pVbiBuf->size);
      gst_buffer_unmap(outbuf,&info);
      *buf=GST_BUFFER_CAST(outbuf);
      GST_LOG_OBJECT (vbisrc,"Buffer pushed with size: %d", pVbiBuf->size);

     return ret;     
    }
  }
  return GST_FLOW_ERROR;
}
コード例 #2
0
ファイル: vbi.c プロジェクト: orewatakesi/VLC-for-VS2010
int GetFdVBI (vlc_v4l2_vbi_t *vbi)
{
    return vbi_capture_fd(vbi->cap);
}
コード例 #3
0
ファイル: vbi.c プロジェクト: orewatakesi/VLC-for-VS2010
void CloseVBI (vlc_v4l2_vbi_t *vbi)
{
    close (vbi_capture_fd (vbi->cap));
    vbi_capture_delete (vbi->cap);
    free (vbi);
}