ffmpegのチュートリアルをよみはじめた
http://www.dranger.com/ffmpeg/ffmpeg.html
1つ目のソースtutorial01.cが最近のffmpegだと既に通らなかった。調べたところimg_convertが無くなってsws_scale使えとのことらしい。
http://ffmpeg.arrozcru.com/forum/viewtopic.php?f=1&t=319
tutorial01.cを変えたところ。
// Did we get a video frame? if(frameFinished) { /* // Convert the image from its native format to RGB img_convert((AVPicture *)pFrameRGB, PIX_FMT_RGB24, (AVPicture*)pFrame, pCodecCtx->pix_fmt, pCodecCtx->width, pCodecCtx->height); */ //Initialize Context struct SwsContext *pSWSCtx = sws_getContext( pCodecCtx->width, pCodecCtx->height , pCodecCtx->pix_fmt , pCodecCtx->width, pCodecCtx->height , PIX_FMT_RGB24, SWS_BICUBIC, NULL, NULL, NULL); //Convert YUV->RGB sws_scale(pSWSCtx, pFrame->data , pFrame->linesize, 0 , pCodecCtx->height , pFrameRGB->data, pFrameRGB->linesize); //Release sws_freeContext(pSWSCtx); // Save the frame to disk if(++i<=5) SaveFrame(pFrameRGB, pCodecCtx->width, pCodecCtx->height, i); }
SwsContextをstruct SwsContextと書かないといけないことに気付かず1時間以上頓挫。
sws_scaleについてふれている記事を発見。
http://d.hatena.ne.jp/iitaku/20080528
チュートリアルの後半でも解説があるらしい。
OBJS1= tutorial01.o CC=gcc CXX=g++ LINK=$(CXX) CFLAGS=-I/usr/include/ffmpeg -I/usr/include/libavcodec -I/usr/include/libavformat -I/usr/include/libswscale CXXFLAGS=$(CFLAGS) LDFLAGS=-lavcodec -lavformat -lswscale all: tut1 tut1: $(OBJS1) ._$(LINK) -o $@ $^ $(LDFLAGS) .cpp.o: ._$(CXX) -o $@ -c $(CXXFLAGS) $< .c.o: ._$(CC) -o $@ -c $(CFLAGS) $< clean: ._rm -f $(OBJS1) $(TARGET)
平行してMinGW版のビルドもやってみよう。
http://www.up-cat.net/MinGW%25A1%25DCffmpeg%25A5%25A4%25A5%25F3%25A5%25C7%25A5%25C3%25A5%25AF%25A5%25B9.html