lavu/timecode: add av_timecode_check_frame_rate().
This commit is contained in:
parent
6b3484dcbc
commit
4b365b0868
@ -146,6 +146,17 @@ char *av_timecode_make_mpeg_tc_string(char *buf, uint32_t tc25bit)
|
|||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int check_fps(int fps)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
static const int supported_fps[] = {24, 25, 30, 50, 60};
|
||||||
|
|
||||||
|
for (i = 0; i < FF_ARRAY_ELEMS(supported_fps); i++)
|
||||||
|
if (fps == supported_fps[i])
|
||||||
|
return 0;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
static int check_timecode(void *log_ctx, AVTimecode *tc)
|
static int check_timecode(void *log_ctx, AVTimecode *tc)
|
||||||
{
|
{
|
||||||
if (tc->fps <= 0) {
|
if (tc->fps <= 0) {
|
||||||
@ -156,18 +167,12 @@ static int check_timecode(void *log_ctx, AVTimecode *tc)
|
|||||||
av_log(log_ctx, AV_LOG_ERROR, "Drop frame is only allowed with 30000/1001 FPS\n");
|
av_log(log_ctx, AV_LOG_ERROR, "Drop frame is only allowed with 30000/1001 FPS\n");
|
||||||
return AVERROR(EINVAL);
|
return AVERROR(EINVAL);
|
||||||
}
|
}
|
||||||
switch (tc->fps) {
|
if (check_fps(tc->fps) < 0) {
|
||||||
case 24:
|
|
||||||
case 25:
|
|
||||||
case 30:
|
|
||||||
case 50:
|
|
||||||
case 60: return 0;
|
|
||||||
|
|
||||||
default:
|
|
||||||
av_log(log_ctx, AV_LOG_ERROR, "Timecode frame rate %d/%d not supported\n",
|
av_log(log_ctx, AV_LOG_ERROR, "Timecode frame rate %d/%d not supported\n",
|
||||||
tc->rate.num, tc->rate.den);
|
tc->rate.num, tc->rate.den);
|
||||||
return AVERROR_PATCHWELCOME;
|
return AVERROR_PATCHWELCOME;
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int fps_from_frame_rate(AVRational rate)
|
static int fps_from_frame_rate(AVRational rate)
|
||||||
@ -177,6 +182,11 @@ static int fps_from_frame_rate(AVRational rate)
|
|||||||
return (rate.num + rate.den/2) / rate.den;
|
return (rate.num + rate.den/2) / rate.den;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int av_timecode_check_frame_rate(AVRational rate)
|
||||||
|
{
|
||||||
|
return check_fps(fps_from_frame_rate(rate));
|
||||||
|
}
|
||||||
|
|
||||||
int av_timecode_init(AVTimecode *tc, AVRational rate, int flags, int frame_start, void *log_ctx)
|
int av_timecode_init(AVTimecode *tc, AVRational rate, int flags, int frame_start, void *log_ctx)
|
||||||
{
|
{
|
||||||
memset(tc, 0, sizeof(*tc));
|
memset(tc, 0, sizeof(*tc));
|
||||||
|
@ -140,4 +140,11 @@ int av_timecode_init(AVTimecode *tc, AVRational rate, int flags, int frame_start
|
|||||||
*/
|
*/
|
||||||
int av_timecode_init_from_string(AVTimecode *tc, AVRational rate, const char *str, void *log_ctx);
|
int av_timecode_init_from_string(AVTimecode *tc, AVRational rate, const char *str, void *log_ctx);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the timecode feature is available for the given frame rate
|
||||||
|
*
|
||||||
|
* @return 0 if supported, <0 otherwise
|
||||||
|
*/
|
||||||
|
int av_timecode_check_frame_rate(AVRational rate);
|
||||||
|
|
||||||
#endif /* AVUTIL_TIMECODE_H */
|
#endif /* AVUTIL_TIMECODE_H */
|
||||||
|
@ -39,8 +39,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define LIBAVUTIL_VERSION_MAJOR 51
|
#define LIBAVUTIL_VERSION_MAJOR 51
|
||||||
#define LIBAVUTIL_VERSION_MINOR 66
|
#define LIBAVUTIL_VERSION_MINOR 67
|
||||||
#define LIBAVUTIL_VERSION_MICRO 101
|
#define LIBAVUTIL_VERSION_MICRO 100
|
||||||
|
|
||||||
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
|
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
|
||||||
LIBAVUTIL_VERSION_MINOR, \
|
LIBAVUTIL_VERSION_MINOR, \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user