diff options
author | wm4 <wm4@nowhere> | 2016-01-16 21:19:52 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2016-01-16 22:08:39 +0100 |
commit | 056901b2be67072f41315fce26e0f58e5569be9a (patch) | |
tree | 96c418024a3c9b9f2cbeebd25fa67929e60bcc6e /video/decode/dec_video.h | |
parent | 20991a95b8cbbae42ee4226282841d028355808b (diff) | |
download | mpv-056901b2be67072f41315fce26e0f58e5569be9a.tar.bz2 mpv-056901b2be67072f41315fce26e0f58e5569be9a.tar.xz |
video: refactor: disentangle decoding/filtering some more
This moves some code related to decoding from video.c to dec_video.c,
and also removes some accesses to dec_video.c from the filtering code.
dec_video.ch is starting to make sense, and simply returns video frames
from a demuxer stream. The API exposed is also somewhat intended to be
easily changeable to move decoding to a separate thread, if we ever want
this (due to libavcodec already being threaded, I don't see much of a
reason, but it might still be helpful).
Diffstat (limited to 'video/decode/dec_video.h')
-rw-r--r-- | video/decode/dec_video.h | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/video/decode/dec_video.h b/video/decode/dec_video.h index dc2f62f4a4..3aba448219 100644 --- a/video/decode/dec_video.h +++ b/video/decode/dec_video.h @@ -37,11 +37,11 @@ struct dec_video { char *decoder_desc; - // Used temporarily during decoding (important for format changes) - struct mp_image *waiting_decoded_mpi; - struct mp_image_params decoder_output; // last output of the decoder + float fps; // FPS from demuxer or from user override - struct mp_image *cover_art_mpi; + int dropped_frames; + + // Internal (shared with vd_lavc.c). void *priv; // for free use by vd_driver @@ -57,6 +57,8 @@ struct dec_video { double buffered_pts[128]; int num_buffered_pts; + // Strictly internal (dec_video.c). + // PTS or DTS of packet first read double first_packet_pdts; @@ -66,13 +68,14 @@ struct dec_video { // Final PTS of previously decoded image double decoded_pts; - float fps; // FPS from demuxer or from user override - struct mp_image_params last_format, fixed_format; float initial_decoder_aspect; - // State used only by player/video.c - double last_pts; + double start_pts; + bool framedrop_enabled; + struct mp_image *cover_art_mpi; + struct mp_image *current_mpi; + int current_state; }; struct mp_decoder_list *video_decoder_list(void); @@ -80,13 +83,24 @@ struct mp_decoder_list *video_decoder_list(void); bool video_init_best_codec(struct dec_video *d_video, char* video_decoders); void video_uninit(struct dec_video *d_video); +void video_work(struct dec_video *d_video); + +void video_set_framedrop(struct dec_video *d_video, bool enabled); +void video_set_start(struct dec_video *d_video, double start_pts); + +#define VIDEO_OK 1 +#define VIDEO_WAIT 0 +#define VIDEO_EOF -1 +#define VIDEO_SKIP -2 +int video_get_frame(struct dec_video *d_video, struct mp_image **out_mpi); + struct demux_packet; struct mp_image *video_decode(struct dec_video *d_video, struct demux_packet *packet, int drop_frame); int video_vd_control(struct dec_video *d_video, int cmd, void *arg); -void video_reset_decoding(struct dec_video *d_video); +void video_reset(struct dec_video *d_video); void video_reset_aspect(struct dec_video *d_video); #endif /* MPLAYER_DEC_VIDEO_H */ |