[Ffmpeg-cvslog] r5923 - in trunk: ffplay.c output_example.c
lucabe
subversion
Thu Aug 3 18:55:36 CEST 2006
Author: lucabe
Date: Thu Aug 3 18:55:36 2006
New Revision: 5923
Modified:
trunk/ffplay.c
trunk/output_example.c
Log:
Move output_example.c and ffplay.c to the swscale interface
Modified: trunk/ffplay.c
==============================================================================
--- trunk/ffplay.c (original)
+++ trunk/ffplay.c Thu Aug 3 18:55:36 2006
@@ -18,6 +18,7 @@
*/
#define HAVE_AV_CONFIG_H
#include "avformat.h"
+#include "swscale.h"
#include "version.h"
#include "cmdutils.h"
@@ -70,6 +71,8 @@
/* NOTE: the size must be big enough to compensate the hardware audio buffersize size */
#define SAMPLE_ARRAY_SIZE (2*65536)
+static int sws_flags = SWS_BICUBIC;
+
typedef struct PacketQueue {
AVPacketList *first_pkt, *last_pkt;
int nb_packets;
@@ -1143,6 +1146,7 @@
VideoPicture *vp;
int dst_pix_fmt;
AVPicture pict;
+ static struct SwsContext *img_convert_ctx;
/* wait until we have space to put a new picture */
SDL_LockMutex(is->pictq_mutex);
@@ -1195,9 +1199,18 @@
pict.linesize[0] = vp->bmp->pitches[0];
pict.linesize[1] = vp->bmp->pitches[2];
pict.linesize[2] = vp->bmp->pitches[1];
- img_convert(&pict, dst_pix_fmt,
- (AVPicture *)src_frame, is->video_st->codec->pix_fmt,
- is->video_st->codec->width, is->video_st->codec->height);
+ if (img_convert_ctx == NULL) {
+ img_convert_ctx = sws_getContext(is->video_st->codec->width,
+ is->video_st->codec->height, is->video_st->codec->pix_fmt,
+ is->video_st->codec->width, is->video_st->codec->height,
+ dst_pix_fmt, sws_flags, NULL, NULL, NULL);
+ if (img_convert_ctx == NULL) {
+ fprintf(stderr, "Cannot initialize the conversion context\n");
+ exit(1);
+ }
+ }
+ sws_scale(img_convert_ctx, src_frame->data, src_frame->linesize,
+ 0, is->video_st->codec->height, pict.data, pict.linesize);
/* update the bitmap content */
SDL_UnlockYUVOverlay(vp->bmp);
Modified: trunk/output_example.c
==============================================================================
--- trunk/output_example.c (original)
+++ trunk/output_example.c Thu Aug 3 18:55:36 2006
@@ -32,6 +32,7 @@
#endif
#include "avformat.h"
+#include "swscale.h"
/* 5 seconds stream duration */
#define STREAM_DURATION 5.0
@@ -39,6 +40,8 @@
#define STREAM_NB_FRAMES ((int)(STREAM_DURATION * STREAM_FRAME_RATE))
#define STREAM_PIX_FMT PIX_FMT_YUV420P /* default pix_fmt */
+static int sws_flags = SWS_BICUBIC;
+
/**************************************************************/
/* audio output */
@@ -319,6 +322,7 @@
{
int out_size, ret;
AVCodecContext *c;
+ static struct SwsContext *img_convert_ctx;
c = st->codec;
@@ -330,10 +334,20 @@
if (c->pix_fmt != PIX_FMT_YUV420P) {
/* as we only generate a YUV420P picture, we must convert it
to the codec pixel format if needed */
+ if (img_convert_ctx == NULL) {
+ img_convert_ctx = sws_getContext(c->width, c->height,
+ PIX_FMT_YUV420P,
+ c->width, c->height,
+ c->pix_fmt,
+ sws_flags, NULL, NULL, NULL);
+ if (img_convert_ctx == NULL) {
+ fprintf(stderr, "Cannot initialize the conversion context\n");
+ exit(1);
+ }
+ }
fill_yuv_image(tmp_picture, frame_count, c->width, c->height);
- img_convert((AVPicture *)picture, c->pix_fmt,
- (AVPicture *)tmp_picture, PIX_FMT_YUV420P,
- c->width, c->height);
+ sws_scale(img_convert_ctx, tmp_picture->data, tmp_picture->linesize,
+ 0, c->height, picture->data, picture->linesize);
} else {
fill_yuv_image(picture, frame_count, c->width, c->height);
}
More information about the ffmpeg-cvslog
mailing list