libgpac
Documentation of the core library of GPAC
Loading...
Searching...
No Matches
restamp.c File Reference
#include <gpac/filters.h>
#include <gpac/constants.h>
#include <gpac/internal/media_dev.h>
#include <gpac/mpeg4_odf.h>

Data Structures

struct  RestampPid
 
struct  RestampCtx
 

Macros

#define OFFS(_n)   #_n, offsetof(RestampCtx, _n)
 

Enumerations

enum  { RESTAMP_RAWV_NO =0 , RESTAMP_RAWV_FORCE , RESTAMP_RAWV_DYN }
 

Functions

static GF_Err restamp_configure_pid (GF_Filter *filter, GF_FilterPid *pid, Bool is_remove)
 
static u64 restamp_get_timestamp (RestampCtx *ctx, RestampPid *pctx, u64 ots)
 
static void restamp_config_timing (GF_Filter *filter, RestampCtx *ctx)
 
static GF_Err restamp_process (GF_Filter *filter)
 
static GF_Err restamp_update_arg (GF_Filter *filter, const char *arg_name, const GF_PropertyValue *new_val)
 
static GF_Err restamp_initialize (GF_Filter *filter)
 
static void restamp_finalize (GF_Filter *filter)
 
const GF_FilterRegister * restamp_register (GF_FilterSession *session)
 

Variables

static const GF_FilterCapability RestampCapsRawVid []
 
static GF_FilterArgs RestampArgs []
 
static const GF_FilterCapability RestampCaps []
 
GF_FilterRegister RestampRegister
 

Data Structure Documentation

◆ RestampPid

struct RestampPid
Data Fields
GF_FilterPid * ipid
GF_FilterPid * opid
s64 ts_offset
s64 ts_shift_plus_one
Bool raw_vid_copy
Bool is_audio
Bool is_video
s64 last_min_dts
u32 timescale
u64 last_ts
u32 min_dur
u32 rescale
u64 nb_frames
GF_FilterPacket * pck_ref
u32 keep_prev_state

◆ RestampCtx

struct RestampCtx
Data Fields
GF_Fraction fps
GF_Fraction delay
GF_Fraction delay_v
GF_Fraction delay_a
GF_Fraction delay_t
GF_Fraction delay_o
GF_Fraction64 tsinit
u32 rawv
GF_List * pids
Bool reconfigure
Bool config_timing
u32 config_retry

Macro Definition Documentation

◆ OFFS

#define OFFS (   _n)    #_n, offsetof(RestampCtx, _n)

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
RESTAMP_RAWV_NO 
RESTAMP_RAWV_FORCE 
RESTAMP_RAWV_DYN 

Function Documentation

◆ restamp_configure_pid()

static GF_Err restamp_configure_pid ( GF_Filter *  filter,
GF_FilterPid *  pid,
Bool  is_remove 
)
static

◆ restamp_get_timestamp()

static u64 restamp_get_timestamp ( RestampCtx ctx,
RestampPid pctx,
u64  ots 
)
static

◆ restamp_config_timing()

static void restamp_config_timing ( GF_Filter *  filter,
RestampCtx ctx 
)
static

◆ restamp_process()

static GF_Err restamp_process ( GF_Filter *  filter)
static

◆ restamp_update_arg()

static GF_Err restamp_update_arg ( GF_Filter *  filter,
const char *  arg_name,
const GF_PropertyValue *  new_val 
)
static

◆ restamp_initialize()

static GF_Err restamp_initialize ( GF_Filter *  filter)
static

◆ restamp_finalize()

static void restamp_finalize ( GF_Filter *  filter)
static

◆ restamp_register()

const GF_FilterRegister * restamp_register ( GF_FilterSession *  session)

Variable Documentation

◆ RestampCapsRawVid

const GF_FilterCapability RestampCapsRawVid[]
static
Initial value:
=
{
{0},
}
@ GF_CODECID_NONE
Definition constants.h:367
@ GF_CODECID_RAW
Definition constants.h:577
@ GF_STREAM_FILE
Definition constants.h:104
@ GF_STREAM_VISUAL
Definition constants.h:64
#define CAP_UINT(_f, _a, _b)
Definition filters.h:1955
#define GF_CAPS_INPUT_OUTPUT
Definition filters.h:2023
#define GF_CAPS_INPUT_EXCLUDED
Definition filters.h:2009
#define GF_CAPS_OUTPUT_EXCLUDED
Definition filters.h:2017
#define CAP_BOOL(_f, _a, _b)
Definition filters.h:1963
@ GF_PROP_PID_CODECID
Definition filters.h:1020
@ GF_PROP_PID_STREAM_TYPE
Definition filters.h:1016
@ GF_PROP_PID_UNFRAMED
Definition filters.h:1022
@ GF_TRUE
Definition setup.h:435

◆ RestampArgs

GF_FilterArgs RestampArgs[]
static
Initial value:
=
{
{ OFFS(fps), "target fps", GF_PROP_FRACTION, "0/1", NULL, 0},
{ OFFS(delay), "delay to add to all streams", GF_PROP_FRACTION, "0/1", NULL, GF_FS_ARG_UPDATE},
{ OFFS(delay_v), "delay to add to video streams", GF_PROP_FRACTION, "0/1", NULL, GF_FS_ARG_UPDATE},
{ OFFS(delay_a), "delay to add to audio streams", GF_PROP_FRACTION, "0/1", NULL, GF_FS_ARG_UPDATE},
{ OFFS(delay_t), "delay to add to text streams", GF_PROP_FRACTION, "0/1", NULL, GF_FS_ARG_UPDATE},
{ OFFS(delay_o), "delay to add to other streams", GF_PROP_FRACTION, "0/1", NULL, GF_FS_ARG_UPDATE},
{ OFFS(rawv), "copy video frames\n"
"- no: no raw frame copy/drop\n"
"- force: force decoding all video streams\n"
"- dyn: decoding video streams if not all intra"
, GF_PROP_UINT, "no", "no|force|dyn", 0},
{ OFFS(tsinit), "initial timestamp to resync to, negative values disables resync", GF_PROP_FRACTION64, "-1/1", NULL, 0},
{0}
}
@ GF_FS_ARG_UPDATE
Definition filters.h:1893
@ GF_PROP_UINT
Definition filters.h:761
@ GF_PROP_FRACTION
Definition filters.h:769
@ GF_PROP_FRACTION64
Definition filters.h:771
#define OFFS(_n)
Definition restamp.c:489

◆ RestampCaps

◆ RestampRegister

GF_FilterRegister RestampRegister
Initial value:
= {
.name = "restamp",
GF_FS_SET_HELP("This filter rewrites timing (offsets and rate) of packets.\n"
"\n"
"The delays (global or per stream class) can be either positive (stream presented later) or negative (stream presented sooner).\n"
"\n"
"The specified [-fps]() can be either 0, positive or negative.\n"
"- if 0 or if the stream is audio, stream rate is not modified.\n"
"- otherwise if negative, stream rate is multiplied by `-fps.num/fps.den`.\n"
"- otherwise if positive and the stream is not video, stream rate is not modified.\n"
"- otherwise (video PID), constant frame rate is assumed and:\n"
" - if [-rawv=no](), video frame rate is changed to the specified rate (speed-up or slow-down).\n"
" - if [-rawv=force](), input video stream is decoded and video frames are dropped/copied to match the new rate.\n"
" - if [-rawv=dyn](), input video stream is decoded if not all-intra and video frames are dropped/copied to match the new rate.\n"
"\n"
"Note: frames are simply copied or dropped with no motion compensation.\n"
)
.private_size = sizeof(RestampCtx),
.max_extra_pids = 0xFFFFFFFF,
.initialize = restamp_initialize,
.finalize = restamp_finalize,
.configure_pid = restamp_configure_pid,
.process = restamp_process,
.update_arg = restamp_update_arg
}
#define GF_FS_SET_HELP(_help)
Definition filters.h:2152
#define SETCAPS(__struct)
Definition filters.h:2144
@ GF_FS_REG_ALLOW_CYCLIC
Definition filters.h:2180
@ GF_FS_REG_EXPLICIT_ONLY
Definition filters.h:2173
@ GF_FS_REG_TEMP_INIT
Definition filters.h:2202
attribute Array args
Definition jsf.idl:24
static GF_Err restamp_configure_pid(GF_Filter *filter, GF_FilterPid *pid, Bool is_remove)
Definition restamp.c:68
static void restamp_finalize(GF_Filter *filter)
Definition restamp.c:478
static GF_Err restamp_update_arg(GF_Filter *filter, const char *arg_name, const GF_PropertyValue *new_val)
Definition restamp.c:440
static GF_FilterArgs RestampArgs[]
Definition restamp.c:490
static GF_Err restamp_process(GF_Filter *filter)
Definition restamp.c:337
static GF_Err restamp_initialize(GF_Filter *filter)
Definition restamp.c:460
static const GF_FilterCapability RestampCaps[]
Definition restamp.c:507
Definition restamp.c:56