Пример #1
0
/**
 	Energy changed handler
 */
void Filter_EnergyChanged(Message message) {
	MessageEnergyChanged* m;
	m = (MessageEnergyChanged*) message;
	
	if (m->over_threshold) {
		DEBUG_FILTER(("[FILTER] VOICE_ACTIVITY_ON\n"));
		voice_activity = VOICE_ACTIVITY_ON;
	} else {
 		DEBUG_FILTER(("[FILTER] VOICE_ACTIVITY_OFF\n"));
		voice_activity = VOICE_ACTIVITY_OFF;
	}
	set_filter();
}
Пример #2
0
/* cpp_filter_inject */
static int _cpp_filter_inject(int * c, void * data)
{
	CppParser * cp = data;
	size_t len;
	int d;

	if(cp->inject == NULL)
		return 0;
	DEBUG_FILTER();
	if((len = strlen(cp->inject)) > 0)
	{
		d = *c;
		*c = cp->inject[0];
		memmove(cp->inject, &cp->inject[1], len--);
		if(cp->inject_first && d != EOF && d != '\0')
		{
			cp->inject[len++] = d;
			cp->inject[len] = '\0';
			cp->inject_first = 0;
		}
	}
	if(len > 0)
		return 1;
	free(cp->inject);
	cp->inject = NULL;
	return 0;
}
Пример #3
0
/**
 	Switch Off the wind noise filter
 */
void Filter_Off(void) 
{
	DEBUG_FILTER(("[FILTER] OFF\n"));
	CodecSetIIRFilterA(FALSE, theHeadset.conf->filter.coefficients);
	CodecSetIIRFilterB(FALSE, theHeadset.conf->filter.coefficients);
	
	EnergyEstimationOff(theHeadset.sco_sink);
}
Пример #4
0
/**
 	Switch On the wind noise filter
 */
void Filter_On(void) 
{
	DEBUG_FILTER(("[FILTER] ON\n"));
	
	MessageSinkTask(theHeadset.sco_sink, &theHeadset.task);
	voice_activity = VOICE_ACTIVITY_OFF;
	set_filter();
}
Пример #5
0
bool CPluginFilter::AddFilterElementHide(std::wstring filterText)
{
  DEBUG_FILTER(L"Input: " + filterText + L" filterFile" + filterFile);
  CriticalSection::Lock filterEngineLock(s_criticalSectionFilterMap);
  {
    // Create filter descriptor
    std::auto_ptr<CFilterElementHide> filter;
    wchar_t separatorChar;
    do
    {
      auto chunkEnd = filterText.find_first_of(L"+>");
      if (chunkEnd != std::wstring::npos && chunkEnd > 0)
      {
        separatorChar = filterText[chunkEnd];
      }
      else
      {
        chunkEnd = filterText.length();
        separatorChar = L'\0';
      }

      std::auto_ptr<CFilterElementHide> filterParent(filter);
      filter.reset(new CFilterElementHide(TrimStringRight(filterText.substr(0, chunkEnd))));
      if (filterParent.get() != 0)
      {
        filter->m_predecessor.reset(filterParent.release());
      }

      if (separatorChar != L'\0') // complex selector
      {
        filterText = TrimStringLeft(filterText.substr(chunkEnd + 1));
        if (separatorChar == '+')
          filter->m_type = CFilterElementHide::TRAVERSER_TYPE_IMMEDIATE;
        else if (separatorChar == '>')
          filter->m_type = CFilterElementHide::TRAVERSER_TYPE_PARENT;
      }
      else // Terminating element (simple selector)
      {
        if (!filter->m_tagId.empty())
        {
          m_elementHideTagsId.insert(std::make_pair(std::make_pair(filter->m_tag, filter->m_tagId), *filter));
        }
        else if (!filter->m_tagClassName.empty())
        {
          m_elementHideTagsClass.insert(std::make_pair(std::make_pair(filter->m_tag, filter->m_tagClassName), *filter));
        }
        else
        {
          m_elementHideTags.insert(std::make_pair(filter->m_tag, *filter));
        }
      }
    } while (separatorChar != '\0');
  }

  return true;
}
Пример #6
0
CFilterElementHide::CFilterElementHide(const CString& filterText) : m_filterText(filterText), m_type(ETraverserComplexType::TRAVERSER_TYPE_ERROR)
{
  // Find tag name, class or any (*)
  CString filterString = filterText;

  wchar_t firstTag = filterString.GetAt(0);
  // Any tag
  if (firstTag == '*')
  {
    filterString = filterString.Mid(1);
  }
  // Any tag (implicitely)
  else if (firstTag == '[' || firstTag == '.' || firstTag == '#')
  {
  }
  // Real tag
  else if (isalnum(firstTag))
  {
    //TODO: Add support for descendant selectors
    int pos = filterString.FindOneOf(L".#[(");

    if (pos < 0)
      pos = filterString.GetLength();
    m_tag = filterString.Left(pos).MakeLower();

    filterString = filterString.Mid(pos);
  }
  // Error
  else
  {
    DEBUG_FILTER("Filter::Error parsing selector:" + filterText + " (invalid tag)");
    throw std::runtime_error(CStringA("Filter::Error parsing selector:" + filterText + " (invalid tag)").GetString());
  }

  // Find Id and class name

  if (!filterString.IsEmpty())
  {
    wchar_t firstId = filterString.GetAt(0);

    // Id
    if (firstId == '#')
    {
      int pos = filterString.Find('[');
      if (pos < 0)
      {
        pos = filterString.GetLength();
      }
      m_tagId = filterString.Mid(1, pos - 1);
      filterString = filterString.Mid(pos);
      pos = m_tagId.Find(L".");
      if (pos > 0)
      {
        m_tagClassName = m_tagId.Mid(pos + 1);
        m_tagId = m_tagId.Left(pos);
      }
    }
    // Class name
    else if (firstId == '.')
    {
      int pos = filterString.Find('[');
      if (pos < 0)
      {
        pos = filterString.GetLength();
      }
      m_tagClassName = filterString.Mid(1, pos - 1);
      filterString = filterString.Mid(pos);
    }
  }

  char chAttrStart = '[';
  char chAttrEnd   = ']';

  while (!filterString.IsEmpty())
  {
    if (filterString.GetAt(0) != chAttrStart)
    {
      DEBUG_FILTER("Filter::Error parsing selector:" + filterText + " (more data)");
      throw std::runtime_error(CStringA("Filter::Error parsing selector:" + filterText + " (more data)").GetString());
    }
    int endPos = filterString.Find(']') ;
    if (endPos < 0)
    {
      DEBUG_FILTER("Filter::Error parsing selector:" + filterText + " (more data)");
      throw std::runtime_error(CStringA("Filter::Error parsing selector:" + filterText + " (more data)").GetString());
    }
        
    CFilterElementHideAttrSelector attrSelector;

    CString arg = filterString.Mid(1, endPos - 1);
    filterString = filterString.Mid(endPos + 1);

    int delimiterPos = arg.Find('=');
    if (delimiterPos > 0)
    {
      attrSelector.m_value = arg.Mid(delimiterPos + 1);
      if (attrSelector.m_value.GetLength() >= 2 && attrSelector.m_value.GetAt(0) == '\"' && attrSelector.m_value.GetAt(attrSelector.m_value.GetLength() - 1) == '\"')
      {
        attrSelector.m_value = attrSelector.m_value.Mid(1, attrSelector.m_value.GetLength() - 2);
      }

      if (arg.GetAt(delimiterPos - 1) == '^')
      {
        attrSelector.m_bstrAttr = arg.Left(delimiterPos - 1);
        attrSelector.m_pos = CFilterElementHideAttrPos::STARTING;
      }
      else if (arg.GetAt(delimiterPos - 1) == '*')
      {
        attrSelector.m_bstrAttr = arg.Left(delimiterPos - 1);
        attrSelector.m_pos = CFilterElementHideAttrPos::ANYWHERE;
      }
      else if (arg.GetAt(delimiterPos - 1) == '$')
      {
        attrSelector.m_bstrAttr = arg.Left(delimiterPos - 1);
        attrSelector.m_pos = CFilterElementHideAttrPos::ENDING;
      }
      else
      {
        attrSelector.m_bstrAttr = arg.Left(delimiterPos);
        attrSelector.m_pos = CFilterElementHideAttrPos::EXACT;
      }
    }
    CString tag = attrSelector.m_bstrAttr;
    if (tag == "style")
    {
      attrSelector.m_type = CFilterElementHideAttrType::STYLE;
      attrSelector.m_value.MakeLower();
    }
    else if (tag == "id")
    {
      attrSelector.m_type = CFilterElementHideAttrType::ID;
    }
    else if (tag == "class")
    {
      attrSelector.m_type = CFilterElementHideAttrType::CLASS;
    }
    m_attributeSelectors.push_back(attrSelector);

  }

  // End check
  if (!filterString.IsEmpty())
  {
    DEBUG_FILTER("Filter::Error parsing selector:" + filterFile + "/" + filterText + " (more data)")
    throw new std::runtime_error(CStringA("Filter::Error parsing selector:"  + filterText + " (more data)").GetString());
  }
}
Пример #7
0
bool CPluginFilter::AddFilterElementHide(CString filterText)
{
  DEBUG_FILTER("Input: " + filterText + " filterFile" + filterFile);
  CriticalSection::Lock filterEngineLock(s_criticalSectionFilterMap);
  {
    CString filterString  = filterText;
    // Create filter descriptor
    std::auto_ptr<CFilterElementHide> filter;

    CString wholeFilterString = filterString;
    wchar_t separatorChar;
    do
    {
      int chunkEnd = filterText.FindOneOf(L"+>");
      if (chunkEnd > 0)
      {
        separatorChar = filterText.GetAt(chunkEnd);
      }
      else
      {
        chunkEnd = filterText.GetLength();
        separatorChar = L'\0';
      }

      CString filterChunk = filterText.Left(chunkEnd).TrimRight();
      std::auto_ptr<CFilterElementHide> filterParent(filter);

      filter.reset(new CFilterElementHide(filterChunk));

      if (filterParent.get() != 0)
      {
        filter->m_predecessor.reset(filterParent.release());
      }

      if (separatorChar != L'\0') // complex selector
      {
        filterText = filterText.Mid(chunkEnd + 1).TrimLeft();
        if (separatorChar == '+')
          filter->m_type = CFilterElementHide::TRAVERSER_TYPE_IMMEDIATE;
        else if (separatorChar == '>')
          filter->m_type = CFilterElementHide::TRAVERSER_TYPE_PARENT;
      }
      else // Terminating element (simple selector)
      {
        if (!filter->m_tagId.IsEmpty())
        {
          m_elementHideTagsId.insert(std::make_pair(std::make_pair(filter->m_tag, filter->m_tagId), *filter));
        }
        else if (!filter->m_tagClassName.IsEmpty())
        {
          m_elementHideTagsClass.insert(std::make_pair(std::make_pair(filter->m_tag, filter->m_tagClassName), *filter));
        }
        else
        {
          std::pair<CString, CFilterElementHide> pair = std::make_pair(filter->m_tag, *filter);
          m_elementHideTags.insert(pair);
        }
      }
    } while (separatorChar != '\0');
  }

  return true;
}