From 95ee0fbacfad9e79ed0f67e1e1980a53a4d2807e Mon Sep 17 00:00:00 2001 From: Paul B Mahol Date: Fri, 12 Jun 2015 15:49:50 +0000 Subject: [PATCH] Support demuxing 4gv codec stored in qcp files Signed-off-by: Paul B Mahol --- libavcodec/avcodec.h | 1 + libavcodec/codec_desc.c | 7 +++++++ libavformat/qcp.c | 7 +++++++ 3 files changed, 15 insertions(+) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 77cddf8fc0..b75b27e66f 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -500,6 +500,7 @@ enum AVCodecID { AV_CODEC_ID_DSD_MSBF = MKBETAG('D','S','D','M'), AV_CODEC_ID_DSD_LSBF_PLANAR = MKBETAG('D','S','D','1'), AV_CODEC_ID_DSD_MSBF_PLANAR = MKBETAG('D','S','D','8'), + AV_CODEC_ID_4GV = MKBETAG('s','4','g','v'), /* subtitle codecs */ AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs. diff --git a/libavcodec/codec_desc.c b/libavcodec/codec_desc.c index 81baf1e543..87bbc776b3 100644 --- a/libavcodec/codec_desc.c +++ b/libavcodec/codec_desc.c @@ -2523,6 +2523,13 @@ static const AVCodecDescriptor codec_descriptors[] = { .long_name = NULL_IF_CONFIG_SMALL("SMV (Selectable Mode Vocoder)"), .props = AV_CODEC_PROP_LOSSY, }, + { + .id = AV_CODEC_ID_4GV, + .type = AVMEDIA_TYPE_AUDIO, + .name = "4gv", + .long_name = NULL_IF_CONFIG_SMALL("4GV (Fourth Generation Vocoder)"), + .props = AV_CODEC_PROP_LOSSY, + }, { .id = AV_CODEC_ID_DSD_LSBF, .type = AVMEDIA_TYPE_AUDIO, diff --git a/libavformat/qcp.c b/libavformat/qcp.c index 9e2eedfe85..ad4a8ae79c 100644 --- a/libavformat/qcp.c +++ b/libavformat/qcp.c @@ -57,6 +57,11 @@ static const uint8_t guid_evrc[16] = { 0x91, 0xef, 0x73, 0x6a, 0x51, 0x00, 0xce, 0xb4 }; +static const uint8_t guid_4gv[16] = { + 0xca, 0x29, 0xfd, 0x3c, 0x53, 0xf6, 0xf5, 0x4e, + 0x90, 0xe9, 0xf4, 0x23, 0x6d, 0x59, 0x9b, 0x61 +}; + /** * SMV GUID as stored in the file */ @@ -106,6 +111,8 @@ static int qcp_read_header(AVFormatContext *s) st->codec->codec_id = AV_CODEC_ID_EVRC; } else if (!memcmp(buf, guid_smv, 16)) { st->codec->codec_id = AV_CODEC_ID_SMV; + } else if (!memcmp(buf, guid_4gv, 16)) { + st->codec->codec_id = AV_CODEC_ID_4GV; } else { av_log(s, AV_LOG_ERROR, "Unknown codec GUID "FF_PRI_GUID".\n", FF_ARG_GUID(buf));