I'm creating a custom video decoder for ffmpeg.  The code compiles and links, 
my codec library is included.  However, when I attempt to play my file, the 
player (Nova player for Android though that shouldn't matter) doesn't find the 
decoder.

The decoder is for a matroska container and the stream is correctly tagged in 
the file.  The error message through the app says "Cannot play video. This 
video format (s_none) is not supported."

I've reviewed the ffmpeg custom codec docs.  My starting point was an existing 
codec.  Does my code appear to be the correct way to register a customer codec?

Here are the places I modified libavcodec/libavformat code...

libavformat/matroska.c
const CodecTags ff_mkv_codec_tags[]={
    {"A_AAC"            , AV_CODEC_ID_AAC},
    {"A_AC3"            , AV_CODEC_ID_AC3},
...
    {"S_MKV/LANDMARK"   , AV_CODEC_ID_MPLM},     ///<<< my codec
    {""                 , AV_CODEC_ID_NONE}
};

libavcodec/allcodecs.c
extern AVCodec ff_libmplm_decoder;

libavcodec/avcodec.h
enum AVCodecID {
    AV_CODEC_ID_NONE,
...
    AV_CODEC_ID_WRAPPED_AVFRAME = 0x21001, ///< Passthrough codec, AVFrames 
wrapped in AVPacket
    AV_CODEC_ID_MPLM = 0x30000, ///< MediaPipe Landmark decoder
};

libavcodec/codec_desc.c

static const AVCodecDescriptor codec_descriptors[] = {
    /* video codecs */
...
    {
        .id         = AV_CODEC_ID_MPLM,
        .type       = AVMEDIA_TYPE_VIDEO,
        .name       = "mediapipe_landmark",
        .long_name  = NULL_IF_CONFIG_SMALL("MediaPipe Landmark")
    },
};

In my decoder...
libavcodec/libmplmdec.c
...
AVCodec ff_mplm_decoder = {
    .name           = LANDMARK_CODEC_NAME,
    .long_name      = NULL_IF_CONFIG_SMALL("MediaPipe Landmark decoder"),
    .type           = AVMEDIA_TYPE_VIDEO,
    .id             = AV_CODEC_ID_MPLM,
    .priv_data_size = sizeof(MPLMContext),
    .init           = mplm_decode_init,
    .close          = mplm_decode_end,
    .decode         = mplm_decode_frame,
    .capabilities   = AV_CODEC_CAP_DR1,
    .caps_internal  = FF_CODEC_CAP_INIT_THREADSAFE,
};

//                         fmt, subfmt, w, h, cpu, dec, name, mangler
STREAM_REGISTER_DEC_VIDEO( VIDEO_FORMAT_MJPG, 0, MAXW, MAXH, MPLMHW, new_dec, 
LANDMARK_CODEC_NAME, 0 );

libavcodec/libmplmdec.h
#define LANDMARK_CODEC_NAME "S_MKV/LANDMARK"

--
Tim Fleming
[email protected]

_______________________________________________
Libav-user mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/libav-user

To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".

Reply via email to