Ich versuche, eine AVFrame von einem JPEG (YUV-Pixel-Format) zu einem RGB24-Format sws_scale
Funktion des ffmpeg zu konvertieren. Ich habe die SwsContext sich wie folgt zusammen:Segmentation fault auf ffmpeg sws_scale
struct SwsContext *sws_ctx = NULL;
int frameFinished;
AVPacket packet;
// initialize SWS context for software scaling
sws_ctx = sws_getContext(pCodecCtx->width,
pCodecCtx->height,
pCodecCtx->pix_fmt,
pCodecCtx->width,
pCodecCtx->height,
AV_PIX_FMT_RGB24,
SWS_BICUBIC,
NULL, NULL, NULL
);
Und dann führe ich die sws_scale
, mit dem folgenden Befehl
sws_scale(sws_ctx,
(uint8_t const * const *)pFrame->data,
pFrame->linesize,
0,
pCodecCtx->height,
pFrameRGB->data,
pFrameRGB->linesize);
die mir segfault gibt, obwohl ich nicht sicher bin, warum. Ich habe versucht, die Werte durch Drucke und die Höhen und Linienstärken zu untersuchen, und alles scheint gültige Werte zu haben.
Auf den ersten Blick scheint alles richtig. Doppelklicken überprüfen, ob 'pFrame-> data' enthält 3 Ebenen mit YUV (420P?) Daten, wenn' pFrameRGB-> linesize [0] 'mindestens 3-mal größer als' pCodecCtx-> width', und wenn 'pFrameRGB- > data' enthält 1 Ebene, die zumindest 'pFrameRGB- ist> LINESIZE [0] * pCodecCtx-> height' groß. Wenn alles in Ordnung zu sein scheint, dann sehen Sie, ob beim Lesen des Wertes oder beim Schreiben ein Fehler auftritt (zumindest wissen Sie, ob es sich um den Quell- oder Zielrahmen handelt). –