Re: [FFmpeg-devel] [PATCH] lavfi: USPP filter
On date Friday 2014-12-12 12:15:44 +0530, arwa arif encoded: [...] From b075eb959b00124de6c54a058fec865647d9dd17 Mon Sep 17 00:00:00 2001 From: Arwa Arif arwaarif1...@gmail.com Date: Fri, 12 Dec 2014 11:14:26 +0530 Subject: [PATCH] Delete mp=uspp --- doc/filters.texi |1 - libavfilter/Makefile |1 - libavfilter/libmpcodecs/vf_uspp.c | 394 - libavfilter/version.h |2 +- libavfilter/vf_mp.c |4 - 5 files changed, 1 insertion(+), 401 deletions(-) delete mode 100644 libavfilter/libmpcodecs/vf_uspp.c LGTM, thanks. -- FFmpeg = Formidable Fascinating Mortal Puritan Elitist Gospel ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] avformat: add dump_metadata_lines
On Fri, 12 Dec 2014 02:24:54 +0100 Michael Niedermayer michae...@gmx.at wrote: On Thu, Dec 11, 2014 at 01:18:21AM +, Vittorio Giovara wrote: On Wed, Dec 10, 2014 at 1:23 PM, wm4 nfx...@googlemail.com wrote: On Wed, 10 Dec 2014 03:38:03 +0100 Lukasz Marek lukasz.m.lu...@gmail.com wrote: W dniu środa, 10 grudnia 2014 Vittorio Giovara vittorio.giov...@gmail.com napisał(a): On Tue, Dec 9, 2014 at 10:17 PM, wm4 nfx...@googlemail.com javascript:; wrote: On Tue, 9 Dec 2014 14:10:22 +0100 Michael Niedermayer michae...@gmx.at javascript:; wrote: TODO: bump version, update APIChanges Signed-off-by: Michael Niedermayer michae...@gmx.at javascript:; --- libavformat/avformat.h |8 libavformat/dump.c | 24 ++-- libavformat/options_table.h |1 + 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 2e54ed1..cbe3608 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1616,6 +1616,14 @@ typedef struct AVFormatContext { */ char *format_whitelist; +/** + * Maximum number of lines per metadata tag to dump with av_log. + * -1 means default + * - encoding: unused + * - decoding: set by user through AVOptions (NO direct access) + */ +int dump_metadata_lines; + /* * All fields below this line are not part of the public API. They * may not be used outside of libavformat and can be changed and diff --git a/libavformat/dump.c b/libavformat/dump.c index 56b37ff..38286b8 100644 --- a/libavformat/dump.c +++ b/libavformat/dump.c @@ -126,7 +126,7 @@ static void print_fps(double d, const char *postfix) av_log(NULL, AV_LOG_INFO, %1.0fk %s, d / 1000, postfix); } -static void dump_metadata(void *ctx, AVDictionary *m, const char *indent) +static void dump_metadata(void *ctx, AVDictionary *m, const char *indent, int dump_metadata_lines_arg) { if (m !(av_dict_count(m) == 1 av_dict_get(m, language, NULL, 0))) { AVDictionaryEntry *tag = NULL; @@ -135,16 +135,28 @@ static void dump_metadata(void *ctx, AVDictionary *m, const char *indent) while ((tag = av_dict_get(m, , tag, AV_DICT_IGNORE_SUFFIX))) if (strcmp(language, tag-key)) { const char *p = tag-value; +int lines = 0; +int dump_metadata_lines = dump_metadata_lines_arg; +if (dump_metadata_lines == -1) { +dump_metadata_lines = strcmp(comment, tag-key) ? 1 : 25; +} av_log(ctx, AV_LOG_INFO, %s %-16s: , indent, tag-key); while (*p) { char tmp[256]; size_t len = strcspn(p, \x8\xa\xb\xc\xd); +if (lines = dump_metadata_lines) { +av_log(ctx, AV_LOG_INFO, [%SIZE_SPECIFIER bytes ommited, use \'-dump_metadata_lines max\' to see more], strlen(p)); +break; +} av_strlcpy(tmp, p, FFMIN(sizeof(tmp), len+1)); av_log(ctx, AV_LOG_INFO, %s, tmp); p += len; if (*p == 0xd) av_log(ctx, AV_LOG_INFO, ); -if (*p == 0xa) av_log(ctx, AV_LOG_INFO, \n%s %-16s: , indent, ); +if (*p == 0xa) { +av_log(ctx, AV_LOG_INFO, \n%s %-16s: , indent, ); +lines++; +} if (*p) p++; } av_log(ctx, AV_LOG_INFO, \n); @@ -420,7 +432,7 @@ static void dump_stream_format(AVFormatContext *ic, int i, av_log(NULL, AV_LOG_INFO, (clean effects)); av_log(NULL, AV_LOG_INFO, \n); -dump_metadata(NULL, st-metadata, ); +dump_metadata(NULL, st-metadata, , ic-dump_metadata_lines); dump_sidedata(NULL, st, ); } @@ -438,7 +450,7 @@ void av_dump_format(AVFormatContext *ic, int index, index, is_output ? ic-oformat-name : ic-iformat-name, is_output ? to : from, url); -dump_metadata(NULL, ic-metadata, ); +dump_metadata(NULL, ic-metadata, , ic-dump_metadata_lines); if (!is_output) { av_log(NULL, AV_LOG_INFO, Duration: );
Re: [FFmpeg-devel] [PATCH] lavfi: USPP filter
On Fri, 12 Dec 2014 02:04:18 + (UTC) Carl Eugen Hoyos ceho...@ag.or.at wrote: arwa arif arwaarif1994 at gmail.com writes: I checked the ouput with quality 8, I am getting a broken output. Yes, that's ticket #3596. Congratulation for porting the filter, will you do fspp next? It's one ancient legacy filter that nobody uses enough? ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] lavfi: USPP filter
arwa arif arwaarif1994 at gmail.com writes: Since, fspp is written in assembly language also, I am not very sure if I will be able to do it. You can start with the C variant only, then copy the asm code to a new file as done in this commit: http://git.videolan.org/?p=ffmpeg.git;a=commitdiff;h=a2c547ff If you hit problems, ask here or on irc. Carl Eugen ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH]Fix leak reading invalid mxf files
On Wed, Dec 10, 2014 at 11:30:54AM +0100, Carl Eugen Hoyos wrote: Hi! Attached patch fixes ticket #4173 for me. To be split in two parts. Please comment, Carl Eugen probably ok if tomas doesnt reply [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB While the State exists there can be no freedom; when there is freedom there will be no State. -- Vladimir Lenin signature.asc Description: Digital signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH]Fix leak reading invalid mxf files
On Wed, 2014-12-10 at 11:30 +0100, Carl Eugen Hoyos wrote: Hi! Attached patch fixes ticket #4173 for me. To be split in two parts. Please comment, Carl Eugen Looks alright. Maybe you want to pass it a MXFMetadataSet** so you can use av_freep() like before? But I suppose it doesn't matter since the array gets free:d just a few lines below.. /Tomas signature.asc Description: This is a digitally signed message part ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH] avcodec/xiph: mark returned header pointers const from avpriv_split_xiph_headers()
Signed-off-by: Michael Niedermayer michae...@gmx.at --- libavcodec/vorbis_parser.c |2 +- libavcodec/vorbisdec.c |2 +- libavcodec/vp3.c |2 +- libavcodec/xiph.c |2 +- libavcodec/xiph.h |2 +- libavformat/matroskaenc.c |2 +- libavformat/sdp.c |2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/libavcodec/vorbis_parser.c b/libavcodec/vorbis_parser.c index b99f115..547fd47 100644 --- a/libavcodec/vorbis_parser.c +++ b/libavcodec/vorbis_parser.c @@ -184,7 +184,7 @@ bad_header: static int vorbis_parse_init(AVVorbisParseContext *s, const uint8_t *extradata, int extradata_size) { -uint8_t *header_start[3]; +const uint8_t *header_start[3]; int header_len[3]; int ret; diff --git a/libavcodec/vorbisdec.c b/libavcodec/vorbisdec.c index fb16099..09a863f 100644 --- a/libavcodec/vorbisdec.c +++ b/libavcodec/vorbisdec.c @@ -1017,7 +1017,7 @@ static av_cold int vorbis_decode_init(AVCodecContext *avctx) vorbis_context *vc = avctx-priv_data; uint8_t *headers = avctx-extradata; int headers_len= avctx-extradata_size; -uint8_t *header_start[3]; +const uint8_t *header_start[3]; int header_len[3]; GetBitContext *gb = vc-gb; int hdr_type, ret; diff --git a/libavcodec/vp3.c b/libavcodec/vp3.c index 8aca83a..0e37f0d 100644 --- a/libavcodec/vp3.c +++ b/libavcodec/vp3.c @@ -2437,7 +2437,7 @@ static av_cold int theora_decode_init(AVCodecContext *avctx) Vp3DecodeContext *s = avctx-priv_data; GetBitContext gb; int ptype; -uint8_t *header_start[3]; +const uint8_t *header_start[3]; int header_len[3]; int i; diff --git a/libavcodec/xiph.c b/libavcodec/xiph.c index 49b978d..d072224 100644 --- a/libavcodec/xiph.c +++ b/libavcodec/xiph.c @@ -22,7 +22,7 @@ #include xiph.h int avpriv_split_xiph_headers(const uint8_t *extradata, int extradata_size, - int first_header_size, uint8_t *header_start[3], + int first_header_size, const uint8_t *header_start[3], int header_len[3]) { int i; diff --git a/libavcodec/xiph.h b/libavcodec/xiph.h index b8ddbbe..1741a51 100644 --- a/libavcodec/xiph.h +++ b/libavcodec/xiph.h @@ -37,7 +37,7 @@ * @return On error a negative value is returned, on success zero. */ int avpriv_split_xiph_headers(const uint8_t *extradata, int extradata_size, - int first_header_size, uint8_t *header_start[3], + int first_header_size, const uint8_t *header_start[3], int header_len[3]); #endif /* AVCODEC_XIPH_H */ diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index e8e8da0..c781c8a 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -491,7 +491,7 @@ static int64_t mkv_write_cues(AVFormatContext *s, mkv_cues *cues, mkv_track *tra static int put_xiph_codecpriv(AVFormatContext *s, AVIOContext *pb, AVCodecContext *codec) { -uint8_t *header_start[3]; +const uint8_t *header_start[3]; int header_len[3]; int first_header_size; int j; diff --git a/libavformat/sdp.c b/libavformat/sdp.c index 5bf9de6..fadabbe 100644 --- a/libavformat/sdp.c +++ b/libavformat/sdp.c @@ -348,7 +348,7 @@ static char *extradata2config(AVCodecContext *c) static char *xiph_extradata2config(AVCodecContext *c) { char *config, *encoded_config; -uint8_t *header_start[3]; +const uint8_t *header_start[3]; int headers_len, header_len[3], config_len; int first_header_size; -- 1.7.9.5 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] avformat: Implement subtitle charenc guessing
Le duodi 22 frimaire, an CCXXIII, Rodger Combs a écrit : This also moves general charenc conversion from avcodec to avformat; the version in avcodec is left, but renamed; I'm not sure if that's the optimal solution. The documentation could probably use some improvements, and a few more options could be added to ENCA. This very simply prefers libguess over ENCA, and ENCA over uchardet, but will fall back on a less-preferred guess if something decodes wrong, and will drop illegal sequences in iconv if all else fails. It'd be possible to have ffmpeg.c present a UI if multiple guesses are returned, and other library consumers could do the same. I will not have time to comment soon enough, but I have reservations about this patch: - core feature requiring non-trivial external dependencies; - renaming an existing option; - tying proper working of lavc decoders to the use of lavf. Regards, -- Nicolas George ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] avformat: Implement subtitle charenc guessing
On 12 December 2014 at 07:05, Rodger Combs rodger.co...@gmail.com wrote: diff --git a/configure b/configure index e2e3619..a5a9f9b 100755 --- a/configure +++ b/configure @@ -199,6 +199,9 @@ External library support: --enable-gnutls enable gnutls, needed for https support if openssl is not used [no] --disable-iconv disable iconv [autodetect] + --disable-libguess disable libguess [autodetect] + --disable-uchardet disable universalchardet [autodetect] + --enable-encadisable enca [no] enable --enable-ladspa enable LADSPA audio filtering [no] --enable-libaacplus enable AAC+ encoding via libaacplus [no] --enable-libass enable libass subtitles rendering, @@ -1342,6 +1345,9 @@ EXTERNAL_LIBRARY_LIST= frei0r gnutls iconv +libguess +uchardet +enca ladspa libaacplus libass @@ -4358,6 +4364,7 @@ die_license_disabled gpl libxavs die_license_disabled gpl libxvid die_license_disabled gpl libzvbi die_license_disabled gpl x11grab +die_license_disabled gpl enca die_license_disabled nonfree libaacplus die_license_disabled nonfree libfaac @@ -5117,6 +5124,14 @@ enabled vdpau enabled xlib # Funny iconv installations are not unusual, so check it after all flags have been set disabled iconv || check_func_headers iconv.h iconv || check_lib2 iconv.h iconv -liconv || disable iconv +disabled iconv || disabled libguess || disable libguess { +check_pkg_config libguess libguess.h libguess_determine_encoding require_pkg_config libguess libguess.h libguess_determine_encoding enable libguess; +} +disabled iconv || disabled uchardet || disable uchardet { +check_pkg_config uchardet uchardet.h uchardet_new require_pkg_config uchardet uchardet.h uchardet_new enable uchardet; +} +enabled enca check_func_headers enca.h enca_analyse || check_lib2 enca.h enca_analyse -lenca || die ERROR: enca not found + enabled debug add_cflags -g$debuglevel add_asflags -g$debuglevel # add some useful compiler flags if supported diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h index 1d5b078..93b3105 100644 --- a/libavcodec/options_table.h +++ b/libavcodec/options_table.h @@ -472,7 +472,7 @@ static const AVOption avcodec_options[] = { {ka, Karaoke,0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_KARAOKE }, INT_MIN, INT_MAX, A|E, audio_service_type}, {request_sample_fmt, sample format audio decoders should prefer, OFFSET(request_sample_fmt), AV_OPT_TYPE_SAMPLE_FMT, {.i64=AV_SAMPLE_FMT_NONE}, -1, INT_MAX, A|D, request_sample_fmt}, {pkt_timebase, NULL, OFFSET(pkt_timebase), AV_OPT_TYPE_RATIONAL, {.dbl = 0 }, 0, INT_MAX, 0}, -{sub_charenc, set input text subtitles character encoding, OFFSET(sub_charenc), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX, S|D}, +{sub_charenc_lavc, set input text subtitles character encoding, OFFSET(sub_charenc), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX, S|D}, hmm, this is API break. is this really required? +/** + * Add a character encoding guess to an AVFormatContext's list + * + * @param avctx the context to add to + * @param enc the encoding name to add + * + * A copy is added, so the original string should be free()d if necessary. + * If the same encoding name is already present, it isn't added again. + * If NULL or an empty string is passed, it's not added. + */ +static void add_charenc(AVFormatContext *avctx, const char *enc) +{ +char *copy; + +if (!enc || !enc[0]) +return; + +for (unsigned i = 0; i avctx-nb_sub_charenc_guesses; i++) +if (!strcmp(avctx-sub_charenc_guesses[i], enc)) +return; + +copy = av_strdup(enc); +if (!copy) +return; + +dynarray_add(avctx-sub_charenc_guesses, avctx-nb_sub_charenc_guesses, + copy); av_dynarray_add_nofree is probably better. ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH 1/2] avcodec/avdct: support 8bit per sample dcts
Signed-off-by: Michael Niedermayer michae...@gmx.at --- libavcodec/avdct.c |3 +++ libavcodec/avdct.h |2 ++ 2 files changed, 5 insertions(+) diff --git a/libavcodec/avdct.c b/libavcodec/avdct.c index a01a6b7..f92c691 100644 --- a/libavcodec/avdct.c +++ b/libavcodec/avdct.c @@ -63,6 +63,8 @@ static const AVOption avdct_options[] = { {xvidmmx, experimental / for debugging, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, idct}, {faani, floating point AAN IDCT (experimental / for debugging), 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_FAAN }, INT_MIN, INT_MAX, V|D|E, idct}, {simpleauto, experimental / for debugging, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEAUTO }, INT_MIN, INT_MAX, V|E|D, idct}, + +{bits_per_sample, , OFFSET(bits_per_sample), AV_OPT_TYPE_INT, {.i64 = 8 }, 0, 14, 0,}, {NULL}, }; @@ -99,6 +101,7 @@ int avcodec_dct_init(AVDCT *dsp) avctx-idct_algo = dsp-idct_algo; avctx-dct_algo = dsp-dct_algo; +avctx-bits_per_raw_sample = dsp-bits_per_sample; #define COPY(src, name) memcpy(dsp-name, src.name, sizeof(dsp-name)) diff --git a/libavcodec/avdct.h b/libavcodec/avdct.h index 380efe1..272422e 100644 --- a/libavcodec/avdct.h +++ b/libavcodec/avdct.h @@ -65,6 +65,8 @@ typedef struct AVDCT { void (*get_pixels)(int16_t *block /* align 16 */, const uint8_t *pixels /* align 8 */, ptrdiff_t line_size); + +int bits_per_sample; } AVDCT; /** -- 1.7.9.5 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH 2/2] avfilter/vf_spp: support 10bit per sample
Signed-off-by: Michael Niedermayer michae...@gmx.at --- libavfilter/vf_spp.c | 89 -- 1 file changed, 71 insertions(+), 18 deletions(-) diff --git a/libavfilter/vf_spp.c b/libavfilter/vf_spp.c index 8eb0c7e..c03cf1f 100644 --- a/libavfilter/vf_spp.c +++ b/libavfilter/vf_spp.c @@ -186,6 +186,36 @@ static void store_slice_c(uint8_t *dst, const uint16_t *src, } } +static void store_slice16_c(uint16_t *dst, const uint16_t *src, +int dst_linesize, int src_linesize, +int width, int height, int log2_scale, +const uint8_t dither[8][8]) +{ +int y, x; + +#define STORE16(pos) do { \ +temp = ((src[x + y*src_linesize + pos] log2_scale) + (d[pos]1)) 5; \ +if (temp 0x400) \ +temp = ~(temp 31); \ +dst[x + y*dst_linesize + pos] = temp; \ +} while (0) + +for (y = 0; y height; y++) { +const uint8_t *d = dither[y]; +for (x = 0; x width; x += 8) { +int temp; +STORE16(0); +STORE16(1); +STORE16(2); +STORE16(3); +STORE16(4); +STORE16(5); +STORE16(6); +STORE16(7); +} +} +} + static inline void add_block(uint16_t *dst, int linesize, const int16_t block[64]) { int y; @@ -212,7 +242,7 @@ static inline int norm_qscale(int qscale, int type) static void filter(SPPContext *p, uint8_t *dst, uint8_t *src, int dst_linesize, int src_linesize, int width, int height, - const uint8_t *qp_table, int qp_stride, int is_luma) + const uint8_t *qp_table, int qp_stride, int is_luma, int sample_bytes) { int x, y, i; const int count = 1 p-log2_count; @@ -220,18 +250,26 @@ static void filter(SPPContext *p, uint8_t *dst, uint8_t *src, DECLARE_ALIGNED(16, uint64_t, block_align)[32]; int16_t *block = (int16_t *)block_align; int16_t *block2 = (int16_t *)(block_align + 16); +uint16_t *psrc16 = (uint16_t*)p-src; for (y = 0; y height; y++) { int index = 8 + 8*linesize + y*linesize; -memcpy(p-src + index, src + y*src_linesize, width); -for (x = 0; x 8; x++) { -p-src[index - x - 1] = p-src[index + x]; -p-src[index + width + x] = p-src[index + width - x - 1]; +memcpy(p-src + index*sample_bytes, src + y*src_linesize, width*sample_bytes); +if (sample_bytes == 1) { +for (x = 0; x 8; x++) { +p-src[index - x - 1] = p-src[index + x]; +p-src[index + width + x] = p-src[index + width - x - 1]; +} +} else { +for (x = 0; x 8; x++) { +psrc16[index - x - 1] = psrc16[index + x]; +psrc16[index + width + x] = psrc16[index + width - x - 1]; +} } } for (y = 0; y 8; y++) { -memcpy(p-src + ( 7-y)*linesize, p-src + ( y+8)*linesize, linesize); -memcpy(p-src + (height+8+y)*linesize, p-src + (height-y+7)*linesize, linesize); +memcpy(p-src + ( 7-y)*linesize * sample_bytes, p-src + ( y+8)*linesize * sample_bytes, linesize * sample_bytes); +memcpy(p-src + (height+8+y)*linesize * sample_bytes, p-src + (height-y+7)*linesize * sample_bytes, linesize * sample_bytes); } for (y = 0; y height + 8; y += 8) { @@ -250,18 +288,26 @@ static void filter(SPPContext *p, uint8_t *dst, uint8_t *src, const int x1 = x + offset[i + count - 1][0]; const int y1 = y + offset[i + count - 1][1]; const int index = x1 + y1*linesize; -p-dct-get_pixels(block, p-src + index, linesize); +p-dct-get_pixels(block, p-src + sample_bytes*index, sample_bytes*linesize); p-dct-fdct(block); p-requantize(block2, block, qp, p-dct-idct_permutation); p-dct-idct(block2); add_block(p-temp + index, linesize, block2); } } -if (y) -p-store_slice(dst + (y - 8) * dst_linesize, p-temp + 8 + y*linesize, - dst_linesize, linesize, width, - FFMIN(8, height + 8 - y), MAX_LEVEL - p-log2_count, - ldither); +if (y) { +if (sample_bytes == 1) { +p-store_slice(dst + (y - 8) * dst_linesize, p-temp + 8 + y*linesize, + dst_linesize, linesize, width, + FFMIN(8, height + 8 - y), MAX_LEVEL - p-log2_count, + ldither);
[FFmpeg-devel] [PATCH 1/5] lavu/dict: check for malloc failures
--- I didn't actually test these fixes, because someone just passed me a list of failures found with failmalloc, rather than providing reproducible test cases. --- libavutil/dict.c | 6 +- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libavutil/dict.c b/libavutil/dict.c index 2983ea5..a362de0 100644 --- a/libavutil/dict.c +++ b/libavutil/dict.c @@ -75,6 +75,8 @@ int av_dict_set(AVDictionary **pm, const char *key, const char *value, if (!m) m = *pm = av_mallocz(sizeof(*m)); +if (!m) +goto err_out; if (tag) { if (flags AV_DICT_DONT_OVERWRITE) { @@ -100,6 +102,8 @@ int av_dict_set(AVDictionary **pm, const char *key, const char *value, m-elems[m-count].key = (char*)(intptr_t)key; else m-elems[m-count].key = av_strdup(key); +if (!m-elems[m-count].key) +goto err_out; if (flags AV_DICT_DONT_STRDUP_VAL) { m-elems[m-count].value = (char*)(intptr_t)value; } else if (oldval flags AV_DICT_APPEND) { @@ -123,7 +127,7 @@ int av_dict_set(AVDictionary **pm, const char *key, const char *value, return 0; err_out: -if (!m-count) { +if (m !m-count) { av_free(m-elems); av_freep(pm); } -- 2.1.1 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH 3/5] lavu/dict: remove weird intptr_t cast
I can't come up with a reason why this would be needed. --- libavutil/dict.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavutil/dict.c b/libavutil/dict.c index c4b97dc..e33e6a1 100644 --- a/libavutil/dict.c +++ b/libavutil/dict.c @@ -100,14 +100,14 @@ int av_dict_set(AVDictionary **pm, const char *key, const char *value, } if (value) { if (flags AV_DICT_DONT_STRDUP_KEY) -m-elems[m-count].key = (char*)(intptr_t)key; +m-elems[m-count].key = (char*)key; else m-elems[m-count].key = av_strdup(key); if (!m-elems[m-count].key) goto err_out; tmp = m-elems[m-count].key; if (flags AV_DICT_DONT_STRDUP_VAL) { -m-elems[m-count].value = (char*)(intptr_t)value; +m-elems[m-count].value = (char*)value; } else if (oldval flags AV_DICT_APPEND) { int len = strlen(oldval) + strlen(value) + 1; char *newval = av_mallocz(len); -- 2.1.1 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH 2/5] lavu/dict: check for malloc failures some more
This fix is rather messy because of AV_DICT_DONT_STRDUP_VAL. It's not even clear how this should be handled. Maybe freeing the user's data on failure would actually be ok. --- libavutil/dict.c | 6 ++ 1 file changed, 6 insertions(+) diff --git a/libavutil/dict.c b/libavutil/dict.c index a362de0..c4b97dc 100644 --- a/libavutil/dict.c +++ b/libavutil/dict.c @@ -72,6 +72,7 @@ int av_dict_set(AVDictionary **pm, const char *key, const char *value, AVDictionary *m = *pm; AVDictionaryEntry *tag = av_dict_get(m, key, NULL, flags); char *oldval = NULL; +void *tmp = NULL; if (!m) m = *pm = av_mallocz(sizeof(*m)); @@ -104,6 +105,7 @@ int av_dict_set(AVDictionary **pm, const char *key, const char *value, m-elems[m-count].key = av_strdup(key); if (!m-elems[m-count].key) goto err_out; +tmp = m-elems[m-count].key; if (flags AV_DICT_DONT_STRDUP_VAL) { m-elems[m-count].value = (char*)(intptr_t)value; } else if (oldval flags AV_DICT_APPEND) { @@ -117,7 +119,10 @@ int av_dict_set(AVDictionary **pm, const char *key, const char *value, m-elems[m-count].value = newval; } else m-elems[m-count].value = av_strdup(value); +if (!m-elems[m-count].value) +goto err_out; m-count++; +tmp = NULL; } if (!m-count) { av_free(m-elems); @@ -133,6 +138,7 @@ err_out: } if (flags AV_DICT_DONT_STRDUP_KEY) av_free((void*)key); if (flags AV_DICT_DONT_STRDUP_VAL) av_free((void*)value); +av_free(tmp); return AVERROR(ENOMEM); } -- 2.1.1 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH 4/5] lavc/avpacket: check for malloc failure
--- libavcodec/avpacket.c | 5 - 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c index 3c26046..1867476 100644 --- a/libavcodec/avpacket.c +++ b/libavcodec/avpacket.c @@ -546,8 +546,11 @@ int av_packet_ref(AVPacket *dst, const AVPacket *src) if (ret 0) goto fail; memcpy(dst-buf-data, src-data, src-size); -} else +} else { dst-buf = av_buffer_ref(src-buf); +if (!dst-buf) +goto fail; +} dst-size = src-size; dst-data = dst-buf-data; -- 2.1.1 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH 5/5] lavu/utils: check for malloc failure
--- libavformat/utils.c | 4 1 file changed, 4 insertions(+) diff --git a/libavformat/utils.c b/libavformat/utils.c index 5a2a72d..fc582b7 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -3652,6 +3652,10 @@ AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c) st-info-last_dts = AV_NOPTS_VALUE; st-codec = avcodec_alloc_context3(c); +if (!st-codec) { +av_free(st); +return NULL; +} if (s-iformat) { /* no default bitrate if decoding */ st-codec-bit_rate = 0; -- 2.1.1 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 4/5] lavc/avpacket: check for malloc failure
On Fri, Dec 12, 2014 at 06:15:42PM +0100, wm4 wrote: --- libavcodec/avpacket.c | 5 - 1 file changed, 4 insertions(+), 1 deletion(-) applied thx [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Avoid a single point of failure, be that a person or equipment. signature.asc Description: Digital signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH]Set the default for --shlibdir to --libdir
Hi! Attached patch fixes ticket #4183. Please review, Carl Eugen diff --git a/configure b/configure index e2e3619..dc6c742 100755 --- a/configure +++ b/configure @@ -2685,7 +2685,7 @@ docdir_default='${prefix}/share/doc/ffmpeg' incdir_default='${prefix}/include' libdir_default='${prefix}/lib' mandir_default='${prefix}/share/man' -shlibdir_default=$libdir_default +shlibdir_default='${LIBDIR}' # toolchain ar_default=ar ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 5/5] lavu/utils: check for malloc failure
On Fri, Dec 12, 2014 at 06:15:43PM +0100, wm4 wrote: --- libavformat/utils.c | 4 1 file changed, 4 insertions(+) diff --git a/libavformat/utils.c b/libavformat/utils.c index 5a2a72d..fc582b7 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -3652,6 +3652,10 @@ AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c) st-info-last_dts = AV_NOPTS_VALUE; st-codec = avcodec_alloc_context3(c); +if (!st-codec) { +av_free(st); +return NULL; +} this would leak st-info [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB The greatest way to live with honor in this world is to be what we pretend to be. -- Socrates signature.asc Description: Digital signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH] avformat/utils: check for malloc failure
--- Also fixed the commit message. --- libavformat/utils.c | 5 + 1 file changed, 5 insertions(+) diff --git a/libavformat/utils.c b/libavformat/utils.c index 5a2a72d..8aee511 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -3652,6 +3652,11 @@ AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c) st-info-last_dts = AV_NOPTS_VALUE; st-codec = avcodec_alloc_context3(c); +if (!st-codec) { +av_free(st-info); +av_free(st); +return NULL; +} if (s-iformat) { /* no default bitrate if decoding */ st-codec-bit_rate = 0; -- 2.1.1 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 1/5] lavu/dict: check for malloc failures
On Fri, Dec 12, 2014 at 06:15:39PM +0100, wm4 wrote: --- I didn't actually test these fixes, because someone just passed me a list of failures found with failmalloc, rather than providing reproducible test cases. --- libavutil/dict.c | 6 +- 1 file changed, 5 insertions(+), 1 deletion(-) tested a bit applied thanks [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Asymptotically faster algorithms should always be preferred if you have asymptotical amounts of data signature.asc Description: Digital signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] avformat/utils: check for malloc failure
On Fri, Dec 12, 2014 at 10:22:55PM +0100, wm4 wrote: --- Also fixed the commit message. --- libavformat/utils.c | 5 + 1 file changed, 5 insertions(+) applied thanks [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB It is what and why we do it that matters, not just one of them. signature.asc Description: Digital signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] doc: add FFREPORT example
On Thu, Dec 11, 2014 at 12:00:09PM -0900, Lou Logan wrote: And fix a few nits. Signed-off-by: Lou Logan l...@lrcd.com --- doc/fftools-common-opts.texi | 18 +- 1 file changed, 13 insertions(+), 5 deletions(-) should be ok would be nice if named log levels could be used instead though [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Many that live deserve death. And some that die deserve life. Can you give it to them? Then do not be too eager to deal out death in judgement. For even the very wise cannot see all ends. -- Gandalf signature.asc Description: Digital signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH]Set the default for --shlibdir to --libdir
On 12/12/14, Carl Eugen Hoyos ceho...@ag.or.at wrote: Hi! Attached patch fixes ticket #4183. Please review, Carl Eugen You should also update the configure help text, as the default is not PREFIX/lib anymore. Best Regards ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 2/5] lavu/dict: check for malloc failures some more
On 12.12.2014 18:15, wm4 wrote: This fix is rather messy because of AV_DICT_DONT_STRDUP_VAL. It's not even clear how this should be handled. Maybe freeing the user's data on failure would actually be ok. const char* arg suggests this function should not free it, but dict would free it eventually so I agree freeing it should be OK, and convenient for a user. ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH]Set the default for --shlibdir to --libdir
On Saturday 13 December 2014 01:12:02 am Ivan Kalvachev wrote: On 12/12/14, Carl Eugen Hoyos ceho...@ag.or.at wrote: Hi! Attached patch fixes ticket #4183. Please review, Carl Eugen You should also update the configure help text, as the default is not PREFIX/lib anymore. New patch attached. Thank you, Carl Eugen diff --git a/configure b/configure index e2e3619..0ec1a7c 100755 --- a/configure +++ b/configure @@ -84,7 +84,7 @@ Standard options: --datadir=DIRinstall data files in DIR [PREFIX/share/ffmpeg] --docdir=DIR install documentation in DIR [PREFIX/share/doc/ffmpeg] --libdir=DIR install libs in DIR [PREFIX/lib] - --shlibdir=DIR install shared libs in DIR [PREFIX/lib] + --shlibdir=DIR install shared libs in DIR [LIBDIR] --incdir=DIR install includes in DIR [PREFIX/include] --mandir=DIR install man page in DIR [PREFIX/share/man] --enable-rpath use rpath to allow installing libraries in paths @@ -2685,7 +2685,7 @@ docdir_default='${prefix}/share/doc/ffmpeg' incdir_default='${prefix}/include' libdir_default='${prefix}/lib' mandir_default='${prefix}/share/man' -shlibdir_default=$libdir_default +shlibdir_default='${LIBDIR}' # toolchain ar_default=ar ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 2/5] lavu/dict: check for malloc failures some more
On Fri, Dec 12, 2014 at 06:15:40PM +0100, wm4 wrote: This fix is rather messy because of AV_DICT_DONT_STRDUP_VAL. It's not even clear how this should be handled. Maybe freeing the user's data on failure would actually be ok. --- libavutil/dict.c | 6 ++ 1 file changed, 6 insertions(+) diff --git a/libavutil/dict.c b/libavutil/dict.c index a362de0..c4b97dc 100644 --- a/libavutil/dict.c +++ b/libavutil/dict.c @@ -72,6 +72,7 @@ int av_dict_set(AVDictionary **pm, const char *key, const char *value, AVDictionary *m = *pm; AVDictionaryEntry *tag = av_dict_get(m, key, NULL, flags); char *oldval = NULL; +void *tmp = NULL; if (!m) m = *pm = av_mallocz(sizeof(*m)); @@ -104,6 +105,7 @@ int av_dict_set(AVDictionary **pm, const char *key, const char *value, m-elems[m-count].key = av_strdup(key); if (!m-elems[m-count].key) goto err_out; +tmp = m-elems[m-count].key; if (flags AV_DICT_DONT_STRDUP_VAL) { m-elems[m-count].value = (char*)(intptr_t)value; } else if (oldval flags AV_DICT_APPEND) { @@ -117,7 +119,10 @@ int av_dict_set(AVDictionary **pm, const char *key, const char *value, m-elems[m-count].value = newval; } else m-elems[m-count].value = av_strdup(value); +if (!m-elems[m-count].value) +goto err_out; m-count++; +tmp = NULL; } if (!m-count) { av_free(m-elems); @@ -133,6 +138,7 @@ err_out: } if (flags AV_DICT_DONT_STRDUP_KEY) av_free((void*)key); if (flags AV_DICT_DONT_STRDUP_VAL) av_free((void*)value); +av_free(tmp); this will/can lead to double frees [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB What does censorship reveal? It reveals fear. -- Julian Assange signature.asc Description: Digital signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH]Set the default for --shlibdir to --libdir
On Sat, Dec 13, 2014 at 01:50:03AM +0100, Carl Eugen Hoyos wrote: On Saturday 13 December 2014 01:12:02 am Ivan Kalvachev wrote: On 12/12/14, Carl Eugen Hoyos ceho...@ag.or.at wrote: Hi! Attached patch fixes ticket #4183. Please review, Carl Eugen You should also update the configure help text, as the default is not PREFIX/lib anymore. New patch attached. Thank you, Carl Eugen configure |4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 5499a4717addab272e5d29cccd7de96efe1a5766 patchshlibdir.diff diff --git a/configure b/configure index e2e3619..0ec1a7c 100755 --- a/configure +++ b/configure @@ -84,7 +84,7 @@ Standard options: --datadir=DIRinstall data files in DIR [PREFIX/share/ffmpeg] --docdir=DIR install documentation in DIR [PREFIX/share/doc/ffmpeg] --libdir=DIR install libs in DIR [PREFIX/lib] - --shlibdir=DIR install shared libs in DIR [PREFIX/lib] + --shlibdir=DIR install shared libs in DIR [LIBDIR] --incdir=DIR install includes in DIR [PREFIX/include] --mandir=DIR install man page in DIR [PREFIX/share/man] --enable-rpath use rpath to allow installing libraries in paths @@ -2685,7 +2685,7 @@ docdir_default='${prefix}/share/doc/ffmpeg' incdir_default='${prefix}/include' libdir_default='${prefix}/lib' mandir_default='${prefix}/share/man' -shlibdir_default=$libdir_default +shlibdir_default='${LIBDIR}' probably ok [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB The educated differ from the uneducated as much as the living from the dead. -- Aristotle signature.asc Description: Digital signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] doc: add FFREPORT example
On Sat, 13 Dec 2014 00:30:27 +0100, Michael Niedermayer wrote: should be ok would be nice if named log levels could be used instead though Agreed. Anyway, I pushed this. Maybe I can figure out how to get it to work with named log levels too. ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] avformat/hlsenc: added HLS encryption
On Thu, Dec 11, 2014 at 12:27:37PM -0600, Christian Suloway wrote: Added HLS encryption with -hls_key_info_file key_info_file option. The first line of key_info_file specifies the key URI for the playlist, and the second line specifies the path to the file containing the encryption key. Changes to key_info_file will be reflected in segment encryption along with an entry in the playlist for the new key URI. Also added -hls_flags random_iv option flag to use a random IV for encryption instead of the segment number. Signed-off-by: Christian Suloway csulo...@globaleagleent.com --- doc/muxers.texi | 11 +++ libavformat/hlsenc.c | 257 +-- 2 files changed, 262 insertions(+), 6 deletions(-) diff --git a/doc/muxers.texi b/doc/muxers.texi index a1264d2..29a5de3 100644 --- a/doc/muxers.texi +++ b/doc/muxers.texi @@ -263,6 +263,13 @@ ffmpeg in.nut -hls_segment_filename 'file%03d.ts' out.m3u8 This example will produce the playlist, @file{out.m3u8}, and segment files: @file{file000.ts}, @file{file001.ts}, @file{file002.ts}, etc. +@item hls_key_info_file @var{file} +Use in the information in @var{file} for segment encryption. The first line of +@var{file} specifies the key URI for the playlist. The second line specifies +the path to the file containing the encryption key as a single packed array of +16 octets in binary format. Changes to @var{file} will result in segment +encryption with the new key and an entry in the playlist for the new key URI. + @item hls_flags single_file If this flag is set, the muxer will store all segments in a single MPEG-TS file, and will use byte ranges in the playlist. HLS playlists generated with @@ -277,6 +284,10 @@ Will produce the playlist, @file{out.m3u8}, and a single segment file, @item hls_flags delete_segments Segment files removed from the playlist are deleted after a period of time equal to the duration of the segment plus the duration of the playlist. + +@item hls_flags random_iv +Segment file encryption will use a random initialization vector (IV) instead of +the segment number. @end table @anchor{ico} diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c index 79f3a23..5bde70e 100644 --- a/libavformat/hlsenc.c +++ b/libavformat/hlsenc.c @@ -32,17 +32,24 @@ #include libavutil/avstring.h #include libavutil/opt.h #include libavutil/log.h +#include libavutil/lfg.h +#include libavutil/random_seed.h #include avformat.h #include internal.h #include os_support.h +#define BLOCKSIZE 16 + typedef struct HLSSegment { char filename[1024]; double duration; /* in seconds */ int64_t pos; int64_t size; +char *key_uri; +char *iv_string; + struct HLSSegment *next; } HLSSegment; @@ -50,6 +57,7 @@ typedef enum HLSFlags { // Generate a single media file and use byte ranges in the playlist. HLS_SINGLE_FILE = (1 0), HLS_DELETE_SEGMENTS = (1 1), +HLS_RANDOM_IV = (1 2), } HLSFlags; typedef struct HLSContext { @@ -86,9 +94,23 @@ typedef struct HLSContext { char *format_options_str; AVDictionary *format_options; +char *key_info_file; +char *key_file; +char *key_uri; +char *key_string; +char *iv_string; +AVLFG *lfg; + AVIOContext *pb; } HLSContext; +static void hls_free_segment(HLSSegment *en) +{ + av_freep(en-key_uri); + av_freep(en-iv_string); + av_freep(en); +} + static int hls_delete_old_segments(HLSContext *hls) { HLSSegment *segment, *previous_segment = NULL; @@ -145,7 +167,7 @@ static int hls_delete_old_segments(HLSContext *hls) { av_free(path); previous_segment = segment; segment = previous_segment-next; -av_free(previous_segment); +hls_free_segment(previous_segment); } fail: @@ -154,6 +176,157 @@ fail: return ret; } +static int hls_encryption_init(AVFormatContext *s) +{ +HLSContext *hls = s-priv_data; + +if (hls-flags HLS_RANDOM_IV) { +hls-lfg = av_malloc(sizeof(AVLFG)); +if (!hls-lfg) +return AVERROR(ENOMEM); +av_lfg_init(hls-lfg, av_get_random_seed()); +} + +return 0; +} + +static int hls_encryption_start(HLSContext *hls) +{ + +int ret = 0, i, j, rotate_iv = 0; +AVIOContext *pb = NULL; +AVIOContext *dyn_buf = NULL; +uint8_t buf[1024], *tmp = NULL, *key = NULL, *iv = NULL; +char *p, *tstr, *saveptr = NULL, *key_string = NULL; +unsigned int u; + +if ((ret = avio_open(pb, hls-key_info_file, AVIO_FLAG_READ)) 0) { +av_log(hls, AV_LOG_ERROR, error opening key info file %s\n, + hls-key_info_file); +goto fail; +} + +ret = avio_open_dyn_buf(dyn_buf); +if (ret 0) { +avio_closep(pb); +goto fail; +} + +while ((ret