// Generated by the protocol buffer compiler.  DO NOT EDIT!

#import "Commontalk.pb.h"
// @@protoc_insertion_point(imports)

@implementation CommontalkRoot
static PBExtensionRegistry* extensionRegistry = nil;
+ (PBExtensionRegistry*) extensionRegistry {
  return extensionRegistry;
}

+ (void) initialize {
  if (self == [CommontalkRoot class]) {
    PBMutableExtensionRegistry* registry = [PBMutableExtensionRegistry registry];
    [self registerAllExtensions:registry];
    extensionRegistry = registry;
  }
}
+ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry {
}
@end

BOOL AVProfileIsValidValue(AVProfile value) {
  switch (value) {
    case AVProfileAudioAac:
    case AVProfileAudioSpeex:
    case AVProfileAudioOpus:
    case AVProfileVideoH26450KbitL12:
    case AVProfileVideoH264530KbitL31:
    case AVProfileVideoH264100KbitL30:
    case AVProfileVideoH2642MbitL40:
    case AVProfileVideoH26450KbitL12Thumbnail:
    case AVProfileAvprofileMobile1:
    case AVProfileAvprofileHdMain1:
      return YES;
    default:
      return NO;
  }
}

// @@protoc_insertion_point(global_scope)
