avcodec_decode_video2 падает, когда назначен avpkt.size

сбой метода avcodec_decode_video2, когда я пытаюсь назначить avpkt.size. Когда я устанавливаю его на 0, он работает, но ничего не декодирует (возвращаемое значение равно 0). Мне чего-то не хватает, или какое значение нужно присвоить avpklt.size? Я хочу декодировать один кадр, который закодирован в параметре istream.

Спасибо

    int DecodeVideoFFMPEG::dec_main( void *istream, void *outstream,  int width, int height )
{

avcodec_register_all();
int got_picture;

int BYTEPIC = width * height * 3;
AVCodecContext *d;
AVCodec *decodec = avcodec_find_encoder(CODEC_ID_WMV1);d = avcodec_alloc_context3(decodec);
d->codec_id = CODEC_ID_WMV1;
d->pix_fmt = PIX_FMT_YUV420P;
d->width = width;
d->height = height;
d->time_base.num = 1;
d->time_base.den = 25;

int status = avcodec_open2(d, decodec, NULL);

AVFrame *picture2 = alloc_picture420P(width, height);
AVFrame *pictureBGR = alloc_pictureBGR24(width, height);

AVPacket avpkt;
av_init_packet(&avpkt);

unsigned char *image = new unsigned char[BYTEPIC];
memcpy(image, istream, BYTEPIC);

avpkt.data = image;
avpkt.size = BYTEPIC;  // ????

//prepare for changing color space
struct SwsContext *img_convert_ctx2 =
sws_getContext(width, height, PIX_FMT_YUV420P,
width, height, PIX_FMT_BGR24,
SWS_BICUBIC, NULL, NULL, NULL);

int len = avcodec_decode_video2(d, picture2, &got_picture, &avpkt);

sws_scale(img_convert_ctx2, picture2->data, picture2->linesize, 0, height, pictureBGR->data, pictureBGR->linesize);

outstream = pictureBGR->data;

return len;
}

0

Решение

Вы передаете в avcodec_decode_video2 () буфер, который не содержит закодированное видео. Это совершенно недопустимая операция.

0

Другие решения


По вопросам рекламы [email protected]