mirror of https://git.ffmpeg.org/ffmpeg.git
Merge remote-tracking branch 'cigaes/master'
* cigaes/master: lavf/matroskaenc: return an error for unsupported types. lavf/concatdec: remove invalid check for AVSEEK_FLAG_BACKWARD. lavf: filter out AVSEEK_FLAG_BACKWARD in new API. lavf: call the new seek API from the old. Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
30db867cb7
|
@ -1687,6 +1687,7 @@ int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp,
|
||||||
* or if stream_index is -1, in AV_TIME_BASE units.
|
* or if stream_index is -1, in AV_TIME_BASE units.
|
||||||
* If flags contain AVSEEK_FLAG_ANY, then non-keyframes are treated as
|
* If flags contain AVSEEK_FLAG_ANY, then non-keyframes are treated as
|
||||||
* keyframes (this may not be supported by all demuxers).
|
* keyframes (this may not be supported by all demuxers).
|
||||||
|
* If flags contain AVSEEK_FLAG_BACKWARD, it is ignored.
|
||||||
*
|
*
|
||||||
* @param stream_index index of the stream which is used as time base reference
|
* @param stream_index index of the stream which is used as time base reference
|
||||||
* @param min_ts smallest acceptable timestamp
|
* @param min_ts smallest acceptable timestamp
|
||||||
|
|
|
@ -341,7 +341,7 @@ static int real_seek(AVFormatContext *avf, int stream,
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
ret = try_seek(avf, stream, min_ts, ts, max_ts, flags);
|
ret = try_seek(avf, stream, min_ts, ts, max_ts, flags);
|
||||||
if (ret < 0 && !(flags & AVSEEK_FLAG_BACKWARD) &&
|
if (ret < 0 &&
|
||||||
left < cat->nb_files - 1 &&
|
left < cat->nb_files - 1 &&
|
||||||
cat->files[left + 1].start_time < max_ts) {
|
cat->files[left + 1].start_time < max_ts) {
|
||||||
if ((ret = open_file(avf, left + 1)) < 0)
|
if ((ret = open_file(avf, left + 1)) < 0)
|
||||||
|
|
|
@ -705,7 +705,7 @@ static int mkv_write_tracks(AVFormatContext *s)
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
av_log(s, AV_LOG_ERROR, "Only audio, video, and subtitles are supported for Matroska.\n");
|
av_log(s, AV_LOG_ERROR, "Only audio, video, and subtitles are supported for Matroska.\n");
|
||||||
break;
|
return AVERROR(EINVAL);
|
||||||
}
|
}
|
||||||
ret = mkv_write_codecprivate(s, pb, codec, native_id, qt_id);
|
ret = mkv_write_codecprivate(s, pb, codec, native_id, qt_id);
|
||||||
if (ret < 0) return ret;
|
if (ret < 0) return ret;
|
||||||
|
|
|
@ -2135,7 +2135,19 @@ static int seek_frame_internal(AVFormatContext *s, int stream_index,
|
||||||
|
|
||||||
int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
|
int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
|
||||||
{
|
{
|
||||||
int ret = seek_frame_internal(s, stream_index, timestamp, flags);
|
int ret;
|
||||||
|
|
||||||
|
if (s->iformat->read_seek2 && !s->iformat->read_seek) {
|
||||||
|
int64_t min_ts = INT64_MIN, max_ts = INT64_MAX;
|
||||||
|
if ((flags & AVSEEK_FLAG_BACKWARD))
|
||||||
|
max_ts = timestamp;
|
||||||
|
else
|
||||||
|
min_ts = timestamp;
|
||||||
|
return avformat_seek_file(s, stream_index, min_ts, timestamp, max_ts,
|
||||||
|
flags & ~AVSEEK_FLAG_BACKWARD);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = seek_frame_internal(s, stream_index, timestamp, flags);
|
||||||
|
|
||||||
if (ret >= 0)
|
if (ret >= 0)
|
||||||
ret = avformat_queue_attached_pictures(s);
|
ret = avformat_queue_attached_pictures(s);
|
||||||
|
@ -2152,6 +2164,7 @@ int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts, int
|
||||||
|
|
||||||
if(s->seek2any>0)
|
if(s->seek2any>0)
|
||||||
flags |= AVSEEK_FLAG_ANY;
|
flags |= AVSEEK_FLAG_ANY;
|
||||||
|
flags &= ~AVSEEK_FLAG_BACKWARD;
|
||||||
|
|
||||||
if (s->iformat->read_seek2) {
|
if (s->iformat->read_seek2) {
|
||||||
int ret;
|
int ret;
|
||||||
|
|
Loading…
Reference in New Issue