mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-24 13:56:33 +02:00
* 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
This commit is contained in:
parent
e692fd601d
commit
a686caf03d
25
ffmpeg.c
25
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;
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user