You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	stereo3d: Add API to get name from value or value from name
Use it in av_dump_format() instead of a huge switch case.
This commit is contained in:
		| @@ -13,6 +13,9 @@ libavutil:     2015-08-28 | ||||
|  | ||||
| API changes, most recent first: | ||||
|  | ||||
| 2016-xx-xx - xxxxxxx - lavu 55.12.0 - opt.h | ||||
|   Add av_stereo3d_type_name() and av_stereo3d_from_name(). | ||||
|  | ||||
| 2016-xx-xx - xxxxxxx - lavu 55.11.0 - hwcontext_dxva2.h | ||||
|   Add new installed header with DXVA2-specific hwcontext definitions. | ||||
|  | ||||
|   | ||||
| @@ -233,6 +233,7 @@ static void dump_replaygain(void *ctx, AVPacketSideData *sd) | ||||
| static void dump_stereo3d(void *ctx, AVPacketSideData *sd) | ||||
| { | ||||
|     AVStereo3D *stereo; | ||||
|     const char *name; | ||||
|  | ||||
|     if (sd->size < sizeof(*stereo)) { | ||||
|         av_log(ctx, AV_LOG_INFO, "invalid data"); | ||||
| @@ -241,35 +242,7 @@ static void dump_stereo3d(void *ctx, AVPacketSideData *sd) | ||||
|  | ||||
|     stereo = (AVStereo3D *)sd->data; | ||||
|  | ||||
|     switch (stereo->type) { | ||||
|     case AV_STEREO3D_2D: | ||||
|         av_log(ctx, AV_LOG_INFO, "2D"); | ||||
|         break; | ||||
|     case AV_STEREO3D_SIDEBYSIDE: | ||||
|         av_log(ctx, AV_LOG_INFO, "side by side"); | ||||
|         break; | ||||
|     case AV_STEREO3D_TOPBOTTOM: | ||||
|         av_log(ctx, AV_LOG_INFO, "top and bottom"); | ||||
|         break; | ||||
|     case AV_STEREO3D_FRAMESEQUENCE: | ||||
|         av_log(ctx, AV_LOG_INFO, "frame alternate"); | ||||
|         break; | ||||
|     case AV_STEREO3D_CHECKERBOARD: | ||||
|         av_log(ctx, AV_LOG_INFO, "checkerboard"); | ||||
|         break; | ||||
|     case AV_STEREO3D_LINES: | ||||
|         av_log(ctx, AV_LOG_INFO, "interleaved lines"); | ||||
|         break; | ||||
|     case AV_STEREO3D_COLUMNS: | ||||
|         av_log(ctx, AV_LOG_INFO, "interleaved columns"); | ||||
|         break; | ||||
|     case AV_STEREO3D_SIDEBYSIDE_QUINCUNX: | ||||
|         av_log(ctx, AV_LOG_INFO, "side by side (quincunx subsampling)"); | ||||
|         break; | ||||
|     default: | ||||
|         av_log(ctx, AV_LOG_WARNING, "unknown"); | ||||
|         break; | ||||
|     } | ||||
|     av_log(ctx, AV_LOG_INFO, "%s", av_stereo3d_type_name(stereo->type)); | ||||
|  | ||||
|     if (stereo->flags & AV_STEREO3D_FLAG_INVERT) | ||||
|         av_log(ctx, AV_LOG_INFO, " (inverted)"); | ||||
|   | ||||
| @@ -21,6 +21,7 @@ | ||||
| #include <stdint.h> | ||||
| #include <string.h> | ||||
|  | ||||
| #include "common.h" | ||||
| #include "mem.h" | ||||
| #include "stereo3d.h" | ||||
|  | ||||
| @@ -41,3 +42,35 @@ AVStereo3D *av_stereo3d_create_side_data(AVFrame *frame) | ||||
|  | ||||
|     return (AVStereo3D *)side_data->data; | ||||
| } | ||||
|  | ||||
| static const char *stereo3d_type_names[] = { | ||||
|     [AV_STEREO3D_2D]                  = "2D", | ||||
|     [AV_STEREO3D_SIDEBYSIDE]          = "side by side", | ||||
|     [AV_STEREO3D_TOPBOTTOM]           = "top and bottom", | ||||
|     [AV_STEREO3D_FRAMESEQUENCE]       = "frame alternate", | ||||
|     [AV_STEREO3D_CHECKERBOARD]        = "checkerboard", | ||||
|     [AV_STEREO3D_SIDEBYSIDE_QUINCUNX] = "side by side (quincunx subsampling)", | ||||
|     [AV_STEREO3D_LINES]               = "interleaved lines", | ||||
|     [AV_STEREO3D_COLUMNS]             = "interleaved columns", | ||||
| }; | ||||
|  | ||||
| const char *av_stereo3d_type_name(unsigned int type) | ||||
| { | ||||
|     if (type >= FF_ARRAY_ELEMS(stereo3d_type_names)) | ||||
|         return "unknown"; | ||||
|  | ||||
|     return stereo3d_type_names[type]; | ||||
| } | ||||
|  | ||||
| int av_stereo3d_from_name(const char *name) | ||||
| { | ||||
|     int i; | ||||
|  | ||||
|     for (i = 0; i < FF_ARRAY_ELEMS(stereo3d_type_names); i++) { | ||||
|         size_t len = strlen(stereo3d_type_names[i]); | ||||
|         if (!strncmp(stereo3d_type_names[i], name, len)) | ||||
|             return i; | ||||
|     } | ||||
|  | ||||
|     return -1; | ||||
| } | ||||
|   | ||||
| @@ -149,4 +149,22 @@ AVStereo3D *av_stereo3d_alloc(void); | ||||
|  */ | ||||
| AVStereo3D *av_stereo3d_create_side_data(AVFrame *frame); | ||||
|  | ||||
| /** | ||||
|  * Provide a human-readable name of a given stereo3d type. | ||||
|  * | ||||
|  * @param type The input stereo3d type value. | ||||
|  * | ||||
|  * @return The name of the stereo3d value, or "unknown". | ||||
|  */ | ||||
| const char *av_stereo3d_type_name(unsigned int type); | ||||
|  | ||||
| /** | ||||
|  * Get the AVStereo3DType form a human-readable name. | ||||
|  * | ||||
|  * @param type The input string. | ||||
|  * | ||||
|  * @return The AVStereo3DType value, or -1 if not found. | ||||
|  */ | ||||
| int av_stereo3d_from_name(const char *name); | ||||
|  | ||||
| #endif /* AVUTIL_STEREO3D_H */ | ||||
|   | ||||
| @@ -54,7 +54,7 @@ | ||||
|  */ | ||||
|  | ||||
| #define LIBAVUTIL_VERSION_MAJOR 55 | ||||
| #define LIBAVUTIL_VERSION_MINOR 11 | ||||
| #define LIBAVUTIL_VERSION_MINOR 12 | ||||
| #define LIBAVUTIL_VERSION_MICRO  0 | ||||
|  | ||||
| #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user