double get_rotation(AVStream *st) { AVDictionaryEntry *rotate_tag = av_dict_get(st->metadata, "rotate", NULL, 0); uint8_t *displaymatrix = av_stream_get_side_data(st, AV_PKT_DATA_DISPLAYMATRIX, NULL); double theta = 0; if (rotate_tag && *rotate_tag->value && strcmp(rotate_tag->value, "0")) { char *tail; theta = av_strtod(rotate_tag->value, &tail); if (*tail) theta = 0; } if (displaymatrix && !theta) theta = -av_display_rotation_get((int32_t *) displaymatrix); theta -= 360 * floor(theta / 360 + 0.9 / 360); if (fabs(theta - 90 * round(theta / 90)) > 2) ALOGI("Odd rotation angle.\n" "If you want to help, upload a sample " "of this file to ftp://upload.ffmpeg.org/incoming/ " "and contact the ffmpeg-devel mailing list. ([email protected])"); return theta; }
static AVRational var_read_float(AVIOContext *pb, int size) { AVRational v; char *s = var_read_string(pb, size); if (!s) return (AVRational) { 0, 0 }; v = av_d2q(av_strtod(s, NULL), INT_MAX); av_free(s); return v; }
int ff_parse_sample_rate(int *ret, const char *arg, void *log_ctx) { char *tail; double srate = av_strtod(arg, &tail); if (*tail || srate < 1 || (int)srate != srate || srate > INT_MAX) { av_log(log_ctx, AV_LOG_ERROR, "Invalid sample rate '%s'\n", arg); return AVERROR(EINVAL); } *ret = srate; return 0; }
static int set_param(AVFilterContext *ctx, f0r_param_info_t info, int index, char *param) { Frei0rContext *s = ctx->priv; union { double d; f0r_param_color_t col; f0r_param_position_t pos; } val; char *tail; uint8_t rgba[4]; switch (info.type) { case F0R_PARAM_BOOL: if (!strcmp(param, "y")) val.d = 1.0; else if (!strcmp(param, "n")) val.d = 0.0; else goto fail; break; case F0R_PARAM_DOUBLE: val.d = av_strtod(param, &tail); if (*tail || val.d == HUGE_VAL) goto fail; break; case F0R_PARAM_COLOR: if (sscanf(param, "%f/%f/%f", &val.col.r, &val.col.g, &val.col.b) != 3) { if (av_parse_color(rgba, param, -1, ctx) < 0) goto fail; val.col.r = rgba[0] / 255.0; val.col.g = rgba[1] / 255.0; val.col.b = rgba[2] / 255.0; } break; case F0R_PARAM_POSITION: if (sscanf(param, "%lf/%lf", &val.pos.x, &val.pos.y) != 2) goto fail; break; } s->set_param_value(s->instance, &val, index); return 0; fail: av_log(ctx, AV_LOG_ERROR, "Invalid value '%s' for parameter '%s'.\n", param, info.name); return AVERROR(EINVAL); }
double parse_number_or_die(const char *context, const char *numstr, int type, double min, double max) { char *tail; const char *error; double d = av_strtod(numstr, &tail); if (*tail) error= "Expected number for %s but found: %s\n"; else if (d < min || d > max) error= "The value for %s was %s which is not within %f - %f\n"; else if(type == OPT_INT64 && (int64_t)d != d) error= "Expected int64 for %s but found %s\n"; else return d; fprintf(stderr, error, context, numstr, min, max); exit(1); }
double sxpi_demuxing_probe_rotation(const struct demuxing_ctx *ctx) { AVStream *st = (AVStream *)ctx->stream; // XXX: Fix FFmpeg. AVDictionaryEntry *rotate_tag = av_dict_get(st->metadata, "rotate", NULL, 0); const uint8_t *displaymatrix = av_stream_get_side_data(st, AV_PKT_DATA_DISPLAYMATRIX, NULL); double theta = 0; if (rotate_tag && *rotate_tag->value && strcmp(rotate_tag->value, "0")) { char *tail; theta = av_strtod(rotate_tag->value, &tail); if (*tail) theta = 0; } if (displaymatrix && !theta) theta = -av_display_rotation_get((const int32_t *)displaymatrix); theta -= 360*floor(theta/360 + 0.9/360); return theta; }
static int yae_set_tempo(AVFilterContext *ctx, const char *arg_tempo) { ATempoContext *atempo = ctx->priv; char *tail = NULL; double tempo = av_strtod(arg_tempo, &tail); if (tail && *tail) { av_log(ctx, AV_LOG_ERROR, "Invalid tempo value '%s'\n", arg_tempo); return AVERROR(EINVAL); } if (tempo < 0.5 || tempo > 2.0) { av_log(ctx, AV_LOG_ERROR, "Tempo value %f exceeds [0.5, 2.0] range\n", tempo); return AVERROR(EINVAL); } atempo->tempo = tempo; return 0; }
jint Java_org_telegram_ui_Components_AnimatedFileDrawable_createDecoder(JNIEnv *env, jclass clazz, jstring src, jintArray data) { VideoInfo *info = new VideoInfo(); char const *srcString = env->GetStringUTFChars(src, 0); int len = strlen(srcString); info->src = new char[len + 1]; memcpy(info->src, srcString, len); info->src[len] = '\0'; if (srcString != 0) { env->ReleaseStringUTFChars(src, srcString); } int ret; if ((ret = avformat_open_input(&info->fmt_ctx, info->src, NULL, NULL)) < 0) { LOGE("can't open source file %s, %s", info->src, av_err2str(ret)); delete info; return 0; } if ((ret = avformat_find_stream_info(info->fmt_ctx, NULL)) < 0) { LOGE("can't find stream information %s, %s", info->src, av_err2str(ret)); delete info; return 0; } if (open_codec_context(&info->video_stream_idx, info->fmt_ctx, AVMEDIA_TYPE_VIDEO) >= 0) { info->video_stream = info->fmt_ctx->streams[info->video_stream_idx]; info->video_dec_ctx = info->video_stream->codec; } if (info->video_stream <= 0) { LOGE("can't find video stream in the input, aborting %s", info->src); delete info; return 0; } info->frame = av_frame_alloc(); if (info->frame == nullptr) { LOGE("can't allocate frame %s", info->src); delete info; return 0; } av_init_packet(&info->pkt); info->pkt.data = NULL; info->pkt.size = 0; jint *dataArr = env->GetIntArrayElements(data, 0); if (dataArr != nullptr) { dataArr[0] = info->video_dec_ctx->width; dataArr[1] = info->video_dec_ctx->height; AVDictionaryEntry *rotate_tag = av_dict_get(info->video_stream->metadata, "rotate", NULL, 0); if (rotate_tag && *rotate_tag->value && strcmp(rotate_tag->value, "0")) { char *tail; dataArr[2] = (int) av_strtod(rotate_tag->value, &tail); if (*tail) { dataArr[2] = 0; } } else { dataArr[2] = 0; } env->ReleaseIntArrayElements(data, dataArr, 0); } //LOGD("successfully opened file %s", info->src); return (int) info; }
static AVEvalExpr * parse_primary(Parser *p) { AVEvalExpr * d = av_mallocz(sizeof(AVEvalExpr)); char *next= p->s; int i; /* number */ d->value = av_strtod(p->s, &next); if(next != p->s){ d->type = e_value; p->s= next; return d; } d->value = 1; /* named constants */ for(i=0; p->const_name && p->const_name[i]; i++){ if(strmatch(p->s, p->const_name[i])){ p->s+= strlen(p->const_name[i]); d->type = e_const; d->a.const_index = i; return d; } } p->s= strchr(p->s, '('); if(p->s==NULL){ *p->error = "undefined constant or missing ("; p->s= next; ff_eval_free(d); return NULL; } p->s++; // "(" if (*next == '(') { // special case do-nothing av_freep(&d); d = parse_expr(p); if(p->s[0] != ')'){ *p->error = "missing )"; ff_eval_free(d); return NULL; } p->s++; // ")" return d; } d->param[0] = parse_expr(p); if(p->s[0]== ','){ p->s++; // "," d->param[1] = parse_expr(p); } if(p->s[0] != ')'){ *p->error = "missing )"; ff_eval_free(d); return NULL; } p->s++; // ")" d->type = e_func0; if( strmatch(next, "sinh" ) ) d->a.func0 = sinh; else if( strmatch(next, "cosh" ) ) d->a.func0 = cosh; else if( strmatch(next, "tanh" ) ) d->a.func0 = tanh; else if( strmatch(next, "sin" ) ) d->a.func0 = sin; else if( strmatch(next, "cos" ) ) d->a.func0 = cos; else if( strmatch(next, "tan" ) ) d->a.func0 = tan; else if( strmatch(next, "atan" ) ) d->a.func0 = atan; else if( strmatch(next, "asin" ) ) d->a.func0 = asin; else if( strmatch(next, "acos" ) ) d->a.func0 = acos; else if( strmatch(next, "exp" ) ) d->a.func0 = exp; else if( strmatch(next, "log" ) ) d->a.func0 = log; else if( strmatch(next, "abs" ) ) d->a.func0 = fabs; else if( strmatch(next, "squish") ) d->type = e_squish; else if( strmatch(next, "gauss" ) ) d->type = e_gauss; else if( strmatch(next, "mod" ) ) d->type = e_mod; else if( strmatch(next, "max" ) ) d->type = e_max; else if( strmatch(next, "min" ) ) d->type = e_min; else if( strmatch(next, "eq" ) ) d->type = e_eq; else if( strmatch(next, "gte" ) ) d->type = e_gte; else if( strmatch(next, "gt" ) ) d->type = e_gt; else if( strmatch(next, "lte" ) ) { AVEvalExpr * tmp = d->param[1]; d->param[1] = d->param[0]; d->param[0] = tmp; d->type = e_gt; } else if( strmatch(next, "lt" ) ) { AVEvalExpr * tmp = d->param[1]; d->param[1] = d->param[0]; d->param[0] = tmp; d->type = e_gte; } else if( strmatch(next, "ld" ) ) d->type = e_ld; else if( strmatch(next, "st" ) ) d->type = e_st; else if( strmatch(next, "while" ) ) d->type = e_while; else { for(i=0; p->func1_name && p->func1_name[i]; i++){ if(strmatch(next, p->func1_name[i])){ d->a.func1 = p->func1[i]; d->type = e_func1; return d; } } for(i=0; p->func2_name && p->func2_name[i]; i++){ if(strmatch(next, p->func2_name[i])){ d->a.func2 = p->func2[i]; d->type = e_func2; return d; } } *p->error = "unknown function"; ff_eval_free(d); return NULL; } return d; }