FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavformat
seek.h
Go to the documentation of this file.
1
/*
2
* seek utility functions for use within format handlers
3
*
4
* Copyright (c) 2009 Ivan Schreter
5
*
6
* This file is part of FFmpeg.
7
*
8
* FFmpeg is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU Lesser General Public
10
* License as published by the Free Software Foundation; either
11
* version 2.1 of the License, or (at your option) any later version.
12
*
13
* FFmpeg is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* Lesser General Public License for more details.
17
*
18
* You should have received a copy of the GNU Lesser General Public
19
* License along with FFmpeg; if not, write to the Free Software
20
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
*/
22
23
#ifndef AVFORMAT_SEEK_H
24
#define AVFORMAT_SEEK_H
25
26
#include "
avformat.h
"
27
28
/**
29
* structure to store parser state of one AVStream
30
*/
31
typedef
struct
AVParserStreamState
{
32
// saved members of AVStream
33
AVCodecParserContext
*
parser
;
34
int64_t
last_IP_pts
;
35
int64_t
cur_dts
;
36
int
probe_packets
;
37
}
AVParserStreamState
;
38
39
/**
40
* structure to store parser state of AVFormat
41
*/
42
typedef
struct
AVParserState
{
43
int64_t
fpos
;
///< file position at the time of call
44
45
// saved members of AVFormatContext
46
AVPacketList
*
packet_buffer
;
///< packet buffer of original state
47
AVPacketList
*
parse_queue
;
///< parse queue of original state
48
AVPacketList
*
raw_packet_buffer
;
///< raw packet buffer of original state
49
int
raw_packet_buffer_remaining_size
;
///< remaining space in raw_packet_buffer
50
51
// saved info for streams
52
int
nb_streams
;
///< number of streams with stored state
53
AVParserStreamState
*
stream_states
;
///< states of individual streams (array)
54
}
AVParserState
;
55
56
/**
57
* Search for the sync point of all active streams.
58
*
59
* This routine is not supposed to be called directly by a user application,
60
* but by demuxers.
61
*
62
* A sync point is defined as a point in stream, such that, when decoding start
63
* from this point, the decoded output of all streams synchronizes closest
64
* to the given timestamp ts. This routine also takes timestamp limits into account.
65
* Thus, the output will synchronize no sooner than ts_min and no later than ts_max.
66
*
67
* @param stream_index stream index for time base reference of timestamps
68
* @param pos approximate position where to start searching for key frames
69
* @param min_ts minimum allowed timestamp (position, if AVSEEK_FLAG_BYTE set)
70
* @param ts target timestamp (or position, if AVSEEK_FLAG_BYTE set in flags)
71
* @param max_ts maximum allowed timestamp (position, if AVSEEK_FLAG_BYTE set)
72
* @param flags if AVSEEK_FLAG_ANY is set, seek to any frame, otherwise only
73
* to a keyframe. If AVSEEK_FLAG_BYTE is set, search by
74
* position, not by timestamp.
75
* @return -1 if no such sync point could be found, otherwise stream position
76
* (stream is repositioned to this position)
77
*/
78
int64_t
ff_gen_syncpoint_search
(
AVFormatContext
*
s
,
79
int
stream_index,
80
int64_t pos,
81
int64_t min_ts,
82
int64_t ts,
83
int64_t max_ts,
84
int
flags
);
85
86
/**
87
* Store current parser state and file position.
88
*
89
* This function can be used by demuxers before a destructive seeking algorithm
90
* to store the parser state. Depending on the outcome of the seek, either the original
91
* state can be restored or the new state kept and the original state freed.
92
*
93
* @note As a side effect, the original parser state is reset, since structures
94
* are relinked to the stored state instead of being deeply-copied (for
95
* performance reasons and to keep the code simple).
96
*
97
* @param s context from which to save state
98
* @return parser state object or NULL if memory could not be allocated
99
*/
100
AVParserState
*
ff_store_parser_state
(
AVFormatContext
*
s
);
101
102
/**
103
* Restore previously saved parser state and file position.
104
*
105
* Saved state will be invalidated and freed by this call, since internal
106
* structures will be relinked back to the stored state instead of being
107
* deeply-copied.
108
*
109
* @param s context to which to restore state (same as used for storing state)
110
* @param state state to restore
111
*/
112
void
ff_restore_parser_state
(
AVFormatContext
*
s
,
AVParserState
*
state
);
113
114
/**
115
* Free previously saved parser state.
116
*
117
* @param s context to which the state belongs (same as used for storing state)
118
* @param state state to free
119
*/
120
void
ff_free_parser_state
(
AVFormatContext
*
s
,
AVParserState
*
state
);
121
122
#endif
/* AVFORMAT_SEEK_H */
Generated on Sun Mar 23 2014 23:50:13 for FFmpeg by
1.8.2