Mercurial > mplayer.hg
annotate av_helpers.c @ 36794:138582cbff16
configure: Make the XShape extension optional.
The GUI compiles and runs without it.
Although some skins will look ugly,
there are skins that not even require the extension.
author | ib |
---|---|
date | Wed, 19 Feb 2014 16:58:41 +0000 |
parents | 636c79b71de9 |
children |
rev | line source |
---|---|
33886 | 1 /* |
2 * Generic libav* helpers | |
3 * | |
4 * This file is part of MPlayer. | |
5 * | |
6 * MPlayer is free software; you can redistribute it and/or modify | |
7 * it under the terms of the GNU General Public License as published by | |
8 * the Free Software Foundation; either version 2 of the License, or | |
9 * (at your option) any later version. | |
10 * | |
11 * MPlayer is distributed in the hope that it will be useful, | |
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 * GNU General Public License for more details. | |
15 * | |
16 * You should have received a copy of the GNU General Public License along | |
17 * with MPlayer; if not, write to the Free Software Foundation, Inc., | |
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |
19 */ | |
20 | |
33871
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
21 #include "libavcodec/avcodec.h" |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
22 #include "libavformat/avformat.h" |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
23 #include "mp_msg.h" |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
24 #include "av_helpers.h" |
36334
c1033e9288b1
Extract audio encoding code into a separate helper function.
reimar
parents:
34377
diff
changeset
|
25 #include "libaf/reorder_ch.h" |
33871
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
26 |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
27 int avcodec_initialized; |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
28 int avformat_initialized; |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
29 |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
30 static void mp_msp_av_log_callback(void *ptr, int level, const char *fmt, |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
31 va_list vl) |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
32 { |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
33 static int print_prefix=1; |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
34 AVClass *avc= ptr ? *(AVClass **)ptr : NULL; |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
35 int type= MSGT_FIXME; |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
36 int mp_level; |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
37 |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
38 switch(level){ |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
39 case AV_LOG_VERBOSE: mp_level = MSGL_V ; break; |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
40 case AV_LOG_DEBUG: mp_level= MSGL_V ; break; |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
41 case AV_LOG_INFO : mp_level= MSGL_INFO; break; |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
42 case AV_LOG_ERROR: mp_level= MSGL_ERR ; break; |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
43 default : mp_level= level > AV_LOG_DEBUG ? MSGL_DBG2 : MSGL_ERR; break; |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
44 } |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
45 |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
46 if (ptr && !avc) |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
47 mp_msg(MSGT_DECVIDEO, MSGL_ERR, "libav* called av_log with context containing a broken AVClass!\n"); |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
48 if (avc) { |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
49 if(!strcmp(avc->class_name, "AVCodecContext")){ |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
50 AVCodecContext *s= ptr; |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
51 if(s->codec){ |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
52 if(s->codec->type == AVMEDIA_TYPE_AUDIO){ |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
53 if(s->codec->decode) |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
54 type= MSGT_DECAUDIO; |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
55 }else if(s->codec->type == AVMEDIA_TYPE_VIDEO){ |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
56 if(s->codec->decode) |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
57 type= MSGT_DECVIDEO; |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
58 } |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
59 //FIXME subtitles, encoders (what msgt for them? there is no appropriate ...) |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
60 } |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
61 }else if(!strcmp(avc->class_name, "AVFormatContext")){ |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
62 AVFormatContext *s= ptr; |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
63 if(s->iformat) |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
64 type= MSGT_DEMUXER; |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
65 else if(s->oformat) |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
66 type= MSGT_MUXER; |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
67 } |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
68 } |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
69 |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
70 if (!mp_msg_test(type, mp_level)) return; |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
71 |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
72 if(print_prefix && avc) { |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
73 mp_msg(type, mp_level, "[%s @ %p]", avc->item_name(ptr), avc); |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
74 } |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
75 |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
76 print_prefix= strchr(fmt, '\n') != NULL; |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
77 mp_msg_va(type, mp_level, fmt, vl); |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
78 } |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
79 |
34377
d443d66a746c
av_helpers: show libav* version and configuration.
cigaes
parents:
34376
diff
changeset
|
80 static void show_av_version(int type, const char *name, |
d443d66a746c
av_helpers: show libav* version and configuration.
cigaes
parents:
34376
diff
changeset
|
81 int header_ver, int ver, const char *conf) |
d443d66a746c
av_helpers: show libav* version and configuration.
cigaes
parents:
34376
diff
changeset
|
82 { |
d443d66a746c
av_helpers: show libav* version and configuration.
cigaes
parents:
34376
diff
changeset
|
83 #ifdef CONFIG_FFMPEG_SO |
d443d66a746c
av_helpers: show libav* version and configuration.
cigaes
parents:
34376
diff
changeset
|
84 #define FFMPEG_TYPE "external" |
d443d66a746c
av_helpers: show libav* version and configuration.
cigaes
parents:
34376
diff
changeset
|
85 #else |
d443d66a746c
av_helpers: show libav* version and configuration.
cigaes
parents:
34376
diff
changeset
|
86 #define FFMPEG_TYPE "internal" |
d443d66a746c
av_helpers: show libav* version and configuration.
cigaes
parents:
34376
diff
changeset
|
87 #endif |
d443d66a746c
av_helpers: show libav* version and configuration.
cigaes
parents:
34376
diff
changeset
|
88 mp_msg(type, MSGL_INFO, "%s version %d.%d.%d (" FFMPEG_TYPE ")\n", |
d443d66a746c
av_helpers: show libav* version and configuration.
cigaes
parents:
34376
diff
changeset
|
89 name, ver >> 16, (ver >> 8) & 0xFF, ver & 0xFF); |
d443d66a746c
av_helpers: show libav* version and configuration.
cigaes
parents:
34376
diff
changeset
|
90 if (header_ver != ver) |
d443d66a746c
av_helpers: show libav* version and configuration.
cigaes
parents:
34376
diff
changeset
|
91 mp_msg(type, MSGL_INFO, "Mismatching header version %d.%d.%d\n", |
d443d66a746c
av_helpers: show libav* version and configuration.
cigaes
parents:
34376
diff
changeset
|
92 header_ver >> 16, (header_ver >> 8) & 0xFF, header_ver & 0xFF); |
d443d66a746c
av_helpers: show libav* version and configuration.
cigaes
parents:
34376
diff
changeset
|
93 mp_msg(type, MSGL_V, "Configuration: %s\n", conf); |
d443d66a746c
av_helpers: show libav* version and configuration.
cigaes
parents:
34376
diff
changeset
|
94 } |
d443d66a746c
av_helpers: show libav* version and configuration.
cigaes
parents:
34376
diff
changeset
|
95 |
33871
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
96 void init_avcodec(void) |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
97 { |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
98 if (!avcodec_initialized) { |
34377
d443d66a746c
av_helpers: show libav* version and configuration.
cigaes
parents:
34376
diff
changeset
|
99 show_av_version(MSGT_DECVIDEO, "libavcodec", LIBAVCODEC_VERSION_INT, |
d443d66a746c
av_helpers: show libav* version and configuration.
cigaes
parents:
34376
diff
changeset
|
100 avcodec_version(), avcodec_configuration()); |
33871
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
101 avcodec_register_all(); |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
102 avcodec_initialized = 1; |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
103 av_log_set_callback(mp_msp_av_log_callback); |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
104 } |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
105 } |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
106 |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
107 void init_avformat(void) |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
108 { |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
109 if (!avformat_initialized) { |
34377
d443d66a746c
av_helpers: show libav* version and configuration.
cigaes
parents:
34376
diff
changeset
|
110 show_av_version(MSGT_DEMUX, "libavformat", LIBAVFORMAT_VERSION_INT, |
d443d66a746c
av_helpers: show libav* version and configuration.
cigaes
parents:
34376
diff
changeset
|
111 avformat_version(), avformat_configuration()); |
33871
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
112 av_register_all(); |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
113 avformat_initialized = 1; |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
114 av_log_set_callback(mp_msp_av_log_callback); |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
115 } |
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff
changeset
|
116 } |
36334
c1033e9288b1
Extract audio encoding code into a separate helper function.
reimar
parents:
34377
diff
changeset
|
117 |
c1033e9288b1
Extract audio encoding code into a separate helper function.
reimar
parents:
34377
diff
changeset
|
118 int lavc_encode_audio(AVCodecContext *ctx, void *src, int src_len, void *dst, int dst_len) |
c1033e9288b1
Extract audio encoding code into a separate helper function.
reimar
parents:
34377
diff
changeset
|
119 { |
36335
f77a74ebb95e
Quick an inefficient hack to enable planar encoding.
reimar
parents:
36334
diff
changeset
|
120 void *orig_src = src; |
36334
c1033e9288b1
Extract audio encoding code into a separate helper function.
reimar
parents:
34377
diff
changeset
|
121 int bps = av_get_bytes_per_sample(ctx->sample_fmt); |
36335
f77a74ebb95e
Quick an inefficient hack to enable planar encoding.
reimar
parents:
36334
diff
changeset
|
122 int planar = ctx->channels > 1 && av_sample_fmt_is_planar(ctx->sample_fmt); |
36338 | 123 int isac3 = ctx->codec->id == AV_CODEC_ID_AC3; |
36334
c1033e9288b1
Extract audio encoding code into a separate helper function.
reimar
parents:
34377
diff
changeset
|
124 int n; |
c1033e9288b1
Extract audio encoding code into a separate helper function.
reimar
parents:
34377
diff
changeset
|
125 int got; |
c1033e9288b1
Extract audio encoding code into a separate helper function.
reimar
parents:
34377
diff
changeset
|
126 AVPacket pkt; |
36769 | 127 AVFrame *frame = av_frame_alloc(); |
36334
c1033e9288b1
Extract audio encoding code into a separate helper function.
reimar
parents:
34377
diff
changeset
|
128 if ((ctx->channels == 6 || ctx->channels == 5) && |
36338 | 129 (isac3 || !strcmp(ctx->codec->name,"libfaac"))) { |
36334
c1033e9288b1
Extract audio encoding code into a separate helper function.
reimar
parents:
34377
diff
changeset
|
130 reorder_channel_nch(src, AF_CHANNEL_LAYOUT_MPLAYER_DEFAULT, |
c1033e9288b1
Extract audio encoding code into a separate helper function.
reimar
parents:
34377
diff
changeset
|
131 isac3 ? AF_CHANNEL_LAYOUT_LAVC_DEFAULT : AF_CHANNEL_LAYOUT_AAC_DEFAULT, |
c1033e9288b1
Extract audio encoding code into a separate helper function.
reimar
parents:
34377
diff
changeset
|
132 ctx->channels, |
c1033e9288b1
Extract audio encoding code into a separate helper function.
reimar
parents:
34377
diff
changeset
|
133 src_len / bps, bps); |
c1033e9288b1
Extract audio encoding code into a separate helper function.
reimar
parents:
34377
diff
changeset
|
134 } |
c1033e9288b1
Extract audio encoding code into a separate helper function.
reimar
parents:
34377
diff
changeset
|
135 pkt.data = dst; |
c1033e9288b1
Extract audio encoding code into a separate helper function.
reimar
parents:
34377
diff
changeset
|
136 pkt.size = dst_len; |
36335
f77a74ebb95e
Quick an inefficient hack to enable planar encoding.
reimar
parents:
36334
diff
changeset
|
137 frame->nb_samples = src_len / ctx->channels / bps; |
f77a74ebb95e
Quick an inefficient hack to enable planar encoding.
reimar
parents:
36334
diff
changeset
|
138 if (planar) { |
f77a74ebb95e
Quick an inefficient hack to enable planar encoding.
reimar
parents:
36334
diff
changeset
|
139 // TODO: this is horribly inefficient. |
f77a74ebb95e
Quick an inefficient hack to enable planar encoding.
reimar
parents:
36334
diff
changeset
|
140 int ch; |
f77a74ebb95e
Quick an inefficient hack to enable planar encoding.
reimar
parents:
36334
diff
changeset
|
141 src = av_mallocz(src_len); |
f77a74ebb95e
Quick an inefficient hack to enable planar encoding.
reimar
parents:
36334
diff
changeset
|
142 for (ch = 0; ch < ctx->channels; ch++) { |
f77a74ebb95e
Quick an inefficient hack to enable planar encoding.
reimar
parents:
36334
diff
changeset
|
143 uint8_t *tmps = (uint8_t *)orig_src + ch*bps; |
f77a74ebb95e
Quick an inefficient hack to enable planar encoding.
reimar
parents:
36334
diff
changeset
|
144 uint8_t *tmpd = (uint8_t *)src + ch*src_len/ctx->channels; |
f77a74ebb95e
Quick an inefficient hack to enable planar encoding.
reimar
parents:
36334
diff
changeset
|
145 int s; |
f77a74ebb95e
Quick an inefficient hack to enable planar encoding.
reimar
parents:
36334
diff
changeset
|
146 for (s = 0; s < frame->nb_samples; s++) { |
f77a74ebb95e
Quick an inefficient hack to enable planar encoding.
reimar
parents:
36334
diff
changeset
|
147 memcpy(tmpd, tmps, bps); |
f77a74ebb95e
Quick an inefficient hack to enable planar encoding.
reimar
parents:
36334
diff
changeset
|
148 tmps += ctx->channels * bps; |
f77a74ebb95e
Quick an inefficient hack to enable planar encoding.
reimar
parents:
36334
diff
changeset
|
149 tmpd += bps; |
f77a74ebb95e
Quick an inefficient hack to enable planar encoding.
reimar
parents:
36334
diff
changeset
|
150 } |
f77a74ebb95e
Quick an inefficient hack to enable planar encoding.
reimar
parents:
36334
diff
changeset
|
151 } |
f77a74ebb95e
Quick an inefficient hack to enable planar encoding.
reimar
parents:
36334
diff
changeset
|
152 } |
f77a74ebb95e
Quick an inefficient hack to enable planar encoding.
reimar
parents:
36334
diff
changeset
|
153 n = avcodec_fill_audio_frame(frame, ctx->channels, ctx->sample_fmt, src, src_len, 1); |
f77a74ebb95e
Quick an inefficient hack to enable planar encoding.
reimar
parents:
36334
diff
changeset
|
154 if (n < 0) return 0; |
f77a74ebb95e
Quick an inefficient hack to enable planar encoding.
reimar
parents:
36334
diff
changeset
|
155 n = avcodec_encode_audio2(ctx, &pkt, frame, &got); |
36769 | 156 av_frame_free(&frame); |
36335
f77a74ebb95e
Quick an inefficient hack to enable planar encoding.
reimar
parents:
36334
diff
changeset
|
157 if (planar) av_free(src); |
36334
c1033e9288b1
Extract audio encoding code into a separate helper function.
reimar
parents:
34377
diff
changeset
|
158 if (n < 0) return n; |
c1033e9288b1
Extract audio encoding code into a separate helper function.
reimar
parents:
34377
diff
changeset
|
159 return got ? pkt.size : 0; |
c1033e9288b1
Extract audio encoding code into a separate helper function.
reimar
parents:
34377
diff
changeset
|
160 } |