|
@@ -1,95 +0,0 @@
|
|
|
-Todo
|
|
|
-
|
|
|
--- For other people
|
|
|
-- Multithread vc1.
|
|
|
-- Multithread an intra codec like mjpeg (trivial).
|
|
|
-- Fix mpeg1 (see below).
|
|
|
-- Try the first three items under Optimization.
|
|
|
-- Fix h264 (see below).
|
|
|
-- Try mpeg4 (see below).
|
|
|
-
|
|
|
--- Bug fixes
|
|
|
-
|
|
|
-General critical:
|
|
|
-- Error resilience has to run before ff_report_frame_progress()
|
|
|
-is called. Otherwise there will be race conditions. (This might already
|
|
|
-work.) In general testing error paths should be done more.
|
|
|
-- 'make fate THREADS=2' doesn't pass. Most failures are due to
|
|
|
-bugs in vsync in ffmpeg.c, which are currently obscuring real failures.
|
|
|
-
|
|
|
-h264:
|
|
|
-- Files that aren't parsed (e.g. mp4) and contain PAFF with two
|
|
|
-field pictures in the same packet are not optimal. Modify the
|
|
|
-nals_needed check so that the second field's first slice is
|
|
|
-considered as needed, then uncomment the FIXME code in decode_postinit.
|
|
|
-Ex: http://astrange.ithinksw.net/ffmpeg/mt-samples/PAFF-Chalet-Tire.mp4
|
|
|
-
|
|
|
-mpeg4:
|
|
|
-- Packed B-frames need to be explicitly split up
|
|
|
-when frame threading is on. It's not very fast
|
|
|
-without this.
|
|
|
-- The buffer age optimization is disabled due to
|
|
|
-the way buffers are allocated across threads. The
|
|
|
-branch 'fix_buffer_age' has an attempt to fix it
|
|
|
-which breaks ffplay.
|
|
|
-- Support interlaced.
|
|
|
-
|
|
|
-mpeg1/2:
|
|
|
-- Seeking always prints "first frame not a keyframe"
|
|
|
-with threads on. Currently disabled for this reason.
|
|
|
-
|
|
|
--- Prove correct
|
|
|
-
|
|
|
-- decode_update_progress() in h264.c
|
|
|
-race_checking branch has some work on h264,
|
|
|
-but not that function. It might be worth putting
|
|
|
-the branch under #ifdef DEBUG in mainline, but
|
|
|
-the code would have to be cleaner.
|
|
|
-- MPV_lowest_referenced_row() and co in mpegvideo.c
|
|
|
-- Same in vp3.
|
|
|
-
|
|
|
--- Optimization
|
|
|
-
|
|
|
-- Merge h264 decode_update_progress() with loop_filter().
|
|
|
-Add CODEC_CAP_DRAW_HORIZ_BAND as a side effect.
|
|
|
-- EMU_EDGE is always set for h264 PAFF+MT
|
|
|
-because draw_edges() writes into the other field's
|
|
|
-thread's pixels. Needs an option to skip T/B fields.
|
|
|
-- Check update_thread_context() functions and make
|
|
|
-sure they only copy what they need to.
|
|
|
-- Try some more optimization of the "ref < 48; ref++"
|
|
|
-loop in h264.c await_references(), try turning the list0/list1 check
|
|
|
-above into a loop without being slower.
|
|
|
-- Support frame+slice threading at the same time
|
|
|
-by assigning slice_count threads for frame threads
|
|
|
-to use with execute(). This is simpler but unbalanced
|
|
|
-if only one frame thread uses any.
|
|
|
-
|
|
|
--- Features
|
|
|
-
|
|
|
-- Support streams with width/height changing. This
|
|
|
-requires flushing all current frames (and buffering
|
|
|
-the input in the meantime), closing the codec and
|
|
|
-reopening it. Or don't support it.
|
|
|
-- Support encoding. Might need more threading primitives
|
|
|
-for good ratecontrol; would be nice for audio and libavfilter too.
|
|
|
-- Async decoding part 1: instead of trying to
|
|
|
-start every thread at the beginning, return a picture
|
|
|
-if the earliest thread is already done, but don't wait
|
|
|
-for it. Not sure what effect this would have.
|
|
|
-- Part 2: have an API that doesn't wait for the decoding
|
|
|
-thread, only returns EAGAIN if it's not ready. What will
|
|
|
-it do with the next input packet if it returns that?
|
|
|
-- Have an API that returns finished pictures but doesn't
|
|
|
-require sending new ones. Maybe allow NULL avpkt when
|
|
|
-not at the end of the stream.
|
|
|
-
|
|
|
--- Samples
|
|
|
-
|
|
|
-http://astrange.ithinksw.net/ffmpeg/mt-samples/
|
|
|
-
|
|
|
-See yuvcmp.c in this directory to compare decoded samples.
|
|
|
-
|
|
|
-For debugging, try commenting out ff_thread_finish_setup calls so
|
|
|
-that only one thread runs at once, and then binary search+
|
|
|
-scatter printfs to look for differences in codec contexts.
|