Текущее время: 28 мар 2024, 21:10 • Часовой пояс: UTC + 3 часа
Сообщения без ответов | Активные темы

Вопрос по наличии несущей

Начать новую темуОтветить на тему Страница 1 из 1 [ Сообщений: 12 ]
Версия для печати Пред. тема | След. тема
АвторСообщение
Сообщение Добавлено: 17 авг 2012, 07:36. Заголовок сообщения:  Вопрос по наличии несущей
Зарегистрирован:
    17 авг 2012, 07:26
Сообщения: 62
Здраствуйте написал программу для тв тюнера behold 607rds на delphi, через directshow ,все работает не могу получить наличие несущей при TV , подскажите как можно получить этот сигнал?

procedure urovennes;
var
PtvTuner:IAMTUNER;
urovensignal:integer;
begin
ptvtuner.SignalPresent(urovensignal);
end;

Возращает всегда -1,при ТВ,Радио отрабатывает нормально.
Профиль 
Сообщение Добавлено: 17 авг 2012, 10:47. Заголовок сообщения:  Re: Вопрос по наличии несущей
Beholder
Аватара пользователя
Зарегистрирован:
    19 авг 2004, 11:47
Сообщения: 190
IAMTVTuner - довольно грубая надстройка над Directshow фильтром.

Для нормальной работы :
- граф должен обязательно содержать устройство захвата
- нужно использовать интерфейс IKsPropertySet и получать/устанавливать параметры тюнера через него. Это прямой доступ. Для получения статуса используется Id KSPROPERTY_TUNER_STATUS. Там получите наличие несущей и оффсет до нее.
Профиль 
Сообщение Добавлено: 18 авг 2012, 09:30. Заголовок сообщения:  Re: Вопрос по наличии несущей
Зарегистрирован:
    17 авг 2012, 07:26
Сообщения: 62
Спасибо буду пробовать.
Профиль 
Сообщение Добавлено: 18 авг 2012, 09:39. Заголовок сообщения:  Re: Вопрос по наличии несущей
Зарегистрирован:
    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;
Профиль 
Сообщение Добавлено: 18 авг 2012, 13:11. Заголовок сообщения:  Re: Вопрос по наличии несущей
Зарегистрирован:
    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;
Профиль 
Сообщение Добавлено: 18 авг 2012, 15:51. Заголовок сообщения:  Re: Вопрос по наличии несущей
Зарегистрирован:
    17 авг 2012, 07:26
Сообщения: 62
А вопрос такой что за данные можно получить еще в status и что они обозначают
fstatus.PLLOffset
fstatus.Busy


и еще снимаю видео , с передатчика несущая есть, показывает что несущей нет,
наличие видеосигнала я отслеживаю
hr:= pAMAnalogVideoDecoder.get_HorizontalLocked(sinxrosignal);
оно работает тоже (sinxrosignal равен 0) , а почему показывает что несущей нет при отстствии сигнала видео, не подскажете часом или тоже определяться несущая по синхросигналу в status?
Профиль 
Сообщение Добавлено: 20 авг 2012, 11:42. Заголовок сообщения:  Re: Вопрос по наличии несущей
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 еще раз.
Профиль 
Сообщение Добавлено: 21 авг 2012, 16:14. Заголовок сообщения:  Re: Вопрос по наличии несущей
Зарегистрирован:
    17 авг 2012, 07:26
Сообщения: 62
Cпасибо огромное за разьяснения.
Профиль 
Сообщение Добавлено: 29 авг 2012, 04:54. Заголовок сообщения:  Re: Вопрос по наличии несущей
Зарегистрирован:
    17 авг 2012, 07:26
Сообщения: 62
Иеще вопрос по звуку по PCI , как увеличить громкость декодера, есть в родной вашей программе. я в своей программе хочу тоже сделать. Спасибо.
Профиль 
Сообщение Добавлено: 31 авг 2012, 12:00. Заголовок сообщения:  Re: Вопрос по наличии несущей
Beholder
Аватара пользователя
Зарегистрирован:
    19 авг 2004, 11:47
Сообщения: 190
После закрытия родного ПО, драйвер сбрасывает все параметры Аудио/видео декодера в значания, заданные по умолчанию.

Устройство видеозахвата имеет расширенную панель свойств, там доступны все аппаратные регулировки. Вы можете увидеть данную панель в Graphedit. Вы также можете открывать эту панель свойств в любой своей программе. Для этого нужно воспользоваться стандартным DirectShow интерфейсом ISpecifyPropertyPages. См. примеры в AmCap.

В данной панели свойств вы можете сами задать значения по умолчанию и сохранить их.
Профиль 
Сообщение Добавлено: 08 сен 2012, 14:10. Заголовок сообщения:  Re: Вопрос по наличии несущей
Зарегистрирован:
    17 авг 2012, 07:26
Сообщения: 62
Cпасибо вам огромное за помощь и ответы.
Профиль 
Сообщение Добавлено: 09 сен 2012, 04:49. Заголовок сообщения:  Re: Вопрос по наличии несущей
Зарегистрирован:
    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 ]  
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения
Найти:  
Перейти: