Re: ProgDVB и ASTROMETA-DVB-T2/T/C USB TUNER

#46
f2065 wrote:Однако ведь конкуренты (DVBdream) как-то научились PLP переключать, причём автоматически при поиске.
Ну значит разобрались с вызовами AMDVBT2.dll или инфу от астрометы по сему поводу получили. Пишите им, запрашивайте инфу и Prog прикрутит.

Re: ProgDVB и ASTROMETA-DVB-T2/T/C USB TUNER

#47
crazycat wrote:Ну значит разобрались с вызовами AMDVBT2.dll или инфу от астрометы по сему поводу получили. Пишите им, запрашивайте инфу и Prog прикрутит.
Ну а самостоятельно, нельзя разобраться? OllyDbg использовать?

У них работа действительно завязана на AMDVBT2.dll…

AMDVB_GetPLPInfo(_PLPINFO *)
AMDVB_GetReceiverMode(AMDVB_RECEIVER_MODE *)
AMDVB_SetPLPInfo(_PLPINFO *)
AMDVB_SetReceiverMode(AMDVB_RECEIVER_MODE)
Там кстати только 3 первых функции использованы, но видимо это не совсем правильно - потому что без первоначального запуска родного софта - приёма нет. Что-то видимо не инициализируется. Хотя вот ProgDVB - этим не страдает.

ReceiverMode очевидно оперирует байтом, судя по коду в дллке… Значение 0x3 особенное, похоже там и на Set и на Get имеет значение - либо 0x3 либо не 0x3
В родном софте передаются значения от 0 до 3. Можно методом тыка разобраться что это такое (приделав временные кнопки 0-1-2-3-4-5 и посмотрев на результаты всего этого).

AMDVB_SetPLPInfo…
Реально в родном софте структура видимо такая (занимает 12 байт):
struct PLPINFO
{
BYTE arg1;
BYTE arg2;
WORD arg3;
DWORD arg4;
DWORD arg5;
};
arg3,arg4,arg5 всегда обнуляются.
arg1 и arg2 - какое-то значение. И видимо это PLP и есть. В родном софте как раз около каналов написано по 2 одинаковые цифры например «04 НТВ(0,0)» или «07 РОССИЯ-24(2,2)». Думаю что с этим всё понятно…

Re: ProgDVB и ASTROMETA-DVB-T2/T/C USB TUNER

#48
Короче, у меня получилось!!!
ProgDVB нашёл «07 РОССИЯ-24», который в PLP-2.

я набросал утилитку для вызова AMDVB_GetReceiverMode, AMDVB_SetReceiverMode, AMDVB_GetPLPInfo, AMDVB_SetPLPInfo…
AMDVBT2_test1.rar
(4.51 KiB) Downloaded 113 times
заполнил PLPINFO как выше предполагал:
byte 2, byte 2, word 0, dword 0, dword 0.
И стал постоянно вызывать AMDVB_SetPLPInfo во время ручного скана в ProgDVB - и он увидел Россию-24!
Однако, ProgDVB видимо переинизиализирует всё это, поэтому в режиме просмотра финт не удался - PLP постоянно сваливается на 0,0

При GetPLPInfo остальные поля в PLPINFO на всех каналах одинаковые:
arg3 = 0x103
arg4 = 0x5010101
arg5 = 0x3000604
вероятно какой-то резерв или мусор.
arg1,arg2 = там соответственно 0,0 1,1 2,2 - по номеру PLP.

Но главный вывод - тут не надо раскапывать какое-то сложное взаимодействие всей этот DLL с остальной работой. PLP переключается легко и просто.

Имена функций в AMDVBT2.dll таковы:
"?AMDVB_GetPLPInfo@@YAHPAU_PLPINFO@@@Z"
"?AMDVB_GetReceiverMode@@YAHPAW4AMDVB_RECEIVER_MODE@@@Z"
"?AMDVB_SetPLPInfo@@YAHPAU_PLPINFO@@@Z"
"?AMDVB_SetReceiverMode@@YAHW4AMDVB_RECEIVER_MODE@@@Z"

Правда придётся таскать с собой всю эту DLL. Вероятно, надо куда-то в плагины вынести, не всем же пользователям оно в папке с ProgDVB надо.

AMDVB_GetReceiverMode всегда возвращает 2 (кладёт по указанному адресу, сама функция возвращает 1). И аналоговое ТВ, и ФМ радио, всегда 2. Не понятно вобщем что это такое.
AMDVB_SetReceiverMode ничего не происходит, и возвращает 0 (очевидно, отказ в выполнении).

Теперь достаточно инфы чтобы приделать поддержку астрометы в ProgDVB ?

Re: ProgDVB и ASTROMETA-DVB-T2/T/C USB TUNER

#49
Пришли мне AMDVBT2_test1 и dll на email пожалуйсто.

У меня в коде Astrometa модуля

hr = m_pKsTunerPropSet->Get(KSPROPSETID_AMDVB_Ter,KSPROPERTY_AMDVB_PLPINFO,NULL, 0,pPlpInfo, sizeof(AMDVB_PLPINFO),&dwReturned);

m_pKsTunerPropSet->Set(KSPROPSETID_AMDVB_Ter,KSPROPERTY_AMDVB_PLPINFO,NULL, 0,pPlpInfo, sizeof(AMDVB_PLPINFO));

Может они всё же работают а plp поломан где то раньше, в логике сканера например?

Re: ProgDVB и ASTROMETA-DVB-T2/T/C USB TUNER

#50
Prog wrote:Пришли мне AMDVBT2_test1 и dll на email пожалуйсто.
Отправил.
Prog wrote:У меня в коде Astrometa модуля

hr = m_pKsTunerPropSet->Get(KSPROPSETID_AMDVB_Ter,KSPROPERTY_AMDVB_PLPINFO,NULL, 0,pPlpInfo, sizeof(AMDVB_PLPINFO),&dwReturned);

m_pKsTunerPropSet->Set(KSPROPSETID_AMDVB_Ter,KSPROPERTY_AMDVB_PLPINFO,NULL, 0,pPlpInfo, sizeof(AMDVB_PLPINFO));
Надо может в лог детально это писать, посмотреть возвращается ли ошибка. И что вообще в структуре оказывается, на входе и выходе.

AMDVBT2.dll передаёт запросы в "ASTROMETA DTV Filter", но в AMDVBT2.dll огромное кол-во всякого мусора в коде, поэтому вытащить саму логику переключения сходу не получается…
Prog wrote:Может они всё же работают а plp поломан где то раньше, в логике сканера например?
Ну, с бехолдером в ручном режиме ведь PLP удаётся поставить, а с астрометой - нет.
Скорее всего через BDA переключения PLP у астрометы не реализовали.

Re: ProgDVB и ASTROMETA-DVB-T2/T/C USB TUNER

#51
Оказалось что если сначала не вызвать GetReceiverMode, то остальные вызовы SetReceiverMode, Get/SetPLPInfo обламывались (в логе было failed).

Пробуй исправленный субмодуль Astrometa.eBDA (32-битный, если надо 64-бит соберу). По прежнему не дореализован опрос доступных PLP, если конечно GetPLPInfo для этого предназначен (а не опроса текущего). Вообщем в логе будет подробности.
Attachments
Astrometa.rar
(33.1 KiB) Downloaded 83 times

Re: ProgDVB и ASTROMETA-DVB-T2/T/C USB TUNER

#52
f2065 wrote:AMDVBT2.dll передаёт запросы в "ASTROMETA DTV Filter", но в AMDVBT2.dll огромное кол-во всякого мусора в коде, поэтому вытащить саму логику переключения сходу не получается…
COM-вызовы к расширениям тюнер-фильтра. Это все я расчехлил и соотв. было реимплементировано в Astrometa.eBDA.
f2065 wrote:Ну, с бехолдером в ручном режиме ведь PLP удаётся поставить, а с астрометой - нет.
Скорее всего через BDA переключения PLP у астрометы не реализовали.
Это и ежу понятно :)

Re: ProgDVB и ASTROMETA-DVB-T2/T/C USB TUNER

#53
crazycat wrote:Пробуй исправленный субмодуль Astrometa.eBDA
Работает! Каналы Россия-1, Россия-24 настроил, показывает нормально. Радио тоже нормально.
crazycat wrote:По прежнему не дореализован опрос доступных PLP, если конечно GetPLPInfo для этого предназначен (а не опроса текущего).
Похоже что доступные PLP через него не видно - во время работы родного софта исследовал его, ответы таковы:

любой канал из 1 мультиплекса в PLP0
arg0: 0
arg1: 0
arg2: 259 (0x103)
arg3: 83951872 (0x05010100)
arg4: 50333188 (0x03000604)

канал в PLP1 (россия-2)
arg0: 1
arg1: 1
arg3: 83951873 (0x05010101)

канал в PLP2 (россия-24)
arg0: 2
arg1: 2
arg3: 83951874 (0x05010102)

любой канал 2 мультиплекса (нету plp)
arg0: 0
arg1: 0
arg2: 258 (0x102)
arg3: 83951872 (0x05010100)
arg4: 50333188 (0x03000604)

любой канал 3 мультиплекса (нету plp)
arg0: 0
arg1: 0
arg2: 257 (0x101)
arg3: 83951872 (0x05010100)
arg4: 50333188 (0x03000604)

любой канал из кодированного мультиплекса DVB-T1 (нету plp)
arg0: 0
arg1: 1
arg2: 1
arg3: 184549376 (0x0B000000)
arg4: 50333447 (0x03000707)


GetReceiverMode пишет 1 при канале DVB-T1, и 2 на всех остальных каналах которые DVB-T2.
Вероятно это режим DVB-T1/T2, и 3 наверно будет в DVB-C…

crazycat wrote:Вообщем в логе будет подробности.
23:18:27.280 - Tuner mode 2
23:18:32.340 - Set mode 2 - ok

И вероятно вот из-за этого ProgDVB в упор не видит 4 мультиплекс поскольку он в DVB-T1.
Родной софт его видит… Каналы правда всё равно там шифрованые, но есть ведь местности где в DVB-T1 есть нормальное вещание. Надо бы это тоже починить…

Re: ProgDVB и ASTROMETA-DVB-T2/T/C USB TUNER

#55
crazycat wrote:согласен, надо mode 0 чтоб автоматом лочило T/T2
Вообще не работает. Ни автопоиск, ни вручную. Ни DVB-T2, ни DVB-T1.

23:51:06.853 - ScannerManager::OnSwitchEngineTransport
23:51:08.524 - After SetTransponder.......................
23:51:08.538 -
23:51:08.539 - Init transponter scan. ScanTrasponderParseTS - 498Mhz mis/plp=0
23:51:08.540 - Open SDT Parser
23:51:08.543 - Open NIT Parser
23:51:08.544 - Open PAT Parser
23:51:11.113 - Not locked and not IPTV. Skiped!
23:51:11.114 - Close PAT Parser
23:51:11.114 - PAT scanner not complited! Skiped!
23:51:11.116 - Close SDT Parser
23:51:11.117 - Close NIT Parser
23:51:11.118 - Scaning done. Error (0 channels)
23:51:11.119 -
23:51:11.587 - ScannerManager::OnSwitchEngineTransport
23:51:13.248 - After SetTransponder.......................



23:53:13.114 - ScannerManager::OnSwitchEngineTransport
23:53:15.288 -
23:53:15.288 - Init transponter scan. ScanTrasponderParseTS - 498Mhz mis/plp=0
23:53:15.291 - Open SDT Parser
23:53:15.294 - Open NIT Parser
23:53:15.296 - Open PAT Parser
23:53:17.867 - !GetSignalState. Skiped!
23:53:17.869 - Close PAT Parser
23:53:17.870 - PAT scanner not complited! Skiped!
23:53:17.873 - Close SDT Parser
23:53:17.875 - Close NIT Parser
23:53:17.876 - Scaning done. Error (0 channels)
23:53:17.877 -
23:53:17.877 - Scanner finished
23:53:17.878 - SetTransponder time : 0. 0 s.
23:53:17.879 - Sleep time : 0. 0 s.
23:53:17.879 - Scan time : 0. 0 s.
23:53:17.880 - State time : 0. 0 s.
23:53:17.881 - Scan time : 2. 0 s.
23:53:17.881 -
23:53:34.395 - ScannerManager::OnSwitchEngineTransport
23:53:36.565 -
23:53:36.565 - Init transponter scan. ScanTrasponderParseTS - 562Mhz mis/plp=0
23:53:36.567 - Open SDT Parser
23:53:36.569 - Open NIT Parser
23:53:36.570 - Open PAT Parser
23:53:39.140 - !GetSignalState. Skiped!
23:53:39.142 - Close PAT Parser
23:53:39.142 - PAT scanner not complited! Skiped!
23:53:39.146 - Close SDT Parser
23:53:39.148 - Close NIT Parser
23:53:39.152 - Scaning done. Error (0 channels)
23:53:39.153 -
23:53:39.154 - Scanner finished
23:53:39.155 - SetTransponder time : 0. 0 s.
23:53:39.156 - Sleep time : 0. 0 s.
23:53:39.157 - Scan time : 0. 0 s.
23:53:39.158 - State time : 0. 0 s.
23:53:39.159 - Scan time : 2. 0 s.
23:53:39.160 -

вернул предыдущую версию Astrometa.eBDA - DVB-T2 заработал…


в логе про PLP вот только один раз:
23:59:14.784 - GetMisInfo
23:59:14.790 - PlpInfo: 0 0 1 1 0 1 1 5 4 6 0 3
причём, судя по времени - это 2 мультиплекс был, на котором вообще нет MPLP.
а для 1 мультиплекса с MPLP - в логе ничего сказано не было…

Re: ProgDVB и ASTROMETA-DVB-T2/T/C USB TUNER

#56
crazycat wrote:согласен, надо mode 0 чтоб автоматом лочило T/T2
Непрерывный опрос GetReceiverMode показал что оригинальный софт просто два раза подряд каждую частоту проверяет - в режиме 2 и в режиме 1… Очевидно автодетекта как такового нет, автодетект реализовывать придётся на уровне софта.
Можно это как-то приделать в ProgDVB ? Или опцию ручного выбора T1/T2 ?

Кстати а может они и PLP так же ищут?… Наугад перебирают…

Re: ProgDVB и ASTROMETA-DVB-T2/T/C USB TUNER

#57
to f2065
как бальзамно видеть человека, который втыкает двум дятлам. Спасибо тебе, большое человеческое. Я знал, что дятлы, но не мог доказать. Ты-красавчик! Ты-мой герой!
[size=50] Железо: IP Q G2020@2.9, HD7770, 8 RAM, AMD audio, Yamaha RX-V465, LG 42LA790V, Prof 7300,7301, Tevii s470, TBS 6922se. Софт: W7x64, ProgDVBx32. Настройки: prog demux, audio-AC3Filter, WASAPI, video-Custom EVR, Cyberlink13 [/size]

Re: ProgDVB и ASTROMETA-DVB-T2/T/C USB TUNER

#58
f2065 wrote:в логе про PLP вот только один раз:
23:59:14.784 - GetMisInfo
23:59:14.790 - PlpInfo: 0 0 1 1 0 1 1 5 4 6 0 3
причём, судя по времени - это 2 мультиплекс был, на котором вообще нет MPLP.
а для 1 мультиплекса с MPLP - в логе ничего сказано не было…
Оно вызываетьcя при ручном сканировании когда сначала залочить, а потом включить галочку "фильтр multistream" и кнопку "найти".

Во втором мультиплексе кстати два PLP (0,1), только во втором ничего нет :)

Re: ProgDVB и ASTROMETA-DVB-T2/T/C USB TUNER

#59
f2065 wrote:Непрерывный опрос GetReceiverMode показал что оригинальный софт просто два раза подряд каждую частоту проверяет - в режиме 2 и в режиме 1… Очевидно автодетекта как такового нет, автодетект реализовывать придётся на уровне софта.
Можно это как-то приделать в ProgDVB ? Или опцию ручного выбора T1/T2 ?
На уровне движка и списка каналов есть возможность задать модуляцию, только для DVB-T и T2 они пересакаються. Могу разве что костыль на уровне субмодуля сделать чтоб лочило в режиме T2 если выбрана модуляцию 64 и 256QAM.
f2065 wrote:Кстати а может они и PLP так же ищут?… Наугад перебирают…
В этом можно не сомневаться, так как дебилы :)

Re: ProgDVB и ASTROMETA-DVB-T2/T/C USB TUNER

#60
V.Zhukoff wrote:как бальзамно видеть человека, который втыкает двум дятлам. Спасибо тебе, большое человеческое. Я знал, что дятлы, но не мог доказать. Ты-красавчик! Ты-мой герой!
Дятлы сделали вещание в multi PLP без common PLP :) А другие "ускоглазые бакланы лапчатые" под это подстраиваться как могут (чтоб особо не перелопачивать структуру существующего софт). Это касаеться и ресиверов с телевизерами.