diff options
author | wm4 <wm4@nowhere> | 2015-11-05 17:24:35 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2015-11-05 17:24:35 +0100 |
commit | 2cf9ee989c4b53f945fe4aa9f6fc17001c3a60e7 (patch) | |
tree | cee8878a3e2c7ffa34db71f158da88dfdf145d7a /video | |
parent | 66ed50aa0024244cb12795182449b2769d633607 (diff) | |
download | mpv-2cf9ee989c4b53f945fe4aa9f6fc17001c3a60e7.tar.bz2 mpv-2cf9ee989c4b53f945fe4aa9f6fc17001c3a60e7.tar.xz |
rpi: add support for codecs other than h264
FFmpeg now supports h264 and mpeg2. At least vc-1 will probably follow.
Diffstat (limited to 'video')
-rw-r--r-- | video/decode/lavc.h | 2 | ||||
-rw-r--r-- | video/decode/rpi.c | 23 | ||||
-rw-r--r-- | video/decode/vd_lavc.c | 2 |
3 files changed, 20 insertions, 7 deletions
diff --git a/video/decode/lavc.h b/video/decode/lavc.h index b655b8480b..fa475c3fc5 100644 --- a/video/decode/lavc.h +++ b/video/decode/lavc.h @@ -56,7 +56,7 @@ struct vd_lavc_hwdec { void (*lock)(struct lavc_ctx *ctx); void (*unlock)(struct lavc_ctx *ctx); // Optional; if a special hardware decoder is needed (instead of "hwaccel"). - const char *(*get_codec)(struct lavc_ctx *ctx); + const char *(*get_codec)(struct lavc_ctx *ctx, const char *codec); }; enum { diff --git a/video/decode/rpi.c b/video/decode/rpi.c index 819369de0d..12816cdc86 100644 --- a/video/decode/rpi.c +++ b/video/decode/rpi.c @@ -18,6 +18,21 @@ #include "lavc.h" #include "common/common.h" +static const char *const codecs[][2] = { + {"h264", "h264_mmal"}, + {"mpeg2video", "mpeg2_mmal"}, + {0} +}; + +static const char *map_codec(const char *c) +{ + for (int n = 0; codecs[n][0]; n++) { + if (c && strcmp(codecs[n][0], c) == 0) + return codecs[n][1]; + } + return NULL; +} + static int init_decoder(struct lavc_ctx *ctx, int w, int h) { return 0; @@ -35,14 +50,12 @@ static int init(struct lavc_ctx *ctx) static int probe(struct vd_lavc_hwdec *hwdec, struct mp_hwdec_info *info, const char *decoder) { - if (strcmp(decoder, "h264") != 0) - return HWDEC_ERR_NO_CODEC; - return 0; + return map_codec(decoder) ? 0 : HWDEC_ERR_NO_CODEC; } -static const char *get_codec(struct lavc_ctx *ctx) +static const char *get_codec(struct lavc_ctx *ctx, const char *codec) { - return "h264_mmal"; + return map_codec(codec); } const struct vd_lavc_hwdec mp_vd_lavc_rpi = { diff --git a/video/decode/vd_lavc.c b/video/decode/vd_lavc.c index c80ec26deb..732f29d4f0 100644 --- a/video/decode/vd_lavc.c +++ b/video/decode/vd_lavc.c @@ -327,7 +327,7 @@ static int init(struct dec_video *vd, const char *decoder) if (hwdec) { ctx->software_fallback_decoder = talloc_strdup(ctx, decoder); if (hwdec->get_codec) - decoder = hwdec->get_codec(ctx); + decoder = hwdec->get_codec(ctx, decoder); MP_VERBOSE(vd, "Trying hardware decoding.\n"); } else { MP_VERBOSE(vd, "Using software decoding.\n"); |