static int limit_filesize = 0; //
static int pgmyuv_compatibility_hack=0;
+static int dts_delta_threshold = 10;
const char **opt_names=NULL;
int opt_name_count=0;
}
}
} else if (ost->video_crop) {
- picture_crop_temp.data[0] = formatted_picture->data[0] +
- (ost->topBand * formatted_picture->linesize[0]) + ost->leftBand;
-
- picture_crop_temp.data[1] = formatted_picture->data[1] +
- ((ost->topBand >> 1) * formatted_picture->linesize[1]) +
- (ost->leftBand >> 1);
-
- picture_crop_temp.data[2] = formatted_picture->data[2] +
- ((ost->topBand >> 1) * formatted_picture->linesize[2]) +
- (ost->leftBand >> 1);
-
- picture_crop_temp.linesize[0] = formatted_picture->linesize[0];
- picture_crop_temp.linesize[1] = formatted_picture->linesize[1];
- picture_crop_temp.linesize[2] = formatted_picture->linesize[2];
+ if (img_crop((AVPicture *)&picture_crop_temp, (AVPicture *)formatted_picture, enc->pix_fmt, ost->topBand, ost->leftBand) < 0) {
+ av_log(NULL, AV_LOG_ERROR, "error cropping picture\n");
+ goto the_end;
+ }
final_picture = &picture_crop_temp;
} else if (ost->video_pad) {
final_picture = &ost->pict_tmp;
codec->block_align= icodec->block_align;
break;
case CODEC_TYPE_VIDEO:
+ codec->pix_fmt = icodec->pix_fmt;
codec->width = icodec->width;
codec->height = icodec->height;
codec->has_b_frames = icodec->has_b_frames;
} else if ((codec->width == icodec->width -
(frame_leftBand + frame_rightBand)) &&
(codec->height == icodec->height -
- (frame_topBand + frame_bottomBand)))
- {
+ (frame_topBand + frame_bottomBand)) &&
+ (frame_rightBand + frame_leftBand + frame_topBand + frame_bottomBand)) {
ost->video_resample = 0;
ost->video_crop = 1;
ost->topBand = frame_topBand;
} else if ((codec->width == icodec->width +
(frame_padleft + frame_padright)) &&
(codec->height == icodec->height +
- (frame_padtop + frame_padbottom))) {
+ (frame_padtop + frame_padbottom)) &&
+ (frame_padright + frame_padleft + frame_padtop + frame_padbottom)) {
ost->video_resample = 0;
ost->video_crop = 0;
ost->video_pad = 1;
// fprintf(stderr, "next:%lld dts:%lld off:%lld %d\n", ist->next_pts, pkt.dts, input_files_ts_offset[ist->file_index], ist->st->codec->codec_type);
if (pkt.dts != AV_NOPTS_VALUE && ist->next_pts != AV_NOPTS_VALUE) {
int64_t delta= av_rescale_q(pkt.dts, ist->st->time_base, AV_TIME_BASE_Q) - ist->next_pts;
- if(ABS(delta) > 10LL*AV_TIME_BASE && !copy_ts){
+ if(ABS(delta) > 1LL*dts_delta_threshold*AV_TIME_BASE && !copy_ts){
input_files_ts_offset[ist->file_index]-= delta;
if (verbose > 2)
fprintf(stderr, "timestamp discontinuity %"PRId64", new offset= %"PRId64"\n", delta, input_files_ts_offset[ist->file_index]);
{ "hex", OPT_BOOL | OPT_EXPERT, {(void*)&do_hex_dump},
"when dumping packets, also dump the payload" },
{ "re", OPT_BOOL | OPT_EXPERT, {(void*)&rate_emu}, "read input at native frame rate", "" },
- { "loop", OPT_BOOL | OPT_EXPERT, {(void*)&loop_input}, "loop (current only works with images)" },
+ { "loop_input", OPT_BOOL | OPT_EXPERT, {(void*)&loop_input}, "loop (current only works with images)" },
{ "loop_output", HAS_ARG | OPT_INT | OPT_EXPERT, {(void*)&loop_output}, "number of times to loop output in formats that support looping (0 loops forever)", "" },
{ "v", HAS_ARG, {(void*)opt_verbose}, "control amount of logging", "verbose" },
{ "target", HAS_ARG, {(void*)opt_target}, "specify target file type (\"vcd\", \"svcd\", \"dvd\", \"dv\", \"pal-vcd\", \"ntsc-svcd\", ...)", "type" },
{ "vglobal", HAS_ARG | OPT_INT | OPT_EXPERT, {(void*)&video_global_header}, "video global header storage type", "" },
{ "copyts", OPT_BOOL | OPT_EXPERT, {(void*)©_ts}, "copy timestamps" },
{ "shortest", OPT_BOOL | OPT_EXPERT, {(void*)&opt_shortest}, "finish encoding within shortest input" }, //
+ { "dts_delta_threshold", HAS_ARG | OPT_INT | OPT_EXPERT, {(void*)&dts_delta_threshold}, "timestamp discontinuity delta threshold", "" },
/* video options */
{ "b", HAS_ARG | OPT_VIDEO, {(void*)opt_video_bitrate}, "set video bitrate (in kbit/s)", "bitrate" },