36 #define LINE_DATA_SIZE 9
53 #define OFFSET(x) offsetof(ReadVitcContext, x)
54 #define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
57 {
"scan_max",
"maximum line numbers to scan for VITC data",
OFFSET(scan_max),
AV_OPT_TYPE_INT, {.i64 = 45 }, -1, INT_MAX,
FLAGS },
68 crc = 0x01 | (line[0] << 2);
69 crc ^= (line[0] >> 6) | 0x04 | (line[1] << 4);
70 crc ^= (line[1] >> 4) | 0x10 | (line[2] << 6);
71 crc ^= (line[2] >> 2) | 0x40;
73 crc ^= 0x01 | (line[4] << 2);
74 crc ^= (line[4] >> 6) | 0x04 | (line[5] << 4);
75 crc ^= (line[5] >> 4) | 0x10 | (line[6] << 6);
76 crc ^= (line[6] >> 2) | 0x40;
79 crc = (crc >> 2) | (crc << 6);
84 return ((line[i-1] + line[i] + line[i+1]) / 3);
90 int grp_index, pit_index;
99 for (y = 0; y <
height; y++) {
104 while ((x < width) && (grp_index < 9)) {
112 if ((grp_start_pos + ctx->
grp_width) > width)
115 if (pit_value < ctx->threshold_white)
117 x = grp_start_pos + ((ctx->
grp_width) / 10);
121 for (pit_index = 0; pit_index <= 7; pit_index++) {
122 x = grp_start_pos + (((pit_index+2)*ctx->
grp_width) / 10);
125 ctx->
line_data[grp_index] |= (1 << pit_index);
141 if (high > 9 || low > 9)
143 return 10*high + low;
148 unsigned hh =
bcd2uint(line[7] & 0x03, line[6] & 0x0f);
149 unsigned mm =
bcd2uint(line[5] & 0x07, line[4] & 0x0f);
150 unsigned ss =
bcd2uint(line[3] & 0x07, line[2] & 0x0f);
151 unsigned ff =
bcd2uint(line[1] & 0x03, line[0] & 0x0f);
152 unsigned drop = (line[1] & 0x04);
154 hh, mm, ss, drop ?
';' :
':', ff);
165 av_log(ctx,
AV_LOG_WARNING,
"Black color threshold is higher than white color threshold (%g > %g)\n",
170 av_log(ctx,
AV_LOG_DEBUG,
"threshold_black:%d threshold_white:%d threshold_gray:%d\n",
251 .description =
NULL_IF_CONFIG_SMALL(
"Read vertical interval timecode and write it to frame metadata."),
253 .priv_class = &readvitc_class,
This structure describes decoded (raw) audio or video data.
static int query_formats(AVFilterContext *ctx)
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
#define AV_LOG_WARNING
Something somehow does not look correct.
Main libavfilter public API header.
static unsigned bcd2uint(uint8_t high, uint8_t low)
int h
agreed upon image height
static uint8_t get_pit_avg3(uint8_t *line, int i)
static uint8_t get_vitc_crc(uint8_t *line)
const char * name
Pad name.
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter.
planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
planar YUV 4:4:0 full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV440P and setting color_range...
planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting col...
static char * make_vitc_tc_string(char *buf, uint8_t *line)
A filter pad used for either input or output.
A link between two filters.
planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples)
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
void * priv
private data for use by the filter
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (firs...
static const AVOption readvitc_options[]
AVFILTER_DEFINE_CLASS(readvitc)
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
int w
agreed upon image width
common internal API header
as above, but U and V bytes are swapped
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting col...
char tcbuf[AV_TIMECODE_STR_SIZE]
uint8_t line_data[LINE_DATA_SIZE]
AVDictionary ** avpriv_frame_get_metadatap(AVFrame *frame)
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples)
static const AVFilterPad inputs[]
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples)
Describe the class of an AVClass context structure.
static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
const char * name
Filter name.
AVFilterLink ** outputs
array of pointers to output links
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
static av_cold int init(AVFilterContext *ctx)
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
common internal and external API header
planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting col...
planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
interleaved chroma YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
static int read_vitc_line(ReadVitcContext *ctx, uint8_t *src, int line_size, int width, int height)
static int config_props(AVFilterLink *inlink)
AVFilterContext * dst
dest filter
planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) full scale (JPEG), deprecated in favor ...
planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
static const AVFilterPad outputs[]
AVPixelFormat
Pixel format.
#define AV_TIMECODE_STR_SIZE