मैं RGB
को YUV420P
छवि (H.264
धारा से प्राप्त) कन्वर्ट करने के लिए है, जबकि यह भी आकार बदलने, sws_scale
का उपयोग कर चाहते हैं।
मूल छवि का आकार 480 × 800
है। बस समान आयामों के साथ कनवर्ट करना ठीक काम करता है।
लेकिन जब मैं आयाम बदलने की कोशिश, मैं निम्नलिखित पैटर्न के साथ एक विकृत छवि प्राप्त,:sws_scale YUV -> आरजीबी विकृत चित्र
481 × 800
के लिए बदल रहा एक विकृत बी & डब्ल्यू छवि है जो लगता है कि यह मध्य- में कटौती है निकलेगा
482 × 800
भी अधिक 483 × 800
विकृत है विकृत किया जाएगा, लेकिन रंग में484 × 800
ठीक है (सही ढंग से बढ़ाया) है।
अब इस पद्धति का अनुसरण - स्केलिंग केवल ठीक से काम करेंगे, तो द्वारा 4.
विभाजित के बीच का अंतर यहाँ जिस तरह से है कि मैं डिकोड और छवि परिवर्तित का एक नमूना कोड है। सभी विधियां "सफलता" दिखाती हैं।
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);
sws_getContext में() में कार्य आप PIX_FMT_RGB24 के बजाय प्रारूप पहचानकर्ता PIX_FMT_BGR24 पैरामीटर के रूप में गुजर रहे हैं के रूप में आप avpicture_fill –
में कभी किया https://ffmpeg.org/trac/ffmpeg/newticket –
में एक बग पोस्ट करने के लिए आप के लिए स्वतंत्र महसूस कर इसे काम करने के लिए मिलता है? – sendmoreinfo