-
Notifications
You must be signed in to change notification settings - Fork 76
Expand file tree
/
Copy pathFFTPlayerHeader.m
More file actions
162 lines (153 loc) · 4.65 KB
/
FFTPlayerHeader.m
File metadata and controls
162 lines (153 loc) · 4.65 KB
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
//
// FFTPlayerHeader.m
// FFmpegTutorial-macOS
//
// Created by qianlongxu on 2022/7/27.
// Copyright © 2022 Matt Reach's Awesome FFmpeg Tutotial. All rights reserved.
//
#import "FFTPlayerHeader.h"
#import <libavutil/frame.h>
#import <libavutil/imgutils.h>
const char * av_pixel_fmt_to_string(int fmt)
{
return av_get_pix_fmt_name((enum AVPixelFormat)fmt);
}
const char * av_sample_fmt_to_string(int format)
{
return av_get_sample_fmt_name(format);
}
enum AVSampleFormat MRSampleFormat2AV (MRSampleFormat mrsf){
switch (mrsf) {
case MR_SAMPLE_FMT_S16:
return AV_SAMPLE_FMT_S16;
case MR_SAMPLE_FMT_FLT:
return AV_SAMPLE_FMT_FLT;
case MR_SAMPLE_FMT_S16P:
return AV_SAMPLE_FMT_S16P;
case MR_SAMPLE_FMT_FLTP:
return AV_SAMPLE_FMT_FLTP;
case MR_SAMPLE_FMT_EOF:
case MR_SAMPLE_FMT_NONE:
return AV_SAMPLE_FMT_NONE;
}
}
MRSampleFormat AVSampleFormat2MR (enum AVSampleFormat avsf){
switch (avsf) {
case AV_SAMPLE_FMT_S16:
return MR_SAMPLE_FMT_S16;
case AV_SAMPLE_FMT_FLT:
return MR_SAMPLE_FMT_FLT;
case AV_SAMPLE_FMT_S16P:
return MR_SAMPLE_FMT_S16P;
case AV_SAMPLE_FMT_FLTP:
return MR_SAMPLE_FMT_FLTP;
case AV_SAMPLE_FMT_NONE:
return MR_SAMPLE_FMT_NONE;
default:
{
assert(0);
return MR_SAMPLE_FMT_NONE;
}
}
}
MRPixelFormat AVPixelFormat2MR (enum AVPixelFormat avpf){
switch (avpf) {
case AV_PIX_FMT_YUV420P:
return MR_PIX_FMT_YUV420P;
case AV_PIX_FMT_NV12:
return MR_PIX_FMT_NV12;
case AV_PIX_FMT_NV21:
return MR_PIX_FMT_NV21;
case AV_PIX_FMT_NV16:
return MR_PIX_FMT_NV16;
case AV_PIX_FMT_UYVY422:
return MR_PIX_FMT_UYVY422;
case AV_PIX_FMT_YUV444P10:
return MR_PIX_FMT_YUV444P10;
case AV_PIX_FMT_YUYV422:
return MR_PIX_FMT_YUYV422;
case AV_PIX_FMT_RGB24:
return MR_PIX_FMT_RGB24;
case AV_PIX_FMT_RGBA:
return MR_PIX_FMT_RGBA;
case AV_PIX_FMT_ARGB:
return MR_PIX_FMT_ARGB;
case AV_PIX_FMT_0RGB:
return MR_PIX_FMT_0RGB;
case AV_PIX_FMT_RGB0:
return MR_PIX_FMT_RGB0;
case AV_PIX_FMT_RGB555:
return MR_PIX_FMT_RGB555;
case AV_PIX_FMT_BGR0:
return MR_PIX_FMT_BGR0;
case AV_PIX_FMT_BGRA:
return MR_PIX_FMT_BGRA;
case AV_PIX_FMT_ABGR:
return MR_PIX_FMT_ABGR;
case AV_PIX_FMT_0BGR:
return MR_PIX_FMT_0BGR;
case AV_PIX_FMT_BGR24:
return MR_PIX_FMT_BGR24;
default:
{
assert(0);
return MR_PIX_FMT_NONE;
}
break;
}
}
enum AVPixelFormat MRPixelFormat2AV (MRPixelFormat mrpf){
switch (mrpf) {
case MR_PIX_FMT_YUV420P:
return AV_PIX_FMT_YUV420P;
case MR_PIX_FMT_NV12:
return AV_PIX_FMT_NV12;
case MR_PIX_FMT_NV21:
return AV_PIX_FMT_NV21;
case MR_PIX_FMT_NV16:
return AV_PIX_FMT_NV16;
case MR_PIX_FMT_UYVY422:
return AV_PIX_FMT_UYVY422;
case MR_PIX_FMT_YUV444P10:
return AV_PIX_FMT_YUV444P10;
case MR_PIX_FMT_YUYV422:
return AV_PIX_FMT_YUYV422;
case MR_PIX_FMT_RGB24:
return AV_PIX_FMT_RGB24;
case MR_PIX_FMT_0RGB:
return AV_PIX_FMT_0RGB;
case MR_PIX_FMT_RGB0:
return AV_PIX_FMT_RGB0;
case MR_PIX_FMT_RGBA:
return AV_PIX_FMT_RGBA;
case MR_PIX_FMT_ARGB:
return AV_PIX_FMT_ARGB;
case MR_PIX_FMT_RGB555:
return AV_PIX_FMT_RGB555;
case MR_PIX_FMT_BGR0:
return AV_PIX_FMT_BGR0;
case MR_PIX_FMT_BGRA:
return AV_PIX_FMT_BGRA;
case MR_PIX_FMT_ABGR:
return AV_PIX_FMT_ABGR;
case MR_PIX_FMT_0BGR:
return AV_PIX_FMT_0BGR;
case MR_PIX_FMT_BGR24:
return AV_PIX_FMT_BGR24;
case MR_PIX_FMT_NONE:
return AV_PIX_FMT_NONE;
case MR_PIX_FMT_EOF:
return AV_PIX_FMT_NONE;
}
}
int audio_buffer_size(AVFrame *frame)
{
const int fmt = frame->format;
int chanels = frame->ch_layout.nb_channels;
//如果是平面的,那么上层需要的是一个平面的,所以改为1
if (av_sample_fmt_is_planar(frame->format)) {
chanels = 1;
}
int data_size = av_samples_get_buffer_size(NULL, chanels, frame->nb_samples, fmt, 1);
return data_size;
}