tipos texto sirve que power parrafo para las justificar interlineado cuatro alineaciones alineacion c++ ffmpeg

c++ - texto - ¿Qué significa ''alineación de líneas''?



tipos de alineacion en power point (3)

Mi práctica:

1 . Un problema desaprovechado de la imagen , reemplazo las funciones de imagen de AV con funciones AVFrame e imgutils . muestra de código:

//AVPicture _picture; AVFrame *_pictureFrame; uint8_t *_pictureFrameData;

...

//_pictureValid = avpicture_alloc(&_picture, // AV_PIX_FMT_RGB24, // _videoCodecCtx->width, // _videoCodecCtx->height) == 0; _pictureFrame = av_frame_alloc(); _pictureFrame->width = _videoCodecCtx->width; _pictureFrame->height = _videoCodecCtx->height; _pictureFrame->format = AV_PIX_FMT_RGB24; int size = av_image_get_buffer_size(_pictureFrame->format, _pictureFrame->width, _pictureFrame->height, 1); //dont forget to free _pictureFrameData at last _pictureFrameData = (uint8_t*)av_malloc(size); av_image_fill_arrays(_pictureFrame->data, _pictureFrame->linesize, _pictureFrameData, _pictureFrame->format, _pictureFrame->width, _pictureFrame->height, 1);

...

if (_pictureFrame) { av_free(_pictureFrame); if (_pictureFrameData) { free(_pictureFrameData); } }

Parámetro 2.align

Primero ajusto el alineamiento a 32 , pero para algunas transmisiones de video no funcionó, causó imágenes distorsionadas. Luego lo configuré en 16 ( mi entorno: mac, Xcode, iPhone6 ), algunas transmisiones funcionan bien. Pero al final fijé el alineamiento en 1 , porque encontré esto

Fill in the AVPicture fields, always assume a linesize alignment of 1.

Estoy siguiendo el tutorial de ffmpeg en http://dranger.com/ffmpeg/tutorial01.html .

Acabo de encontrar que la función avpicture_get_size está en desuso.

Así que he comprobado el documento de ffmpeg ( https://www.ffmpeg.org/doxygen/3.0/group__lavu__picture.html#ga24a67963c3ae0054a2a4bab35930e694 ) y av_image_get_buffer_size encontrado el sustituto av_image_get_buffer_size .

Pero no puedo entender align parámetro que significa ''alineación de líneas'' ......

¿Qué significa?


Algunas partes de FFmpeg, especialmente libavcodec, requieren líneas alineadas [], lo que significa que requiere:

assert(linesize[0] % 32 == 0); assert(linesize[1] % 32 == 0); assert(linesize[2] % 32 == 0);

Esto le permite utilizar rutinas SIMD rápidas / alineadas (por ejemplo, instrucciones movdqa o vmovdqa SSE2 / AVX2) para el acceso a datos en lugar de sus contrapartes desalineadas más lentas.

El parámetro de align a esta función av_image_get_buffer_size es esta alineación de línea, y la necesita porque el tamaño del búfer se ve afectado por ella. Por ejemplo, el tamaño de un plano Y en un búfer YUV no es en realidad ancho * alto, es tamaño lineal [0] * alto. Verá que (especialmente para tamaños de imagen que no son múltiplos de 16 o 32), a medida que aumenta la align a mayores potencias de 2, el valor de retorno aumenta lentamente.

En términos prácticos, si va a utilizar esta imagen como buffer de salida para llamadas a, por ejemplo, avcodec_decode_video2 , esto debería ser 32. Para swscale / avfilter, creo que no hay un requisito absoluto, pero se recomienda que siga siendo 32.


Si observa la definición de avpicture_get_size en la versión 3.2, verá el siguiente código:

int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height) { return av_image_get_buffer_size(pix_fmt, width, height, 1); }

Simplemente llama a la función sugerida: av_image_get_buffer_size con el parámetro align establecido en 1 . No fui más allá para descubrir el significado completo de por qué 1 se usa para la función depreciada. Como de costumbre con ffmpeg, uno probablemente puede resolverlo leyendo el código correcto y suficiente código (con algunos experimentos de código).