On 11/18/2020 6:41 PM, Michael Niedermayer wrote:
On Mon, Nov 16, 2020 at 09:46:01PM -0300, James Almer wrote:
On 11/16/2020 12:25 PM, Hendrik Leppkes wrote:
On Mon, Nov 16, 2020 at 4:20 PM James Almer <jamr...@gmail.com> wrote:
On 11/16/2020 3:01 AM, Anton Khirnov wrote:
Quoting Xiang, Haihao (2020-11-16 06:16:55)
This change breaks the compiling of gst-libav (
https://gitlab.freedesktop.org/gstreamer/gst-libav), I filed
https://trac.ffmpeg.org/ticket/8988 to track this regression.
This is not a regression, it's a bug in gst-libav. These fields are
private and have always been private, applications accessing them are
broken.
Looking at that ticket, it seems gst-libav wants the timestamp for a
given index entry. Unless this can already be achieved in some other
way, it could maybe be implemented cleanly with a new public function
(We have av_index_search_timestamp() to fetch an index from a timestamp
after all).
I also like being able to access the index, it can be used by players
to efficiently offer seeking straight to keyframes (eg. index
entries), which basically requires iterating over the full index and
getting the full information (timestamp, flags at least)
- Hendrik
What do you suggest, implement something like what you added to you
LAVFilters fork? I don't know if returning a pointer to a given AVIndexEntry
is ideal. If that were the case, then it wouldn't be an internal field.
Perhaps something like
int av_index_get_entries_count(AVStream *st);
int av_index_get_timestamp(AVStream *st, int64_t *timestamp, int *flags, int
idx);
If the (only) goal is to export the whole list then a better option might be
to use an opaque state and some sort of iterator.
The index entries are in a flat array. A function like what i suggested
above would simply do st->internal->index_entries[idx].
Because the suggestion requires N index based lookups and this is only fast
with some conceivable implementations.
for example consider an index stored in some sort of tree structure
a index based lookup might be O(log n) while one step iterating over all
elements could be O(1)
AVIndexEntry *av_index_iterate(AVStream *st, AVIndexIterator **i);
and
AVIndexIterator *i = NULL;
AVIndexEntry *entry;
for (entry = av_index_iterate(st, &i); i; entry = av_index_iterate(st, &i))
...
But do we want to return a pointer to an entry in the index array, or
just some of the fields for a given entry?
As i said above, if the former was intended, then it wouldn't have been
an internal field all this time to being with.
[...]
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".