Merge remote-tracking branch 'cehoyos/master'
* cehoyos/master: Mention in the documentation that fieldmatch needs cfr input. Use v4l2 input format automatically if filename starts with "/dev/video" Print a warning if a subtitle demuxer changes utf16 to utf8. Do not set the lame quality if the user didn't request it. Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
@@ -4447,6 +4447,10 @@ and VIVTC/VFM (VapourSynth project). The later is a light clone of TFM from
|
|||||||
which @code{fieldmatch} is based on. While the semantic and usage are very
|
which @code{fieldmatch} is based on. While the semantic and usage are very
|
||||||
close, some behaviour and options names can differ.
|
close, some behaviour and options names can differ.
|
||||||
|
|
||||||
|
The filter currently only works for constant frame rate input. Do not use it
|
||||||
|
if your input has mixed telecined and progressive content with changing
|
||||||
|
framerate.
|
||||||
|
|
||||||
The filter accepts the following options:
|
The filter accepts the following options:
|
||||||
|
|
||||||
@table @option
|
@table @option
|
||||||
|
@@ -106,9 +106,7 @@ static av_cold int mp3lame_encode_init(AVCodecContext *avctx)
|
|||||||
lame_set_out_samplerate(s->gfp, avctx->sample_rate);
|
lame_set_out_samplerate(s->gfp, avctx->sample_rate);
|
||||||
|
|
||||||
/* algorithmic quality */
|
/* algorithmic quality */
|
||||||
if (avctx->compression_level == FF_COMPRESSION_DEFAULT)
|
if (avctx->compression_level != FF_COMPRESSION_DEFAULT)
|
||||||
lame_set_quality(s->gfp, 5);
|
|
||||||
else
|
|
||||||
lame_set_quality(s->gfp, avctx->compression_level);
|
lame_set_quality(s->gfp, avctx->compression_level);
|
||||||
|
|
||||||
/* rate control */
|
/* rate control */
|
||||||
|
@@ -806,6 +806,13 @@ static int device_try_init(AVFormatContext *ctx,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int v4l2_read_probe(AVProbeData *p)
|
||||||
|
{
|
||||||
|
if (av_strstart(p->filename, "/dev/video", NULL))
|
||||||
|
return AVPROBE_SCORE_MAX - 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int v4l2_read_header(AVFormatContext *ctx)
|
static int v4l2_read_header(AVFormatContext *ctx)
|
||||||
{
|
{
|
||||||
struct video_data *s = ctx->priv_data;
|
struct video_data *s = ctx->priv_data;
|
||||||
@@ -1033,6 +1040,7 @@ AVInputFormat ff_v4l2_demuxer = {
|
|||||||
.name = "video4linux2,v4l2",
|
.name = "video4linux2,v4l2",
|
||||||
.long_name = NULL_IF_CONFIG_SMALL("Video4Linux2 device grab"),
|
.long_name = NULL_IF_CONFIG_SMALL("Video4Linux2 device grab"),
|
||||||
.priv_data_size = sizeof(struct video_data),
|
.priv_data_size = sizeof(struct video_data),
|
||||||
|
.read_probe = v4l2_read_probe,
|
||||||
.read_header = v4l2_read_header,
|
.read_header = v4l2_read_header,
|
||||||
.read_packet = v4l2_read_packet,
|
.read_packet = v4l2_read_packet,
|
||||||
.read_close = v4l2_read_close,
|
.read_close = v4l2_read_close,
|
||||||
|
@@ -112,7 +112,7 @@ static int ass_read_header(AVFormatContext *s)
|
|||||||
int res = 0;
|
int res = 0;
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
FFTextReader tr;
|
FFTextReader tr;
|
||||||
ff_text_init_avio(&tr, s->pb);
|
ff_text_init_avio(s, &tr, s->pb);
|
||||||
|
|
||||||
st = avformat_new_stream(s, NULL);
|
st = avformat_new_stream(s, NULL);
|
||||||
if (!st)
|
if (!st)
|
||||||
|
@@ -65,7 +65,7 @@ static int realtext_read_header(AVFormatContext *s)
|
|||||||
char c = 0;
|
char c = 0;
|
||||||
int res = 0, duration = read_ts("60"); // default duration is 60 seconds
|
int res = 0, duration = read_ts("60"); // default duration is 60 seconds
|
||||||
FFTextReader tr;
|
FFTextReader tr;
|
||||||
ff_text_init_avio(&tr, s->pb);
|
ff_text_init_avio(s, &tr, s->pb);
|
||||||
|
|
||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
|
@@ -54,7 +54,7 @@ static int sami_read_header(AVFormatContext *s)
|
|||||||
char c = 0;
|
char c = 0;
|
||||||
int res = 0, got_first_sync_point = 0;
|
int res = 0, got_first_sync_point = 0;
|
||||||
FFTextReader tr;
|
FFTextReader tr;
|
||||||
ff_text_init_avio(&tr, s->pb);
|
ff_text_init_avio(s, &tr, s->pb);
|
||||||
|
|
||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
|
@@ -87,7 +87,7 @@ static int srt_read_header(AVFormatContext *s)
|
|||||||
AVStream *st = avformat_new_stream(s, NULL);
|
AVStream *st = avformat_new_stream(s, NULL);
|
||||||
int res = 0;
|
int res = 0;
|
||||||
FFTextReader tr;
|
FFTextReader tr;
|
||||||
ff_text_init_avio(&tr, s->pb);
|
ff_text_init_avio(s, &tr, s->pb);
|
||||||
|
|
||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
|
@@ -24,7 +24,7 @@
|
|||||||
#include "libavutil/avassert.h"
|
#include "libavutil/avassert.h"
|
||||||
#include "libavutil/avstring.h"
|
#include "libavutil/avstring.h"
|
||||||
|
|
||||||
void ff_text_init_avio(FFTextReader *r, AVIOContext *pb)
|
void ff_text_init_avio(void *s, FFTextReader *r, AVIOContext *pb)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
r->pb = pb;
|
r->pb = pb;
|
||||||
@@ -45,13 +45,16 @@ void ff_text_init_avio(FFTextReader *r, AVIOContext *pb)
|
|||||||
r->buf_pos += 3;
|
r->buf_pos += 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (s && (r->type == FF_UTF16LE || r->type == FF_UTF16BE))
|
||||||
|
av_log(s, AV_LOG_WARNING,
|
||||||
|
"UTF16 is automatically converted to UTF8, do not specify a character encoding\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void ff_text_init_buf(FFTextReader *r, void *buf, size_t size)
|
void ff_text_init_buf(FFTextReader *r, void *buf, size_t size)
|
||||||
{
|
{
|
||||||
memset(&r->buf_pb, 0, sizeof(r->buf_pb));
|
memset(&r->buf_pb, 0, sizeof(r->buf_pb));
|
||||||
ffio_init_context(&r->buf_pb, buf, size, 0, NULL, NULL, NULL, NULL);
|
ffio_init_context(&r->buf_pb, buf, size, 0, NULL, NULL, NULL, NULL);
|
||||||
ff_text_init_avio(r, &r->buf_pb);
|
ff_text_init_avio(NULL, r, &r->buf_pb);
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t ff_text_pos(FFTextReader *r)
|
int64_t ff_text_pos(FFTextReader *r)
|
||||||
|
@@ -49,14 +49,16 @@ typedef struct {
|
|||||||
* Initialize the FFTextReader from the given AVIOContext. This function will
|
* Initialize the FFTextReader from the given AVIOContext. This function will
|
||||||
* read some bytes from pb, and test for UTF-8 or UTF-16 BOMs. Further accesses
|
* read some bytes from pb, and test for UTF-8 or UTF-16 BOMs. Further accesses
|
||||||
* to FFTextReader will read more data from pb.
|
* to FFTextReader will read more data from pb.
|
||||||
|
* If s is not NULL, the user will be warned if a UTF-16 conversion takes place.
|
||||||
*
|
*
|
||||||
* The purpose of FFTextReader is to transparently convert read data to UTF-8
|
* The purpose of FFTextReader is to transparently convert read data to UTF-8
|
||||||
* if the stream had a UTF-16 BOM.
|
* if the stream had a UTF-16 BOM.
|
||||||
*
|
*
|
||||||
|
* @param s Pointer to provide av_log context
|
||||||
* @param r object which will be initialized
|
* @param r object which will be initialized
|
||||||
* @param pb stream to read from (referenced as long as FFTextReader is in use)
|
* @param pb stream to read from (referenced as long as FFTextReader is in use)
|
||||||
*/
|
*/
|
||||||
void ff_text_init_avio(FFTextReader *r, AVIOContext *pb);
|
void ff_text_init_avio(void *s, FFTextReader *r, AVIOContext *pb);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Similar to ff_text_init_avio(), but sets it up to read from a bounded buffer.
|
* Similar to ff_text_init_avio(), but sets it up to read from a bounded buffer.
|
||||||
|
Reference in New Issue
Block a user