aboutsummaryrefslogtreecommitdiffstats
path: root/libavfilter/vf_subtitles.c
diff options
context:
space:
mode:
authorValdikSS <iam@valdikss.org.ru>2014-05-01 14:51:17 +0400
committerClément Bœsch <u@pkh.me>2014-05-01 12:52:33 +0200
commit7a0e689c4517d8e6ccec6027354bd827965a9ba2 (patch)
tree8857b828448f70288bd6a9455e7de46d1e123ab9 /libavfilter/vf_subtitles.c
parent91736025b2807995e29bd0661807c1c84f515fef (diff)
downloadffmpeg-7a0e689c4517d8e6ccec6027354bd827965a9ba2.tar.gz
lavfi/subtitles: introduce stream_index
Signed-off-by: ValdikSS <iam@valdikss.org.ru>
Diffstat (limited to 'libavfilter/vf_subtitles.c')
-rw-r--r--libavfilter/vf_subtitles.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/libavfilter/vf_subtitles.c b/libavfilter/vf_subtitles.c
index bce0e9fe1b..558e509e4e 100644
--- a/libavfilter/vf_subtitles.c
+++ b/libavfilter/vf_subtitles.c
@@ -51,6 +51,7 @@ typedef struct {
ASS_Track *track;
char *filename;
char *charenc;
+ int stream_index;
uint8_t rgba_map[4];
int pix_step[4]; ///< steps per pixel for each plane of the main output
int original_w, original_h;
@@ -247,7 +248,9 @@ AVFilter ff_vf_ass = {
static const AVOption subtitles_options[] = {
COMMON_OPTIONS
- {"charenc", "set input character encoding", OFFSET(charenc), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX, FLAGS},
+ {"charenc", "set input character encoding", OFFSET(charenc), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX, FLAGS},
+ {"stream_index", "set stream index", OFFSET(stream_index), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, FLAGS},
+ {"si", "set stream index", OFFSET(stream_index), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, FLAGS},
{NULL},
};
@@ -279,6 +282,7 @@ AVFILTER_DEFINE_CLASS(subtitles);
static av_cold int init_subtitles(AVFilterContext *ctx)
{
int j, ret, sid;
+ int k = 0;
AVDictionary *codec_opts = NULL;
AVFormatContext *fmt = NULL;
AVCodecContext *dec_ctx = NULL;
@@ -309,7 +313,23 @@ static av_cold int init_subtitles(AVFilterContext *ctx)
goto end;
/* Locate subtitles stream */
- ret = av_find_best_stream(fmt, AVMEDIA_TYPE_SUBTITLE, -1, -1, NULL, 0);
+ if (ass->stream_index < 0)
+ ret = av_find_best_stream(fmt, AVMEDIA_TYPE_SUBTITLE, -1, -1, NULL, 0);
+ else {
+ ret = -1;
+ if (ass->stream_index < fmt->nb_streams) {
+ for (j = 0; j < fmt->nb_streams; j++) {
+ if (fmt->streams[j]->codec->codec_type == AVMEDIA_TYPE_SUBTITLE) {
+ if (ass->stream_index == k) {
+ ret = j;
+ break;
+ }
+ k++;
+ }
+ }
+ }
+ }
+
if (ret < 0) {
av_log(ctx, AV_LOG_ERROR, "Unable to locate subtitle stream in %s\n",
ass->filename);