проверка возможностей декодирования тюнера DVB-T

Чтобы получить вывод команды, вам нужно как-то его прочитать. typeзаписывает это на стандартный вывод. И нам нужно как-то получить это и передать команде [.

$(...)использует для этого трубу. Но для канала вам нужен процесс записи и чтения, поэтому вам придется разветвить процесс даже для запуска встроенной команды. Вы можете попробовать чтение и запись в канал в одном и том же процессе, но это обычно склонно к взаимоблокировкам, поскольку запись может блокироваться, если никто не читает (, хотя вам нужно, чтобы буфер канала был заполнен, чтобы это произошло, что маловероятно для type). ].

Вы можете сделать это с помощью оболочки yash, которая имеет необработанный интерфейс кpipe():

{
  type echo >&3
  echo 3>&- # close the writing end so the reader can see an eof
  IFS= read -r answer <&4
} 3>>|4

Выше вы получите взаимоблокировку, если вывод typeбудет больше, чем размер буфера конвейера (64 КБ по умолчанию в современных версиях Linux ).

С помощью bashвы всегда можете:

type -t echo > file
IFS= read -rd '' type < file
if [ "$type" = builtin ]...

Но хотя это позволяет избежать подоболочки, это означает засорение файловой системы этим file.

Здесь type— встроенная функция. Его вывод генерируется оболочкой, и это правда, что кажется немного глупым необходимость разветвлять процесс, чтобы иметь возможность использовать этот вывод в оболочке.

Некоторые оболочки(ksh93иfish)реализуют здесь некоторые оптимизации. В своих$(type echo)((type echo)вfish)они фактически имитируют запись вывода и его чтение (. FreeBSD shтакже делает это для одиночных встроенных вызовов (, например typeздесь )). Когда встроенный стандартный вывод является подстановкой команды, вместо записи выводаоболочка просто добавляет выходной текст -будет -к результату подстановки команды, и нет необходимости в форке.

На самом деле fish(type echo)больше похож на ksh93${ type echo;}тем, что даже не создает подоболочку. С помощью $(...)ksh93эмулирует среду подоболочки, так что создается впечатление, что дочерний процесс был разветвлен для интерпретации кода в ней, и не делает этого для своего варианта ${...;}.

ksh93$ a=1
ksh93$ echo "$(a=2; type echo) $a"
echo is a shell builtin 1
ksh93$ echo "${ a=3; type echo;} $a"
echo is a shell builtin 3

fish> set a 1
fish> echo (set a 2; type echo) $a
echo is a builtin 2

Вы обнаружите, что в некоторых оболочках, не использующих эту оптимизацию, многие встроенные функции могут вызываться таким образом, что вместо записи результата они сохраняют его в переменной.

Наиболее очевидными из них являются стандартные readи getopts, которые по умолчанию делают (вы делаете IFS= read -r varвместоvar=$(line)). bashи zshтакже имеют printf -v variable format args. zshможет сделать то же самое для своих stat, strftime... встроенных функций.

Некоторые оболочки также делают некоторую информацию уже доступной автоматически в некоторых специальных переменных, таких как ksh$SECONDSи $RANDOM, найденных в нескольких других оболочках (и стандартных, таких как $-,$#(эквивалентно fish(count $argv), например )).

В zshэто обобщено для большей части внутренней информации оболочки, поэтому вам почти никогда не нужно использовать подстановку команд в выводе встроенной команды. Например, у него есть ассоциативные массивы для списка встроенных функций, ключевых слов, команд...

if (($+builtins[echo])); then
  echo echo is a builtin
fi
0
06.02.2020, 07:48
1 ответ

dvb-fe-tool— это инструмент для мониторинга и управления передним -концом устройства DVB, например. выбор режима DVB -T/DVB -T2/DVB -C, если применимо, и проверка параметров модуляции низкого -уровня.

Аппаратное декодирование MPEG4 выполняется позже, вне внешнего -конечного компонента, после демультиплексирования транспортного потока DVB (TS )для выбора конкретного программного потока (PS )и видеопотока. (видео PES )внутри него. Как только демультиплексор выбрал нужный видеопоток MPEG4 из транспортного потока, его можно передать аппаратному декодеру, если он доступен.

Вам следует проверить, существуют ли какие-либо /dev/dvb/adapter*/video*устройства. -Если нет, то ваш DVB-адаптер вообще не имеет возможностей аппаратного декодирования MPEG. На обычных ПК функции аппаратного декодирования MPEG4 чаще всего можно найти в графическом процессоре.поэтому наличие их в тюнере DVB обычно было бы бесполезным дублированием функций.

Кроме того, передача более компактного потока данных MPEG4 на графический процессор для отображения требует гораздо меньшей пропускной способности системной шины, чем передача полностью декодированных растровых изображений.

1
28.04.2021, 23:24

Теги

Похожие вопросы