You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
lavc: implement accessors for some AVFrame fields.
Compared to av_opt_ptr, accessors bring: - better performance (negligible); - compile-time type check; - link-time existence check (or at worst, a dynamic linker error instead of a NULL dereference).
This commit is contained in:
@@ -1244,7 +1244,7 @@ typedef struct AVFrame {
|
|||||||
/**
|
/**
|
||||||
* frame timestamp estimated using various heuristics, in stream time base
|
* frame timestamp estimated using various heuristics, in stream time base
|
||||||
* Code outside libavcodec should access this field using:
|
* Code outside libavcodec should access this field using:
|
||||||
* av_opt_ptr(avcodec_get_frame_class(), frame, "best_effort_timestamp");
|
* av_frame_get_best_effort_timestamp(frame)
|
||||||
* - encoding: unused
|
* - encoding: unused
|
||||||
* - decoding: set by libavcodec, read by user.
|
* - decoding: set by libavcodec, read by user.
|
||||||
*/
|
*/
|
||||||
@@ -1253,7 +1253,7 @@ typedef struct AVFrame {
|
|||||||
/**
|
/**
|
||||||
* reordered pos from the last AVPacket that has been input into the decoder
|
* reordered pos from the last AVPacket that has been input into the decoder
|
||||||
* Code outside libavcodec should access this field using:
|
* Code outside libavcodec should access this field using:
|
||||||
* av_opt_ptr(avcodec_get_frame_class(), frame, "pkt_pos");
|
* av_frame_get_pkt_pos(frame)
|
||||||
* - encoding: unused
|
* - encoding: unused
|
||||||
* - decoding: Read by user.
|
* - decoding: Read by user.
|
||||||
*/
|
*/
|
||||||
@@ -1264,7 +1264,7 @@ typedef struct AVFrame {
|
|||||||
* - encoding: unused
|
* - encoding: unused
|
||||||
* - decoding: read by user.
|
* - decoding: read by user.
|
||||||
* Code outside libavcodec should access this field using:
|
* Code outside libavcodec should access this field using:
|
||||||
* av_opt_ptr(avcodec_get_frame_class(), frame, "channel_layout")
|
* av_frame_get_channel_layout(frame)
|
||||||
*/
|
*/
|
||||||
int64_t channel_layout;
|
int64_t channel_layout;
|
||||||
|
|
||||||
@@ -1273,12 +1273,26 @@ typedef struct AVFrame {
|
|||||||
* - encoding: unused
|
* - encoding: unused
|
||||||
* - decoding: read by user.
|
* - decoding: read by user.
|
||||||
* Code outside libavcodec should access this field using:
|
* Code outside libavcodec should access this field using:
|
||||||
* av_opt_ptr(avcodec_get_frame_class(), frame, "sample_rate")
|
* av_frame_get_channel_layout(frame)
|
||||||
*/
|
*/
|
||||||
int sample_rate;
|
int sample_rate;
|
||||||
|
|
||||||
} AVFrame;
|
} AVFrame;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accessors for some AVFrame fields.
|
||||||
|
* The position of these field in the structure is not part of the ABI,
|
||||||
|
* they should not be accessed directly outside libavcodec.
|
||||||
|
*/
|
||||||
|
int64_t av_frame_get_best_effort_timestamp(const AVFrame *frame);
|
||||||
|
int64_t av_frame_get_pkt_pos (const AVFrame *frame);
|
||||||
|
int64_t av_frame_get_channel_layout (const AVFrame *frame);
|
||||||
|
int av_frame_get_sample_rate (const AVFrame *frame);
|
||||||
|
void av_frame_set_best_effort_timestamp(AVFrame *frame, int64_t val);
|
||||||
|
void av_frame_set_pkt_pos (AVFrame *frame, int64_t val);
|
||||||
|
void av_frame_set_channel_layout (AVFrame *frame, int64_t val);
|
||||||
|
void av_frame_set_sample_rate (AVFrame *frame, int val);
|
||||||
|
|
||||||
struct AVCodecInternal;
|
struct AVCodecInternal;
|
||||||
|
|
||||||
enum AVFieldOrder {
|
enum AVFieldOrder {
|
||||||
|
@@ -672,6 +672,15 @@ AVFrame *avcodec_alloc_frame(void){
|
|||||||
return pic;
|
return pic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define MAKE_ACCESSORS(str, name, type, field) \
|
||||||
|
type av_##name##_get_##field(const str *s) { return s->field; } \
|
||||||
|
void av_##name##_set_##field(str *s, type v) { s->field = v; }
|
||||||
|
|
||||||
|
MAKE_ACCESSORS(AVFrame, frame, int64_t, best_effort_timestamp)
|
||||||
|
MAKE_ACCESSORS(AVFrame, frame, int64_t, pkt_pos)
|
||||||
|
MAKE_ACCESSORS(AVFrame, frame, int64_t, channel_layout)
|
||||||
|
MAKE_ACCESSORS(AVFrame, frame, int, sample_rate)
|
||||||
|
|
||||||
static void avcodec_get_subtitle_defaults(AVSubtitle *sub)
|
static void avcodec_get_subtitle_defaults(AVSubtitle *sub)
|
||||||
{
|
{
|
||||||
memset(sub, 0, sizeof(*sub));
|
memset(sub, 0, sizeof(*sub));
|
||||||
|
@@ -27,8 +27,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_MAJOR 54
|
#define LIBAVCODEC_VERSION_MAJOR 54
|
||||||
#define LIBAVCODEC_VERSION_MINOR 17
|
#define LIBAVCODEC_VERSION_MINOR 18
|
||||||
#define LIBAVCODEC_VERSION_MICRO 101
|
#define LIBAVCODEC_VERSION_MICRO 100
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
||||||
LIBAVCODEC_VERSION_MINOR, \
|
LIBAVCODEC_VERSION_MINOR, \
|
||||||
|
Reference in New Issue
Block a user