aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoman Shaposhnik <roman@shaposhnik.org>2003-10-03 01:08:10 +0000
committerRoman Shaposhnik <roman@shaposhnik.org>2003-10-03 01:08:10 +0000
commita686caf03ddd29b32abd1af5c6f887bc09e6d71b (patch)
tree6e1ea12178f7ad09aeca1f0e1071b0e4cd18b116
parente692fd601de39ef541b93b7d135569b8232c7b2d (diff)
downloadffmpeg-a686caf03ddd29b32abd1af5c6f887bc09e6d71b.tar.gz
* fixing bug that prevented resampling the picture and
changing pix_fmt at the same time. * aspect ratio should be more reliable for DV now. Originally committed as revision 2338 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--ffmpeg.c25
-rw-r--r--libavformat/dv.c2
2 files changed, 24 insertions, 3 deletions
diff --git a/ffmpeg.c b/ffmpeg.c
index 9784b52351..6970054589 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -467,6 +467,7 @@ static void do_video_out(AVFormatContext *s,
static uint8_t *video_buffer;
uint8_t *buf = NULL, *buf1 = NULL;
AVCodecContext *enc, *dec;
+ enum PixelFormat target_pixfmt;
#define VIDEO_BUFFER_SIZE (1024*1024)
@@ -534,7 +535,8 @@ static void do_video_out(AVFormatContext *s,
return;
/* convert pixel format if needed */
- if (enc->pix_fmt != dec->pix_fmt) {
+ target_pixfmt = ost->video_resample ? PIX_FMT_YUV420P : enc->pix_fmt;
+ if (dec->pix_fmt != target_pixfmt) {
int size;
/* create temporary picture */
@@ -545,7 +547,7 @@ static void do_video_out(AVFormatContext *s,
formatted_picture = &picture_format_temp;
avpicture_fill(formatted_picture, buf, enc->pix_fmt, dec->width, dec->height);
- if (img_convert(formatted_picture, enc->pix_fmt,
+ if (img_convert(formatted_picture, target_pixfmt,
in_picture, dec->pix_fmt,
dec->width, dec->height) < 0) {
fprintf(stderr, "pixel format conversion not handled\n");
@@ -561,6 +563,25 @@ static void do_video_out(AVFormatContext *s,
if (ost->video_resample) {
final_picture = &ost->pict_tmp;
img_resample(ost->img_resample_ctx, final_picture, formatted_picture);
+ if (enc->pix_fmt != PIX_FMT_YUV420P) {
+ int size;
+
+ av_free(buf);
+ /* create temporary picture */
+ size = avpicture_get_size(enc->pix_fmt, enc->width, enc->height);
+ buf = av_malloc(size);
+ if (!buf)
+ return;
+ final_picture = &picture_format_temp;
+ avpicture_fill(final_picture, buf, enc->pix_fmt, enc->width, enc->height);
+
+ if (img_convert(final_picture, enc->pix_fmt,
+ &ost->pict_tmp, PIX_FMT_YUV420P,
+ enc->width, enc->height) < 0) {
+ fprintf(stderr, "pixel format conversion not handled\n");
+ goto the_end;
+ }
+ }
} else if (ost->video_crop) {
picture_crop_temp.data[0] = formatted_picture->data[0] +
(ost->topBand * formatted_picture->linesize[0]) + ost->leftBand;
diff --git a/libavformat/dv.c b/libavformat/dv.c
index a132f97dde..62992fa8fc 100644
--- a/libavformat/dv.c
+++ b/libavformat/dv.c
@@ -660,7 +660,7 @@ DVMuxContext* dv_init_mux(AVFormatContext* s)
c->has_audio = c->has_video = 0;
c->start_time = time(NULL);
c->aspect = 0; /* 4:3 is the default */
- if (vst->codec.aspect_ratio == 16.0 / 9.0)
+ if ((int)(vst->codec.aspect_ratio * 10) == 17) /* 16:9 */
c->aspect = 0x07;
if (fifo_init(&c->audio_data, 100*AVCODEC_MAX_AUDIO_FRAME_SIZE) < 0)