From ab318aeea84f51fa0adcfb09a8a43abc67dae1cd Mon Sep 17 00:00:00 2001 From: wm4 Date: Mon, 1 Feb 2016 21:32:01 +0100 Subject: audio/video: merge decoder return values Will be helpful for the coming filter support. I planned on merging audio/video decoding, but this will have to wait a bit longer, so only remove the duplicate status codes. --- audio/decode/dec_audio.c | 22 +++++++++++----------- audio/decode/dec_audio.h | 5 ----- common/common.h | 7 +++++++ player/audio.c | 10 +++++----- player/video.c | 4 ++-- video/decode/dec_video.c | 34 +++++++++++++++++----------------- video/decode/dec_video.h | 7 +------ 7 files changed, 43 insertions(+), 46 deletions(-) diff --git a/audio/decode/dec_audio.c b/audio/decode/dec_audio.c index 9e136f2e3b..fede4ae2d7 100644 --- a/audio/decode/dec_audio.c +++ b/audio/decode/dec_audio.c @@ -201,7 +201,7 @@ void audio_work(struct dec_audio *da) return; if (!da->packet && demux_read_packet_async(da->header, &da->packet) == 0) { - da->current_state = AUDIO_WAIT; + da->current_state = DATA_WAIT; return; } @@ -218,30 +218,30 @@ void audio_work(struct dec_audio *da) da->current_frame = NULL; } - da->current_state = AUDIO_OK; + da->current_state = DATA_OK; if (!da->current_frame) { - da->current_state = AUDIO_EOF; + da->current_state = DATA_EOF; if (had_packet) - da->current_state = AUDIO_SKIP; + da->current_state = DATA_AGAIN; } fix_audio_pts(da); } // Fetch an audio frame decoded with audio_work(). Returns one of: -// AUDIO_OK: *out_frame is set to a new image -// AUDIO_WAIT: waiting for demuxer; will receive a wakeup signal -// AUDIO_EOF: end of file, no more frames to be expected -// AUDIO_SKIP: dropped frame or something similar +// DATA_OK: *out_frame is set to a new image +// DATA_WAIT: waiting for demuxer; will receive a wakeup signal +// DATA_EOF: end of file, no more frames to be expected +// DATA_AGAIN: dropped frame or something similar int audio_get_frame(struct dec_audio *da, struct mp_audio **out_frame) { *out_frame = NULL; if (da->current_frame) { *out_frame = da->current_frame; da->current_frame = NULL; - return AUDIO_OK; + return DATA_OK; } - if (da->current_state == AUDIO_OK) - return AUDIO_SKIP; + if (da->current_state == DATA_OK) + return DATA_AGAIN; return da->current_state; } diff --git a/audio/decode/dec_audio.h b/audio/decode/dec_audio.h index 90451ef787..a7f878bee7 100644 --- a/audio/decode/dec_audio.h +++ b/audio/decode/dec_audio.h @@ -52,11 +52,6 @@ int audio_init_best_codec(struct dec_audio *d_audio); void audio_uninit(struct dec_audio *d_audio); void audio_work(struct dec_audio *d_audio); - -#define AUDIO_OK 1 -#define AUDIO_WAIT 0 -#define AUDIO_EOF -1 -#define AUDIO_SKIP -2 int audio_get_frame(struct dec_audio *d_audio, struct mp_audio **out_frame); void audio_reset_decoding(struct dec_audio *d_audio); diff --git a/common/common.h b/common/common.h index 8edfc96d23..4b7da54dbd 100644 --- a/common/common.h +++ b/common/common.h @@ -57,6 +57,13 @@ enum stream_type { STREAM_TYPE_COUNT, }; +enum { + DATA_OK = 1, + DATA_WAIT = 0, + DATA_AGAIN = -1, + DATA_EOF = -2, +}; + extern const char *const mpv_version; extern const char *const mpv_builddate; diff --git a/player/audio.c b/player/audio.c index b6a3134230..b2581aa2fc 100644 --- a/player/audio.c +++ b/player/audio.c @@ -577,16 +577,16 @@ static int decode_new_frame(struct ao_chain *ao_c) if (ao_c->input_frame) return AD_OK; - int res = AUDIO_SKIP; - while (res == AUDIO_SKIP) { + int res = DATA_AGAIN; + while (res == DATA_AGAIN) { audio_work(ao_c->audio_src); res = audio_get_frame(ao_c->audio_src, &ao_c->input_frame); } switch (res) { - case AUDIO_OK: return AD_OK; - case AUDIO_WAIT: return AD_WAIT; - case AUDIO_EOF: return AD_EOF; + case DATA_OK: return AD_OK; + case DATA_WAIT: return AD_WAIT; + case DATA_EOF: return AD_EOF; default: abort(); } } diff --git a/player/video.c b/player/video.c index eb506b21e9..bb339503d7 100644 --- a/player/video.c +++ b/player/video.c @@ -456,8 +456,8 @@ static int decode_image(struct MPContext *mpctx) assert(!vo_c->input_mpi); int st = video_get_frame(d_video, &vo_c->input_mpi); switch (st) { - case VIDEO_WAIT: return VD_WAIT; - case VIDEO_EOF: return VD_EOF; + case DATA_WAIT: return VD_WAIT; + case DATA_EOF: return VD_EOF; default: return VD_PROGRESS; } } diff --git a/video/decode/dec_video.c b/video/decode/dec_video.c index 2bda6d1533..b278cdfe82 100644 --- a/video/decode/dec_video.c +++ b/video/decode/dec_video.c @@ -67,7 +67,7 @@ void video_reset(struct dec_video *d_video) d_video->codec_dts = MP_NOPTS_VALUE; d_video->last_format = d_video->fixed_format = (struct mp_image_params){0}; d_video->dropped_frames = 0; - d_video->current_state = VIDEO_SKIP; + d_video->current_state = DATA_AGAIN; mp_image_unrefp(&d_video->current_mpi); } @@ -382,24 +382,24 @@ void video_work(struct dec_video *d_video) return; if (d_video->header->attached_picture) { - if (d_video->current_state == VIDEO_SKIP && !d_video->cover_art_mpi) { + if (d_video->current_state == DATA_AGAIN && !d_video->cover_art_mpi) { d_video->cover_art_mpi = decode_packet(d_video, d_video->header->attached_picture, 0); // Might need flush. if (!d_video->cover_art_mpi) d_video->cover_art_mpi = decode_packet(d_video, NULL, 0); - d_video->current_state = VIDEO_OK; + d_video->current_state = DATA_OK; } - if (d_video->current_state == VIDEO_OK) + if (d_video->current_state == DATA_OK) d_video->current_mpi = mp_image_new_ref(d_video->cover_art_mpi); - // (VIDEO_OK is returned the first time, when current_mpi is sill set) - d_video->current_state = VIDEO_EOF; + // (DATA_OK is returned the first time, when current_mpi is sill set) + d_video->current_state = DATA_EOF; return; } struct demux_packet *pkt; if (demux_read_packet_async(d_video->header, &pkt) == 0) { - d_video->current_state = VIDEO_WAIT; + d_video->current_state = DATA_WAIT; return; } @@ -414,31 +414,31 @@ void video_work(struct dec_video *d_video) bool had_packet = !!pkt; talloc_free(pkt); - d_video->current_state = VIDEO_OK; + d_video->current_state = DATA_OK; if (!d_video->current_mpi) { - d_video->current_state = VIDEO_EOF; + d_video->current_state = DATA_EOF; if (had_packet) { if (framedrop_type == 1) d_video->dropped_frames += 1; - d_video->current_state = VIDEO_SKIP; + d_video->current_state = DATA_AGAIN; } } } // Fetch an image decoded with video_work(). Returns one of: -// VIDEO_OK: *out_mpi is set to a new image -// VIDEO_WAIT: waiting for demuxer; will receive a wakeup signal -// VIDEO_EOF: end of file, no more frames to be expected -// VIDEO_SKIP: dropped frame or something similar +// DATA_OK: *out_mpi is set to a new image +// DATA_WAIT: waiting for demuxer; will receive a wakeup signal +// DATA_EOF: end of file, no more frames to be expected +// DATA_AGAIN: dropped frame or something similar int video_get_frame(struct dec_video *d_video, struct mp_image **out_mpi) { *out_mpi = NULL; if (d_video->current_mpi) { *out_mpi = d_video->current_mpi; d_video->current_mpi = NULL; - return VIDEO_OK; + return DATA_OK; } - if (d_video->current_state == VIDEO_OK) - return VIDEO_SKIP; + if (d_video->current_state == DATA_OK) + return DATA_AGAIN; return d_video->current_state; } diff --git a/video/decode/dec_video.h b/video/decode/dec_video.h index 9e9f2d54c2..021c0be911 100644 --- a/video/decode/dec_video.h +++ b/video/decode/dec_video.h @@ -84,16 +84,11 @@ 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); +int video_get_frame(struct dec_video *d_video, struct mp_image **out_mpi); 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); - int video_vd_control(struct dec_video *d_video, int cmd, void *arg); void video_reset(struct dec_video *d_video); void video_reset_aspect(struct dec_video *d_video); -- cgit v1.2.3