2014-10-17 3 views
0

Я использую MediaCodec для декодирования видео и использования sws_scale (из ffmpeg), чтобы перемасштабировать его. Я могу иметь дело с одним специальным цветовым форматом, например. YUV420P, и перетащите его в размер назначения. Но я должен выполнить некоторую подготовительную работу, такую ​​как получение lineize и memcpy выходного буфера на три равных фрагмента (данные [0], данные [1], данные [2]). Формат цветового разрешения декодера зависит от разных устройств . Если я получаю colorformat, существует ли способ в ffmpeg, чтобы автоматически масштабировать его без специального обращения (конечно, формат цвета должен поддерживаться ffmpeg)?Как масштабировать изображение YUV с выхода MediaCodec в любом цветовом формате?

ответ

1

В swscale/libavutil нет функции для непосредственного использования цветового формата OMX (MediaCodec), вам необходимо отображать форматы вручную. Но вам не нужно memcpy выходного буфера в три отдельных буфера, вы можете просто установить три данных данных указателей [0], данных [1] и данных [2], чтобы указать в буфер вывода из MediaCodec (одна и та же точка в буфере, из которого вы в противном случае могли бы получить memcpied from).

Нормальные цветовые форматы (такие как YUV420P и NV12) должны работать нормально, вам просто нужно настроить отображение между константами формата. Но некоторые декодеры MediaCodec (в частности, Qualcomm) часто используют проприетарный формат с черепицей, который требует гораздо больше усилий для разборки, а swscale не поддерживает эту функцию напрямую, вам нужно самостоятельно ее расшифровать.

+0

Спасибо, mstorsjo.Yes, я знаю, мне нужно сопоставить цветной формат MediaCodec с pix_fmt в ffmpeg. Кроме того, я должен установить указатели данных и обработать указатели данных dest.If это можно сделать автоматически, передав pix_fmt, это будет очень замечательно. Потому что слишком много форматов, с которыми нужно иметь дело. Я нахожу, что lineize, который может быть передан av_image_alloc, может иметь некоторую помощь, но размер другой арифтации (отношение с высотой) также зависит от разных pix_fmt. Есть ли у вас предложения? –

0

Это просто интуитивное предложение, основанное на моем опыте с OMX на малине Pi, но вы можете проверить, предоставляет ли библиотека Stagefright любые OMX-интерфейсы C/C++ для NDK - в этом случае, если нет только компонент декодера, но также и компонент изменения размера (Raspberry Pi имеет такой component), тогда вы можете создать конвейер OMX, а затем компоненты могут автоматически согласовывать форматы, но это всего лишь предположение, я никогда не смотрел так глубоко в Stagefright сам, и я знаю, что он предназначен для использования с уровня Java через MediaCodec и других классов, но все же вы можете посмотреть. Если у Stagefright есть такой API, я могу предоставить некоторый код оболочки OMX, который облегчит использование компонентов, которые я сделал для Raspberry Pi, поскольку создание кода OMX с нуля - это довольно много работы.

EDIT

Я еще немного прибегая к помощи по этому вопросу, так как это казалось interresting и нашел средства массовой NDK sample - ну, кажется, что реализация Broadcom из ОМХ сильно отличается, так что до сих пор большинство вещей будет нужно построенный из ловушки. Можете ли вы объяснить немного больше, почему вам нужно это делать? Если целью было только отображение декодированного потока, вы могли бы установить поверхность предварительного просмотра на уровне Java, поэтому я предполагаю, что пурпура декодирования - это нечто другое.

+0

Спасибо, Rudolfs.I прежде, чем рассмотреть использование Stagefright, но я просто не знаю, как начать свою работу. Сначала ему нужно построить код Stagefright под платформой Android. Во-вторых, ему нужно изучить API. И что мы хотим сделать это работа для разработчиков Android dev. Вы согласны с этим? Поэтому я отказываюсь от этой мысли. –

+0

Можете ли вы объяснить немного больше, почему вам нужно перемасштабировать? Что вы планируете делать с декодированным видео? –

+0

Потому что я хочу перекодировать видеофайл с меньшим битрейтом и размером для upload.So я использую MediaCodec, но он не может изменить размер напрямую. –

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

  • Нет связанных вопросов^_^