-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathffmpeg_fas.h
120 lines (95 loc) · 4.09 KB
/
ffmpeg_fas.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*****************************************************************************
* Copyright 2008. Pittsburgh Pattern Recognition, Inc.
*
* This file is part of the Frame Accurate Seeking extension library to
* ffmpeg (ffmpeg-fas).
*
* ffmpeg-fas is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 3 of the License, or (at your
* option) any later version.
*
* The ffmpeg-fas 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 Lesser General Public License
* along with the ffmpeg-fas library. If not, see <http://www.gnu.org/licenses/>.
*
******************************************************************************/
#ifndef FFMPEG_FAS_H
#define FFMPEG_FAS_H
/* If C++ then we need to __extern "C". Compiler defines __cplusplus */
#ifdef __cplusplus
#define __extern extern "C"
#else
#define __extern extern
#endif
#include "seek_indices.h"
typedef enum
{
FAS_GRAY8 = 1,
FAS_RGB24 = 2,
FAS_BGR24 = 3,
FAS_ARGB32 = 4,
FAS_ABGR32 = 5,
FAS_YUV420P = 6,
FAS_YUYV422 = 7,
FAS_UYVY422 = 8,
FAS_YUV422P = 9,
FAS_YUV444P = 10,
} fas_color_space_type;
typedef struct
{
unsigned char *data;
int width;
int height;
int bytes_per_line;
fas_color_space_type color_space;
} fas_raw_image_type;
/**********************************************************************
* Video IO Types
**********************************************************************/
typedef struct fas_context_struct* fas_context_ref_type;
typedef enum
{
FAS_SUCCESS,
FAS_FAILURE,
FAS_INVALID_ARGUMENT,
FAS_OUT_OF_MEMORY,
FAS_UNSUPPORTED_FORMAT,
FAS_UNSUPPORTED_CODEC,
FAS_NO_MORE_FRAMES,
FAS_DECODING_ERROR,
FAS_SEEK_ERROR,
} fas_error_type;
typedef enum
{
FAS_FALSE = 0,
FAS_TRUE = 1
} fas_boolean_type;
__extern void fas_initialize (fas_boolean_type logging, fas_color_space_type format);
__extern void fas_set_format (fas_color_space_type format);
__extern fas_error_type fas_open_video (fas_context_ref_type *context_ptr, char *file_path);
__extern fas_error_type fas_close_video (fas_context_ref_type context);
__extern char* fas_error_message (fas_error_type error);
__extern fas_boolean_type fas_frame_available (fas_context_ref_type context);
__extern int fas_get_frame_index (fas_context_ref_type context);
__extern fas_error_type fas_step_forward (fas_context_ref_type context);
__extern fas_error_type fas_get_frame (fas_context_ref_type context, fas_raw_image_type *image_ptr);
__extern void fas_free_frame (fas_raw_image_type image);
__extern fas_error_type fas_seek_to_nearest_key (fas_context_ref_type context, int target_index);
__extern fas_error_type fas_seek_to_frame (fas_context_ref_type context, int target_index);
__extern int fas_get_frame_count (fas_context_ref_type context);
__extern int fas_get_frame_count_fast (fas_context_ref_type context);
__extern fas_error_type fas_put_seek_table (fas_context_ref_type context, seek_table_type table);
__extern seek_table_type fas_get_seek_table (fas_context_ref_type context);
/* will extract raw 420p if the video is in that format -- needs to be alloced ahead of time*/
__extern fas_error_type fas_fill_420p_ptrs (fas_context_ref_type context, unsigned char *y, unsigned char *u, unsigned char *v);
/* will extract gray8 data from movie (will convert to ensure you get it) -- need to be alloc'ed ahead of time*/
__extern fas_error_type fas_fill_gray8_ptr(fas_context_ref_type context, unsigned char *y);
__extern int fas_get_current_width(fas_context_ref_type context);
__extern int fas_get_current_height(fas_context_ref_type context);
__extern unsigned long long fas_get_frame_duration(fas_context_ref_type context);
#endif