FFmpeg
img2enc.c
Go to the documentation of this file.
1 /*
2  * Image format
3  * Copyright (c) 2000, 2001, 2002 Fabrice Bellard
4  * Copyright (c) 2004 Michael Niedermayer
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22 
23 #include <time.h>
24 #ifdef _WIN32
25 #include <sys/utime.h>
26 #else
27 #include <sys/time.h>
28 #endif
29 
30 #include "config_components.h"
31 
32 #include "libavutil/avutil.h"
33 #include "libavutil/intreadwrite.h"
34 #include "libavutil/avstring.h"
35 #include "libavutil/bprint.h"
36 #include "libavutil/dict.h"
37 #include "libavutil/log.h"
38 #include "libavutil/mathematics.h"
39 #include "libavutil/mem.h"
40 #include "libavutil/opt.h"
41 #include "libavutil/parseutils.h"
42 #include "libavutil/pixdesc.h"
44 #include "avformat.h"
45 #include "avio_internal.h"
46 #include "internal.h"
47 #include "img2.h"
48 #include "mux.h"
49 
50 typedef struct VideoMuxData {
51  const AVClass *class; /**< Class for private options. */
54  int split_planes; /**< use independent file for each Y, U, V plane */
55  int update;
57  int frame_pts;
58  const char *muxer;
62  int64_t creation_ts; /**< creation_time in microseconds since epoch */
63 } VideoMuxData;
64 
65 static void set_file_mtime(AVFormatContext *s, const char *path, int64_t ts_us)
66 {
67  int64_t sec = ts_us / 1000000;
68  int64_t usec = ts_us % 1000000;
69 
70  if (usec < 0) {
71  sec--;
72  usec += 1000000;
73  }
74 
75 #ifdef _WIN32
76  struct _utimbuf ut;
77  ut.actime = sec;
78  ut.modtime = sec;
79  if (_utime(path, &ut) < 0)
80 #else
81  struct timeval times[2] = {
82  { .tv_sec = sec, .tv_usec = usec },
83  { .tv_sec = sec, .tv_usec = usec },
84  };
85  if (utimes(path, times) < 0)
86 #endif
88  "Failed to set file modification time for %s\n", path);
89 }
90 
92 {
93  VideoMuxData *img = s->priv_data;
94  AVStream *st = s->streams[0];
96 
97  if (st->codecpar->codec_id == AV_CODEC_ID_GIF) {
98  img->muxer = "gif";
99  } else if (st->codecpar->codec_id == AV_CODEC_ID_FITS) {
100  img->muxer = "fits";
101  } else if (st->codecpar->codec_id == AV_CODEC_ID_AV1) {
102  img->muxer = "avif";
103  } else if (st->codecpar->codec_id == AV_CODEC_ID_RAWVIDEO) {
104  const char *str = strrchr(s->url, '.');
105  img->split_planes = str
106  && !av_strcasecmp(str + 1, "y")
107  && s->nb_streams == 1
108  && desc
109  &&(desc->flags & AV_PIX_FMT_FLAG_PLANAR)
110  && desc->nb_components >= 3;
111  }
112  img->img_number = img->start_img_number;
113 
114  if (img->update_filemtime) {
115  const char *proto = avio_find_protocol_name(s->url);
117  int64_t parsed_ts;
118 
119  if (!proto || strcmp(proto, "file")) {
121  "update_filemtime is only supported for local files, "
122  "it will be ignored\n");
123  img->update_filemtime = 0;
124  } else {
125  entry = av_dict_get(s->metadata, "creation_time", NULL, 0);
126  if (!entry || av_parse_time(&parsed_ts, entry->value, 0) < 0) {
128  "No valid creation_time metadata found, "
129  "update_filemtime will be ignored\n");
130  img->update_filemtime = 0;
131  } else {
132  img->creation_ts = parsed_ts;
133  }
134  }
135  }
136 
137  return 0;
138 }
139 
141 {
142  VideoMuxData *img = s->priv_data;
143  AVCodecParameters *par = s->streams[pkt->stream_index]->codecpar;
144  AVStream *st;
145  AVPacket *const pkt2 = ffformatcontext(s)->pkt;
146  AVFormatContext *fmt = NULL;
147  int ret;
148 
149  /* URL is not used directly as we are overriding the IO context later. */
150  ret = avformat_alloc_output_context2(&fmt, NULL, img->muxer, s->url);
151  if (ret < 0)
152  return ret;
153  st = avformat_new_stream(fmt, NULL);
154  if (!st) {
155  ret = AVERROR(ENOMEM);
156  goto out;
157  }
158  st->id = pkt->stream_index;
159 
160  fmt->pb = pb;
161 
162  ret = av_packet_ref(pkt2, pkt);
163  if (ret < 0)
164  goto out;
165  pkt2->stream_index = 0;
166 
167  if ((ret = avcodec_parameters_copy(st->codecpar, par)) < 0 ||
168  (ret = avformat_write_header(fmt, NULL)) < 0 ||
169  (ret = av_interleaved_write_frame(fmt, pkt2)) < 0 ||
170  (ret = av_write_trailer(fmt))) {}
171 
172  av_packet_unref(pkt2);
173 out:
175  return ret;
176 }
177 
179 {
180  VideoMuxData *img = s->priv_data;
181  if (img->muxer) {
182  int ret = write_muxed_file(s, s->pb, pkt);
183  if (ret < 0)
184  return ret;
185  } else {
186  avio_write(s->pb, pkt->data, pkt->size);
187  }
188  img->img_number++;
189  return 0;
190 }
191 
192 static int write_and_close(AVFormatContext *s, AVIOContext **pb, const unsigned char *buf, int size)
193 {
194  avio_write(*pb, buf, size);
195  avio_flush(*pb);
196  return ff_format_io_close(s, pb);
197 }
198 
200 {
201  VideoMuxData *img = s->priv_data;
202  AVIOContext *pb[4] = {0};
203  char* target[4] = {0};
204  char* tmp[4] = {0};
205  char* filepaths[4] = {0};
206  AVCodecParameters *par = s->streams[pkt->stream_index]->codecpar;
208  int ret, i;
210  AVBPrint filename;
212 
213  if (img->update) {
214  av_bprintf(&filename, "%s", s->url);
215  } else if (img->use_strftime) {
216  time_t now0;
217  struct tm *tm, tmpbuf;
218  time(&now0);
219  tm = localtime_r(&now0, &tmpbuf);
220  av_bprint_strftime(&filename, s->url, tm);
221  } else if (img->frame_pts) {
223  av_log(s, AV_LOG_ERROR, "Cannot write filename by pts of the frames.");
224  ret = AVERROR(EINVAL);
225  goto fail;
226  }
227  } else if (ff_bprint_get_frame_filename(&filename, s->url,
228  img->img_number,
230  if (img->img_number == img->start_img_number) {
231  av_log(s, AV_LOG_WARNING, "The specified filename '%s' does not contain an image sequence pattern or a pattern is invalid.\n", s->url);
233  "Use a pattern such as %%03d for an image sequence or "
234  "use the -update option (with -frames:v 1 if needed) to write a single image.\n");
235  av_bprint_clear(&filename);
236  av_bprintf(&filename, "%s", s->url);
237  } else {
238  av_log(s, AV_LOG_ERROR, "Cannot write more than one file with the same name. Are you missing the -update option or a sequence pattern?\n");
239  ret = AVERROR(EINVAL);
240  goto fail;
241  }
242  }
243  if (!av_bprint_is_complete(&filename)) {
244  ret = AVERROR(ENOMEM);
245  goto fail;
246  }
247  for (i = 0; i < 4; i++) {
248  av_dict_copy(&options, img->protocol_opts, 0);
249  if (img->use_rename) {
250  tmp[i] = av_asprintf("%s.tmp", filename.str);
251  target[i] = av_strdup(filename.str);
252  if (!tmp[i] || !target[i]) {
253  ret = AVERROR(ENOMEM);
254  goto fail;
255  }
256  }
257  if ((ret = s->io_open(s, &pb[i], tmp[i] ? tmp[i] : filename.str, AVIO_FLAG_WRITE, &options)) < 0) {
258  av_log(s, AV_LOG_ERROR, "Could not open file : %s\n", tmp[i] ? tmp[i] : filename.str);
259  goto fail;
260  }
261  if (options) {
262  av_log(s, AV_LOG_ERROR, "Could not recognize some protocol options\n");
263  ret = AVERROR(EINVAL);
264  goto fail;
265  }
266 
267  if (img->update_filemtime) {
268  filepaths[i] = av_strdup(filename.str);
269  if (!filepaths[i]) {
270  ret = AVERROR(ENOMEM);
271  goto fail;
272  }
273  }
274 
275  if (!img->split_planes || i+1 >= desc->nb_components)
276  break;
277  filename.str[filename.len - 1] = "UVAx"[i];
278  }
279  av_bprint_finalize(&filename, NULL);
280 
281  if (img->split_planes) {
282  int ysize = par->width * par->height;
283  int usize = AV_CEIL_RSHIFT(par->width, desc->log2_chroma_w) * AV_CEIL_RSHIFT(par->height, desc->log2_chroma_h);
284  if (desc->comp[0].depth >= 9) {
285  ysize *= 2;
286  usize *= 2;
287  }
288  if (ysize + 2*usize + (desc->nb_components > 3) * ysize > pkt->size) {
289  ret = AVERROR(EINVAL);
290  goto fail;
291  }
292 
293  if ((ret = write_and_close(s, &pb[0], pkt->data , ysize)) < 0 ||
294  (ret = write_and_close(s, &pb[1], pkt->data + ysize , usize)) < 0 ||
295  (ret = write_and_close(s, &pb[2], pkt->data + ysize + usize, usize)) < 0)
296  goto fail;
297  if (desc->nb_components > 3)
298  ret = write_and_close(s, &pb[3], pkt->data + ysize + 2*usize, ysize);
299  } else if (img->muxer) {
300  if ((ret = write_muxed_file(s, pb[0], pkt)) < 0)
301  goto fail;
302  ret = ff_format_io_close(s, &pb[0]);
303  } else {
304  ret = write_and_close(s, &pb[0], pkt->data, pkt->size);
305  }
306  if (ret < 0)
307  goto fail;
308 
309  for (i = 0; i < 4 && tmp[i]; i++) {
310  int ret = ff_rename(tmp[i], target[i], s);
311  if (ret < 0)
312  goto fail;
313  av_freep(&tmp[i]);
314  av_freep(&target[i]);
315  }
316 
317  if (img->update_filemtime) {
318  AVStream *st = s->streams[pkt->stream_index];
319  int64_t frame_ts = img->creation_ts;
320  int skip = 0;
321 
322  if (pkt->pts != AV_NOPTS_VALUE) {
325  if (offset == INT64_MIN ||
326  (offset > 0 && img->creation_ts > INT64_MAX - offset) ||
327  (offset < 0 && img->creation_ts < INT64_MIN - offset)) {
329  "Integer overflow computing file mtime, skipping\n");
330  skip = 1;
331  } else {
332  frame_ts += offset;
333  }
334  }
335 
336  if (!skip) {
337  for (i = 0; i < 4 && filepaths[i]; i++)
338  set_file_mtime(s, filepaths[i], frame_ts);
339  }
340  }
341 
342  for (i = 0; i < FF_ARRAY_ELEMS(filepaths); i++)
343  av_freep(&filepaths[i]);
344 
345  img->img_number++;
346  return 0;
347 
348 fail:
349  av_bprint_finalize(&filename, NULL);
351  for (i = 0; i < FF_ARRAY_ELEMS(pb); i++) {
352  av_freep(&tmp[i]);
353  av_freep(&target[i]);
354  av_freep(&filepaths[i]);
355  if (pb[i])
356  ff_format_io_close(s, &pb[i]);
357  }
358  return ret;
359 }
360 
361 static int query_codec(enum AVCodecID id, int std_compliance)
362 {
363  int i;
364  for (i = 0; ff_img_tags[i].id != AV_CODEC_ID_NONE; i++)
365  if (ff_img_tags[i].id == id)
366  return 1;
367 
368  // Anything really can be stored in img2
369  return std_compliance < FF_COMPLIANCE_NORMAL;
370 }
371 
372 #define OFFSET(x) offsetof(VideoMuxData, x)
373 #define ENC AV_OPT_FLAG_ENCODING_PARAM
374 static const AVOption muxoptions[] = {
375  { "update", "continuously overwrite one file", OFFSET(update), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, ENC },
376  { "start_number", "set first number in the sequence", OFFSET(start_img_number), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, INT_MAX, ENC },
377  { "strftime", "use strftime for filename", OFFSET(use_strftime), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, ENC },
378  { "frame_pts", "use current frame pts for filename", OFFSET(frame_pts), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, ENC },
379  { "atomic_writing", "write files atomically (using temporary files and renames)", OFFSET(use_rename), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, ENC },
380  { "protocol_opts", "specify protocol options for the opened files", OFFSET(protocol_opts), AV_OPT_TYPE_DICT, {0}, 0, 0, ENC },
381  { "update_filemtime", "set output file mtime from creation_time metadata plus frame offset", OFFSET(update_filemtime), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, ENC },
382  { NULL },
383 };
384 
385 #if CONFIG_IMAGE2_MUXER
386 static const AVClass img2mux_class = {
387  .class_name = "image2 muxer",
388  .item_name = av_default_item_name,
389  .option = muxoptions,
390  .version = LIBAVUTIL_VERSION_INT,
391 };
392 
394  .p.name = "image2",
395  .p.long_name = NULL_IF_CONFIG_SMALL("image2 sequence"),
396  .p.extensions = "bmp,dpx,exr,jls,jpeg,jpg,jxs,jxl,ljpg,pam,pbm,pcx,pfm,pgm,pgmyuv,phm,"
397  "png,ppm,sgi,tga,tif,tiff,jp2,j2c,j2k,xwd,sun,ras,rs,im1,im8,"
398  "im24,sunras,vbn,xbm,xface,pix,y,avif,qoi,hdr,wbmp",
399  .priv_data_size = sizeof(VideoMuxData),
400  .p.video_codec = AV_CODEC_ID_MJPEG,
401  .write_header = write_header,
402  .write_packet = write_packet,
403  .query_codec = query_codec,
405  .p.priv_class = &img2mux_class,
406 };
407 #endif
408 #if CONFIG_IMAGE2PIPE_MUXER
410  .p.name = "image2pipe",
411  .p.long_name = NULL_IF_CONFIG_SMALL("piped image2 sequence"),
412  .priv_data_size = sizeof(VideoMuxData),
413  .p.video_codec = AV_CODEC_ID_MJPEG,
414  .write_header = write_header,
415  .write_packet = write_packet_pipe,
416  .query_codec = query_codec,
418 };
419 #endif
ff_image2_muxer
const FFOutputFormat ff_image2_muxer
av_packet_unref
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
Definition: packet.c:434
VideoMuxData::img_number
int img_number
Definition: img2enc.c:53
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:216
AV_BPRINT_SIZE_UNLIMITED
#define AV_BPRINT_SIZE_UNLIMITED
entry
#define entry
Definition: aom_film_grain_template.c:66
AVOutputFormat::name
const char * name
Definition: avformat.h:508
av_bprint_is_complete
static int av_bprint_is_complete(const AVBPrint *buf)
Test if the print buffer is complete (not truncated).
Definition: bprint.h:218
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
opt.h
write_packet_pipe
static int write_packet_pipe(AVFormatContext *s, AVPacket *pkt)
Definition: img2enc.c:178
AVFMT_NODIMENSIONS
#define AVFMT_NODIMENSIONS
Format does not need width/height.
Definition: avformat.h:483
out
static FILE * out
Definition: movenc.c:55
av_bprint_init
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max)
Definition: bprint.c:69
AVCodecParameters
This struct describes the properties of an encoded stream.
Definition: codec_par.h:49
ffformatcontext
static av_always_inline FFFormatContext * ffformatcontext(AVFormatContext *s)
Definition: internal.h:123
avformat_new_stream
AVStream * avformat_new_stream(AVFormatContext *s, const struct AVCodec *c)
Add a new stream to a media file.
av_pix_fmt_desc_get
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition: pixdesc.c:3460
AVFMT_NOTIMESTAMPS
#define AVFMT_NOTIMESTAMPS
Format does not need / have any timestamps.
Definition: avformat.h:479
AV_TIME_BASE_Q
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
Definition: avutil.h:263
int64_t
long long int64_t
Definition: coverity.c:34
av_asprintf
char * av_asprintf(const char *fmt,...)
Definition: avstring.c:115
av_strcasecmp
int av_strcasecmp(const char *a, const char *b)
Locale-independent case-insensitive compare.
Definition: avstring.c:208
AV_CODEC_ID_RAWVIDEO
@ AV_CODEC_ID_RAWVIDEO
Definition: codec_id.h:63
pixdesc.h
AVPacket::data
uint8_t * data
Definition: packet.h:603
AVOption
AVOption.
Definition: opt.h:428
VideoMuxData::muxer
const char * muxer
Definition: img2enc.c:58
write_and_close
static int write_and_close(AVFormatContext *s, AVIOContext **pb, const unsigned char *buf, int size)
Definition: img2enc.c:192
OFFSET
#define OFFSET(x)
Definition: img2enc.c:372
mathematics.h
AVDictionary
Definition: dict.c:32
FFOutputFormat::p
AVOutputFormat p
The public AVOutputFormat.
Definition: mux.h:65
set_file_mtime
static void set_file_mtime(AVFormatContext *s, const char *path, int64_t ts_us)
Definition: img2enc.c:65
write_header
static int write_header(AVFormatContext *s)
Definition: img2enc.c:91
query_codec
static int query_codec(enum AVCodecID id, int std_compliance)
Definition: img2enc.c:361
ff_bprint_get_frame_filename
int ff_bprint_get_frame_filename(struct AVBPrint *buf, const char *path, int64_t number, int flags)
Return in 'buf' the path with 'd' replaced by a number.
Definition: utils.c:293
ff_rename
int ff_rename(const char *url_src, const char *url_dst, void *logctx)
Wrap ffurl_move() and log if error happens.
Definition: avio.c:867
write_packet
static int write_packet(AVFormatContext *s, AVPacket *pkt)
Definition: img2enc.c:199
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:210
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
muxoptions
static const AVOption muxoptions[]
Definition: img2enc.c:374
ff_img_tags
const IdStrMap ff_img_tags[]
Definition: img2.c:105
av_dict_get
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
Definition: dict.c:60
intreadwrite.h
AV_CEIL_RSHIFT
#define AV_CEIL_RSHIFT(a, b)
Definition: common.h:60
AVCodecParameters::width
int width
The width of the video frame in pixels.
Definition: codec_par.h:143
AVIO_FLAG_WRITE
#define AVIO_FLAG_WRITE
write-only
Definition: avio.h:618
av_rescale_q
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
Definition: mathematics.c:142
avformat_write_header
av_warn_unused_result int avformat_write_header(AVFormatContext *s, AVDictionary **options)
Allocate the stream private data and write the stream header to an output media file.
Definition: mux.c:467
tmp
static uint8_t tmp[40]
Definition: aes_ctr.c:52
time_internal.h
avio_flush
void avio_flush(AVIOContext *s)
Force flushing of buffered data.
Definition: aviobuf.c:228
VideoMuxData::creation_ts
int64_t creation_ts
creation_time in microseconds since epoch
Definition: img2enc.c:62
AVFormatContext
Format I/O context.
Definition: avformat.h:1314
fail
#define fail
Definition: test.h:478
internal.h
AVStream::codecpar
AVCodecParameters * codecpar
Codec parameters associated with this stream.
Definition: avformat.h:770
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
VideoMuxData::use_strftime
int use_strftime
Definition: img2enc.c:56
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:76
VideoMuxData::update
int update
Definition: img2enc.c:55
AVStream::time_base
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
Definition: avformat.h:786
NULL
#define NULL
Definition: coverity.c:32
AV_CODEC_ID_AV1
@ AV_CODEC_ID_AV1
Definition: codec_id.h:275
IdStrMap::id
enum AVCodecID id
Definition: img2.h:66
AV_CODEC_ID_FITS
@ AV_CODEC_ID_FITS
Definition: codec_id.h:281
AV_OPT_TYPE_DICT
@ AV_OPT_TYPE_DICT
Underlying C type is AVDictionary*.
Definition: opt.h:289
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:242
AVFormatContext::pb
AVIOContext * pb
I/O context.
Definition: avformat.h:1356
parseutils.h
options
Definition: swscale.c:50
FFOutputFormat
Definition: mux.h:61
av_parse_time
int av_parse_time(int64_t *timeval, const char *timestr, int duration)
Parse timestr and return in *time a corresponding number of microseconds.
Definition: parseutils.c:592
time.h
av_bprint_strftime
void av_bprint_strftime(AVBPrint *buf, const char *fmt, const struct tm *tm)
Append a formatted date and time to a print buffer.
Definition: bprint.c:166
av_packet_ref
int av_packet_ref(AVPacket *dst, const AVPacket *src)
Setup a new reference to the data described by a given packet.
Definition: packet.c:442
AVCodecID
AVCodecID
Identify the syntax and semantics of the bitstream.
Definition: codec_id.h:47
AVIOContext
Bytestream IO Context.
Definition: avio.h:160
AVPacket::size
int size
Definition: packet.h:604
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:88
av_bprint_finalize
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer.
Definition: bprint.c:235
localtime_r
#define localtime_r
Definition: time_internal.h:46
i
#define i(width, name, range_min, range_max)
Definition: cbs_h264.c:63
VideoMuxData::split_planes
int split_planes
use independent file for each Y, U, V plane
Definition: img2enc.c:54
size
int size
Definition: twinvq_data.h:10344
AV_NOPTS_VALUE
#define AV_NOPTS_VALUE
Undefined timestamp value.
Definition: avutil.h:247
AVFMT_NOFILE
#define AVFMT_NOFILE
Demuxer will use avio_open, no opened file should be provided by the caller.
Definition: avformat.h:469
ff_format_io_close
int ff_format_io_close(AVFormatContext *s, AVIOContext **pb)
Definition: avformat.c:956
avio_write
void avio_write(AVIOContext *s, const unsigned char *buf, int size)
Definition: aviobuf.c:206
FF_COMPLIANCE_NORMAL
#define FF_COMPLIANCE_NORMAL
Definition: defs.h:60
img
#define img
Definition: vf_colormatrix.c:114
offset
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
Definition: writing_filters.txt:86
av_dict_free
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
Definition: dict.c:233
VideoMuxData::use_rename
int use_rename
Definition: img2enc.c:59
VideoMuxData::frame_pts
int frame_pts
Definition: img2enc.c:57
AV_FRAME_FILENAME_FLAGS_MULTIPLE
#define AV_FRAME_FILENAME_FLAGS_MULTIPLE
Allow multiple d.
Definition: avformat.h:3028
AV_CODEC_ID_GIF
@ AV_CODEC_ID_GIF
Definition: codec_id.h:147
AV_CODEC_ID_MJPEG
@ AV_CODEC_ID_MJPEG
Definition: codec_id.h:57
av_write_trailer
int av_write_trailer(AVFormatContext *s)
Write the stream trailer to an output media file and free the file private data.
Definition: mux.c:1238
bprint.h
log.h
AV_CODEC_ID_NONE
@ AV_CODEC_ID_NONE
Definition: codec_id.h:48
AVPacket::pts
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
Definition: packet.h:596
avio_internal.h
AVCodecParameters::height
int height
The height of the video frame in pixels.
Definition: codec_par.h:150
img2.h
s
uint8_t s
Definition: llvidencdsp.c:39
AVCodecParameters::avcodec_parameters_copy
int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src)
Copy the contents of src to dst.
Definition: codec_par.c:107
ENC
#define ENC
Definition: img2enc.c:373
AVStream::id
int id
Format-specific stream ID.
Definition: avformat.h:759
ret
ret
Definition: filter_design.txt:187
AVStream
Stream structure.
Definition: avformat.h:747
AVClass::class_name
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
Definition: log.h:81
avformat.h
av_bprintf
void av_bprintf(AVBPrint *buf, const char *fmt,...)
Definition: bprint.c:122
dict.h
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Underlying C type is int.
Definition: opt.h:258
av_bprint_clear
void av_bprint_clear(AVBPrint *buf)
Reset the string to "" but keep internal allocated data.
Definition: bprint.c:227
avformat_free_context
void avformat_free_context(AVFormatContext *s)
Free an AVFormatContext and all its streams.
Definition: avformat.c:148
update
static av_always_inline void update(AVFilterContext *ctx, AVFrame *insamples, int is_silence, int current_sample, int64_t nb_samples_notify, AVRational time_base)
Definition: af_silencedetect.c:78
VideoMuxData
Definition: img2enc.c:50
AV_PIX_FMT_FLAG_PLANAR
#define AV_PIX_FMT_FLAG_PLANAR
At least one pixel component is not in the first data plane.
Definition: pixdesc.h:132
write_muxed_file
static int write_muxed_file(AVFormatContext *s, AVIOContext *pb, AVPacket *pkt)
Definition: img2enc.c:140
ff_image2pipe_muxer
const FFOutputFormat ff_image2pipe_muxer
Windows::Graphics::DirectX::Direct3D11::p
IDirect3DDxgiInterfaceAccess _COM_Outptr_ void ** p
Definition: vsrc_gfxcapture_winrt.hpp:53
AVPacket::stream_index
int stream_index
Definition: packet.h:605
VideoMuxData::start_img_number
int start_img_number
Definition: img2enc.c:52
desc
const char * desc
Definition: libsvtav1.c:83
avutil.h
mem.h
av_strdup
#define av_strdup(s)
Definition: ops_asmgen.c:47
VideoMuxData::update_filemtime
int update_filemtime
Definition: img2enc.c:61
FFFormatContext::pkt
AVPacket * pkt
Used to hold temporary packets for the generic demuxing code.
Definition: internal.h:111
AVCodecParameters::format
int format
Definition: codec_par.h:94
AVPixFmtDescriptor
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition: pixdesc.h:69
AVDictionaryEntry
Definition: dict.h:90
AVCodecParameters::codec_id
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
Definition: codec_par.h:57
AVPacket
This structure stores compressed data.
Definition: packet.h:580
AV_OPT_TYPE_BOOL
@ AV_OPT_TYPE_BOOL
Underlying C type is int.
Definition: opt.h:326
av_interleaved_write_frame
int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt)
Write a packet to an output media file ensuring correct interleaving.
Definition: mux.c:1223
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:35
av_dict_copy
int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags)
Copy entries from one AVDictionary struct into another.
Definition: dict.c:247
avio_find_protocol_name
const char * avio_find_protocol_name(const char *url)
Return the name of the protocol that will handle the passed URL.
Definition: avio.c:663
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
pkt
static AVPacket * pkt
Definition: demux_decode.c:55
avstring.h
avformat_alloc_output_context2
int avformat_alloc_output_context2(AVFormatContext **ctx, const AVOutputFormat *oformat, const char *format_name, const char *filename)
Allocate an AVFormatContext for an output format.
Definition: mux.c:95
skip
static void BS_FUNC() skip(BSCTX *bc, unsigned int n)
Skip n bits in the buffer.
Definition: bitstream_template.h:383
VideoMuxData::protocol_opts
AVDictionary * protocol_opts
Definition: img2enc.c:60
mux.h