1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-07 11:13:41 +02:00
Commit Graph

190 Commits

Author SHA1 Message Date
Marton Balint
85169a75e1 avformat/segment: remove last_cut check when detecting a new segment
Not starting a new segment if the elapsed microsecs since the start of the day
equals the the elapsed microsecs since the start of the day at the time of the
last cut seems plain wrong to me, Deti do you remember the original reason
behind this check?

Signed-off-by: Marton Balint <cus@passwd.hu>
2017-02-04 23:36:45 +01:00
Rodger Combs
2b20290061
lavf/segment: fix crash when failing to open segment list
This happens because segment_end() returns an error, so seg_write_packet
never proceeds to segment_start(), and seg->avf->pb is never re-set,
so we crash with a null pb when av_write_trailer flushes the packet
queue.

This doesn't seem to be clearly recoverable, so I'm just failing more
gracefully.

Repro:
ffmpeg -i input.ts -f segment -c copy -segment_list /noaxx.m3u8 test-%05d.ts

(assuming you don't have write access to /)
2017-01-23 05:44:49 -06:00
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