2014-06-12 1 views
0

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; 
} 
+0

좋아, 내가 발견 ... avcodec_find_decoder (CODEC_ID_WMV1) 분명히;) + severel outloo 할당 등 다른 멍청한 실수를 사용해야합니다. – vacetahanna

답변

0

당신은 인코딩 된 비디오를 포함하지 않는) (avcodec_decode_video2하는 버퍼를 전달하는 감사드립니다. 이것은 완전히 무효 한 조작입니다.

+0

하지만 두 줄 unsigned char * image = new unsigned char [BYTEPIC] ; memcpy (image, istream, BYTEPIC); 매개 변수 (istream)에서 채워진 버퍼를 전달하고 인코딩 전에 나에게 패킷 크기를 제공하므로이 버퍼에 내용이 있는지 확실합니다. – vacetahanna

+0

BYTEPIC = width * height * 3; 에서 오는? 인코딩 된 프레임의 크기에 대해 (나쁜) 가정을하고 있습니다. got_picture의 결과도 확인하지 않습니다. – szatmary

+0

그래, 내가 게시 한 후 1 시간 만에 깨닫고 인코딩 된 패키지의 정확한 크기가 전달 된 다음 avpkt.size로 사용되는 매개 변수가 추가되었지만 여전히 충돌합니다. 전에 충돌하기 때문에 got_picture를 확인할 수 없습니다. – vacetahanna

관련 문제