avpkt.size를 할당하려고 시도하면 avcodec_decode_video2 메소드가 충돌합니다. 0으로 설정하면 작동하지만 아무것도 디코드하지 않습니다 (반환 값은 0). 누락되었거나 avpklt.size에 어떤 값을 할당해야합니까? istream 매개 변수로 인코딩 된 하나의 프레임을 디코드하려고합니다. avpkt.size가 할당 될 때 avcodec_decode_video2가 충돌합니다.
는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;
}
좋아, 내가 발견 ... avcodec_find_decoder (CODEC_ID_WMV1) 분명히;) + severel outloo 할당 등 다른 멍청한 실수를 사용해야합니다. – vacetahanna