Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://kovayashi.blog120.fc2.com/tb.php/134-95d133d8

-件のトラックバック

-件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

ffmpeg+SDL

amazonで「FFmpegで作る動画共有サイト」をワラをもすがる思いで買ったが、期待してた様な事は書いてなかった。ORZ
そこで、あきらめて、An ffmpeg and SDL Tutorialをマジメに始めることにした。

全8回から構成されるこのチュートリアルの第一回は、こちらのブログに詳しい説明があったので、第二回の補足を以下に。

先ずは、こちらのページからSDL-1.2.14.tarをダウンロード

>tar xvf SDL-1.2.14.tar
>cd SDL-1.2.14/
>./configure
>make
>sudo make install


次にCode: tutorial02.cをダウンロードして以下の様に修正。

//#include <ffmpeg/avcodec.h>
//#include <ffmpeg/avformat.h>

#include <libavutil/avstring.h>
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>

#include <SDL/SDL.h>
#include <SDL/SDL_thread.h>


・・・ snip ・・・

// Allocate a place to put our YUV image on that screen
bmp = SDL_CreateYUVOverlay(pCodecCtx->width,
pCodecCtx->height,
SDL_YV12_OVERLAY,
screen);

struct SwsContext *swsCtx = sws_getContext(
pCodecCtx->width,
pCodecCtx->height,
pCodecCtx->pix_fmt,
pCodecCtx->width,
pCodecCtx->height,
PIX_FMT_YUV420P,
SWS_BICUBIC,
NULL, NULL, NULL);


// Read frames and save first five frames to disk
i=0;
while(av_read_frame(pFormatCtx, &packet)>=0) {
// Is this a packet from the video stream?
if(packet.stream_index==videoStream) {
// Decode video frame
avcodec_decode_video(pCodecCtx, pFrame, &frameFinished,
packet.data, packet.size);

// Did we get a video frame?
if(frameFinished) {
SDL_LockYUVOverlay(bmp);

AVPicture pict;
pict.data[0] = bmp->pixels[0];
pict.data[1] = bmp->pixels[2];
pict.data[2] = bmp->pixels[1];

pict.linesize[0] = bmp->pitches[0];
pict.linesize[1] = bmp->pitches[2];
pict.linesize[2] = bmp->pitches[1];

// Convert the image into YUV format that SDL uses
/*
img_convert(&pict, PIX_FMT_YUV420P,
(AVPicture *)pFrame, pCodecCtx->pix_fmt,
pCodecCtx->width, pCodecCtx->height);
*/

sws_scale(swsCtx,
pFrame->data, pFrame->linesize, 0, pCodecCtx->height,
pict.data, pict.linesize);


SDL_UnlockYUVOverlay(bmp);

rect.x = 0;
rect.y = 0;
rect.w = pCodecCtx->width;
rect.h = pCodecCtx->height;
SDL_DisplayYUVOverlay(bmp, &rect);

}
}

// Free the packet that was allocated by av_read_frame
av_free_packet(&packet);
SDL_PollEvent(&event);
switch(event.type) {
case SDL_QUIT:
SDL_Quit();
exit(0);
break;
default:
break;
}

}

・・・ snip ・・・

sws_freeContext(swsCtx);

が追加でが削除

で、mekefile

CC = /usr/bin/gcc
CFLAGS = -O4 -Wall -I/usr/local/include
LDFLAGS =
LDLIBS = -L/usr/local/bin -lavutil -lavformat -lavcodec -lswscale
FRAMEWORK =

OBJS = tutorial02.o

tutorial02: $(OBJS)
$(CC) -o $@ $(LDFLAGS) $(OBJS) $(LDLIBS) $(FRAMEWORK) -lz -lbz2 -arch x86_64 `sdl-config --cflags --libs`


ffmpegのversionは23462、実行環境はOSX 10.6.3


第5回は

//pstrcpy(is->filename, sizeof(is->filename), argv[1]);
av_strlcpy(is->filename, argv[1], sizeof(is->filename));

の修正が必要。あとは同じ要領(img_convertからsws_scaleへ変更)。
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://kovayashi.blog120.fc2.com/tb.php/134-95d133d8

0件のトラックバック

0件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

Appendix

プロフィール

kovayashi

Author:kovayashi
・嫌いなもの
 →好きなもの

・インストール
 →バンドル
・バックアップ
 →アップロード
・努力
 →チート

最近のトラックバック

ブログ内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。