avutil/timecode: add function av_timecode_get_smpte()
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
This commit is contained in:
		
							parent
							
								
									12c42c709e
								
							
						
					
					
						commit
						79723c2a87
					
				@ -81,6 +81,38 @@ uint32_t av_timecode_get_smpte_from_framenum(const AVTimecode *tc, int framenum)
 | 
			
		||||
           (hh % 10);        // units of hours
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint32_t av_timecode_get_smpte(AVRational rate, int drop, int hh, int mm, int ss, int ff)
 | 
			
		||||
{
 | 
			
		||||
    uint32_t tc = 0;
 | 
			
		||||
    uint32_t frames;
 | 
			
		||||
 | 
			
		||||
    /* For SMPTE 12-M timecodes, frame count is a special case if > 30 FPS.
 | 
			
		||||
       See SMPTE ST 12-1:2014 Sec 12.1 for more info. */
 | 
			
		||||
    if (av_cmp_q(rate, (AVRational) {30, 1}) == 1) {
 | 
			
		||||
        frames = ff / 2;
 | 
			
		||||
        if (ff % 2 == 1) {
 | 
			
		||||
            if (av_cmp_q(rate, (AVRational) {50, 1}) == 0)
 | 
			
		||||
                tc |= (1 << 7);
 | 
			
		||||
            else
 | 
			
		||||
                tc |= (1 << 23);
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        frames = ff;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    tc |= drop << 30;
 | 
			
		||||
    tc |= (frames / 10) << 28;
 | 
			
		||||
    tc |= (frames % 10) << 24;
 | 
			
		||||
    tc |= (ss / 10) << 20;
 | 
			
		||||
    tc |= (ss % 10) << 16;
 | 
			
		||||
    tc |= (mm / 10) << 12;
 | 
			
		||||
    tc |= (mm % 10) << 8;
 | 
			
		||||
    tc |= (hh / 10) << 4;
 | 
			
		||||
    tc |= (hh  % 10);
 | 
			
		||||
 | 
			
		||||
    return tc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char *av_timecode_make_string(const AVTimecode *tc, char *buf, int framenum)
 | 
			
		||||
{
 | 
			
		||||
    int fps = tc->fps;
 | 
			
		||||
 | 
			
		||||
@ -70,6 +70,19 @@ int av_timecode_adjust_ntsc_framenum2(int framenum, int fps);
 | 
			
		||||
 */
 | 
			
		||||
uint32_t av_timecode_get_smpte_from_framenum(const AVTimecode *tc, int framenum);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Convert sei info to SMPTE 12M binary representation.
 | 
			
		||||
 *
 | 
			
		||||
 * @param rate     frame rate in rational form
 | 
			
		||||
 * @param drop     drop flag
 | 
			
		||||
 * @param hh       hour
 | 
			
		||||
 * @param mm       minute
 | 
			
		||||
 * @param ss       second
 | 
			
		||||
 * @param ff       frame number
 | 
			
		||||
 * @return         the SMPTE binary representation
 | 
			
		||||
 */
 | 
			
		||||
uint32_t av_timecode_get_smpte(AVRational rate, int drop, int hh, int mm, int ss, int ff);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Load timecode string in buf.
 | 
			
		||||
 *
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user