Тюнер Beholder TV Wander USB: настройка, проверка сигнала в режиме FM Radio


Спасибо саппорту Beholder за информацю.

Подразумевается, что граф построен и работает должным образом:



#include <objbase.h>
#include <uuids.h>
#include <strmif.h>
#include <amvideo.h>
#include <winnls.h>
#include <ks.h>
#include <ksmedia.h>

#define INSTANCEDATA_OF_PROPERTY_PTR(x) ((PKSPROPERTY((x))) + 1)
#define INSTANCEDATA_OF_PROPERTY_SIZE(x) (sizeof((x)) - sizeof(KSPROPERTY))

static const GUID KSPROPSETID_ANALOG_TUNER_API = {0xe73f292a, 0x5af3, 0x47c7, {0xbb, 0x55, 0x2c, 0x47, 0x4b, 0x99, 0x22, 0x96}};
typedef enum {
  KSPROPERTY_ID_TUNER_SCAN_MODE = 6,
  } KSPROPERTY_ADVANCED_TUNER_ID;


#pragma link "ksuser.lib"


//---------------------------------------------------------------------------
void __fastcall TFormMain::SetFreq(long freq)
{
IKsPropertySet *pKsBase,*pKsTuner;
KSPROPERTY_TUNER_FREQUENCY_S Frequency;
KSPROPERTY_TUNER_STATUS_S Status;
long val;
DWORD cbBytes;


// все проверки убраны для экономии места и более четкого понимания
// pBaseFilter: указатель на IBaseFilter графа
// pTVTuner: указатель на IAMTVTuner графа

pBaseFilter->QueryInterface(IID_IKsPropertySet, (void**) &pKsBase);
val=1; // перевод тюнера в режим сканирования
pKsBase->Set(KSPROPSETID_ANALOG_TUNER_API, KSPROPERTY_ID_TUNER_SCAN_MODE, NULL, 0, &val, sizeof(val));


// установка частоты
pTVTuner->QueryInterface(IID_IKsPropertySet, (void**)&pKsTuner);
memset(&Frequency,0,sizeof(KSPROPERTY_TUNER_FREQUENCY_S));
Frequency.Frequency=freq;
Frequency.TuningFlags=KS_TUNER_TUNING_EXACT;
pKsTuner->Set(PROPSETID_TUNER, KSPROPERTY_TUNER_FREQUENCY,
            INSTANCEDATA_OF_PROPERTY_PTR(&Frequency),
            INSTANCEDATA_OF_PROPERTY_SIZE(Frequency),
            &Frequency, sizeof(Frequency));


// другой вариант установки частоты:
//pTVTuner->AutoTune(freq, &FoundSignal);
// третий вариант:
//pTVTuner->put_Channel(freq, AMTUNER_SUBCHAN_DEFAULT,AMTUNER_SUBCHAN_DEFAULT);
// (все варианты работают)

// проверка наличия станции:
memset(&Status,0,sizeof(KSPROPERTY_TUNER_STATUS_S));
pKsTuner->Get(PROPSETID_TUNER,KSPROPERTY_TUNER_STATUS,
            INSTANCEDATA_OF_PROPERTY_PTR(&Status),
            INSTANCEDATA_OF_PROPERTY_SIZE(Status),
            &Status, sizeof(Status), &cbBytes);


// при наличии сигнала, Status.SignalStrenght установится в 100.

val=0; // выключение режима сканирования
pKsBase->Set(KSPROPSETID_ANALOG_TUNER_API, KSPROPERTY_ID_TUNER_SCAN_MODE, NULL, 0, &val, sizeof(val));

pKsBase->Release();
pKsTuner->Release();
}

//---------------------------------------------------------------------------

Сказанное относится, насколько я понял, только к USB тюнерам Beholder.

В начало


Сайт управляется системой uCoz