2017-04-03 6 views
1

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.

+1

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). –

Antwort

1

Für jeden, der in der Zukunft darauf kommt, war meine Probleme, dass ich pFrame und pFrameRGB nicht richtig initialisiert habe. Der Speicher hat eine erste für den Rahmen struct zugeordnet werden unter Verwendung von av_frame_alloc(), müssen die Datenpuffer mit av_image_alloc() zugeordnet werden.

+1

Wissen Sie, wofür 'sws' steht? – zanbri

+0

@zanbri Ich fürchte, ich weiß nicht, sorry! –