Originally committed as revision 26092 to svn://svn.ffmpeg.org/ffmpeg/trunktags/n0.8
| @@ -21,6 +21,7 @@ | |||||
| #include "libavutil/common.h" | #include "libavutil/common.h" | ||||
| #include "avformat.h" | #include "avformat.h" | ||||
| #include "internal.h" | |||||
| #include "gxf.h" | #include "gxf.h" | ||||
| struct gxf_stream_info { | struct gxf_stream_info { | ||||
| @@ -77,10 +78,9 @@ static int gxf_probe(AVProbeData *p) { | |||||
| static int get_sindex(AVFormatContext *s, int id, int format) { | static int get_sindex(AVFormatContext *s, int id, int format) { | ||||
| int i; | int i; | ||||
| AVStream *st = NULL; | AVStream *st = NULL; | ||||
| for (i = 0; i < s->nb_streams; i++) { | |||||
| if (s->streams[i]->id == id) | |||||
| return i; | |||||
| } | |||||
| i = ff_find_stream_index(s, id); | |||||
| if (i >= 0) | |||||
| return i; | |||||
| st = av_new_stream(s, id); | st = av_new_stream(s, id); | ||||
| if (!st) | if (!st) | ||||
| return AVERROR(ENOMEM); | return AVERROR(ENOMEM); | ||||
| @@ -220,4 +220,10 @@ typedef void (*ff_parse_key_val_cb)(void *context, const char *key, | |||||
| void ff_parse_key_value(const char *str, ff_parse_key_val_cb callback_get_buf, | void ff_parse_key_value(const char *str, ff_parse_key_val_cb callback_get_buf, | ||||
| void *context); | void *context); | ||||
| /** | |||||
| * Find stream index based on format-specific stream ID | |||||
| * @return stream index, or < 0 on error | |||||
| */ | |||||
| int ff_find_stream_index(AVFormatContext *s, int id); | |||||
| #endif /* AVFORMAT_INTERNAL_H */ | #endif /* AVFORMAT_INTERNAL_H */ | ||||
| @@ -3806,3 +3806,12 @@ void ff_parse_key_value(const char *str, ff_parse_key_val_cb callback_get_buf, | |||||
| } | } | ||||
| } | } | ||||
| int ff_find_stream_index(AVFormatContext *s, int id) | |||||
| { | |||||
| int i; | |||||
| for (i = 0; i < s->nb_streams; i++) { | |||||
| if (s->streams[i]->id == id) | |||||
| return i; | |||||
| } | |||||
| return -1; | |||||
| } | |||||