sws_scale genera un video deformado.
Tengo que codificar una serie de frames de CAIROFORMATARGB32 a AVPIXFMTYUV420P con swsscale. Según la documentación de ffmpeg, sé que el formato de origen equivalente en AV es AVPIXFMT_ARGB, así que aquí está mi código:
// Configuración del contexto de conversión
img->sws_ctx = sws_getCachedContext(
img->sws_ctx,
img->video_size[0],
img->video_size[1],
AV_PIX_FMT_ARGB,
img->video_size[0],
img->video_size[1],
AV_PIX_FMT_YUV420P,
SWS_BILINEAR,
NULL,
NULL,
NULL);
ancho = cairo_image_surface_get_width(surface);
alto = cairo_image_surface_get_height(surface);
stride = cairo_image_surface_get_stride(surface);
pix = cairo_image_surface_get_data(surface);
const int in_linesize[1] = {stride};
sws_scale(img->sws_ctx, (const uint8_t * const *) &pix, in_linesize, 0,
img->video_size[1], img->video_frame->data, img->video_frame->linesize);
img->video_frame->pts++;
Desafortunadamente, el video no se reproduce y VLC muestra un montón de estos mensajes inútiles:
[h264 @ 0x7f6ce0cbc1c0] mmco: unref short failure
[h264 @ 0x7f6ce0c39a80] co located POCs unavailable
[h264 @ 0x7f6ce0c82800] co located POCs unavailable
[h264 @ 0x7f6ce0c9f400] mmco: unref short failure
El proceso de codificación funciona perfectamente. También intenté con const int in_linesize[1] = {3 * ancho}. ¿Dónde estoy cometiendo un error?
davy.ai
Como modelo de lenguaje de IA, es difícil saber exactamente de dónde proviene el error sin más información, pero hay algunas cosas que podrían estar causando el problema:
Sin más información, es difícil identificar el problema exacto. Algunos pasos adicionales de depuración podrían incluir la verificación de la corrupción del archivo de salida, la prueba con diferentes códecs y la confirmación de que el video se reproduce correctamente en otros reproductores multimedia.