Текущее время: 01 май 2025, 19:13 • Часовой пояс: UTC + 3 часа |
Вопрос по наличии несущей
 |  |
Страница 1 из 1 |
[ Сообщений: 12 ] |
|
Автор | Сообщение |
Tolyan249
|
|
Зарегистрирован: 17 авг 2012, 07:26 Сообщения: 62
|
Здраствуйте написал программу для тв тюнера behold 607rds на delphi, через directshow ,все работает не могу получить наличие несущей при TV , подскажите как можно получить этот сигнал?
procedure urovennes; var PtvTuner:IAMTUNER; urovensignal:integer; begin ptvtuner.SignalPresent(urovensignal); end;
Возращает всегда -1,при ТВ,Радио отрабатывает нормально.
|
|
|
BTVSoft
|
|
Beholder |  |
Зарегистрирован: 19 авг 2004, 11:47 Сообщения: 190
|
IAMTVTuner - довольно грубая надстройка над Directshow фильтром.
Для нормальной работы : - граф должен обязательно содержать устройство захвата - нужно использовать интерфейс IKsPropertySet и получать/устанавливать параметры тюнера через него. Это прямой доступ. Для получения статуса используется Id KSPROPERTY_TUNER_STATUS. Там получите наличие несущей и оффсет до нее.
|
|
|
Tolyan249
|
|
Зарегистрирован: 17 авг 2012, 07:26 Сообщения: 62
|
Спасибо буду пробовать.
|
|
|
Tolyan249
|
|
Зарегистрирован: 17 авг 2012, 07:26 Сообщения: 62
|
Подскажите а как этот status получить. Я пробовал так но не получилось.
//STATUS Procedure TForm1.status; var PropertySet : IKSPropertySet; fMode : KSPROPERTY_TUNER_MODE_S; hr : HRESULT;
tvprop: IKSPropertySet; dwSupported,cbBytes: DWord; Fstatus:PKSPropertyTunerStatusS;
begin if SUCCEEDED(pTVTuner.QueryInterface(IID_IKSPropertySet,tvprop)) then begin
FillChar(fMCap, SizeOf(fMCap), #0); FillChar(Fstatus, SizeOf(fstatus), #0); fMCap.Mode := 1; //AMTUNER_MODE_TV;
hr := tvprop.QuerySupported(PROPSETID_TUNER, AMPROPERTY_PIN_CATEGORY, dwSupported); {hr-возращает 0}//тут нормально
if SUCCEEDED(hr) and (dwSupported = KSPROPERTY_SUPPORT_GET) then begin cbBytes := 0; hr := tvprop.Get(PROPSETID_TUNER, AMPROPERTY_PIN(KSPROPERTY_TUNER_STATUS), PKSPROPERTY(@fstatus), SizeOf(fstatus) {- SizeOf(PKSPROPERTY), fstatus, SizeOf(fstatus), cbBytes); end;
{hr-возращает -214789654}//tvprop.Get возращает -214789654,где то что то не // правильно написал или поставил.
if (hr)=0 then begin nesuhay:=0; nesuhay:=fstatus.SignalStrength; form1.Caption:=inttostr(nesuhay); end;
end; end;
|
|
|
Tolyan249
|
|
Зарегистрирован: 17 авг 2012, 07:26 Сообщения: 62
|
Спасибо вопрос решил так. Может кому пригодиться все работает.
procedure status; var PropertySet : IKSPropertySet; hr : HRESULT; dwSupported, cbBytes: DWord; Fstatus :KSPROPERTY_TUNER_STATUS_S;// PKSPropertyTunerStatusS; begin if SUCCEEDED(ptvTuner.QueryInterface(IID_IKSPropertySet, PropertySet)) then begin
ZeroMemory(@fstatus, sizeof(fstatus)); fstatus.Property_.Set_:=PROPSETID_TUNER;
sleep(100);
hr:= PropertySet.get(PROPSETID_TUNER, AMPROPERTY_PIN(KSPROPERTY_TUNER_STATUS), PKSPROPERTY(@fstatus), SizeOf(fstatus) - SizeOf(PKSPROPERTY), fstatus, SizeOf(fstatus),cbBytes);
nesuhay:=0; if hr=0 then begin nesuhay:=fstatus.SignalStrength; end;
end; end;
|
|
|
Tolyan249
|
|
Зарегистрирован: 17 авг 2012, 07:26 Сообщения: 62
|
А вопрос такой что за данные можно получить еще в status и что они обозначают fstatus.PLLOffset fstatus.Busy
и еще снимаю видео , с передатчика несущая есть, показывает что несущей нет, наличие видеосигнала я отслеживаю hr:= pAMAnalogVideoDecoder.get_HorizontalLocked(sinxrosignal); оно работает тоже (sinxrosignal равен 0) , а почему показывает что несущей нет при отстствии сигнала видео, не подскажете часом или тоже определяться несущая по синхросигналу в status?
|
|
|
BTVSoft
|
|
Beholder |  |
Зарегистрирован: 19 авг 2004, 11:47 Сообщения: 190
|
1) Пользуйтесь пожалуйста тэгом Code для оборачивания исходного текста. 2) Поле KSPROPERTY_TUNER_STATUS_S::Busy не используется. Иногда может быть использовано для отображения занятости тюнера при перестройке частоты (PLL Lock). Если KSPROPERTY_TUNER_STATUS_S::Busy != 0, полученный результат не валиден. Поле KSPROPERTY_TUNER_STATUS_S::PLLOffset используется и отображает отклонение до несущей. Отклонение выводится в дискретных единицах, каждая единица равна KSPROPERTY_TUNER_MODE_CAPS_S::ulTuningGranularity в герцах. Поле KSPROPERTY_TUNER_STATUS_S::PLLOffset валидно, если поле KSPROPERTY_TUNER_STATUS_S::SignalStrength != 0. Так как поле KSPROPERTY_TUNER_MODE_CAPS_S::Strategy вам вернет KS_TUNER_STRATEGY_PLL, то KSPROPERTY_TUNER_STATUS_S::SignalStrength лишь обозначает наличие несущей, но не будет отображать уровень сигнала. Поэтому, для поиска канала достаточно получать KSPROPERTY_TUNER_STATUS и по двум полям KSPROPERTY_TUNER_STATUS_S::SignalStrength, KSPROPERTY_TUNER_STATUS_S::PLLOffset определять наличие канала и его отклонение от несущей. 3) Наличие видеосигнала может определяться через IAMAnalogVideoDecoder::get_HorizontalLocked, а может и напрямую через KsPropertySet, Id=KSPROPERTY_VIDEODECODER_STATUS, поле KSPROPERTY_VIDEODECODER_STATUS_S::SignalLocked.
Для статуса тюнера в режиме TV, драйвер внутри также использует проверку наличия HSYNC на видеодекодере (для уменьшения вероятности ложного срабатывания), поэтому без видеосигнала статус тюнера в режиме ТВ не будет показывать несущую (например, если переключить кроссбар на внешний видеовход). Таким образом, для поиска каналов не обязательно проверять наличие HSYNC еще раз.
|
|
|
Tolyan249
|
|
Зарегистрирован: 17 авг 2012, 07:26 Сообщения: 62
|
Cпасибо огромное за разьяснения.
|
|
|
Tolyan249
|
|
Зарегистрирован: 17 авг 2012, 07:26 Сообщения: 62
|
Иеще вопрос по звуку по PCI , как увеличить громкость декодера, есть в родной вашей программе. я в своей программе хочу тоже сделать. Спасибо.
|
|
|
BTVSoft
|
|
Beholder |  |
Зарегистрирован: 19 авг 2004, 11:47 Сообщения: 190
|
После закрытия родного ПО, драйвер сбрасывает все параметры Аудио/видео декодера в значания, заданные по умолчанию.
Устройство видеозахвата имеет расширенную панель свойств, там доступны все аппаратные регулировки. Вы можете увидеть данную панель в Graphedit. Вы также можете открывать эту панель свойств в любой своей программе. Для этого нужно воспользоваться стандартным DirectShow интерфейсом ISpecifyPropertyPages. См. примеры в AmCap.
В данной панели свойств вы можете сами задать значения по умолчанию и сохранить их.
|
|
|
Tolyan249
|
|
Зарегистрирован: 17 авг 2012, 07:26 Сообщения: 62
|
Cпасибо вам огромное за помощь и ответы.
|
|
|
Tolyan249
|
|
Зарегистрирован: 17 авг 2012, 07:26 Сообщения: 62
|
Все нашел сделал спасибо. Вот код может кому пригодиться.
Procedure TForm1.VideoDecoderCaptureProperty; Var pSpec : ISpecifyPropertyPages; cauuid : TCAGUID; hr : HRESULT; pAMAnalogVideoDecoder : IAMAnalogVideoDecoder;
Begin hr := FVideoCaptureFilter.QueryInterface(IID_IAMAnalogVideoDecoder, pAMAnalogVideoDecoder); if (hr <> NOERROR) then raise Exception.Create('Unable create instance of IAMAnalogVideoDecoder');
hr := pAMAnalogVideoDecoder.QueryInterface(IID_ISpecifyPropertyPages,pSpec); if (hr = S_OK) Then Begin hr := pSpec.GetPages(cauuid); hr := OleCreatePropertyFrame(Form1.Handle, 30, 30, Nil, 1, @pAMAnalogVideoDecoder, cauuid.cElems, cauuid.pElems, 0, 0, Nil); CoTaskMemFree(cauuid.pElems); pSpec := Nil; End; End;
|
|
|
 |  |
Страница 1 из 1 |
[ Сообщений: 12 ] |
|
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0 |
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения
|
|