'avcodec_decode_video' из ffmpeg не работает - PullRequest
0 голосов
/ 09 декабря 2011

я использую vc ++ express и собираюсь получить с помощью ffmpeg ..

но с 1-й программой я столкнулся с проблемой.

vc ++ говорит 'идентификатор' avcodec_decode_video ': идентификатор не найден' в процессе компиляции.

я не знаю почему ....

следующее, что я закодировал ... .

include "avcodec.h"

include "avformat.h"

include "swscale.h"

int main(int argc, char *argv[])

{
av_register_all();

AVFormatContext *pFormatCtx;

// Open video file

if(av_open_input_file(&pFormatCtx, argv[1], NULL, 0, NULL)!=0)

  return -1; // Couldn't open file

// Retrieve stream information

if(av_find_stream_info(pFormatCtx)<0)

    return -1; // Couldn't find stream information

// Dump information about file onto standard error

dump_format(pFormatCtx, 0, argv[1], 0);


int i;

AVCodecContext *pCodecCtx;

// Find the first video stream

int videoStream=-1;

for(i=0; i<pFormatCtx->nb_streams; i++)

    if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO) {

    videoStream=i;

    break;

}

if(videoStream==-1)

    return -1; // Didn't find a video stream

// Get a pointer to the codec context for the video stream

pCodecCtx=pFormatCtx->streams[videoStream]->codec;

AVCodec *pCodec;


// Find the decoder for the video stream

pCodec=avcodec_find_decoder(pCodecCtx->codec_id);

if(pCodec==NULL) {

    fprintf(stderr, "Unsupported codec!\n");

    return -1; // Codec not found

}

// Open codec

if(avcodec_open(pCodecCtx, pCodec)<0)

    return -1; // Could not open codec

AVFrame *pFrame;

// Allocate video frame

pFrame=avcodec_alloc_frame();

    // Allocate an AVFrame structure

AVFrame* pFrameRGB=avcodec_alloc_frame();

if(pFrameRGB==NULL)

  return -1;

uint8_t *buffer;

int numBytes;

// Determine required buffer size and allocate buffer

numBytes=avpicture_get_size(PIX_FMT_RGB24, pCodecCtx->width,pCodecCtx->height);

buffer=(uint8_t *)av_malloc(numBytes*sizeof(uint8_t));

// Assign appropriate parts of buffer to image planes in pFrameRGB

// Note that pFrameRGB is an AVFrame, but AVFrame is a superset

// of AVPicture

avpicture_fill((AVPicture *)pFrameRGB, buffer, PIX_FMT_RGB24,pCodecCtx->width, pCodecCtx->height);

int frameFinished;

AVPacket packet;

i=0;

while(av_read_frame(pFormatCtx, &packet)>=0) {

    if(packet.stream_index==videoStream) {

**// here makes compile error**

    avcodec_decode_video(pCodecCtx, pFrame, &frameFinished,packet.data, packet.size);

    if(frameFinished) {

    img_convert((AVPicture *)pFram eRGB, PIX_FMT_RGB24, (AVPicture*)pFrame, pCodecCtx->pix_fmt,pCodecCtx->width, pCodecCtx->height);

     }
av_free_packet(&packet);
}
av_free(buffer);

av_free(pFrameRGB);

av_free(pFrame);

avcodec_close(pCodecCtx);

av_close_input_file(pFormatCtx);


  return 0;

}

1 Ответ

4 голосов
/ 01 февраля 2012

Может быть, это просто потому, что avcodec_decode_video был заменен avcodec_decode_video2 в ffmpeg?http://cekirdek.pardus.org.tr/~ismail/ffmpeg-docs/deprecated.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...