2014-09-04 2 views
2

Я ищу возможность конвертировать JPEG с 444 YCbCr в 422 YCbCr. Согласно RFC 2435 для потоковой передачи RTP файл JPEG должен иметь формат JPEG 422 YCbCr, причина 444 соответствует стандарту.Как преобразовать JPEG 444 YCbCr в 422 YCbCr

+0

Это, безусловно, можно написать код, чтобы сделать то, что вам нужно. Данные яркости могут передаваться без каких-либо изменений, но данные цветности должны быть декодированы, подвыборки и перекодировки (что приведет к некоторой потере качества). Вы ищете инструмент командной строки, библиотеку ссылок, код C? – BitBank

+0

Бедные преобразования людей, как я описал ниже, действительно будут работать, если DCT будет масштабироваться с одинаковыми коэффициентами размера, если бы не тогда таблицы Хаффмана, вероятно, также не соответствовали бы RFC, и, следовательно, вы были бы правы в таком случае. – Jay

+0

И на самом деле, пока размер DCT достаточно близко к оригиналу, это также будет работать ... – Jay

ответ

0

Чтобы сделать это, вы должны спустить образец, вы могли бы просто пропустить компонент на каждой плоскости цветности, чтобы достичь этого. (Потерять данные)

Существует несколько примеров кода здесь, который дает вам тэки о том, как выполняются сокращение https://github.com/rkrajnc/jpegdec/blob/master/sw/matlab/jpeg/jpeg_downsample.m

Кроме того, это будет работать только (с потерей данных), если были созданы коэффициенты Hufffman DCT с той же шкале, или достаточно близко к тому, что, как ожидается, в RFC ..

Вы могли бы просто оставить все так, как это для других в формате JPEG, но что это на самом деле сводится к тому, является обеспечение таблицы Хаффмана совместимы с теми в RFC, если они n Ot вам придется либо:

1)Реализовать некоторый тип использования TypeSpecific для обозначения HuffmanTables включены, не писать их при создании JFIF заголовков и включить их как есть непосредственно после любого ProfileHeaders ,

2)Реализовать некоторый тип использования TypeSpecific, чтобы указать, использовать известную альтернативную таблицу Хаффмана, на приемной стороне вместо того, чтобы писать нормальные таблицы Хаффмана, писать пользовательский.

Вариант 1 позволит VLC работать, поскольку он будет игнорировать поле TypeSpecific, используя данные в полезной нагрузке, в результате чего вы включаете ваши альтернативные таблицы Хаффмана. Этот метод также может быть принят, чтобы разрешить другие кодированные jpeg, кроме базового или прогрессивного, или любые маркеры, которые должны быть включены, но не поддерживаются стандартом RFC. (Например, этот метод также может быть принят для включения более двух таблиц квантования, первые 2 будут храниться в заголовке профиля, когда Quality> = 100, а последний будет сохранен после любого заголовка профиля DRI, если это применимо непосредственно в полезной нагрузке

(Хотя я думаю, что вы можете в настоящее время проверить более двух таблиц, выполнив деление на длину таблицы и соблюдая таблицу бит точности при декодировании, длина - это 16-битное поле, так что квантовые таблицы с длиной до 65535 байт действителен.)

Я недавно была добавлена ​​поддержка для этого в моей библиотеке, среди прочего, и заполненный опечаток для Rfc2435.

http://www.rfc-editor.org/errata_search.php?rfc=2435&rec_status=15&presentation=records

Разрешение использовать поле TypeSpecific в заголовке профиля, который в настоящее время не используется для описания каждого бита поля Привет, Vi через этот байт.

Там никогда не может быть более 5 компонентов в сканировании, 0 - 4.

Первый компонент уже был описан в поле Тип наряду с DRI и качеством.

Возможные перестановки значений 4,2,1,0.

0 не следует охарактеризовать как черно-белое достигается при отправке только одной таблицы, а 1: 1 уже поддерживается.

Мой источник изменений также можно найти в моей библиотеке по адресу https://net7mma.codeplex.com.

Смежные вопросы