summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorRonald S. Bultje <rsbultje@gmail.com>2016-02-29 09:43:07 -0500
committerRonald S. Bultje <rsbultje@gmail.com>2016-03-11 11:19:14 -0500
commit2e6636aa87303d37b112e79f093ca39500f92364 (patch)
tree27e543b4779c1519781ad18824ea0d1f36491e59 /libavformat
parent6d8ab358a3c2a8fbdd6ae7f144893b7c88c30557 (diff)
vp9: add superframe merging bitstream filter.
Fixes ticket 4313.
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/ivfenc.c13
-rw-r--r--libavformat/matroskaenc.c5
2 files changed, 17 insertions, 1 deletions
diff --git a/libavformat/ivfenc.c b/libavformat/ivfenc.c
index 484d87d093..490b0a921a 100644
--- a/libavformat/ivfenc.c
+++ b/libavformat/ivfenc.c
@@ -18,6 +18,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "avformat.h"
+#include "internal.h"
#include "libavutil/intreadwrite.h"
typedef struct IVFEncContext {
@@ -85,6 +86,17 @@ static int ivf_write_trailer(AVFormatContext *s)
return 0;
}
+static int ivf_check_bitstream(struct AVFormatContext *s, const AVPacket *pkt)
+{
+ int ret = 1;
+ AVStream *st = s->streams[pkt->stream_index];
+
+ if (st->codec->codec_id == AV_CODEC_ID_VP9)
+ ret = ff_stream_add_bitstream_filter(st, "vp9_superframe", NULL);
+
+ return ret;
+}
+
AVOutputFormat ff_ivf_muxer = {
.priv_data_size = sizeof(IVFEncContext),
.name = "ivf",
@@ -95,4 +107,5 @@ AVOutputFormat ff_ivf_muxer = {
.write_header = ivf_write_header,
.write_packet = ivf_write_packet,
.write_trailer = ivf_write_trailer,
+ .check_bitstream = ivf_check_bitstream,
};
diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
index f42434b59c..05b1b94f64 100644
--- a/libavformat/matroskaenc.c
+++ b/libavformat/matroskaenc.c
@@ -2118,9 +2118,12 @@ static int mkv_check_bitstream(struct AVFormatContext *s, const AVPacket *pkt)
int ret = 1;
AVStream *st = s->streams[pkt->stream_index];
- if (st->codec->codec_id == AV_CODEC_ID_AAC)
+ if (st->codec->codec_id == AV_CODEC_ID_AAC) {
if (pkt->size > 2 && (AV_RB16(pkt->data) & 0xfff0) == 0xfff0)
ret = ff_stream_add_bitstream_filter(st, "aac_adtstoasc", NULL);
+ } else if (st->codec->codec_id == AV_CODEC_ID_VP9) {
+ ret = ff_stream_add_bitstream_filter(st, "vp9_superframe", NULL);
+ }
return ret;
}