| |
| /* |
| * mpegconsts.c: Video format constants for MPEG and utilities for display |
| * and conversion to format used for yuv4mpeg |
| * |
| * Copyright (C) 2001 Andrew Stevens <andrew.stevens@philips.com> |
| * |
| * |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of version 2 of the GNU General Public License |
| * as published by the Free Software Foundation. |
| * |
| * This program 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. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
| */ |
| |
| #ifndef __MPEGCONSTS_H__ |
| #define __MPEGCONSTS_H__ |
| |
| |
| #include "yuv4mpeg.h" |
| |
| |
| typedef unsigned int mpeg_framerate_code_t; |
| typedef unsigned int mpeg_aspect_code_t; |
| |
| extern const mpeg_framerate_code_t mpeg_num_framerates; |
| extern const mpeg_aspect_code_t mpeg_num_aspect_ratios[2]; |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /* |
| * Convert MPEG frame-rate code to corresponding frame-rate |
| * y4m_fps_UNKNOWN = { 0, 0 } = Undefined/resrerved code. |
| */ |
| |
| y4m_ratio_t |
| mpeg_framerate( mpeg_framerate_code_t code ); |
| |
| |
| /* |
| * Look-up MPEG frame rate code for a (exact) frame rate. |
| * 0 = No MPEG code defined for frame-rate |
| */ |
| |
| mpeg_framerate_code_t |
| mpeg_framerate_code( y4m_ratio_t framerate ); |
| |
| |
| /* |
| * Convert floating-point framerate to an exact ratio. |
| * Uses a standard MPEG rate, if it finds one within MPEG_FPS_TOLERANCE |
| * (see mpegconsts.c), otherwise uses "fps:1000000" as the ratio. |
| */ |
| |
| y4m_ratio_t |
| mpeg_conform_framerate( double fps ); |
| |
| |
| /* |
| * Convert MPEG aspect ratio code to corresponding aspect ratio |
| * |
| * WARNING: The semantics of aspect ratio coding *changed* between |
| * MPEG1 and MPEG2. In MPEG1 it is the *pixel* aspect ratio. In |
| * MPEG2 it is the (far more sensible) aspect ratio of the eventual |
| * display. |
| * |
| */ |
| |
| y4m_ratio_t |
| mpeg_aspect_ratio( int mpeg_version, mpeg_aspect_code_t code ); |
| |
| /* |
| * Look-up MPEG aspect ratio code for an aspect ratio - tolerance |
| * is Y4M_ASPECT_MULT used by YUV4MPEG (see yuv4mpeg_intern.h) |
| * |
| * WARNING: The semantics of aspect ratio coding *changed* between |
| * MPEG1 and MPEG2. In MPEG1 it is the *pixel* aspect ratio. In |
| * MPEG2 it is the (far more sensible) aspect ratio of the eventual |
| * display. |
| * |
| */ |
| |
| mpeg_aspect_code_t |
| mpeg_frame_aspect_code( int mpeg_version, y4m_ratio_t aspect_ratio ); |
| |
| /* |
| * Look-up MPEG explanatory definition string aspect ratio code for an |
| * aspect ratio code |
| * |
| */ |
| |
| const char * |
| mpeg_aspect_code_definition( int mpeg_version, mpeg_aspect_code_t code ); |
| |
| /* |
| * Look-up MPEG explanatory definition string aspect ratio code for an |
| * frame rate code |
| * |
| */ |
| |
| const char * |
| mpeg_framerate_code_definition( mpeg_framerate_code_t code ); |
| |
| const char * |
| mpeg_interlace_code_definition( int yuv4m_interlace_code ); |
| |
| |
| /* |
| * Guess the correct MPEG aspect ratio code, |
| * given the true sample aspect ratio and frame size of a video stream |
| * (and the MPEG version, 1 or 2). |
| * |
| * Returns 0 if it has no good answer. |
| * |
| */ |
| mpeg_aspect_code_t |
| mpeg_guess_mpeg_aspect_code(int mpeg_version, y4m_ratio_t sampleaspect, |
| int frame_width, int frame_height); |
| |
| /* |
| * Guess the true sample aspect ratio of a video stream, |
| * given the MPEG aspect ratio code and the actual frame size |
| * (and the MPEG version, 1 or 2). |
| * |
| * Returns y4m_sar_UNKNOWN if it has no good answer. |
| * |
| */ |
| y4m_ratio_t |
| mpeg_guess_sample_aspect_ratio(int mpeg_version, |
| mpeg_aspect_code_t code, |
| int frame_width, int frame_height); |
| |
| |
| #ifdef __cplusplus |
| }; |
| #endif |
| |
| |
| |
| #endif /* __MPEGCONSTS_H__ */ |