static int64_t input_ts_offset = 0;
static int file_overwrite = 0;
static int o_direct = 0;
+static const char *contract_label = "recorder";
static int metadata_count;
static AVMetadataTag *metadata;
static int do_benchmark = 0;
data_size = (ist->st->codec->width * ist->st->codec->height * 3) / 2;
/* XXX: allocate picture correctly */
avcodec_get_frame_defaults(&picture);
-
ret = avcodec_decode_video2(ist->st->codec,
&picture, &got_picture, &avpkt);
+ if (picture.key_frame)
+ printf("*");
ist->st->quality= picture.quality;
if (ret < 0)
goto fail_decode;
#ifdef CONFIG_FFMPEG_WITH_FRSH
frsh_vres_id_t disk_vres;
+frsh_contract_t cpu_contract;
frsh_contract_t disk_contract;
#endif
{
static struct timespec start = {0,0};
struct timespec end, d;
- static int f = 0; /* number of frames */
+ static int f = -1; /* number interframe intevals elapsed */
double ifi;
static double ifi_avg=0, ifi_var=0;
clock_gettime(CLOCK_MONOTONIC, &end);
timespec_subtract(&d, &end, &start);
- if (f++ == 0)
+ if (f++ < 0)
goto out; /* First run */
ifi = (double)d.tv_sec + 1e-9*d.tv_nsec;
#define SQ(x) ((x)*(x))
f, 1/ifi, 1/ifi_avg, 1/sqrt(ifi_var));
#ifdef CONFIG_FFMPEG_WITH_FRSH
- if (renegotiate == f)
+ if (renegotiate == f) {
+ frsh_contract_renegotiate_sync(&disk_contract, disk_vres);
frsh_contract_renegotiate_sync(&disk_contract, disk_vres);
+ }
#endif
out:
start = end;
return codec->id;
}
+static void opt_contract_label(const char *label)
+{
+ contract_label = label;
+}
+
static void opt_input_file(const char *filename)
{
AVFormatContext *ic;
}
/* open the file */
- o_direct = 1;
if (url_fopen(&oc->pb, filename, o_direct ? URL_RDWR|URL_DIRECT : URL_WRONLY) < 0) {
fprintf(stderr, "Could not open '%s'\n", filename);
av_exit(1);
{ "f", HAS_ARG, {(void*)opt_format}, "force format", "fmt" },
{ "i", HAS_ARG, {(void*)opt_input_file}, "input file name", "filename" },
{ "y", OPT_BOOL, {(void*)&file_overwrite}, "overwrite output files" },
+ { "contract_label", HAS_ARG, {(void*)opt_contract_label}, "contract label", "label" },
{ "direct", OPT_BOOL, {(void*)&o_direct}, "write to output file using direct I/O (O_DIRECT)" },
{ "map", HAS_ARG | OPT_EXPERT, {(void*)opt_map}, "set input stream mapping", "file:stream[:syncfile:syncstream]" },
{ "map_meta_data", HAS_ARG | OPT_EXPERT, {(void*)opt_map_meta_data}, "set meta data information of outfile from infile", "outfile:infile" },
};
#ifdef CONFIG_FFMPEG_WITH_FRSH
-
void *av_encode_thread(void *arg)
{
int ret, terror;
frsh_thread_attr_t frsh_attr;
frsh_thread_id_t thread;
frsh_vres_id_t cpu_vres;
- frsh_contract_t cpu_contract;
frsh_rel_time_t cpu_budget, cpu_period;
frsh_rel_time_t disk_budget, disk_period;
- int ret, terror;
+ int ret;
- PXW(frsh_init());
-
cpu_budget = fosa_msec_to_rel_time(5);
- cpu_period = fosa_msec_to_rel_time(1000/50);
+ cpu_period = fosa_msec_to_rel_time(1000/30);
#if 1
#define DISK_THROUGHPUT 20277LLU /* units??? probably MB/s */
FRSH_CT_REGULAR);
if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_basic_params");
ret = frsh_contract_set_resource_and_label(&cpu_contract,
- FRSH_RT_PROCESSOR, FRSH_CPU_ID_DEFAULT, "recorder");
+ FRSH_RT_PROCESSOR, FRSH_CPU_ID_DEFAULT, contract_label);
if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_resource_and_label");
ret = frsh_contract_negotiate(&cpu_contract, &cpu_vres);
FRSH_CT_REGULAR);
if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_basic_params");
ret = frsh_contract_set_resource_and_label(&disk_contract,
- FRSH_RT_DISK, 0, output_files[0]->filename);
+ FRSH_RT_DISK, 0, strstr(output_files[0]->filename, "://") == NULL ?
+ output_files[0]->filename : input_files[0]->filename);
if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_resource_and_label");
ret = frsh_contract_negotiate(&disk_contract, &disk_vres);
show_banner();
+#if CONFIG_FFMPEG_WITH_FRSH
+ {
+ int terror;
+ PXW(frsh_init());
+ printf("FRSH initialized\n");
+ }
+#endif
+
/* parse options */
parse_options(argc, argv, options, opt_output_file);