Commit Graph

541 Commits

Author SHA1 Message Date
John Stebbins
998c9f15d1 idct: remove call to ff_idctdsp_init from ff_MPV_common_init
One step in untangling the mpegvideo code and fixing some problems in
the order that initialization is being done in h263dec and h261dec.
2014-08-14 07:58:49 -07:00
Nidhi Makhijani
ccbf370f20 mpegvideo: move vol_control_parameters to the only place it is used
Signed-off-by: Diego Biurrun <diego@biurrun.de>
2014-07-29 09:13:18 -07:00
Diego Biurrun
d8520d3ee0 mpegvideo: Move QMAT_SHIFT* defines to the only place they are used 2014-07-25 12:00:53 -07:00
Diego Biurrun
4fbb62a21b mpegvideo: Move ME_MAP_* defines to the only place they are used 2014-07-25 12:00:53 -07:00
Diego Biurrun
ff85334375 mpegvideo: Drop unused MPEG_BUF_SIZE and CHROMA_444 defines 2014-07-25 12:00:52 -07:00
Nidhi Makhijani
436ced244f mpegenccontext: Remove unused opaque pointer
Signed-off-by: Diego Biurrun <diego@biurrun.de>
2014-07-24 07:59:44 -07:00
Nidhi Makhijani
eac77fcd56 mpegenccontext: Remove unused dct_unquantize_h261 function pointers
Signed-off-by: Diego Biurrun <diego@biurrun.de>
2014-07-23 05:07:21 -07:00
Diego Biurrun
2b6ab3a2bd mpegvideo: Move QUANT_BIAS_SHIFT define to the only place it is used 2014-07-23 03:16:55 -07:00
James Yu
16e6652286 aarch64: NEON intrinsics dct_unquantize_h263.
Intrinsics only used on aarch64 since the existing ARMv7 NEON asm
is slightly faster (Cortex-A9, gcc-4.8, micro-benchmarks and full
decoding time).

Signed-off-by: James Yu <james.yu@linaro.org>
Signed-off-by: Janne Grunau <janne-libav@jannau.net>
2014-07-21 23:18:29 +02:00
Nidhi Makhijani
9f99a5f1d0 mpegencconetxt: Move rv10-specific orig_width/orig_height where they belong
Signed-off-by: Diego Biurrun <diego@biurrun.de>
2014-07-20 05:13:01 -07:00
Diego Biurrun
2d60444331 dsputil: Split motion estimation compare bits off into their own context 2014-07-17 09:07:10 -07:00
Diego Biurrun
f46bb608d9 dsputil: Split off pixel block routines into their own context 2014-07-09 08:05:26 -07:00
Diego Biurrun
a9aee08d90 dsputil: Split off FDCT bits into their own context 2014-07-07 12:28:45 -07:00
Diego Biurrun
3c650efb81 dsputil: Move draw_edges() to mpegvideoencdsp 2014-07-06 14:48:50 -07:00
Diego Biurrun
8d686ca59d dsputil: Split off *_8x8basis to a separate context 2014-07-06 13:09:24 -07:00
Diego Biurrun
e3fcb14347 dsputil: Split off IDCT bits into their own context 2014-06-30 07:58:46 -07:00
Diego Biurrun
5dd8c08fd5 mpeg: Change ff_convert_matrix() to take an MpegEncContext parameter
This will come in handy during dsputil splitting.
2014-06-27 05:17:11 -07:00
Diego Biurrun
fab9df63a3 dsputil: Split off global motion compensation bits into a separate context 2014-06-23 09:58:17 -07:00
Diego Biurrun
7b9ef8d701 mpeg: Split error resilience bits off into a separate file 2014-06-22 17:36:37 -07:00
Diego Biurrun
8d695dc411 mpeg: Mark ff_mpeg_set_erpic() static
It is not used outside of the file.
2014-06-22 06:28:46 -07:00
Diego Biurrun
e74433a8e6 dsputil: Split clear_block*/fill_block* off into a separate context 2014-06-18 14:07:23 -07:00
Diego Biurrun
368f50359e dsputil: Split off quarterpel bits into their own context 2014-05-29 06:48:31 -07:00
Diego Biurrun
3832a65901 dsputil: Move ff_alternate_*_scan tables to mpegvideo 2014-05-29 06:41:15 -07:00
Anton Khirnov
a2941c8cb2 lavc: move CODEC_FLAG_MV0 to mpegvideo 2014-05-01 09:24:18 +02:00
Anton Khirnov
b2c31710c9 lavc: move CODEC_FLAG_NORMALIZE_AQP to mpegvideo 2014-05-01 09:23:19 +02:00
Anton Khirnov
c1f92d1358 mpegvideo: remove unused MpegEncContext.b4_stride 2014-04-29 14:49:42 +02:00
Anton Khirnov
6a13505c06 mpegvideo: move the MpegEncContext fields used from arm asm to the beginning
This should reduce the frequency with which the offsets need to be
updated.
2014-04-29 14:49:42 +02:00
wm4
f6774f905f mpegvideo: operate with pointers to AVFrames instead of whole structs
The most interesting parts are initialization in ff_MPV_common_init() and
uninitialization in ff_MPV_common_end().

ff_mpeg_unref_picture and ff_thread_release_buffer have additional NULL
checks for Picture.f, because these functions can be called on
uninitialized or partially initialized Pictures.

NULL pointer checks are added to ff_thread_release_buffer() stub function.

Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2014-04-09 02:12:19 +02:00
Vittorio Giovara
6f6c029464 lavc: drop ff_pixfmt_list_420 2014-03-23 01:56:58 +01:00
Vittorio Giovara
7245a0ae87 mpegvideo: remove h264-only fields 2014-03-16 23:05:47 +01:00
Vittorio Giovara
be039278b5 mpegvideo: move ff_draw_horiz_band() to mpegutils.c
Drop the mpegvideo dependency for svq3 in configure.
2014-03-16 23:05:39 +01:00
Vittorio Giovara
e0c16e4e32 mpegvideo: move mpegvideo formats-related defines to mpegutils.h 2014-03-16 23:04:41 +01:00
Vittorio Giovara
d66e305bd1 er: move relevant fields from Picture to ERPicture
This is done to disentangle ER from mpegvideo. In order to use a
classic Picture, callers can use ff_mpeg_set_erpic() or use a custom function
to set the fields. Please note that buffers need to be allocated before
calling ff_er_frame_end().
2014-03-16 23:01:00 +01:00
Vittorio Giovara
75af13a0e4 mpegvideo: directly use frames in ff_draw_horiz_band() 2014-03-16 23:01:00 +01:00
Diego Biurrun
54b2ce7418 mpeg: Drop unused parameters from ff_draw_horiz_band() 2014-01-29 16:37:23 +01:00
Anton Khirnov
ebfe622bb1 mpegvideo: drop support for real (non-emulated) edges
Several decoders disable those anyway and they are not measurably faster
on x86. They might be somewhat faster on other platforms due to missing
emu edge SIMD, but the gain is not large enough (and those decoders
relevant enough) to justify the added complexity.
2014-01-09 09:41:19 +01:00
Anton Khirnov
a3a55645f0 mpegvideo: remove disabled bfin asm
It has been disabled as 'broken' over 3 years ago in b716a792
2014-01-03 16:54:24 +01:00
Anton Khirnov
24abd806ea ljpegenc: deMpegEncContextize
The encoder uses almost none of the mpegvideo infrastructure, only some
fields from MpegEncContext.

The FATE results change because now an all-zero quant matrix is written
into the file. Since it is not used for anything for ljpeg, this should
not be a problem.
2013-12-05 13:35:55 +01:00
Anton Khirnov
282c6a1a0e mpegvideo: make ff_release_unused_pictures() static
It is only called from one place in mpegvideo.c now. Also remove the
remove_current parameter, which is always 1.
2013-12-05 13:26:50 +01:00
Anton Khirnov
c99307caee mpegvideo: make frame_size_alloc() static.
It is not called from outside of mpegvideo.c anymore.
2013-12-05 13:25:46 +01:00
Anton Khirnov
0b0a7a751d mpegvideo: move encode-only parts of common_end() to encode_end() 2013-12-05 13:25:26 +01:00
Anton Khirnov
ff7ffe4809 mpeg4videodec: move showed_packed_warning from MpegEncContext to Mpeg4DecContext 2013-12-05 13:22:37 +01:00
Anton Khirnov
f7d228676c mpeg4videodec: move intra_dc_threshold from MpegEncContext to Mpeg4DecContext 2013-12-05 13:22:18 +01:00
Anton Khirnov
a097f0049b mpeg12dec: move first_slice from MpegEncContext to Mpeg1Context 2013-12-05 13:22:03 +01:00
Anton Khirnov
ff300e435e mpegvideo: remove an unused variable 2013-12-05 13:21:57 +01:00
Anton Khirnov
e41ff4210a mpeg4videodec: move use_intra_dc_vlc from MpegEncContext to Mpeg4DecContext 2013-12-05 13:19:22 +01:00
Anton Khirnov
e026ee0446 mpeg4videodec: move sprite_{shift,traj} from MpegEncContext to Mpeg4DecContext 2013-11-29 17:37:16 +01:00
Anton Khirnov
513d849bb6 mpeg4videodec: move num_sprite_warping_points from MpegEncContext to Mpeg4DecContext 2013-11-29 17:36:57 +01:00
Anton Khirnov
9ba3fc3e3d mpeg4videodec: move sprite_brightness_change from MpegEncContext to Mpeg4DecContext 2013-11-29 17:36:43 +01:00
Anton Khirnov
58c120a929 mpeg4videodec: move scalability from MpegEncContext to Mpeg4DecContext 2013-11-29 17:36:28 +01:00
Anton Khirnov
6e81597d5a mpeg4videodec: move enhancement_type from MpegEncContext to Mpeg4DecContext 2013-11-29 17:36:05 +01:00
Anton Khirnov
2992afda83 mpeg4videodec: remove a write-only variable from MpegEncContext 2013-11-29 17:35:57 +01:00
Anton Khirnov
3b1c0f686d mpeg4videodec: move new_pred from MpegEncContext to Mpeg4DecContext 2013-11-29 17:35:13 +01:00
Anton Khirnov
e89247debd mpeg4videodec: replace MpegEncContext.reduced_res_vop with a local variable 2013-11-29 17:34:34 +01:00
Anton Khirnov
8cebc9eaac mpeg4videodec: remove a write-only variable from MpegEncContext 2013-11-29 14:19:48 +01:00
Anton Khirnov
b1aacd5668 mpeg4videodec: move t_frame from MpegEncContext to Mpeg4DecContext 2013-11-29 14:19:48 +01:00
Anton Khirnov
0388907400 mpeg4videodec: move cplx_estimation_* fields from MpegEncContext to Mpeg4DecContext 2013-11-29 14:19:48 +01:00
Anton Khirnov
43af264de8 mpeg4videodec: move mpeg4-specific bug workaround variables from MpegEncContext to Mpeg4DecContext 2013-11-29 14:19:48 +01:00
Anton Khirnov
48e1394095 mpeg4videodec: move MpegEncContext.resync_marker into Mpeg4DecContext. 2013-11-29 14:19:47 +01:00
Anton Khirnov
bc5abfb19e mpeg4videodec: move MpegEncContext.rvlc to Mpeg4DecContext 2013-11-29 14:19:47 +01:00
Anton Khirnov
9f0617d213 mpeg4videodec: remove write-only sprite variables from MpegEncContext 2013-11-29 14:19:47 +01:00
Anton Khirnov
1a89025793 mpeg4videodec: move MpegEncContext.vol_sprite_usage to Mpeg4DecContext 2013-11-29 14:19:47 +01:00
Anton Khirnov
e62a43f6b1 mpeg4videodec: move MpegEncContext.time_increment_bits to Mpeg4DecContext
The field remains in MpegEncContext for use in the encoder.
2013-11-29 14:19:47 +01:00
Anton Khirnov
ee8af2dd99 mpeg4videodec: move MpegEncContext.shape to Mpeg4DecContext 2013-11-29 14:19:47 +01:00
Anton Khirnov
1c01b0253e mpegvideo_enc: use the AVFrame API properly. 2013-11-16 17:51:10 +01:00
Diego Biurrun
ad1161799e mpeg12dec: Remove outdated UV swapping code for VCR2 2013-11-14 14:21:27 +01:00
Anton Khirnov
aa24122989 lavc: deprecate FF_MAX_B_FRAMES
We should not arbitrarily decide the maximum B-frame number for all
encoders supported by Libav, each encoder should be able to set its own
limits.
2013-11-14 09:41:03 +01:00
Anton Khirnov
b6094811f9 lavc: move MB_TYPE_* macros from avcodec.h to mpegvideo.h
They are mpegvideo-specific and not supposed to be used by callers.
2013-11-14 09:40:39 +01:00
Anton Khirnov
8941971a8f lavc: make error_rate a private option of mpegvideo encoders 2013-11-14 09:39:43 +01:00
Diego Biurrun
c7f7bfc9e3 Remove all Alpha architecture optimizations
Alpha has been end-of-lifed and no more test machines are available.
2013-11-13 20:45:49 +01:00
Diego Biurrun
0338c39698 dsputil: Split off H.263 bits into their own H263DSPContext 2013-11-08 12:40:47 +01:00
John Stebbins
28096e0a80 h264: wait for initial complete frame before outputing frames
This can be optionally disabled whith the "output_corrupt" flags
option.  When in "output_corrupt" mode, incomplete frames are
signalled through AVFrame.flags FRAME_FLAG_INCOMPLETE_FRAME.

Signed-off-by: Anton Khirnov <anton@khirnov.net>
2013-10-31 20:14:14 +01:00
Ronald S. Bultje
93f305473f lavc: Convert some remaining strides to ptrdiff_t 2013-10-15 23:58:20 +02:00
Vittorio Giovara
187105ff8a Fix references to deleted avcodec_encode_video() function 2013-09-16 13:59:19 +02:00
Diego Biurrun
38282149b6 ppc: More consistent arch initialization 2013-04-30 12:19:45 +02:00
Ronald S. Bultje
f4fed5a2f9 mpegvideo: Use hpeldsp instead of dsputil for half-pel functions
This also converts vc1, since that is mpegvideo-based.

Signed-off-by: Martin Storsjö <martin@martin.st>
2013-04-19 23:18:21 +03:00
Diego Biurrun
66ac3dbf1e h261: Move function declarations to h261.h 2013-04-05 12:25:12 +02:00
Diego Biurrun
eee2000b41 mpeg12: Move some ff_mpeg1_* function declarations to a more suitable place 2013-03-27 14:21:45 +01:00
Martin Storsjö
f1e9398621 lavc: Rename avpriv_mpv_find_start_code after moving out from mpegvideo
Also move the declaration to internal.h, and add restrict qualifiers
to the declaration (as in the implementation).

Signed-off-by: Martin Storsjö <martin@martin.st>
2013-03-26 09:50:02 +02:00
Anton Khirnov
07054015cf mpegvideo: remove FMT_H264 2013-03-11 18:24:25 +01:00
Anton Khirnov
37045e4229 mpegvideo: drop vismv code
It has been broken for over a year without anyone complaining or
noticing, thus proving that nobody ever uses it.
2013-03-08 07:40:41 +01:00
Anton Khirnov
759001c534 lavc decoders: work with refcounted frames. 2013-03-08 07:38:30 +01:00
Anton Khirnov
ad0c9f2d5d lavc: move AVFrame.hwaccel_picture_private to Picture.
This field is private and should not be present in a public struct. It
is only used in DXVA with mpegvideo-based decoders currently.
2013-03-08 07:36:01 +01:00
Ronald S. Bultje
8d061989dd lavc: Split out ff_hwaccel_pixfmt_list_420[] over individual codecs
Not all hwaccels implement all codecs, so using one single list for
multiple such codecs means some codecs will be represented in the list,
even though they don't actually handle that codec. Copying specific
lists in each codec fixes that.

Signed-off-by: Martin Storsjö <martin@martin.st>
2013-03-06 21:18:50 +02:00
Anton Khirnov
2c54155407 h264: deMpegEncContextize
Most of the changes are just trivial are just trivial replacements of
fields from MpegEncContext with equivalent fields in H264Context.
Everything in h264* other than h264.c are those trivial changes.

The nontrivial parts are:
1) extracting a simplified version of the frame management code from
   mpegvideo.c. We don't need last/next_picture anymore, since h264 uses
   its own more complex system already and those were set only to appease
   the mpegvideo parts.
2) some tables that need to be allocated/freed in appropriate places.
3) hwaccels -- mostly trivial replacements.
   for dxva, the draw_horiz_band() call is moved from
   ff_dxva2_common_end_frame() to per-codec end_frame() callbacks,
   because it's now different for h264 and MpegEncContext-based
   decoders.
4) svq3 -- it does not use h264 complex reference system, so I just
   added some very simplistic frame management instead and dropped the
   use of ff_h264_frame_start(). Because of this I also had to move some
   initialization code to svq3.

Additional fixes for chroma format and bit depth changes by
Janne Grunau <janne-libav@jannau.net>

Signed-off-by: Anton Khirnov <anton@khirnov.net>
2013-02-15 16:35:16 +01:00
Anton Khirnov
1d0feb5d1a mpegvideo: split ff_draw_horiz_band().
Split out dependency on MpegEncContext.
2013-02-15 16:10:19 +01:00
Anton Khirnov
54974c6298 error_resilience: decouple ER from MpegEncContext 2013-02-15 16:10:11 +01:00
Diego Biurrun
0b016eb99d dsputil: Move ff_block_permute to mpegvideo_enc 2013-02-07 22:05:25 +01:00
Anton Khirnov
d9df93efbf mpegvideo: simplify REBASE_PICTURE
Always evaluate to NULL when the source Picture is not located in the
MpegEncContext.picture array. That will only happen for
next/last_picture_ptr when updating the thread context during h264 frame
threaded decoding, where they will point to elements of ref_list. Since
ref_list is not copied during updating the context and is invalid until
it is constructed for the current slice, there is no point in doing
anything complicated with next/last_picture_ptr, as they will get
updated when the ref_list is filled.
2013-02-04 06:17:15 +01:00
Martin Storsjö
a65f965c04 mpegvideo: Do REBASE_PICTURE with byte pointers
REBASE_PICTURE (more specifically, this half of it) takes a Picture
pointer that points into one larger struct, finds the offset of
that Picture within the struct and finds the corresponding field
within another instance of a similar struct.

The pointer difference "pic - (Picture*)old_ctx" is a value given
in sizeof(Picture) units, and when applied back on
(Picture*)new_ctx gets multiplied back with sizeof(Picture). Many
compilers seem to optimize out this division/multiplication, but
not all do.

GCC 4.2 on OS X doesn't seem to remove the division/multiplication,
therefore the new pointer didn't turn out to point to exactly
the right place in the new struct since it only had sizeof(Picture)
granularity (and the Picture is not aligned on a sizeof(Picture)
boundary within the encompassing struct). This bug has been present
before 47318953d as well - with H264, pointers to h->ref_list[0][0]
pointed to 88 bytes before h->ref_list[0][0] after the rebase. After
shrinking Picture, the difference ended up even larger, making
writes via such a Picture pointer overwrite other fields at random
in H264Context, ending up in crashes later.

This fixes H264 multithreaded decoding on OS X with GCC 4.2.

Signed-off-by: Martin Storsjö <martin@martin.st>
2013-01-31 10:51:36 +02:00
Anton Khirnov
47318953dd mpegvideo: remove some unused variables from Picture. 2013-01-29 07:32:36 +01:00
Diego Biurrun
88bd7fdc82 Drop DCTELEM typedef
It does not help as an abstraction and adds dsputil dependencies.

Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
2013-01-22 18:32:56 -08:00
Ronald S. Bultje
8c53d39e7f lavc: introduce VideoDSPContext
Move some functions from dsputil. The idea is that videodsp contains
functions that are useful for a large and varied set of video decoders.
Currently, it contains emulated_edge_mc() and prefetch().

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2012-12-20 13:40:45 +01:00
Janne Grunau
f1d8763a02 mpegvideo: allocate scratch buffers after linesize is known
Since we can't know which stride a custom get_buffer() implementation is
going to use we have to allocate this scratch buffers after the linesize
is known. It was pretty safe for 8 bit per pixel pixel formats since we
always allocated memory for up to 16 bits per pixel. It broke hoever
with cmdutis.c's alloc_buffer() and high pixel bit depth since it
allocated larger edges than mpegvideo expected.

Fixes fuzzed sample nasa-8s2.ts_s244342.
2012-12-18 19:48:30 +01:00
Janne Grunau
6a27ae28f9 mpegvideo: treat delayed pictures as used
This requires to move the avcodec_default_free_buffers() call to
ff_MPV_common_end() since otherwise delayed pictures would get freed
during a size change.
2012-12-13 21:02:42 +01:00
Diego Biurrun
ba0c898120 cosmetics: Fix dropable --> droppable typo 2012-12-09 13:36:11 +01:00
Diego Biurrun
ca411fc1d3 avcodec: Remove broken MMI optimizations
The code fails to compile and is broken beyond repair.
2012-10-12 20:56:54 +02:00
Anton Khirnov
716d413c13 Replace PIX_FMT_* -> AV_PIX_FMT_*, PixelFormat -> AVPixelFormat 2012-10-08 07:13:26 +02:00
Janne Grunau
8701f4f8e8 mpeg4: support frame parameter changes with frame-mt
Adds a flag context_reinit to MpegEncContext to relieable keep track
of frame parameter changes which require a context reinitialization.
This is required for broken inputs which change the frame size but
error out before the context can be reinitialized.
2012-09-19 19:58:15 +02:00
Janne Grunau
435c0b87d2 mpegvideo: add reinit function for frame parameter changes
This is mainly required for frame parameter changes during frame based
multithreading but single threaded usage profits too from avoiding
ff_MPV_common_end()/ff_MPV_common_init() cycles.
2012-09-19 11:06:39 +02:00