Print a warning if a subtitle demuxer changes utf16 to utf8.
This does not fix anything but gives users a chance to know that they must not pass -sub_charenc UTF-16 to ffmpeg. Fixes ticket #4059.
This commit is contained in:
parent
2612214555
commit
19a6431ec2
@ -112,7 +112,7 @@ static int ass_read_header(AVFormatContext *s)
|
||||
int res = 0;
|
||||
AVStream *st;
|
||||
FFTextReader tr;
|
||||
ff_text_init_avio(&tr, s->pb);
|
||||
ff_text_init_avio(s, &tr, s->pb);
|
||||
|
||||
st = avformat_new_stream(s, NULL);
|
||||
if (!st)
|
||||
|
@ -65,7 +65,7 @@ static int realtext_read_header(AVFormatContext *s)
|
||||
char c = 0;
|
||||
int res = 0, duration = read_ts("60"); // default duration is 60 seconds
|
||||
FFTextReader tr;
|
||||
ff_text_init_avio(&tr, s->pb);
|
||||
ff_text_init_avio(s, &tr, s->pb);
|
||||
|
||||
if (!st)
|
||||
return AVERROR(ENOMEM);
|
||||
|
@ -54,7 +54,7 @@ static int sami_read_header(AVFormatContext *s)
|
||||
char c = 0;
|
||||
int res = 0, got_first_sync_point = 0;
|
||||
FFTextReader tr;
|
||||
ff_text_init_avio(&tr, s->pb);
|
||||
ff_text_init_avio(s, &tr, s->pb);
|
||||
|
||||
if (!st)
|
||||
return AVERROR(ENOMEM);
|
||||
|
@ -87,7 +87,7 @@ static int srt_read_header(AVFormatContext *s)
|
||||
AVStream *st = avformat_new_stream(s, NULL);
|
||||
int res = 0;
|
||||
FFTextReader tr;
|
||||
ff_text_init_avio(&tr, s->pb);
|
||||
ff_text_init_avio(s, &tr, s->pb);
|
||||
|
||||
if (!st)
|
||||
return AVERROR(ENOMEM);
|
||||
|
@ -24,7 +24,7 @@
|
||||
#include "libavutil/avassert.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;
|
||||
r->pb = pb;
|
||||
@ -45,13 +45,16 @@ void ff_text_init_avio(FFTextReader *r, AVIOContext *pb)
|
||||
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)
|
||||
{
|
||||
memset(&r->buf_pb, 0, sizeof(r->buf_pb));
|
||||
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)
|
||||
|
@ -49,14 +49,16 @@ typedef struct {
|
||||
* 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
|
||||
* 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
|
||||
* if the stream had a UTF-16 BOM.
|
||||
*
|
||||
* @param s Pointer to provide av_log context
|
||||
* @param r object which will be initialized
|
||||
* @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.
|
||||
|
Loading…
Reference in New Issue
Block a user