Mercurial > mplayer.hg
changeset 24757:cc80a9169d90
Add -lavfdopts cryptokey
author | reimar |
---|---|
date | Sun, 14 Oct 2007 12:11:28 +0000 |
parents | 4858c996a5c9 |
children | 8383cea01fff |
files | DOCS/man/en/mplayer.1 libmpdemux/demux_lavf.c |
diffstat | 2 files changed, 27 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/DOCS/man/en/mplayer.1 Sun Oct 14 09:16:34 2007 +0000 +++ b/DOCS/man/en/mplayer.1 Sun Oct 14 12:11:28 2007 +0000 @@ -10154,6 +10154,11 @@ In the case of MPEG-TS this value identifies the maximum number of TS packets to scan. . +.TP +.B cryptokey=<hexstring> +Encryption key the demuxer should use. +This is the raw binary data of the key converted to a hexadecimal string. +. . . .SS FFmpeg libavformat muxers (\-lavfopts) (also see \-of lavf)
--- a/libmpdemux/demux_lavf.c Sun Oct 14 09:16:34 2007 +0000 +++ b/libmpdemux/demux_lavf.c Sun Oct 14 12:11:28 2007 +0000 @@ -49,11 +49,13 @@ static unsigned int opt_probesize = 0; static unsigned int opt_analyzeduration = 0; static char *opt_format; +static char *opt_cryptokey; m_option_t lavfdopts_conf[] = { {"probesize", &(opt_probesize), CONF_TYPE_INT, CONF_RANGE, 32, INT_MAX, NULL}, {"format", &(opt_format), CONF_TYPE_STRING, 0, 0, 0, NULL}, {"analyzeduration", &(opt_analyzeduration), CONF_TYPE_INT, CONF_RANGE, 0, INT_MAX, NULL}, + {"cryptokey", &(opt_cryptokey), CONF_TYPE_STRING, 0, 0, 0, NULL}, {NULL, NULL, 0, 0, 0, 0, NULL} }; @@ -250,6 +252,23 @@ return 0; } +static uint8_t char2int(char c) { + if (c >= '0' && c <= '9') return c - '0'; + if (c >= 'a' && c <= 'f') return c - 'a' + 10; + if (c >= 'A' && c <= 'F') return c - 'A' + 10; + return 0; +} + +static void parse_cryptokey(AVFormatContext *avfc, const char *str) { + int len = strlen(str) / 2; + uint8_t *key = av_mallocz(len); + int i; + avfc->keylen = len; + avfc->key = key; + for (i = 0; i < len; i++, str += 2) + *key++ = (char2int(str[0]) << 4) | char2int(str[1]); +} + static demuxer_t* demux_open_lavf(demuxer_t *demuxer){ AVFormatContext *avfc; AVFormatParameters ap; @@ -266,6 +285,8 @@ avfc = av_alloc_format_context(); + if (opt_cryptokey) + parse_cryptokey(avfc, opt_cryptokey); if (correct_pts) avfc->flags |= AVFMT_FLAG_GENPTS; if (index_mode == 0) @@ -668,6 +689,7 @@ if (priv){ if(priv->avfc) { + av_freep(&priv->avfc->key); av_close_input_file(priv->avfc); priv->avfc= NULL; } free(priv); demuxer->priv= NULL;