X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Ftimecode.c;h=7f3b1d5ab81afeed067163ee67a1e466d64a5dbb;hb=0a23067ab41326dfa1da41d18923ea8547a51ff5;hp=434b3cb03a07da37e1b04c1935b38bbf78dac1a2;hpb=51fb933dd0dda5f581d7489b32b8446767d33b97;p=ffmpeg diff --git a/libavcodec/timecode.c b/libavcodec/timecode.c index 434b3cb03a0..7f3b1d5ab81 100644 --- a/libavcodec/timecode.c +++ b/libavcodec/timecode.c @@ -5,19 +5,19 @@ * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; - * version 2 of the License. + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. + * Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public + * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -*/ + */ /** * @file @@ -37,6 +37,24 @@ int ff_framenum_to_drop_timecode(int frame_num) return frame_num + 18 * d + 2 * ((m - 2) / 1798); } +uint32_t ff_framenum_to_smtpe_timecode(unsigned frame, int fps, int drop) +{ + return (0 << 31) | // color frame flag + (drop << 30) | // drop frame flag + ( ((frame % fps) / 10) << 28) | // tens of frames + ( ((frame % fps) % 10) << 24) | // units of frames + (0 << 23) | // field phase (NTSC), b0 (PAL) + ((((frame / fps) % 60) / 10) << 20) | // tens of seconds + ((((frame / fps) % 60) % 10) << 16) | // units of seconds + (0 << 15) | // b0 (NTSC), b2 (PAL) + ((((frame / (fps * 60)) % 60) / 10) << 12) | // tens of minutes + ((((frame / (fps * 60)) % 60) % 10) << 8) | // units of minutes + (0 << 7) | // b1 + (0 << 6) | // b2 (NTSC), field phase (PAL) + ((((frame / (fps * 3600) % 24)) / 10) << 4) | // tens of hours + ( (frame / (fps * 3600) % 24)) % 10; // units of hours +} + int ff_init_smtpe_timecode(void *avcl, struct ff_timecode *tc) { int hh, mm, ss, ff, fps;