#ifndef _flv_proto_h_
#define _flv_proto_h_

// FLV Tag Type
#define FLV_TYPE_AUDIO		8
#define FLV_TYPE_VIDEO		9
#define FLV_TYPE_SCRIPT		18

// FLV Audio Type
#define FLV_AUDIO_LPCM		(0 << 4) // Linear PCM, platform endian
#define FLV_AUDIO_ADPCM		(1 << 4)
#define FLV_AUDIO_MP3		(2 << 4)
#define FLV_AUDIO_LLPCM		(3 << 4) // Linear PCM, little endian
#define FLV_AUDIO_G711A		(7 << 4) // G711 A-law
#define FLV_AUDIO_G711U     (8 << 4) // G711 mu-law
#define FLV_AUDIO_AAC		(10 << 4)
#define FLV_AUDIO_SPEEX		(11 << 4)
#define FLV_AUDIO_OPUS		(13 << 4)
#define FLV_AUDIO_MP3_8K	(14 << 4) // MP3 8 kHz
#define FLV_AUDIO_DEVIDE	(15 << 4) // Device-specific sound
#define FLV_AUDIO_ASC		0x100 // AudioSpecificConfig(ISO-14496-3)
#define FLV_AUDIO_OPUS_HEAD	0x101 // opus-codec.org

// FLV Video Type
#define FLV_VIDEO_H263		2 // Sorenson H.263
#define FLV_VIDEO_SCREEN	3 // Screen video
#define FLV_VIDEO_VP6		4 // On2 VP6
#define FLV_VIDEO_H264		7 // AVC
#define FLV_VIDEO_H265		12 // https://github.com/CDN-Union/H265
#define FLV_VIDEO_AV1		13 // https://aomediacodec.github.io/av1-isobmff
#define FLV_VIDEO_AVCC		0x200 // AVCDecoderConfigurationRecord(ISO-14496-15)
#define FLV_VIDEO_HVCC		0x201 // HEVCDecoderConfigurationRecord(ISO-14496-15)
#define FLV_VIDEO_AV1C		0x202 // AV1CodecConfigurationRecord(av1-isobmff)

#define FLV_SCRIPT_METADATA	0x300 // onMetaData

enum
{
	FLV_SEQUENCE_HEADER					= 0, // AVC/AAC sequence header
	FLV_AVPACKET						= 1, // AVC NALU / AAC raw
	FLV_END_OF_SEQUENCE					= 2, // AVC end of sequence (lower level NALU sequence ender is not required or supported)
};

enum
{
	FLV_VIDEO_KEY_FRAME					= 1, // key frame (for AVC, a seekable frame)
	FLV_VIDEO_INTER_FRAME				= 2, // inter frame (for AVC, a non-seekable frame)
	FLV_VIDEO_DISPOSABLE_INTER_FRAME	= 3, // H.263 only
	FLV_VIDEO_GENERATED_KEY_FRAME		= 4, // generated key frame (reserved for server use only)
	FLV_VIDEO_COMMAND_FRAME				= 5, // video info/command frame
};

enum
{
	FLV_SOUND_RATE_5500					= 0, // 5.5 kHz
	FLV_SOUND_RATE_11025				= 1, // 11 kHz
	FLV_SOUND_RATE_22050				= 2, // 22 kHz
	FLV_SOUND_RATE_44100				= 3, // 44 kHz
};

enum
{
	FLV_SOUND_BIT_8						= 0, // 8-bit samples
	FLV_SOUND_BIT_16					= 1, // 16-bit samples
};

enum
{
	FLV_SOUND_CHANNEL_MONO				= 0, // 1-channel
	FLV_SOUND_CHANNEL_STEREO			= 1, // 2-channels
};

#endif /* !_flv_proto_h_ */
