Commit Graph

188 Commits

Author SHA1 Message Date
Rodger Combs 8e6478b723
lavf/segment: fix autobsf 2016-11-02 01:16:23 -05:00
Rodger Combs 45f5c55732
lavf/segment: fix writing separate header with auto BSF 2016-10-24 03:53:22 -05:00
Rodger Combs c7cd6ad850
lavf/segment: add deinit function 2016-10-24 03:53:22 -05:00
Rodger Combs ecb53e1101
lavf/segment: decide whether to rename based on list URI
This fixes the case of writing segments to local files, but the list
over a network protocol.
2016-10-21 01:43:59 -05:00
Steven Liu 1da00be009 avformat/segment: give a warning message for remove initial_offset option
ffmpeg have a generic solution working with all muxer named
output_ts_offset, output_ts_offset will instead of initial_offset

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-09-09 02:45:28 +02:00
Steven Liu e29d2d9c92 avformat/segment: remove the check_bitstream from segment
because the BSF logic was re-factored into a shareable
function and both av_write_frame and av_interleaved_write_frame use it it

Signed-off-by: LiuQi <liuqi@gosun.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-07-14 21:33:19 +02:00
Rodger Combs af7e2734b9
lavf: update auto-bsf to new BSF API 2016-06-25 15:50:04 -05:00
Michael Niedermayer 4104f18358 avformat/segment: Pass flags to child context
This is needed as the bitexact flag is not in the codecpar context, and thus not copied

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-04-11 04:34:00 +02:00
Derek Buitenhuis 6f69f7a8bf Merge commit '9200514ad8717c63f82101dc394f4378854325bf'
* commit '9200514ad8717c63f82101dc394f4378854325bf':
  lavf: replace AVStream.codec with AVStream.codecpar

This has been a HUGE effort from:
    - Derek Buitenhuis <derek.buitenhuis@gmail.com>
    - Hendrik Leppkes <h.leppkes@gmail.com>
    - wm4 <nfxjfg@googlemail.com>
    - Clément Bœsch <clement@stupeflix.com>
    - James Almer <jamrial@gmail.com>
    - Michael Niedermayer <michael@niedermayer.cc>
    - Rostislav Pehlivanov <atomnuker@gmail.com>

Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2016-04-10 20:59:55 +01:00
Rodger Combs 4b150fbe1f lavf/segment: add option to write empty filler segments as needed 2016-04-02 13:31:26 -05:00
Rodger Combs 5b4f44f66a lavf/segment: slight refactor to seg_write_packet
This reduces some code duplication, and ensures that cur_entry.last_duration is
always set.
2016-04-02 13:31:26 -05:00
Rodger Combs 44a9395b5a lavf/segment: style nit 2016-04-02 13:31:26 -05:00
Rodger Combs d38fe9f493 lavf/segment: support automatic bitstream filtering
Most useful for MPEG-TS. Works by having the underlying muxer configure the
bitstream filters, then moving them to our own AVStreams.
2016-04-02 03:03:13 -05:00
Marton Balint 8ff0f6ae82 avformat/segment: set format options for all segments
Fixes ticket #5318.

Reviewed-by: Stefano Sabatini <stefasab@gmail.com>
Signed-off-by: Marton Balint <cus@passwd.hu>
2016-03-26 23:26:27 +01:00
Michael Niedermayer 7660c135a3 avformat/segment: Fix "occured" typo
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-03-17 16:50:15 +01:00
Stefano Sabatini 7725210e71 lavf/segment: change type of increment_tc to BOOL 2016-03-15 17:50:00 +01:00
Martin Vignali 69638517d1 lavf/segment: add increment_tc option
For example you can split a file, keeping a continuous timecode between
each segment:
ffmpeg -i src.mov -timecode 10:00:00:00 -vcodec copy -f segment \
-segment_time 2 -reset_timestamps 1 -increment_tc 1 target_%03d.mov

Signed-off-by: Stefano Sabatini <stefasab@gmail.com>
2016-03-15 17:44:13 +01:00
Anton Khirnov 9200514ad8 lavf: replace AVStream.codec with AVStream.codecpar
Currently, AVStream contains an embedded AVCodecContext instance, which
is used by demuxers to export stream parameters to the caller and by
muxers to receive stream parameters from the caller. It is also used
internally as the codec context that is passed to parsers.

In addition, it is also widely used by the callers as the decoding (when
demuxer) or encoding (when muxing) context, though this has been
officially discouraged since Libav 11.

There are multiple important problems with this approach:
    - the fields in AVCodecContext are in general one of
        * stream parameters
        * codec options
        * codec state
      However, it's not clear which ones are which. It is consequently
      unclear which fields are a demuxer allowed to set or a muxer allowed to
      read. This leads to erratic behaviour depending on whether decoding or
      encoding is being performed or not (and whether it uses the AVStream
      embedded codec context).
    - various synchronization issues arising from the fact that the same
      context is used by several different APIs (muxers/demuxers,
      parsers, bitstream filters and encoders/decoders) simultaneously, with
      there being no clear rules for who can modify what and the different
      processes being typically delayed with respect to each other.
    - avformat_find_stream_info() making it necessary to support opening
      and closing a single codec context multiple times, thus
      complicating the semantics of freeing various allocated objects in the
      codec context.

Those problems are resolved by replacing the AVStream embedded codec
context with a newly added AVCodecParameters instance, which stores only
the stream parameters exported by the demuxers or read by the muxers.
2016-02-23 17:01:58 +01:00
Michael Niedermayer 21b459e4bb avformat/segment: Fix header_filename handling
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-02-10 17:59:58 +01:00
Derek Buitenhuis bc9a5965c8 Merge commit '9f61abc8111c7c43f49ca012e957a108b9cc7610'
This also deprecates our old duplicated callbacks.

* commit '9f61abc8111c7c43f49ca012e957a108b9cc7610':
  lavf: allow custom IO for all files

Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2016-02-10 14:42:41 +00:00
Michael Niedermayer fe3fed0b14 Update demuxers and protocols for protocol whitelist support
Reviewed-by: Andreas Cadhalpun <andreas.cadhalpun@googlemail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-02-02 04:16:50 +01:00
Marton Balint 369a6a6ed4 lavf/segment: add new option segment_clocktime_wrap_duration
This option can force the segmenter to only start a new segment if a packet
reaches the muxer within the specified duration after the segmenting clock
time, which makes it more resilient to backward local time jumps, such as leap
seconds or transition to standard time from daylight savings time.

Reviewed-by: Stefano Sabatini <stefasab@gmail.com>
Signed-off-by: Marton Balint <cus@passwd.hu>
2016-01-28 21:35:44 +01:00
Marton Balint 1036a1b8a3 lavf/segment: add support for specifying clock time offset
Reviewed-by: Stefano Sabatini <stefasab@gmail.com>
Signed-off-by: Marton Balint <cus@passwd.hu>
2016-01-28 21:35:37 +01:00
Anton Khirnov 9f61abc811 lavf: allow custom IO for all files
Some (de)muxers open additional files beyond the main IO context.
Currently, they call avio_open() directly, which prevents the caller
from using custom IO for such streams.

This commit adds callbacks to AVFormatContext that default to
avio_open2()/avio_close(), but can be overridden by the caller. All
muxers and demuxers using AVIO are switched to using those callbacks
instead of calling avio_open()/avio_close() directly.

(de)muxers that use the URLProtocol layer directly instead of AVIO
remain unconverted for now. This should be fixed in later commits.
2016-01-24 16:45:32 +01:00
Lvqier 93d336fb07 avformat/segment: Fix memory leak of cur_entry.filename
Solution suggested-by: Hendrik Leppkes <h.leppkes@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-12-12 23:19:22 +01:00
Clément Bœsch 43ecec0f03 avformat: use AV_OPT_TYPE_BOOL in a bunch of places 2015-12-04 15:43:33 +01:00
Michael Niedermayer e2b19a533d avformat/segment: atomically update list if possible
Fixes Ticket4802

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-08-28 00:09:56 +02:00
Michael Niedermayer dda6925357 avformat/segment: Do not free the filename twice
Bug introduced in 83a508cda5

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-08-26 03:50:52 +02:00
Carl Eugen Hoyos 83a508cda5 lavf/segment: Fix memleak.
Reviewed-by: Stefano Sabatini
Reviewed-by: Ganesh Ajjanagadde
2015-08-25 13:36:24 +02:00
Ronald S. Bultje 229843aa35 Replace av_dlog with ff_dlog.
ff_dlog checks compilability, and is non-public. av_dlog is deprecated
and no longer exists if FF_API_DLOG=0.
2015-08-18 10:24:01 -04:00
Michael Niedermayer 449c74f629 Merge commit '8a78ae2d2101622fd244b99178d8bc61175c878e'
* commit '8a78ae2d2101622fd244b99178d8bc61175c878e':
  segment: Check open_null_ctx() return value

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-06-12 22:10:47 +02:00
Vittorio Giovara 8a78ae2d21 segment: Check open_null_ctx() return value
Reported-By: infer
2015-06-12 17:02:48 +01:00
Rodger Combs e60b018c74 lavf/segment: add an option to allow breaking on non-keyframes
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-06-09 13:26:00 +02:00
Michael Niedermayer 235589ee9e avformat/segment: Change enum to int, which is accessed via AVOption as int
This fixes depending on implementation defined behavior

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-04-07 23:21:48 +02:00
Rodger Combs 5cba5291a7 lavf/segment: style nits
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-31 04:34:32 +02:00
Rodger Combs de2aaf1a2a lavf/segment: Mark output contexts as non-seekable when applicable
This prevents sub-muxers from trying to seek back to the beginning of the
whole stream, only to find themselves overwriting some video data in the
current (often last) segment.

We only do this when not writing individual header/trailers.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 19:04:17 +02:00
Rodger Combs 7b060a96ad libavformat/segment: add an option to write the header to a separate file
This permits some interesting segmenting techniques with formats like Matroska,
where you can concatenate the header and segments [N, nb_segments) and get
a working file that starts at segment N's start time.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 16:17:04 +02:00
Rodger Combs 481f0f153a libavformat/segment: don't leave the list pb open when not in use
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 14:44:21 +02:00
Michael Niedermayer a0fe1a25fa Merge commit 'daf8cf358a098a903d59adb6c0d0cc3262a8c93e'
* commit 'daf8cf358a098a903d59adb6c0d0cc3262a8c93e':
  avformat: Don't anonymously typedef structs

Conflicts:
	libavformat/adtsenc.c
	libavformat/aiffenc.c
	libavformat/avidec.c
	libavformat/gif.c
	libavformat/iff.c
	libavformat/img2dec.c
	libavformat/jvdec.c
	libavformat/matroskadec.c
	libavformat/udp.c
	libavformat/wtvdec.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-14 21:07:40 +01:00
Diego Biurrun daf8cf358a avformat: Don't anonymously typedef structs 2015-02-14 10:13:47 -08:00
Vittorio Giovara 3a6dfec864 segment: Check av_get_frame_filename() return value
CC: libav-stable@libav.org
Bug-Id: CID 1265713
2015-01-23 14:55:03 +00:00
Michael Niedermayer e2404096b0 avformat/segment: Clear contexts after deallocation
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-01-07 22:29:16 +01:00
Michael Niedermayer 2a741baeff Merge commit 'b3f04657368a32a9903406395f865e230b1de348'
* commit 'b3f04657368a32a9903406395f865e230b1de348':
  segment: Fix the failure paths

Conflicts:
	libavformat/segment.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-01-07 22:15:45 +01:00
Luca Barbato b3f0465736 segment: Fix the failure paths
A failure in segment_end() or segment_start() would lead to freeing
a dangling pointer and in general further calls to seg_write_packet()
or to seg_write_trailer() would have the same faulty behaviour.

CC: libav-stable@libav.org
Reported-By: luodalongde@gmail.com
2015-01-07 12:36:28 +01:00
Pedro E. M. Brito 202947a066 libavformat/segment.c: Add strftime expansion for segment filename templates
Allows expansion of the filename template with strftime() with the option
-strftime 1 (disabled by default). This allows segments to be named by time of
creation, adding some flexibility.

Fixes Ticket 4104 (add strftime to segment muxer)

Signed-off-by: Pedro E. M. Brito <pedroembrito@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-12-28 21:48:44 +01:00
Michael Niedermayer 68fa549230 avformat/segment: Use av_freep() avoid leaving stale pointers in memory
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-12-25 12:51:48 +01:00
Michael Niedermayer ce80f9fee9 avformat/segment: export inner muxer timebase
Fixes "Non-monotonous DTS in output stream 0:0"
Fixes Ticket4020

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-11-16 03:02:29 +01:00
Michael Niedermayer 32a2876b12 avformat/segment: use time_internal.h, simplify code
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-11-02 20:07:34 +01:00
Mika Raento 75c8d7c2b4 hlsenc.c, segment.c: propagate defaults to mpegts
This fixes the abnormally high ts overhead in the files produced by the
HLS and segments muxers. See https://trac.ffmpeg.org/ticket/2857 . For
example makes it much more likely that it can produces streams that fit
under the 64kb App store limit.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-10-17 21:31:25 +02:00
Michael Niedermayer 3726d07a2a Merge commit '28816050e47b6dba430a52e429d21a864cffda8e'
* commit '28816050e47b6dba430a52e429d21a864cffda8e':
  lavf: Set the stream time base hint properly for chained muxers

Conflicts:
	libavformat/segment.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-10-07 02:51:08 +02:00