1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-03-23 04:24:35 +02:00

26 Commits

Author SHA1 Message Date
Andreas Rheinhardt
571e4055dc avcodec/pthread_slice: Reuse buffer if possible
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-07-25 23:35:22 +02:00
Andreas Rheinhardt
b4ca3c7e4e avcodec/pthread_slice: Combine allocating and zeroing entries
Actually, ff_slice_thread_allocz_entries() always already
allocates zeroed entries, so ff_reset_entries() was already
unnecessary. Make this more clear by renaming it to
ff_slice_thread_allocz_entries().

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-07-25 23:32:34 +02:00
Andreas Rheinhardt
804bf898da avcodec/pthread_slice: Don't reinitialise initialised mutex
It results in undefined behaviour. Instead initialize the mutexes
and condition variables once during init (and check these
initializations).

Also combine the corresponding mutex and condition variable
into one structure so that one can allocate their array
jointly.

Reviewed-by: Tomas Härdin <tjoppen@acc.umu.se>
Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-07-01 15:35:11 +02:00
Andreas Rheinhardt
20f9727018 avcodec/codec_internal: Add FFCodec, hide internal part of AVCodec
Up until now, codec.h contains both public and private parts
of AVCodec. This exposes the internals of AVCodec to users
and leads them into the temptation of actually using them
and forces us to forward-declare structures and types that
users can't use at all.

This commit changes this by adding a new structure FFCodec to
codec_internal.h that extends AVCodec, i.e. contains the public
AVCodec as first member; the private fields of AVCodec are moved
to this structure, leaving codec.h clean.

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-03-21 01:33:09 +01:00
Andreas Rheinhardt
a688f3c13c avcodec/internal: Move FF_CODEC_CAP_* to a new header codec_internal.h
Also move FF_CODEC_TAGS_END as well as struct AVCodecDefault.
This reduces the amount of files that have to include internal.h
(which comes with quite a lot of indirect inclusions), as e.g.
most encoders don't need it. It is furthemore in preparation
for moving the private part of AVCodec out of the public codec.h.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-03-21 01:33:09 +01:00
Andreas Rheinhardt
1ea3650823 Replace all occurences of av_mallocz_array() by av_calloc()
They do the same.

Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2021-09-20 01:03:52 +02:00
Andreas Rheinhardt
0639f5c294 avcodec/pthread_slice: Don't use static variable, fix race
ff_slice_thread_init() uses a static variable to hold a function
pointer, although the value of said pointer needn't be saved between
different runs of this function at all.

The reason for this being so is probably that said pointer points to
a static function (if used); but storage class specifiers like "static"
are not part of the type of an object and so including it in the pointer
declaration is wrong (anyway, "static" means different things in both
contexts: for the function declaration it affects linkage, for the
variable storage duration).

Using a static variable here can lead to races, e.g. when initializing
VP9 (for which said function pointer was added) and H.264 with slice
threading. The latter has the FF_CODEC_CAP_INIT_THREADSAFE flag set and
is therefore unaffected by the lock guarding initializations of
decoders.

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
2020-12-02 16:11:50 +01:00
wm4
9b121dfc32 w32pthreads: always use Vista+ API, drop XP support
This removes the XP compatibility code, and switches entirely to SWR
locks, which are available starting at Windows Vista.

This removes CRITICAL_SECTION use, which allows us to add
PTHREAD_MUTEX_INITIALIZER, which will be useful later.

Windows XP is hereby not a supported build target anymore. It was
decided in a project vote that this is OK.
2017-12-26 02:49:48 +01:00
Ilia Valiakhmetov
83c12fefd2 avcodec/pthread_slice: add ff_slice_thread_execute_with_mainfunc()
Signed-off-by: Ilia Valiakhmetov <zakne0ne@gmail.com>
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
2017-09-08 10:25:32 -04:00
Muhammad Faiz
b505f15b15 avcodec/pthread_slice: use slice threading from avutil
Also remove pthread_cond_broadcast(progress_cond) on uninit.
Broadcasting it is not required because workers are always
parked when they are not in thread_execute. So it is imposible
that a worker is waiting on progress_cond when uninitialized.

Benchmark:
./ffmpeg -threads $threads -thread_type slice -i 10slices.mp4 -f null null
threads=2:
  old: 70.212s 70.525s 70.877s
  new: 65.219s 65.377s 65.484s
threads=3:
  old: 65.086s 66.306s 66.409s
  new: 63.229s 65.026s 65.116s
threads=4:
  old: 60.993s 61.482s 62.123s
  new: 59.224s 59.441s 59.667s
threads=5:
  old: 57.576s 57.860s 58.832s
  new: 53.032s 53.948s 54.086s

Signed-off-by: Muhammad Faiz <mfcc64@gmail.com>
2017-07-19 15:51:32 +07:00
Clément Bœsch
eaa67bb9c0 lavc/pthread_slice: remove pointless condition 2017-03-29 14:49:29 +02:00
Michael Niedermayer
a53fbda9dc avcodec/mpeg12enc: Move high resolution thread check to before initializing threads
Cleaner solution is welcome!

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-01-21 00:56:11 +01:00
Clément Bœsch
a362015641 lavc,lavfi: use avutil/thread.h instead of redundant conditional includes
This was somehow forgotten in a8bb81a05c519dd3f36cc341e5fb448f6d17fa73.
2016-01-20 21:36:54 +01:00
Michael Niedermayer
36205501ba avcodec/pthread_slice: Allow calling ff_alloc_entries() multiple times to readjust the entry count
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-11-27 23:37:42 +01:00
Michael Niedermayer
b3494e3c3e avcodec/pthread_slice: Remove rets_count
It appears rets_count is redundant

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-11-26 00:56:12 +01:00
Michael Niedermayer
50ce510ac4 avcodec/pthread_slice: remove dummy_ret hack
This should avoid some tsan warnings

Found-by: Chris Cunningham <chcunningham@google.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-11-19 00:41:25 +01:00
Christophe Gisquet
e87e20613b lavc/pthread_slice: release entries
When calling ff_alloc_entries, a number of entries are created.
They are never freed, as running fate with slice threading and
several frames on e.g. fate-hevc-conformance-ENTP_A_Qualcomm_1
would show.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-24 12:07:20 +01:00
Michael Niedermayer
e5054c8eed avcodec/pthread_slice: Use av_freep() to avoid leaving stale pointers in memory
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-11-01 11:36:41 +01:00
Michael Niedermayer
72555f4a38 avcodec/pthread_slice: Check for malloc failure
Found-by: CSA
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-07-31 12:56:21 +02:00
Michael Niedermayer
4959c4a793 avcodec/pthread_slice: Use av_malloc(z)_array()
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-06-08 16:34:50 +02:00
Michael Niedermayer
3fc26d8073 Merge commit '38ecc3702dabbea09230f6d6333f59e74f5d1c12'
* commit '38ecc3702dabbea09230f6d6333f59e74f5d1c12':
  pthread: store thread contexts in AVCodecInternal instead of AVCodecContext

Conflicts:
	libavcodec/internal.h
	libavcodec/utils.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2013-11-04 11:14:38 +01:00
Michael Niedermayer
2a7cbc29a8 Merge commit 'daa7a1d4431b6acf1f93c4a98b3de123abf4ca18'
* commit 'daa7a1d4431b6acf1f93c4a98b3de123abf4ca18':
  pthread_slice: rename ThreadContext -> SliceThreadContext

Conflicts:
	libavcodec/pthread_slice.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2013-11-04 11:05:52 +01:00
Michael Niedermayer
4eea41cba1 Merge commit 'cc14ee03a7b91c69343f8d60c9e089a1950eeadb'
* commit 'cc14ee03a7b91c69343f8d60c9e089a1950eeadb':
  lavc: split slice and frame threading functions into separate files

Conflicts:
	libavcodec/Makefile
	libavcodec/pthread.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2013-11-04 10:44:34 +01:00
Anton Khirnov
38ecc3702d pthread: store thread contexts in AVCodecInternal instead of AVCodecContext
It's a private field, it should not be visible to callers.

Deprecate AVCodecContext.thread_opaque
2013-11-04 08:51:26 +01:00
Anton Khirnov
daa7a1d443 pthread_slice: rename ThreadContext -> SliceThreadContext
This should prevent confusion with frame threading.
2013-11-04 08:51:26 +01:00
Anton Khirnov
cc14ee03a7 lavc: split slice and frame threading functions into separate files 2013-11-04 08:51:26 +01:00