sws_scale YUV --> RVB image déformée

Je veux convertir YUV420P image (reçu de H.264 cours d'eau) à RGB, tout en la redimensionnant, en utilisant sws_scale.
La taille de l'image d'origine est 480 × 800. Juste la conversion avec les mêmes dimensions fonctionne très bien.
Mais quand j'ai essayer de changer les dimensions, j'obtiens une image déformée, avec le motif suivant:

  • changer de 481 × 800 donnera une vision déformée de B&W l'image de ce qui ressemble à couper au milieu
  • 482 × 800 sera encore plus déformé
  • 483 × 800 est déformé, mais en couleur
  • 484 × 800 est ok (à l'échelle correctement).

Maintenant ce modèle suit la mise à l'échelle ne fonctionnent bien si la différence entre divise par 4.

Voici un exemple de code de la manière que je le décodage et la conversion de l'image. Toutes les méthodes show "succès".

int srcX = 480;
int srcY = 800;
int dstX = 481; //or 482, 483 etc
int dstY = 800;

AVFrame* avFrameYUV = avcodec_alloc_frame();
avpicture_fill((AVPicture *)avFrameYUV, decoded_yuv_frame, PIX_FMT_YUV420P, srcX , srcY);

AVFrame *avFrameRGB = avcodec_alloc_frame();

AVPacket avPacket;
av_init_packet(&avPacket);
avPacket.size = read; //size of raw data
avPacket.data = raw_data; //raw data before decoding to YUV

int frame_decoded = 0;
int decoded_length = avcodec_decode_video2(g_avCodecContext, avFrameYUV, &frame_decoded, &avPacket);
int size = dstX * dstY * 3;

struct SwsContext *img_convert_ctx = sws_getContext(srcX, srcY, SOURCE_FORMAT, dstX, dstY, PIX_FMT_BGR24, SWS_BICUBIC, NULL, NULL, NULL);

avpicture_fill((AVPicture *)avFrameRGB, rgb_frame, PIX_FMT_RGB24, dstX, dstY);
sws_scale(img_convert_ctx, avFrameYUV->data, avFrameYUV->linesize, 0, srcY, avFrameRGB->data, avFrameRGB->linesize);

//draws the resulting frame with windows BitBlt
DrawBitmap(hdc, dstX, dstY, rgb_frame, size);

sws_freeContext(img_convert_ctx); 
n'hésitez pas à poster un bug dans le ffmpeg.org/trac/ffmpeg/newticket
Dans sws_getContext() fonction vous êtes de passage en paramètre l'identificateur de format PIX_FMT_BGR24 au lieu de PIX_FMT_RGB24 comme vous le faites dans avpicture_fill
avez-vous jamais obtenir que cela fonctionne?

OriginalL'auteur Sami susu | 2011-12-13