Browse Source
Add raw video fourcc conversion support to convert
from gstreamer representation (for strings that are
not equal to length 4) to vlc representation.
Signed-off-by: Thomas Guillem <thomas@gllm.fr>
(cherry picked from commit a6c52d8943)
Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
pull/135/head
committed by
Rémi Denis-Courmont
3 changed files with 119 additions and 5 deletions
@ -0,0 +1,94 @@ |
|||||
|
|
||||
|
/*****************************************************************************
|
||||
|
* fourcc.c: convert between gst <-> vlc formats |
||||
|
***************************************************************************** |
||||
|
* Copyright (C) 2020 VLC authors and VideoLAN |
||||
|
* |
||||
|
* Author: Vikram Fugro <vikram.fugro@gmail.com> |
||||
|
* |
||||
|
* This library is free software; you can redistribute it and/or |
||||
|
* modify it under the terms of the GNU Library General Public |
||||
|
* License as published by the Free Software Foundation; either |
||||
|
* version 2.1 of the License, or (at your option) any later version. |
||||
|
* |
||||
|
* This library 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 |
||||
|
* Lesser General Public License for more details. |
||||
|
* |
||||
|
* You should have received a copy of the GNU Library General Public |
||||
|
* License along with this library; if not, write to the Free Software |
||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
|
*****************************************************************************/ |
||||
|
|
||||
|
#ifdef HAVE_CONFIG_H |
||||
|
# include "config.h" |
||||
|
#endif |
||||
|
|
||||
|
#include <vlc_common.h> |
||||
|
#include <vlc_codec.h> |
||||
|
|
||||
|
vlc_fourcc_t GetGstVLCFourcc( const char* gst ); |
||||
|
|
||||
|
typedef struct |
||||
|
{ |
||||
|
char gst [10]; |
||||
|
vlc_fourcc_t i_fourcc; |
||||
|
} gst_vlc_rawvideo_fourcc; |
||||
|
|
||||
|
/*
|
||||
|
* Raw Video Formats |
||||
|
*/ |
||||
|
static const gst_vlc_rawvideo_fourcc raw_video_fmts[] = |
||||
|
{ |
||||
|
// NOTE: These should be sorted entries, keyed by `gst` field
|
||||
|
// cat entries | tr -dc "[:alnum:][:space:]_" | sort -n -k1 | xargs printf "{ \"%s\", %s },\n"
|
||||
|
{ "I420_10BE", VLC_CODEC_I420_10B }, |
||||
|
{ "I420_10LE", VLC_CODEC_I420_10L }, |
||||
|
{ "I420_12BE", VLC_CODEC_I420_12B }, |
||||
|
{ "I420_12LE", VLC_CODEC_I420_12L }, |
||||
|
{ "I420_16BE", VLC_CODEC_I420_16B }, |
||||
|
{ "I420_16LE", VLC_CODEC_I420_16L }, |
||||
|
{ "I420_9BE", VLC_CODEC_I420_9B }, |
||||
|
{ "I420_9LE", VLC_CODEC_I420_9L }, |
||||
|
{ "I422_10BE", VLC_CODEC_I422_10B }, |
||||
|
{ "I422_10LE", VLC_CODEC_I422_10L }, |
||||
|
{ "I422_12BE", VLC_CODEC_I422_12B }, |
||||
|
{ "I422_12LE", VLC_CODEC_I422_12L }, |
||||
|
// { "I422_16BE", VLC_CODEC_I422_16B },
|
||||
|
// { "I422_16LE", VLC_CODEC_I422_16L },
|
||||
|
{ "I422_9BE", VLC_CODEC_I422_9B }, |
||||
|
{ "I422_9LE", VLC_CODEC_I422_9L }, |
||||
|
{ "I444_10BE", VLC_CODEC_I444_10B }, |
||||
|
{ "I444_10LE", VLC_CODEC_I444_10L }, |
||||
|
{ "I444_12BE", VLC_CODEC_I444_12B }, |
||||
|
{ "I444_12LE", VLC_CODEC_I444_12L }, |
||||
|
{ "I444_16BE", VLC_CODEC_I444_16B }, |
||||
|
{ "I444_16LE", VLC_CODEC_I444_16L }, |
||||
|
{ "I444_9BE", VLC_CODEC_I444_9B }, |
||||
|
{ "I444_9LE", VLC_CODEC_I444_9L }, |
||||
|
}; |
||||
|
|
||||
|
static int compare_func( const void* key, const void* ent ) |
||||
|
{ |
||||
|
return strcmp( (char*)key, ((gst_vlc_rawvideo_fourcc*)ent)->gst ); |
||||
|
} |
||||
|
|
||||
|
vlc_fourcc_t GetGstVLCFourcc( const char* gst ) |
||||
|
{ |
||||
|
gst_vlc_rawvideo_fourcc* found = NULL; |
||||
|
|
||||
|
if( !gst ) |
||||
|
{ |
||||
|
return VLC_CODEC_UNKNOWN; |
||||
|
} |
||||
|
|
||||
|
found = bsearch( gst, raw_video_fmts, |
||||
|
ARRAY_SIZE(raw_video_fmts), sizeof(gst_vlc_rawvideo_fourcc), |
||||
|
compare_func ); |
||||
|
|
||||
|
if( !found ) |
||||
|
return VLC_CODEC_UNKNOWN; |
||||
|
else |
||||
|
return found->i_fourcc; |
||||
|
} |
||||
Loading…
Reference in new issue