8
मुझे FFmpeg लाइब्रेरी का उपयोग करके वीडियो में कई जेपीजी फ़ाइलों में शामिल होने की आवश्यकता है। लेकिन मुझे इन फाइलों को पढ़ने में समस्या है। यहाँ एक समारोह जो छवि फ़ाइल पढ़ता है और बनाता है AVFrame है:एफएफएमपीईजी: जेपीईजी फ़ाइल को AVFrame
AVFrame* OpenImage(const char* imageFileName)
{
AVFormatContext *pFormatCtx;
if(av_open_input_file(&pFormatCtx, imageFileName, NULL, 0, NULL)!=0)
{
printf("Can't open image file '%s'\n", imageFileName);
return NULL;
}
dump_format(pFormatCtx, 0, imageFileName, false);
AVCodecContext *pCodecCtx;
pCodecCtx = pFormatCtx->streams[0]->codec;
pCodecCtx->width = W_VIDEO;
pCodecCtx->height = H_VIDEO;
pCodecCtx->pix_fmt = PIX_FMT_YUV420P;
// Find the decoder for the video stream
AVCodec *pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
if (!pCodec)
{
printf("Codec not found\n");
return NULL;
}
// Open codec
if(avcodec_open(pCodecCtx, pCodec)<0)
{
printf("Could not open codec\n");
return NULL;
}
//
AVFrame *pFrame;
pFrame = avcodec_alloc_frame();
if (!pFrame)
{
printf("Can't allocate memory for AVFrame\n");
return NULL;
}
int frameFinished;
int numBytes;
// Determine required buffer size and allocate buffer
numBytes = avpicture_get_size(PIX_FMT_YUVJ420P, pCodecCtx->width, pCodecCtx->height);
uint8_t *buffer = (uint8_t *) av_malloc(numBytes * sizeof(uint8_t));
avpicture_fill((AVPicture *) pFrame, buffer, PIX_FMT_YUVJ420P, pCodecCtx->width, pCodecCtx->height);
// Read frame
AVPacket packet;
int framesNumber = 0;
while (av_read_frame(pFormatCtx, &packet) >= 0)
{
if(packet.stream_index != 0)
continue;
int ret = avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);
if (ret > 0)
{
printf("Frame is decoded, size %d\n", ret);
pFrame->quality = 4;
return pFrame;
}
else
printf("Error [%d] while decoding frame: %s\n", ret, strerror(AVERROR(ret)));
}
}
यह कोई त्रुटि होती है लेकिन केवल काले फ्रेम, कोई छवि बनाता है। गलत क्या है?
क्या तुमने कभी रंग योजना समस्या हल किया? कोई उपाय? – Maxito
@ मैक्सिटो यह बहुत समय पहले था। जैसा कि मुझे याद है कि रंगीन योजना सभी छवियों के लिए दूषित नहीं हुई थी, और ऐप में उपयोग की जाने वाली अंतिम छवियों में ऐसा कोई मुद्दा नहीं था। – darja